From d80ae22f98cdb14046ca8fedb71fe40d78766c4d Mon Sep 17 00:00:00 2001 From: Eike Cochu <eike@cochu.com> Date: Sun, 3 Jan 2016 00:04:38 +0100 Subject: [PATCH] updated poms for project dependency added util dependency to rest project for correct war export removed ldac filebase --- ma-impl.sublime-workspace | 101 +++++++++++++++++ .../java/de/vipra/cmd/file/LdacFilebase.java | 34 ------ vipra-rest/.classpath | 11 +- vipra-rest/.project | 1 - .../org.eclipse.core.resources.prefs | 1 + .../org.eclipse.wst.common.component | 3 + vipra-rest/pom.xml | 6 + .../main/java/de/vipra/rest/model/Linked.java | 18 +++ .../main/java/de/vipra/rest/model/Topic.java | 33 ++++++ .../vipra/rest/resource/ArticleResource.java | 1 - .../de/vipra/rest/resource/TopicResource.java | 103 ++++++++++++++++++ vipra-util/.classpath | 6 + vipra-util/pom.xml | 3 +- .../main/java/de/vipra/util/MongoUtils.java | 2 + 14 files changed, 280 insertions(+), 43 deletions(-) delete mode 100644 vipra-cmd/src/main/java/de/vipra/cmd/file/LdacFilebase.java create mode 100644 vipra-rest/src/main/java/de/vipra/rest/model/Linked.java create mode 100644 vipra-rest/src/main/java/de/vipra/rest/model/Topic.java create mode 100644 vipra-rest/src/main/java/de/vipra/rest/resource/TopicResource.java diff --git a/ma-impl.sublime-workspace b/ma-impl.sublime-workspace index 04a61dba..15db5673 100644 --- a/ma-impl.sublime-workspace +++ b/ma-impl.sublime-workspace @@ -271,6 +271,14 @@ }, "buffers": [ + { + "file": "Vagrantfile", + "settings": + { + "buffer_size": 955, + "line_ending": "Unix" + } + } ], "build_system": "", "build_system_choices": @@ -901,8 +909,101 @@ "groups": [ { + "selected": 0, "sheets": [ + { + "buffer": 0, + "file": "Vagrantfile", + "semi_transient": true, + "settings": + { + "buffer_size": 955, + "regions": + { + }, + "selection": + [ + [ + 797, + 797 + ] + ], + "settings": + { + "BracketHighlighterBusy": false, + "bh_regions": + [ + "bh_c_define", + "bh_c_define_center", + "bh_c_define_open", + "bh_c_define_close", + "bh_c_define_content", + "bh_square", + "bh_square_center", + "bh_square_open", + "bh_square_close", + "bh_square_content", + "bh_single_quote", + "bh_single_quote_center", + "bh_single_quote_open", + "bh_single_quote_close", + "bh_single_quote_content", + "bh_curly", + "bh_curly_center", + "bh_curly_open", + "bh_curly_close", + "bh_curly_content", + "bh_double_quote", + "bh_double_quote_center", + "bh_double_quote_open", + "bh_double_quote_close", + "bh_double_quote_content", + "bh_tag", + "bh_tag_center", + "bh_tag_open", + "bh_tag_close", + "bh_tag_content", + "bh_angle", + "bh_angle_center", + "bh_angle_open", + "bh_angle_close", + "bh_angle_content", + "bh_round", + "bh_round_center", + "bh_round_open", + "bh_round_close", + "bh_round_content", + "bh_default", + "bh_default_center", + "bh_default_open", + "bh_default_close", + "bh_default_content", + "bh_regex", + "bh_regex_center", + "bh_regex_open", + "bh_regex_close", + "bh_regex_content", + "bh_unmatched", + "bh_unmatched_center", + "bh_unmatched_open", + "bh_unmatched_close", + "bh_unmatched_content" + ], + "incomplete_sync": null, + "remote_loading": false, + "synced": false, + "syntax": "Packages/Ruby/Ruby.sublime-syntax", + "tab_size": 2, + "translate_tabs_to_spaces": true + }, + "translation.x": 0.0, + "translation.y": 0.0, + "zoom_level": 1.0 + }, + "stack_index": 0, + "type": "text" + } ] } ], diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/file/LdacFilebase.java b/vipra-cmd/src/main/java/de/vipra/cmd/file/LdacFilebase.java deleted file mode 100644 index 2360d4af..00000000 --- a/vipra-cmd/src/main/java/de/vipra/cmd/file/LdacFilebase.java +++ /dev/null @@ -1,34 +0,0 @@ -package de.vipra.cmd.file; - -import java.io.File; -import java.io.IOException; - -import de.vipra.cmd.ex.FilebaseException; -import de.vipra.cmd.model.Article; -import de.vipra.util.ex.NotImplementedException; - -public class LdacFilebase extends Filebase { - - public LdacFilebase(File dataDir) throws FilebaseException { - super(dataDir, "ldac"); - // TODO Auto-generated constructor stub - } - - @Override - public void add(Article article) throws FilebaseException { - // TODO Auto-generated method stub - - } - - @Override - public void remove(String id) throws FilebaseException { - throw new NotImplementedException(); - } - - @Override - public void write() throws IOException { - // TODO Auto-generated method stub - - } - -} diff --git a/vipra-rest/.classpath b/vipra-rest/.classpath index 12f79c80..3d2bb266 100644 --- a/vipra-rest/.classpath +++ b/vipra-rest/.classpath @@ -11,23 +11,22 @@ <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> - <classpathentry kind="src" output="target/test-classes" path="src/test/java"> + <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> <attributes> - <attribute name="optional" value="true"/> <attribute name="maven.pomderived" value="true"/> + <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> </attributes> </classpathentry> - <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"> <attributes> <attribute name="maven.pomderived" value="true"/> - <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> </attributes> </classpathentry> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"> + <classpathentry kind="src" output="target/test-classes" path="src/test/java"> <attributes> + <attribute name="optional" value="true"/> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> - <classpathentry combineaccessrules="false" kind="src" path="/vipra-util"/> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/vipra-rest/.project b/vipra-rest/.project index e24244ea..6c0bf9d8 100644 --- a/vipra-rest/.project +++ b/vipra-rest/.project @@ -4,7 +4,6 @@ <comment></comment> <projects> <project>vipra-cmd</project> - <project>vipra-util</project> </projects> <buildSpec> <buildCommand> diff --git a/vipra-rest/.settings/org.eclipse.core.resources.prefs b/vipra-rest/.settings/org.eclipse.core.resources.prefs index abdea9ac..839d647e 100644 --- a/vipra-rest/.settings/org.eclipse.core.resources.prefs +++ b/vipra-rest/.settings/org.eclipse.core.resources.prefs @@ -1,4 +1,5 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 encoding/<project>=UTF-8 diff --git a/vipra-rest/.settings/org.eclipse.wst.common.component b/vipra-rest/.settings/org.eclipse.wst.common.component index 07bb5263..a844e2a0 100644 --- a/vipra-rest/.settings/org.eclipse.wst.common.component +++ b/vipra-rest/.settings/org.eclipse.wst.common.component @@ -4,6 +4,9 @@ <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> + <dependent-module archiveName="util-0.0.1-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/vipra-util/vipra-util"> + <dependency-type>uses</dependency-type> + </dependent-module> <property name="java-output-path" value="/vipra-rest/target/classes"/> <property name="context-root" value="rest"/> </wb-module> diff --git a/vipra-rest/pom.xml b/vipra-rest/pom.xml index 0f1fc40d..9f0dedb9 100644 --- a/vipra-rest/pom.xml +++ b/vipra-rest/pom.xml @@ -92,5 +92,11 @@ <artifactId>junit</artifactId> <version>4.12</version> </dependency> + + <dependency> + <groupId>de.vipra</groupId> + <artifactId>util</artifactId> + <version>0.0.1-SNAPSHOT</version> + </dependency> </dependencies> </project> diff --git a/vipra-rest/src/main/java/de/vipra/rest/model/Linked.java b/vipra-rest/src/main/java/de/vipra/rest/model/Linked.java new file mode 100644 index 00000000..b9f157ba --- /dev/null +++ b/vipra-rest/src/main/java/de/vipra/rest/model/Linked.java @@ -0,0 +1,18 @@ +package de.vipra.rest.model; + +import java.net.URI; +import java.util.Map; + +import de.vipra.util.model.Model; + +public abstract class Linked extends Model { + + public abstract Map<String, String> getLinks(); + + public abstract void setLinks(Map<String, String> links); + + public abstract void addLink(String name, String link); + + public abstract void setBase(URI base); + +} diff --git a/vipra-rest/src/main/java/de/vipra/rest/model/Topic.java b/vipra-rest/src/main/java/de/vipra/rest/model/Topic.java new file mode 100644 index 00000000..3cd61914 --- /dev/null +++ b/vipra-rest/src/main/java/de/vipra/rest/model/Topic.java @@ -0,0 +1,33 @@ +package de.vipra.rest.model; + +import java.net.URI; +import java.util.HashMap; +import java.util.Map; + +public class Topic extends de.vipra.util.model.Topic { + + private Map<String, String> links; + + public Map<String, String> getLinks() { + return links; + } + + public void setLinks(Map<String, String> links) { + this.links = links; + } + + public void addLink(String name, String link) { + if (getLinks() == null) { + setLinks(new HashMap<String, String>()); + } + links.put(name, link); + } + + public void setBase(URI base) { + URI self = uri(base); + if (self != null) { + addLink("self", self.toString()); + } + } + +} diff --git a/vipra-rest/src/main/java/de/vipra/rest/resource/ArticleResource.java b/vipra-rest/src/main/java/de/vipra/rest/resource/ArticleResource.java index d0c852b3..68626951 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/resource/ArticleResource.java +++ b/vipra-rest/src/main/java/de/vipra/rest/resource/ArticleResource.java @@ -142,7 +142,6 @@ public class ArticleResource { "item could not be updated due to an internal server error")); return Response.serverError().entity(res).build(); } - } } diff --git a/vipra-rest/src/main/java/de/vipra/rest/resource/TopicResource.java b/vipra-rest/src/main/java/de/vipra/rest/resource/TopicResource.java new file mode 100644 index 00000000..f0b5d571 --- /dev/null +++ b/vipra-rest/src/main/java/de/vipra/rest/resource/TopicResource.java @@ -0,0 +1,103 @@ +package de.vipra.rest.resource; + +import java.io.IOException; +import java.util.ArrayList; + +import javax.servlet.ServletContext; +import javax.ws.rs.Consumes; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; + +import de.vipra.rest.APIMediaType; +import de.vipra.rest.Messages; +import de.vipra.rest.model.APIError; +import de.vipra.rest.model.ResponseWrapper; +import de.vipra.rest.model.Topic; +import de.vipra.util.Config; +import de.vipra.util.Constants; +import de.vipra.util.ex.ConfigException; +import de.vipra.util.ex.DatabaseException; +import de.vipra.util.service.DatabaseService; + +@Path("topics") +public class TopicResource { + + @Context + UriInfo uri; + + DatabaseService<Topic> service; + + public TopicResource(@Context ServletContext servletContext) throws ConfigException, IOException { + Config config = Config.getConfig(); + service = DatabaseService.getDatabaseService(config, Constants.Collection.TOPICS, Topic.class); + } + + @GET + @Produces(APIMediaType.APPLICATION_JSONAPI) + public Response getTopics(@QueryParam("skip") @DefaultValue("0") int skip, + @QueryParam("limit") @DefaultValue("0") int limit) { + ArrayList<Topic> topics = service.getMultiple(skip, limit, null); + ResponseWrapper<ArrayList<Topic>> res = new ResponseWrapper<>(topics); + res.addLink("self", uri.getAbsolutePath().toString()); + return Response.ok().entity(res).build(); + } + + @GET + @Produces(APIMediaType.APPLICATION_JSONAPI) + @Consumes(APIMediaType.APPLICATION_JSONAPI) + @Path("{id}") + public Response getTopic(@PathParam("id") String id) { + ResponseWrapper<Topic> res = new ResponseWrapper<>(); + if (id == null || id.trim().length() == 0) { + res.addError(new APIError(Response.Status.BAD_REQUEST, "ID is empty", + String.format(Messages.BAD_REQUEST, "id cannot be empty"))); + return Response.status(Response.Status.BAD_REQUEST).entity(res).build(); + } + Topic topic = service.getSingle(id); + if (topic != null) { + topic.setBase(uri.getAbsolutePath()); + res.setData(topic); + return Response.ok().entity(res).build(); + } else { + res.addError(new APIError(Response.Status.NOT_FOUND, "Resource not found", + String.format(Messages.NOT_FOUND, "topic", id))); + return Response.status(Response.Status.NOT_FOUND).entity(res).build(); + } + } + + @PUT + @Consumes(APIMediaType.APPLICATION_JSONAPI) + @Produces(APIMediaType.APPLICATION_JSONAPI) + @Path("{id}") + public Response updateTopic(@PathParam("id") String id, Topic topic) { + ResponseWrapper<Topic> res = new ResponseWrapper<>(); + try { + long updated = service.updateSingle(topic); + int updatedInt = updated > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) updated; + switch (updatedInt) { + case 0: + res.addError(new APIError(Response.Status.NOT_FOUND, "Topic not found", + String.format(Messages.NOT_FOUND, "topic", id))); + return Response.status(Response.Status.NOT_FOUND).entity(res).build(); + case 1: + res.setData(topic); + return Response.ok().entity(res).build(); + default: + return Response.serverError().build(); + } + } catch (DatabaseException e) { + res = new ResponseWrapper<>(new APIError(Response.Status.INTERNAL_SERVER_ERROR, "item could not be updated", + "item could not be updated due to an internal server error")); + return Response.serverError().entity(res).build(); + } + } + +} diff --git a/vipra-util/.classpath b/vipra-util/.classpath index f0cbe96b..6c703194 100644 --- a/vipra-util/.classpath +++ b/vipra-util/.classpath @@ -17,5 +17,11 @@ <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> + <classpathentry kind="src" output="target/test-classes" path="src/test/java"> + <attributes> + <attribute name="optional" value="true"/> + <attribute name="maven.pomderived" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/vipra-util/pom.xml b/vipra-util/pom.xml index e78ecfaf..47b1f9f9 100644 --- a/vipra-util/pom.xml +++ b/vipra-util/pom.xml @@ -1,8 +1,9 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> + <groupId>de.vipra</groupId> - <artifactId>vipra-util</artifactId> + <artifactId>util</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> diff --git a/vipra-util/src/main/java/de/vipra/util/MongoUtils.java b/vipra-util/src/main/java/de/vipra/util/MongoUtils.java index 790a6116..4e6f60ac 100644 --- a/vipra-util/src/main/java/de/vipra/util/MongoUtils.java +++ b/vipra-util/src/main/java/de/vipra/util/MongoUtils.java @@ -12,6 +12,8 @@ import org.bson.types.ObjectId; public class MongoUtils { public static Bson getSorts(String sortBy) { + if (sortBy == null) + return null; String[] sortKeys = sortBy.split(","); ArrayList<Bson> sorts = new ArrayList<Bson>(sortKeys.length); for (String sort : sortKeys) { -- GitLab