diff --git a/ma-impl.sublime-workspace b/ma-impl.sublime-workspace index 9eaf778e376afa9fa59b814bf1a390fe31201884..42dc46ba506d730fa0c0131de47e421dc541d865 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": @@ -454,6 +462,9 @@ ], "file_history": [ + "/home/eike/.cache/.fr-rPaUI0/LICENSE.txt", + "/home/eike/Repositories/fu/ss15/ma/impl/vipra-rest/src/main/resources/log4j2.xml", + "/home/eike/Repositories/fu/ss15/ma/impl/vipra-config/log4j2.xml", "/home/eike/Repositories/fu/ss15/ma/impl/vm/data/test-1.json", "/home/eike/Repositories/fu/ss15/ma/impl/vm/data/test-2.json", "/home/eike/Repositories/fu/ss15/ma/impl/vm/data/data.json", @@ -888,8 +899,101 @@ "groups": [ { + "selected": 0, "sheets": [ + { + "buffer": 0, + "file": "Vagrantfile", + "semi_transient": true, + "settings": + { + "buffer_size": 955, + "regions": + { + }, + "selection": + [ + [ + 955, + 955 + ] + ], + "settings": + { + "BracketHighlighterBusy": false, + "bh_regions": + [ + "bh_default", + "bh_default_center", + "bh_default_open", + "bh_default_close", + "bh_default_content", + "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_round", + "bh_round_center", + "bh_round_open", + "bh_round_close", + "bh_round_content", + "bh_unmatched", + "bh_unmatched_center", + "bh_unmatched_open", + "bh_unmatched_close", + "bh_unmatched_content", + "bh_regex", + "bh_regex_center", + "bh_regex_open", + "bh_regex_close", + "bh_regex_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_curly", + "bh_curly_center", + "bh_curly_open", + "bh_curly_close", + "bh_curly_content", + "bh_single_quote", + "bh_single_quote_center", + "bh_single_quote_open", + "bh_single_quote_close", + "bh_single_quote_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/.classpath b/vipra-cmd/.classpath index c1b25c8a751fc3ec42efe035c20381dd4fc58d28..f83898bb2bbe1b2b46a8e71244628070dd23373f 100644 --- a/vipra-cmd/.classpath +++ b/vipra-cmd/.classpath @@ -31,7 +31,7 @@ <classpathentry combineaccessrules="false" kind="src" path="/vipra-util"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"> <attributes> - <attribute name="owner.project.facets" value="java"/> + <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <classpathentry kind="output" path="target/classes"/> diff --git a/vipra-cmd/.project b/vipra-cmd/.project index e6b85466c1e3c9aa9198c926ed97d5b7c87344ed..3ac9cb904e07c158393db9e1b69cfe3cb80a2da6 100644 --- a/vipra-cmd/.project +++ b/vipra-cmd/.project @@ -33,4 +33,11 @@ <nature>org.eclipse.m2e.core.maven2Nature</nature> <nature>org.eclipse.wst.common.project.facet.core.nature</nature> </natures> + <linkedResources> + <link> + <name>src/main/resources/config.properties</name> + <type>1</type> + <locationURI>PARENT-1-PROJECT_LOC/vipra-config/config.properties</locationURI> + </link> + </linkedResources> </projectDescription> diff --git a/vipra-cmd/.settings/org.eclipse.jdt.core.prefs b/vipra-cmd/.settings/org.eclipse.jdt.core.prefs index 7677f45f763923b768652ded0a1422b2b83c6d77..cf43e3192a4851c9a5dd6821730ed9cf12c24559 100644 --- a/vipra-cmd/.settings/org.eclipse.jdt.core.prefs +++ b/vipra-cmd/.settings/org.eclipse.jdt.core.prefs @@ -62,7 +62,7 @@ org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_header=true org.eclipse.jdt.core.formatter.comment.format_html=true org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true org.eclipse.jdt.core.formatter.comment.format_line_comments=true @@ -91,7 +91,7 @@ org.eclipse.jdt.core.formatter.indent_empty_lines=false org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true org.eclipse.jdt.core.formatter.indentation.size=4 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert @@ -278,10 +278,10 @@ org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_decla org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert org.eclipse.jdt.core.formatter.join_lines_in_comments=true org.eclipse.jdt.core.formatter.join_wrapped_lines=true -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true org.eclipse.jdt.core.formatter.lineSplit=120 org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false @@ -290,7 +290,7 @@ org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true org.eclipse.jdt.core.formatter.tabulation.char=tab org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_on_off_tags=true org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true diff --git a/vipra-cmd/.settings/org.eclipse.wst.common.component b/vipra-cmd/.settings/org.eclipse.wst.common.component index e412462abbe92e089eeb6dac6733233d21e734d0..ec7635d9ec5720876c9b0971d2e37846e10ffad3 100644 --- a/vipra-cmd/.settings/org.eclipse.wst.common.component +++ b/vipra-cmd/.settings/org.eclipse.wst.common.component @@ -2,7 +2,5 @@ <wb-module deploy-name="vipra-cmd"> <wb-resource deploy-path="/" source-path="/src/main/java"/> <wb-resource deploy-path="/" source-path="/src/main/resources"/> - <wb-resource deploy-path="/" source-path="/src/test/java"/> - <wb-resource deploy-path="/" source-path="/src/test/resources"/> </wb-module> </project-modules> diff --git a/vipra-cmd/build.xml b/vipra-cmd/build.xml index e2083f7fb6ab6854f5bd1530ede71474479c954c..9b61c8d796cb4213c1c93de6e25bfdc04e865000 100644 --- a/vipra-cmd/build.xml +++ b/vipra-cmd/build.xml @@ -21,7 +21,37 @@ <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/mongodb/mongodb-driver/3.0.4/mongodb-driver-3.0.4.jar"/> <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/mongodb/bson/3.0.4/bson-3.0.4.jar"/> <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/mongodb/mongodb-driver-core/3.0.4/mongodb-driver-core-3.0.4.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/elasticsearch/elasticsearch/2.1.0/elasticsearch-2.1.0.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-core/5.3.1/lucene-core-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-backward-codecs/5.3.1/lucene-backward-codecs-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-analyzers-common/5.3.1/lucene-analyzers-common-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-queries/5.3.1/lucene-queries-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-memory/5.3.1/lucene-memory-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-highlighter/5.3.1/lucene-highlighter-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-queryparser/5.3.1/lucene-queryparser-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-sandbox/5.3.1/lucene-sandbox-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-suggest/5.3.1/lucene-suggest-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-misc/5.3.1/lucene-misc-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-join/5.3.1/lucene-join-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-grouping/5.3.1/lucene-grouping-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-spatial/5.3.1/lucene-spatial-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-spatial3d/5.3.1/lucene-spatial3d-5.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/spatial4j/spatial4j/0.4.1/spatial4j-0.4.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/google/guava/guava/18.0/guava-18.0.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/carrotsearch/hppc/0.7.1/hppc-0.7.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/joda-time/joda-time/2.8.2/joda-time-2.8.2.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/joda/joda-convert/1.2/joda-convert-1.2.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.6.2/jackson-core-2.6.2.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-smile/2.6.2/jackson-dataformat-smile-2.6.2.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.6.2/jackson-dataformat-yaml-2.6.2.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/yaml/snakeyaml/1.15/snakeyaml-1.15.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-cbor/2.6.2/jackson-dataformat-cbor-2.6.2.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/io/netty/netty/3.10.5.Final/netty-3.10.5.Final.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/ning/compress-lzf/1.0.2/compress-lzf-1.0.2.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/tdunning/t-digest/3.0/t-digest-3.0.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/hdrhistogram/HdrHistogram/2.1.6/HdrHistogram-2.1.6.jar"/> <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/commons-cli/commons-cli/1.3.1/commons-cli-1.3.1.jar"/> + <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/twitter/jsr166e/1.1.0/jsr166e-1.1.0.jar"/> <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar"/> <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar"/> <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/junit/junit/4.12/junit-4.12.jar"/> diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/Main.java b/vipra-cmd/src/main/java/de/vipra/cmd/Main.java index 8065ebc5a9804ed40e6d21ce013707ebe649ccc4..152984f968376419d3a6bbcf7d16ced9e464768b 100644 --- a/vipra-cmd/src/main/java/de/vipra/cmd/Main.java +++ b/vipra-cmd/src/main/java/de/vipra/cmd/Main.java @@ -1,5 +1,9 @@ package de.vipra.cmd; +import static de.vipra.cmd.CmdOptions.OPT_HELP; +import static de.vipra.cmd.CmdOptions.OPT_IMPORT; +import static de.vipra.cmd.CmdOptions.OPT_SHELL; + import java.io.IOException; import org.apache.commons.cli.CommandLine; @@ -12,8 +16,6 @@ import org.slf4j.LoggerFactory; import de.vipra.cmd.option.ImportOption; import de.vipra.util.ConfigException; -import static de.vipra.cmd.CmdOptions.*; - public class Main { public static final Logger log = LoggerFactory.getLogger(Main.class); diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/model/Article.java b/vipra-cmd/src/main/java/de/vipra/cmd/model/Article.java new file mode 100644 index 0000000000000000000000000000000000000000..14fe2ea32125b1990127222d5b678f5e41a9d34a --- /dev/null +++ b/vipra-cmd/src/main/java/de/vipra/cmd/model/Article.java @@ -0,0 +1,14 @@ +package de.vipra.cmd.model; + +import org.json.simple.JSONObject; + +public class Article extends de.vipra.util.model.Article { + + public void fromJSON(JSONObject obj) { + if (obj.containsKey("title")) setTitle(obj.get("title").toString()); + if (obj.containsKey("text")) setText(obj.get("text").toString()); + if (obj.containsKey("url")) setUrl(obj.get("url").toString()); + if (obj.containsKey("date")) setDate(obj.get("date").toString()); + } + +} diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/option/ImportOption.java b/vipra-cmd/src/main/java/de/vipra/cmd/option/ImportOption.java index 7f3fcddbd7693b0ae5075efb2715964fe145eaad..c7eb054608859c2f854c7febd03cf14c7bc8f5cc 100644 --- a/vipra-cmd/src/main/java/de/vipra/cmd/option/ImportOption.java +++ b/vipra-cmd/src/main/java/de/vipra/cmd/option/ImportOption.java @@ -7,6 +7,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import org.bson.Document; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; @@ -14,9 +15,14 @@ import org.json.simple.parser.ParseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; + import de.vipra.cmd.ExecutionException; +import de.vipra.cmd.model.Article; import de.vipra.util.Config; import de.vipra.util.ConfigException; +import de.vipra.util.Constants; import de.vipra.util.Mongo; import de.vipra.util.StringUtils; @@ -28,7 +34,7 @@ public class ImportOption { private ArrayList<File> files = new ArrayList<>(); private JSONParser parser = new JSONParser(); private Config config; - private Mongo mongo; + private MongoCollection<Document> collection; public ImportOption(String[] paths) throws ExecutionException { addPaths(paths); @@ -80,7 +86,15 @@ public class ImportOption { try { JSONArray array = (JSONArray) data; for (Object object : array) { - importArticle((JSONObject) object); + List<Exception> errors = new ArrayList<>(); + try { + importArticle((JSONObject) object); + } catch (ExecutionException e) { + errors.add(e); + } + if (errors.size() > 0) { + throw new ExecutionException(errors); + } } return; } catch (ClassCastException e) { @@ -92,18 +106,30 @@ public class ImportOption { } } - private void importArticle(JSONObject obj) { - // 1. add article to mongodb + private void importArticle(JSONObject obj) throws ExecutionException { // 2. add article to file database // 4. topic modeling // 3. index article via elasticsearch, include topics out.info("importing \"" + StringUtils.ellipsize(obj.get("title").toString(), 80) + "\""); + Article article = new Article(); + article.fromJSON(obj); + + // add article to mongodb + Document document = article.toDocument(); + try { + collection.insertOne(document); + } catch (Exception e) { + throw new ExecutionException("could not create database entry: " + e.getMessage()); + } + } public void doImport() throws ExecutionException { try { config = new Config(); - mongo = Mongo.getInstance(config); + Mongo mongo = Mongo.getInstance(config); + MongoDatabase db = mongo.getDatabase(); + collection = db.getCollection(Constants.Collection.ARTICLES.name); } catch (IOException | ConfigException e) { throw new ExecutionException(e); } diff --git a/vipra-cmd/src/main/resources/config.properties b/vipra-cmd/src/main/resources/config.properties deleted file mode 100644 index 07030840d45dd8fed8c2c2d5bff5fe0a54939a4f..0000000000000000000000000000000000000000 --- a/vipra-cmd/src/main/resources/config.properties +++ /dev/null @@ -1,3 +0,0 @@ -db.host=localhost -db.port=27017 -db.name=test \ No newline at end of file diff --git a/vipra-config/config.properties b/vipra-config/config.properties new file mode 100644 index 0000000000000000000000000000000000000000..06623e215e66a3dfaefbdf3baabce5e5aeb14412 --- /dev/null +++ b/vipra-config/config.properties @@ -0,0 +1,5 @@ +db.host=localhost +db.port=27017 +db.name=test + +fb.path=${datadir}/vipra \ No newline at end of file diff --git a/vipra-rest/.classpath b/vipra-rest/.classpath index d8728319c5ba6bfc3e74f4b13ce346e356fab451..c1e791eb0bd8209acbe226577fab51d5c4bfc7e0 100644 --- a/vipra-rest/.classpath +++ b/vipra-rest/.classpath @@ -30,7 +30,7 @@ </classpathentry> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"> <attributes> - <attribute name="owner.project.facets" value="java"/> + <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <classpathentry combineaccessrules="false" kind="src" path="/vipra-util"/> diff --git a/vipra-rest/.project b/vipra-rest/.project index e24244ea68a972f817781145661bc0723916096b..7641716f5406382c8b896bb6aa2c95959d062e07 100644 --- a/vipra-rest/.project +++ b/vipra-rest/.project @@ -41,4 +41,11 @@ <nature>org.eclipse.wst.common.project.facet.core.nature</nature> <nature>org.eclipse.wst.jsdt.core.jsNature</nature> </natures> + <linkedResources> + <link> + <name>src/main/resources/config.properties</name> + <type>1</type> + <locationURI>PARENT-1-PROJECT_LOC/vipra-config/config.properties</locationURI> + </link> + </linkedResources> </projectDescription> diff --git a/vipra-rest/.settings/org.eclipse.wst.common.component b/vipra-rest/.settings/org.eclipse.wst.common.component index df9f1cfb7b6d2d1e0bfd7425e36690f2b9f64b0c..07bb526364819fa2125c5a4a6f2b1a060f873764 100644 --- a/vipra-rest/.settings/org.eclipse.wst.common.component +++ b/vipra-rest/.settings/org.eclipse.wst.common.component @@ -4,10 +4,7 @@ <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="vipra-util.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="vipra-rest"/> + <property name="context-root" value="rest"/> </wb-module> </project-modules> diff --git a/vipra-rest/src/main/java/de/vipra/rest/provider/ObjectMapperProvider.java b/vipra-rest/src/main/java/de/vipra/rest/provider/ObjectMapperProvider.java index aea09a8050ac65fdb3cf10be46d4004d33210450..4c8231addf429dd7898ddd8f561fff862c127e5b 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/provider/ObjectMapperProvider.java +++ b/vipra-rest/src/main/java/de/vipra/rest/provider/ObjectMapperProvider.java @@ -13,9 +13,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; +import de.vipra.rest.model.Article; import de.vipra.rest.serializer.ArticleDeserializer; import de.vipra.rest.serializer.ArticleSerializer; -import de.vipra.rest.model.Article; @Provider public class ObjectMapperProvider implements ContextResolver<ObjectMapper> { diff --git a/vipra-rest/src/main/java/de/vipra/rest/provider/PatchReaderInterceptor.java b/vipra-rest/src/main/java/de/vipra/rest/provider/PatchReaderInterceptor.java index ea7f724260cff7dda1443bdb440733c32705a1ba..ac4c7179e7ccf844824b72a4c713495cb2849010 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/provider/PatchReaderInterceptor.java +++ b/vipra-rest/src/main/java/de/vipra/rest/provider/PatchReaderInterceptor.java @@ -1,17 +1,8 @@ package de.vipra.rest.provider; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.github.fge.jsonpatch.JsonPatch; -import com.github.fge.jsonpatch.JsonPatchException; - -import de.vipra.rest.PATCH; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; - import java.lang.annotation.Annotation; import java.lang.reflect.Method; @@ -29,6 +20,13 @@ import javax.ws.rs.ext.ReaderInterceptorContext; import org.glassfish.jersey.message.MessageBodyWorkers; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.fge.jsonpatch.JsonPatch; +import com.github.fge.jsonpatch.JsonPatchException; + +import de.vipra.rest.PATCH; + @Provider @PATCH public class PatchReaderInterceptor implements ReaderInterceptor { diff --git a/vipra-rest/src/main/java/de/vipra/rest/serializer/ArticleDeserializer.java b/vipra-rest/src/main/java/de/vipra/rest/serializer/ArticleDeserializer.java index 14c531038b1b9334e97e699ef9ecc4504439a6cd..b87ce0b3fd114e68c645e34ec18cfffb5efe6fef 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/serializer/ArticleDeserializer.java +++ b/vipra-rest/src/main/java/de/vipra/rest/serializer/ArticleDeserializer.java @@ -1,5 +1,8 @@ package de.vipra.rest.serializer; +import static de.vipra.rest.serializer.JsonHelper.getString; +import static de.vipra.rest.serializer.JsonHelper.stringToDate; + import java.io.IOException; import com.fasterxml.jackson.core.JsonParser; @@ -10,8 +13,6 @@ import com.fasterxml.jackson.databind.JsonNode; import de.vipra.rest.model.Article; -import static de.vipra.rest.serializer.JsonHelper.*; - public class ArticleDeserializer extends JsonDeserializer<Article> { @Override diff --git a/vipra-rest/src/main/java/de/vipra/rest/serializer/ArticleSerializer.java b/vipra-rest/src/main/java/de/vipra/rest/serializer/ArticleSerializer.java index c241ce97af969b4acb6954d8e0cf4e9b27ed77b3..071fcdef42e6c7df408fc534003df89a59767e61 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/serializer/ArticleSerializer.java +++ b/vipra-rest/src/main/java/de/vipra/rest/serializer/ArticleSerializer.java @@ -1,6 +1,6 @@ package de.vipra.rest.serializer; -import de.vipra.rest.model.Article; +import static de.vipra.rest.serializer.JsonHelper.dateToString; import java.io.IOException; @@ -9,7 +9,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; -import static de.vipra.rest.serializer.JsonHelper.*; +import de.vipra.rest.model.Article; public class ArticleSerializer extends JsonSerializer<Article> { diff --git a/vipra-rest/src/main/java/de/vipra/rest/service/ArticleService.java b/vipra-rest/src/main/java/de/vipra/rest/service/ArticleService.java index 09444254534b927ad9ca529124afeaaca741f2a6..4f7c1e9310e775f3bc2cdddbd30e59e62435ce7c 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/service/ArticleService.java +++ b/vipra-rest/src/main/java/de/vipra/rest/service/ArticleService.java @@ -4,13 +4,14 @@ import java.net.URI; import java.util.ArrayList; import de.vipra.rest.model.Article; +import de.vipra.util.Constants; import de.vipra.util.Mongo; -import de.vipra.util.service.ModelService; +import de.vipra.util.service.DatabaseService; -public class ArticleService extends ModelService<Article> { +public class ArticleService extends DatabaseService<Article> { public ArticleService(Mongo mongo) { - super(mongo, "articles", Article.class); + super(mongo, Constants.Collection.ARTICLES, Article.class); } public Article getArticle(URI base, String id) { diff --git a/vipra-rest/src/main/resources/config.properties b/vipra-rest/src/main/resources/config.properties deleted file mode 100644 index 07030840d45dd8fed8c2c2d5bff5fe0a54939a4f..0000000000000000000000000000000000000000 --- a/vipra-rest/src/main/resources/config.properties +++ /dev/null @@ -1,3 +0,0 @@ -db.host=localhost -db.port=27017 -db.name=test \ No newline at end of file diff --git a/vipra-rest/src/test/java/de/vipra/rest/resource/ArticleResourceTest.java b/vipra-rest/src/test/java/de/vipra/rest/resource/ArticleResourceTest.java index 7ef0949f4b49cbaa15e53a9b0c6cb74711b9f2a5..9d4e60c34c66cdecc44f6f4bbb0fc824ebd42cc0 100644 --- a/vipra-rest/src/test/java/de/vipra/rest/resource/ArticleResourceTest.java +++ b/vipra-rest/src/test/java/de/vipra/rest/resource/ArticleResourceTest.java @@ -1,6 +1,6 @@ package de.vipra.rest.resource; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; import javax.ws.rs.core.Application; import javax.ws.rs.core.Response; @@ -9,8 +9,6 @@ import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.test.JerseyTest; import org.junit.Test; -import de.vipra.rest.resource.ArticleResource; - public class ArticleResourceTest extends JerseyTest { @Override diff --git a/vipra-util/.classpath b/vipra-util/.classpath index 7673637b2561b9ca3c4c27f60fb951f09e52b948..13c35ff075287036386ea459ee87b13c4e6be365 100644 --- a/vipra-util/.classpath +++ b/vipra-util/.classpath @@ -17,15 +17,15 @@ <attribute name="org.eclipse.jst.component.nondependency" value=""/> </attributes> </classpathentry> - <classpathentry kind="src" output="target/test-classes" path="src/test/java"> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"> <attributes> - <attribute name="optional" value="true"/> <attribute name="maven.pomderived" value="true"/> </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="owner.project.facets" value="java"/> + <attribute name="optional" value="true"/> + <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <classpathentry kind="output" path="target/classes"/> diff --git a/vipra-util/.project b/vipra-util/.project index 3eb2ee19593ed7f5d6c146794b6965a00956e603..97df63f9e9fce517725586539ba319c7ccfedbbd 100644 --- a/vipra-util/.project +++ b/vipra-util/.project @@ -33,4 +33,11 @@ <nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.wst.common.project.facet.core.nature</nature> </natures> + <linkedResources> + <link> + <name>src/main/resources/config.properties</name> + <type>1</type> + <locationURI>PARENT-1-PROJECT_LOC/vipra-config/config.properties</locationURI> + </link> + </linkedResources> </projectDescription> diff --git a/vipra-util/.settings/org.eclipse.jdt.core.prefs b/vipra-util/.settings/org.eclipse.jdt.core.prefs index ffc246f72fb78c1ae361528ae342d1b453c60b82..57fd9ccb7a5acf365ce1fead974419e24de10b66 100644 --- a/vipra-util/.settings/org.eclipse.jdt.core.prefs +++ b/vipra-util/.settings/org.eclipse.jdt.core.prefs @@ -61,7 +61,7 @@ org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_header=true org.eclipse.jdt.core.formatter.comment.format_html=true org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true org.eclipse.jdt.core.formatter.comment.format_line_comments=true @@ -90,7 +90,7 @@ org.eclipse.jdt.core.formatter.indent_empty_lines=false org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true org.eclipse.jdt.core.formatter.indentation.size=4 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert @@ -277,10 +277,10 @@ org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_decla org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert org.eclipse.jdt.core.formatter.join_lines_in_comments=true org.eclipse.jdt.core.formatter.join_wrapped_lines=true -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true org.eclipse.jdt.core.formatter.lineSplit=120 org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false @@ -289,7 +289,7 @@ org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true org.eclipse.jdt.core.formatter.tabulation.char=tab org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_on_off_tags=true org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true diff --git a/vipra-util/pom.xml b/vipra-util/pom.xml index c48b7dc1a70a22a9fae7b8d62c347fa1ae2a090f..03b50d666602ba831e271cbb6881b3356e9b4b27 100644 --- a/vipra-util/pom.xml +++ b/vipra-util/pom.xml @@ -13,6 +13,12 @@ </properties> <dependencies> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>2.4</version> + </dependency> + <!-- Logging --> <dependency> <groupId>org.apache.logging.log4j</groupId> diff --git a/vipra-util/src/main/java/META-INF/MANIFEST.MF b/vipra-util/src/main/java/META-INF/MANIFEST.MF deleted file mode 100644 index 5e9495128c0376427420c4189993b3851770b702..0000000000000000000000000000000000000000 --- a/vipra-util/src/main/java/META-INF/MANIFEST.MF +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -Class-Path: - diff --git a/vipra-util/src/main/java/de/vipra/util/Constants.java b/vipra-util/src/main/java/de/vipra/util/Constants.java new file mode 100644 index 0000000000000000000000000000000000000000..fe0679afe7d3a83013928e66324a931f6da31173 --- /dev/null +++ b/vipra-util/src/main/java/de/vipra/util/Constants.java @@ -0,0 +1,25 @@ +package de.vipra.util; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +public class Constants { + + public static final String FB_DIR = "vipra"; + public static final Charset FB_ENCODING = StandardCharsets.UTF_8; + + public static final String DEFAULT_HOST = "localhost"; + public static final int DEFAULT_PORT = 27017; + public static final String DEFAULT_DB = "test"; + + public static enum Collection { + ARTICLES("articles"); + + public final String name; + + private Collection(String name) { + this.name = name; + } + } + +} diff --git a/vipra-util/src/main/java/de/vipra/util/FileUtils.java b/vipra-util/src/main/java/de/vipra/util/FileUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..397610a4c8a7310de539fab2c234e8415a170a42 --- /dev/null +++ b/vipra-util/src/main/java/de/vipra/util/FileUtils.java @@ -0,0 +1,15 @@ +package de.vipra.util; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; + +public class FileUtils extends org.apache.commons.io.FileUtils { + + public static List<String> readFile(File file) throws IOException { + return Files.readAllLines(Paths.get(file.getAbsolutePath()), Constants.FB_ENCODING); + } + +} diff --git a/vipra-util/src/main/java/de/vipra/util/Mongo.java b/vipra-util/src/main/java/de/vipra/util/Mongo.java index 73628bd0be1064b622c2860f14b766ba7a671e03..2973d5f5d2ccfc84ba21c0bfef0b80cf7a020be5 100644 --- a/vipra-util/src/main/java/de/vipra/util/Mongo.java +++ b/vipra-util/src/main/java/de/vipra/util/Mongo.java @@ -5,7 +5,6 @@ import org.slf4j.LoggerFactory; import com.mongodb.MongoClient; import com.mongodb.client.MongoDatabase; -import de.vipra.util.Config; public class Mongo { @@ -17,9 +16,9 @@ public class Mongo { private final MongoDatabase database; private Mongo(Config config) throws ConfigException { - String host = config.getString("db.host"); - Integer port = config.getInt("db.port"); - String databaseName = config.getString("db.name"); + String host = config.getString("db.host", Constants.DEFAULT_HOST); + Integer port = config.getInt("db.port", Constants.DEFAULT_PORT); + String databaseName = config.getString("db.name", Constants.DEFAULT_DB); if (host == null || port == null || databaseName == null) { log.error("host/port/dbname missing in configuration"); diff --git a/vipra-util/src/main/java/de/vipra/util/helper/MongoHelper.java b/vipra-util/src/main/java/de/vipra/util/MongoUtils.java similarity index 74% rename from vipra-util/src/main/java/de/vipra/util/helper/MongoHelper.java rename to vipra-util/src/main/java/de/vipra/util/MongoUtils.java index 5b39e776c590ae5c2f96f51749f1e860deebec66..790a6116082d448d04db1841dc11bb4b131eb70f 100644 --- a/vipra-util/src/main/java/de/vipra/util/helper/MongoHelper.java +++ b/vipra-util/src/main/java/de/vipra/util/MongoUtils.java @@ -1,13 +1,15 @@ -package de.vipra.util.helper; +package de.vipra.util; + +import static com.mongodb.client.model.Sorts.ascending; +import static com.mongodb.client.model.Sorts.descending; +import static com.mongodb.client.model.Sorts.orderBy; import java.util.ArrayList; import org.bson.conversions.Bson; import org.bson.types.ObjectId; -import static com.mongodb.client.model.Sorts.*; - -public class MongoHelper { +public class MongoUtils { public static Bson getSorts(String sortBy) { String[] sortKeys = sortBy.split(","); diff --git a/vipra-util/src/main/java/de/vipra/util/PathUtils.java b/vipra-util/src/main/java/de/vipra/util/PathUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..b5979fe2fa0c4329938f39808978af2aa7705f84 --- /dev/null +++ b/vipra-util/src/main/java/de/vipra/util/PathUtils.java @@ -0,0 +1,22 @@ +package de.vipra.util; + +import java.io.File; + +public class PathUtils { + + public static File userConfigDir() { + String os = System.getProperty("os.name").toUpperCase(); + File base = null; + if (os.contains("WIN")) { + base = new File(System.getProperty("APPDATA")); + } else if (os.contains("MAC")) { + base = new File(System.getProperty("user.home") + File.pathSeparator + "Library" + File.pathSeparator + + "ApplicationSupport"); + } else if (os.contains("NIX")) { + base = new File( + System.getProperty("user.home") + File.pathSeparator + ".local" + File.pathSeparator + "share"); + } + return base; + } + +} diff --git a/vipra-util/src/main/java/de/vipra/util/StringUtils.java b/vipra-util/src/main/java/de/vipra/util/StringUtils.java index 097975210381fbc6170732885360132134b88ea3..3070548497f20a558d0ba0c039d6b1626075b92d 100644 --- a/vipra-util/src/main/java/de/vipra/util/StringUtils.java +++ b/vipra-util/src/main/java/de/vipra/util/StringUtils.java @@ -10,4 +10,14 @@ public class StringUtils { return input.substring(0, maxLength - ellip.length()).concat(ellip); } + public static String join(Iterable<String> it) { + StringBuilder sb = new StringBuilder(); + String sep = ""; + for (String s : it) { + sb.append(sep).append(s); + sep = " "; + } + return sb.toString(); + } + } diff --git a/vipra-util/src/main/java/de/vipra/util/model/Article.java b/vipra-util/src/main/java/de/vipra/util/model/Article.java index 77d2d07dd25b6db5ae1f1cee275c5d82c6646b79..60f2e6edc756e814d6a97adf76fcbee6ba8cb1a8 100644 --- a/vipra-util/src/main/java/de/vipra/util/model/Article.java +++ b/vipra-util/src/main/java/de/vipra/util/model/Article.java @@ -1,10 +1,18 @@ package de.vipra.util.model; +import java.io.File; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; import org.bson.Document; import org.bson.types.ObjectId; +import de.vipra.util.FileUtils; +import de.vipra.util.StringUtils; + public class Article extends Model { private String title; @@ -44,6 +52,14 @@ public class Article extends Model { this.date = date; } + public void setDate(String date) { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); + try { + setDate(df.parse(date)); + } catch (ParseException e) {} + } + + @Override public String getType() { return Article.class.getSimpleName().toLowerCase(); } @@ -66,4 +82,16 @@ public class Article extends Model { setDate(document.getDate("date")); } + @Override + public void fromFile(File file) throws IOException { + List<String> lines = FileUtils.readFile(file); + setTitle(lines.get(0)); + setText(StringUtils.join(lines.subList(1, lines.size()))); + } + + @Override + public String toFileString() { + return getTitle() + "\n" + getText(); + } + } \ No newline at end of file diff --git a/vipra-util/src/main/java/de/vipra/util/model/Model.java b/vipra-util/src/main/java/de/vipra/util/model/Model.java index 77073b12997982363ddd51b1aa96578854bc5fe2..0009ca6f50910d94f63903f86070b17861215656 100644 --- a/vipra-util/src/main/java/de/vipra/util/model/Model.java +++ b/vipra-util/src/main/java/de/vipra/util/model/Model.java @@ -1,10 +1,15 @@ package de.vipra.util.model; +import java.io.File; +import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import org.apache.commons.io.FileUtils; import org.bson.Document; +import de.vipra.util.Constants; + public abstract class Model { private String id; @@ -31,10 +36,23 @@ public abstract class Model { } } + public boolean writeToFile(File file) throws IOException { + if (file.exists()) { + String data = toFileString(); + FileUtils.writeStringToFile(file, data, Constants.FB_ENCODING, false); + return true; + } + return false; + } + public abstract String getType(); public abstract void fromDocument(Document document); public abstract Document toDocument(); + public abstract void fromFile(File file) throws IOException; + + public abstract String toFileString(); + } diff --git a/vipra-util/src/main/java/de/vipra/util/service/ModelService.java b/vipra-util/src/main/java/de/vipra/util/service/DatabaseService.java similarity index 85% rename from vipra-util/src/main/java/de/vipra/util/service/ModelService.java rename to vipra-util/src/main/java/de/vipra/util/service/DatabaseService.java index d24a0b71046490876a13adfd230001c1ebe6b480..4729cf847d755d76077d28cb96a511339b67429c 100644 --- a/vipra-util/src/main/java/de/vipra/util/service/ModelService.java +++ b/vipra-util/src/main/java/de/vipra/util/service/DatabaseService.java @@ -1,7 +1,7 @@ package de.vipra.util.service; -import static de.vipra.util.helper.MongoHelper.getSorts; -import static de.vipra.util.helper.MongoHelper.objectId; +import static de.vipra.util.MongoUtils.getSorts; +import static de.vipra.util.MongoUtils.objectId; import java.util.ArrayList; @@ -14,18 +14,19 @@ import com.mongodb.client.model.Filters; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.UpdateResult; +import de.vipra.util.Constants; import de.vipra.util.Mongo; import de.vipra.util.model.Model; -public class ModelService<T extends Model> { +public class DatabaseService<T extends Model> { - private static final Logger log = LoggerFactory.getLogger(ModelService.class); + private static final Logger log = LoggerFactory.getLogger(DatabaseService.class); private final MongoCollection<Document> collection; private final Class<T> clazz; - public ModelService(Mongo mongo, String collectionName, Class<T> clazz) { - this.collection = mongo.getDatabase().getCollection(collectionName); + public DatabaseService(Mongo mongo, Constants.Collection collection, Class<T> clazz) { + this.collection = mongo.getDatabase().getCollection(collection.name); this.clazz = clazz; } diff --git a/vipra-util/src/main/java/de/vipra/util/service/FilebaseService.java b/vipra-util/src/main/java/de/vipra/util/service/FilebaseService.java new file mode 100644 index 0000000000000000000000000000000000000000..3dfa8c741767ca24f00bf6f477984514f248a9d3 --- /dev/null +++ b/vipra-util/src/main/java/de/vipra/util/service/FilebaseService.java @@ -0,0 +1,60 @@ +package de.vipra.util.service; + +import java.io.File; +import java.io.IOException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import de.vipra.util.model.Model; + +public class FilebaseService<T extends Model> { + + public static final Logger log = LoggerFactory.getLogger(FilebaseService.class); + + private final File directory; + private final Class<T> clazz; + + public FilebaseService(File directory, Class<T> clazz) { + this.directory = directory; + this.clazz = clazz; + } + + private T newT(File file) { + try { + T t = clazz.newInstance(); + t.fromFile(file); + return t; + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | SecurityException + | IOException e) { + log.error(e.getMessage()); + return null; + } + } + + protected File getFile(String id) { + return new File(directory, id); + } + + protected T getSingle(String id) { + File file = getFile(id); + return newT(file); + } + + protected long deleteSingle(String id) { + File file = getFile(id); + if (file.exists() && file.delete()) { + return 1; + } + return 0; + } + + protected long updateSingle(T t) throws IOException { + File file = getFile(t.getId()); + if (file.exists()) { + t.writeToFile(file); + } + return 0; + } + +} diff --git a/vipra-util/src/main/resources/config.properties b/vipra-util/src/main/resources/config.properties deleted file mode 100644 index 07030840d45dd8fed8c2c2d5bff5fe0a54939a4f..0000000000000000000000000000000000000000 --- a/vipra-util/src/main/resources/config.properties +++ /dev/null @@ -1,3 +0,0 @@ -db.host=localhost -db.port=27017 -db.name=test \ No newline at end of file