From ad63b55edbd4372577160f8038c0b083801aa208 Mon Sep 17 00:00:00 2001 From: Parth Joshi Date: Fri, 20 Jan 2017 07:44:30 +0530 Subject: [PATCH] Spark Java Article BAEL-498 (#912) * Initial Commit for Spark Java Article BAEL-498 * reverting main pom.xml and rollbacking accidental changes. * Changes as per review: 1. Added UserService 2. Renamed UserStore to UserServiceMapImpl 3. Removed Empty spaces in User.java 4. Removed AppTest 5. Changes in SparkRestExample for using UserServiceMapImp instead of UserStore static functions. * Suggested changes in print messages. * Changes as per comments on github... for PR: https://github.com/eugenp/tutorials/pull/912 * Changes in editUser function as per guidance by Kevin. * Clean up * added 1.8 config for pom.xml * Clean up. * Removed junit dep. * Added Application/json in response type. --- pom.xml | 1 + spark-java/pom.xml | 29 +++++++ .../baeldung/sparkjava/HelloWorldService.java | 12 +++ .../baeldung/sparkjava/SparkRestExample.java | 76 +++++++++++++++++++ .../baeldung/sparkjava/StandardResponse.java | 47 ++++++++++++ .../baeldung/sparkjava/StatusResponse.java | 17 +++++ .../java/com/baeldung/sparkjava/User.java | 59 ++++++++++++++ .../com/baeldung/sparkjava/UserException.java | 13 ++++ .../com/baeldung/sparkjava/UserService.java | 12 +++ .../sparkjava/UserServiceMapImpl.java | 68 +++++++++++++++++ 10 files changed, 334 insertions(+) create mode 100644 spark-java/pom.xml create mode 100644 spark-java/src/main/java/com/baeldung/sparkjava/HelloWorldService.java create mode 100644 spark-java/src/main/java/com/baeldung/sparkjava/SparkRestExample.java create mode 100644 spark-java/src/main/java/com/baeldung/sparkjava/StandardResponse.java create mode 100644 spark-java/src/main/java/com/baeldung/sparkjava/StatusResponse.java create mode 100644 spark-java/src/main/java/com/baeldung/sparkjava/User.java create mode 100644 spark-java/src/main/java/com/baeldung/sparkjava/UserException.java create mode 100644 spark-java/src/main/java/com/baeldung/sparkjava/UserService.java create mode 100644 spark-java/src/main/java/com/baeldung/sparkjava/UserServiceMapImpl.java diff --git a/pom.xml b/pom.xml index 6d26517999..661b80fca5 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,7 @@ resteasy selenium-junit-testng + spark-java spring-akka spring-amqp spring-all diff --git a/spark-java/pom.xml b/spark-java/pom.xml new file mode 100644 index 0000000000..5b8923322a --- /dev/null +++ b/spark-java/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + com.baeldung + spark-java + 0.1.0-SNAPSHOT + spark-java + http://maven.apache.org + + UTF-8 + 1.8 + 1.8 + + + + com.sparkjava + spark-core + 2.5.4 + + + + com.google.code.gson + gson + 2.8.0 + + + diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/HelloWorldService.java b/spark-java/src/main/java/com/baeldung/sparkjava/HelloWorldService.java new file mode 100644 index 0000000000..55b3fbe3f2 --- /dev/null +++ b/spark-java/src/main/java/com/baeldung/sparkjava/HelloWorldService.java @@ -0,0 +1,12 @@ +package com.baeldung.sparkjava; +import static spark.Spark.*; + +public class HelloWorldService { + public static void main(String[] args) { + get("/hello", (req,res)->"Hello, Baeldung"); + + get("/hello/:name", (req,res)->{ + return "Hello: "+ req.params(":name"); + }); + } +} diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/SparkRestExample.java b/spark-java/src/main/java/com/baeldung/sparkjava/SparkRestExample.java new file mode 100644 index 0000000000..bb610fd7f0 --- /dev/null +++ b/spark-java/src/main/java/com/baeldung/sparkjava/SparkRestExample.java @@ -0,0 +1,76 @@ +package com.baeldung.sparkjava; + +import static spark.Spark.delete; +import static spark.Spark.get; +import static spark.Spark.options; +import static spark.Spark.post; +import static spark.Spark.put; + +import com.google.gson.Gson; + +public class SparkRestExample { + public static void main(String[] args) { + final UserService userService = new UserServiceMapImpl(); + + post("/users", (request, response) -> { + response.type("application/json"); + + User user = new Gson().fromJson(request.body(), User.class); + userService.addUser(user); + + return new Gson().toJson(new StandardResponse(StatusResponse.SUCCESS)); + }); + + get("/users", (request, response) -> { + response.type("application/json"); + + return new Gson().toJson( + new StandardResponse(StatusResponse.SUCCESS,new Gson() + .toJsonTree(userService.getUsers()))); + }); + + get("/users/:id", (request, response) -> { + response.type("application/json"); + + return new Gson().toJson( + new StandardResponse(StatusResponse.SUCCESS,new Gson() + .toJsonTree(userService.getUser(request.params(":id"))))); + }); + + put("/users/:id", (request, response) -> { + response.type("application/json"); + + User toEdit = new Gson().fromJson(request.body(), User.class); + User editedUser = userService.editUser(toEdit); + + if (editedUser != null) { + return new Gson().toJson( + new StandardResponse(StatusResponse.SUCCESS,new Gson() + .toJsonTree(editedUser))); + }else { + return new Gson().toJson( + new StandardResponse(StatusResponse.ERROR,new Gson() + .toJson("User not found or error in edit"))); + } + }); + + delete("/users/:id", (request, response) -> { + response.type("application/json"); + + userService.deleteUser(request.params(":id")); + return new Gson().toJson( + new StandardResponse(StatusResponse.SUCCESS, "user deleted")); + }); + + options("/users/:id", (request, response) -> { + response.type("application/json"); + + return new Gson().toJson( + new StandardResponse(StatusResponse.SUCCESS, + (userService.userExist( + request.params(":id"))) ? "User exists" : "User does not exists" )); + }); + + } + +} diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/StandardResponse.java b/spark-java/src/main/java/com/baeldung/sparkjava/StandardResponse.java new file mode 100644 index 0000000000..51f1954e57 --- /dev/null +++ b/spark-java/src/main/java/com/baeldung/sparkjava/StandardResponse.java @@ -0,0 +1,47 @@ +package com.baeldung.sparkjava; + +import com.google.gson.JsonElement; + +public class StandardResponse { + private StatusResponse status; + private String message; + private JsonElement data; + + public StandardResponse(StatusResponse status) { + this.status = status; + } + + public StandardResponse(StatusResponse status, String message) { + this.status = status; + this.message = message; + } + + public StandardResponse(StatusResponse status, JsonElement data) { + this.status = status; + this.data = data; + } + + public StatusResponse getStatus() { + return status; + } + + public void setStatus(StatusResponse status) { + this.status = status; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public JsonElement getData() { + return data; + } + + public void setData(JsonElement data) { + this.data = data; + } +} diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/StatusResponse.java b/spark-java/src/main/java/com/baeldung/sparkjava/StatusResponse.java new file mode 100644 index 0000000000..0e3137293a --- /dev/null +++ b/spark-java/src/main/java/com/baeldung/sparkjava/StatusResponse.java @@ -0,0 +1,17 @@ +package com.baeldung.sparkjava; + +public enum StatusResponse { + SUCCESS ("Success"), + ERROR ("Error"); + + final private String status; + + StatusResponse(String status) { + this.status = status; + } + + public String getStatus() { + return status; + } + +} diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/User.java b/spark-java/src/main/java/com/baeldung/sparkjava/User.java new file mode 100644 index 0000000000..7447671470 --- /dev/null +++ b/spark-java/src/main/java/com/baeldung/sparkjava/User.java @@ -0,0 +1,59 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.baeldung.sparkjava; + +class User { + + private String id; + private String firstName; + private String lastName; + private String email; + + public User(String id, String firstName, String lastName, String email) { + super(); + this.id = id; + this.firstName = firstName; + this.lastName = lastName; + this.email = email; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public String toString() { + return new StringBuffer().append(getEmail()).toString(); + } +} diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/UserException.java b/spark-java/src/main/java/com/baeldung/sparkjava/UserException.java new file mode 100644 index 0000000000..929c0dfdb7 --- /dev/null +++ b/spark-java/src/main/java/com/baeldung/sparkjava/UserException.java @@ -0,0 +1,13 @@ +package com.baeldung.sparkjava; + +public class UserException extends Exception{ + + public UserException() { + super(); + } + + public UserException(String message) { + super(message); + } + +} diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/UserService.java b/spark-java/src/main/java/com/baeldung/sparkjava/UserService.java new file mode 100644 index 0000000000..9b1fa7be3a --- /dev/null +++ b/spark-java/src/main/java/com/baeldung/sparkjava/UserService.java @@ -0,0 +1,12 @@ +package com.baeldung.sparkjava; + +import java.util.Collection; + +public interface UserService { + public void addUser (User user) ; + public Collection getUsers () ; + public User getUser (String id) ; + public User editUser (User user) throws UserException; + public void deleteUser (String id) ; + public boolean userExist (String id); +} diff --git a/spark-java/src/main/java/com/baeldung/sparkjava/UserServiceMapImpl.java b/spark-java/src/main/java/com/baeldung/sparkjava/UserServiceMapImpl.java new file mode 100644 index 0000000000..0b5072647f --- /dev/null +++ b/spark-java/src/main/java/com/baeldung/sparkjava/UserServiceMapImpl.java @@ -0,0 +1,68 @@ +package com.baeldung.sparkjava; + +import java.util.Collection; +import java.util.HashMap; + +public class UserServiceMapImpl implements UserService{ + private HashMap userMap; + + public UserServiceMapImpl() { + userMap = new HashMap<>(); + } + + @Override + public void addUser (User user) { + userMap.put(user.getId(), user); + } + + @Override + public Collection getUsers () { + return userMap.values(); + } + + @Override + public User getUser (String id) { + return userMap.get(id); + } + + @Override + public User editUser (User forEdit) throws UserException{ + try{ + if (forEdit.getId() == null) + throw new UserException("ID cannot be blank"); + + User toEdit = userMap.get(forEdit.getId()); + + if (toEdit == null ) + throw new UserException("User not found"); + + if (forEdit.getEmail()!=null) { + toEdit.setEmail(forEdit.getEmail()); + } + if (forEdit.getFirstName()!=null) { + toEdit.setFirstName(forEdit.getFirstName()); + } + if (forEdit.getLastName()!=null) { + toEdit.setLastName(forEdit.getLastName()); + } + if (forEdit.getId()!=null) { + toEdit.setId(forEdit.getId()); + } + + return toEdit; + }catch (Exception ex) { + throw new UserException(ex.getMessage()); + } + } + + @Override + public void deleteUser (String id) { + userMap.remove(id); + } + + @Override + public boolean userExist (String id) { + return userMap.containsKey(id); + } + +}