From 40b646c37ef8528e1251abd454fcfd41aa1d3c2c Mon Sep 17 00:00:00 2001 From: lyf666 Date: Thu, 16 Feb 2017 16:36:22 +0800 Subject: [PATCH] init --- .gitignore | 73 +++++++++++ pom.xml | 70 +++++++++++ src/main/java/cn/cloudowr/dict/Config.java | 59 +++++++++ .../java/cn/cloudowr/dict/Controller.java | 119 ++++++++++++++++++ .../java/cn/cloudowr/dict/IdInterceptor.java | 20 +++ src/main/java/cn/cloudowr/dict/Main.java | 12 ++ src/main/webapp/WEB-INF/web.xml | 18 +++ src/main/webapp/doc/api.txt | 21 ++++ 8 files changed, 392 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/cn/cloudowr/dict/Config.java create mode 100644 src/main/java/cn/cloudowr/dict/Controller.java create mode 100644 src/main/java/cn/cloudowr/dict/IdInterceptor.java create mode 100644 src/main/java/cn/cloudowr/dict/Main.java create mode 100644 src/main/webapp/WEB-INF/web.xml create mode 100644 src/main/webapp/doc/api.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5bf9d39 --- /dev/null +++ b/.gitignore @@ -0,0 +1,73 @@ +# Created by .ignore support plugin (hsz.mobi) +### Maven template +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +### Java template +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/workspace.xml +.idea/tasks.xml +.idea/dictionaries +.idea/vcs.xml +.idea/jsLibraryMappings.xml + +# Sensitive or high-churn files: +.idea/dataSources.ids +.idea/dataSources.xml +.idea/dataSources.local.xml +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml + +# Gradle: +.idea/gradle.xml +.idea/libraries + +# Mongo Explorer plugin: +.idea/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +*.iml +.idea \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..345e836 --- /dev/null +++ b/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + cn.cloudowr + dict + 1.0-SNAPSHOT + war + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.5 + + 1.8 + 1.8 + + + + org.mortbay.jetty + jetty-maven-plugin + 8.1.8.v20121106 + + stop + 5599 + + / + + 5 + + + 8080 + 60000 + + + + + + + + + com.jfinal + jfinal + 3.0 + + + com.jfinal + jetty-server + 8.1.8 + + + + + + + + com.alibaba + fastjson + 1.2.6 + + +     org.mongodb +     mongo-java-driver +     3.4.2 + + + \ No newline at end of file diff --git a/src/main/java/cn/cloudowr/dict/Config.java b/src/main/java/cn/cloudowr/dict/Config.java new file mode 100644 index 0000000..a8d95d7 --- /dev/null +++ b/src/main/java/cn/cloudowr/dict/Config.java @@ -0,0 +1,59 @@ +package cn.cloudowr.dict; + +import com.jfinal.config.*; +import com.jfinal.template.Engine; +import com.mongodb.MongoClient; +import com.mongodb.MongoCredential; +import com.mongodb.ServerAddress; +import com.mongodb.client.MongoDatabase; + +import java.util.Arrays; + +/** + * Created by lyf66 on 2017/2/16. + */ +public class Config extends com.jfinal.config.JFinalConfig{ + + private static MongoDatabase mongoDatabase; + + @Override + public void configConstant(Constants me) { + + } + + @Override + public void configRoute(Routes me) { + me.add("/", Controller.class); + } + + @Override + public void configEngine(Engine me) { + + } + + @Override + public void configPlugin(Plugins me) { + + } + + @Override + public void configInterceptor(Interceptors me) { + + } + + @Override + public void configHandler(Handlers me) { + + } + + @Override + public void afterJFinalStart() { + MongoCredential mongoCredential = MongoCredential.createCredential("root", "admin", "CoWR1111".toCharArray()); + MongoClient mongoClient = new MongoClient(new ServerAddress("120.24.5.249", 3717), Arrays.asList(mongoCredential)); + mongoDatabase = mongoClient.getDatabase("dict"); + } + + public static MongoDatabase getMongoDataBase() { + return mongoDatabase; + } +} diff --git a/src/main/java/cn/cloudowr/dict/Controller.java b/src/main/java/cn/cloudowr/dict/Controller.java new file mode 100644 index 0000000..1793d0f --- /dev/null +++ b/src/main/java/cn/cloudowr/dict/Controller.java @@ -0,0 +1,119 @@ +package cn.cloudowr.dict; + +import com.jfinal.aop.Before; +import com.jfinal.aop.Interceptor; +import com.jfinal.aop.Invocation; +import com.jfinal.render.ContentType; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.model.Filters; +import com.mongodb.client.model.UpdateOptions; +import com.mongodb.client.model.Updates; +import com.mongodb.client.result.DeleteResult; +import com.mongodb.client.result.UpdateResult; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.bson.types.ObjectId; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * Created by lyf66 on 2017/2/16. + */ +public class Controller extends com.jfinal.core.Controller{ + public void index() { + renderText("2"); + } + + @Before(IdInterceptor.class) + public void dict() { + String id = getPara("id"); + + MongoCollection collection = getCollection(); + Document dict = collection.find( + Filters.eq("_id", new ObjectId(id)) + ).limit(1).first(); + if (dict != null) { + renderJson(dict.toJson()); + } else { + renderError(404); + } + } + + public void dictList() { + int pageNum = getParaToInt("pageNum", 0); + int pageSize = getParaToInt("pageSize", 20); + + MongoCollection collection = getCollection(); + List documents = new ArrayList<>(); + collection.find().limit(pageSize).skip(pageNum * pageSize).into(documents); + + List json = new ArrayList<>(); + documents.forEach(doc -> { + json.add(doc.toJson()); + }); + renderText(Arrays.toString(json.toArray()), ContentType.JSON); + } + + public void addDict() { + Map paraMap = getParaMap(); + Document dict = new Document(); + paraMap.forEach((key, arr) -> { + dict.put(key, arr[0]); + }); + getCollection().insertOne(dict); + renderJson(dict); + } + + @Before(IdInterceptor.class) + public void updateDict() { + String id = getPara("id"); + String action = getPara("action"); + String[] keysToUnset = getParaValues("keys"); + List ops = new ArrayList<>(); + + if (action.equals("unset")) { + for (String key : keysToUnset) { + if (key.equals("id")) continue; + ops.add(Updates.unset(key)); + } + } else { + Map paraMap = getParaMap(); + + paraMap.forEach((key, arr) -> { + if (!key.equals("id")) { + ops.add(Updates.set(key, arr[0])); + } + }); + } + + UpdateResult result = getCollection().updateOne( + Filters.eq("_id", new ObjectId(id)), + Updates.combine( + ops + ), + new UpdateOptions().upsert(true) + ); + + renderJson("result", result.getMatchedCount() >= 1); + } + + @Before(IdInterceptor.class) + public void deleteDict() { + String id = getPara("id"); + + DeleteResult result = getCollection().deleteOne( + Filters.eq("_id", new ObjectId(id)) + ); + renderJson("result", result.getDeletedCount() == 1); + } + + private MongoCollection getCollection() { + MongoDatabase mongoDataBase = Config.getMongoDataBase(); + MongoCollection collection = mongoDataBase.getCollection("dict"); + return collection; + } +} diff --git a/src/main/java/cn/cloudowr/dict/IdInterceptor.java b/src/main/java/cn/cloudowr/dict/IdInterceptor.java new file mode 100644 index 0000000..4426baa --- /dev/null +++ b/src/main/java/cn/cloudowr/dict/IdInterceptor.java @@ -0,0 +1,20 @@ +package cn.cloudowr.dict; + +import com.jfinal.aop.Interceptor; +import com.jfinal.aop.Invocation; + +/** + * Created by lyf66 on 2017/2/16. + */ +public class IdInterceptor implements Interceptor { + + @Override + public void intercept(Invocation inv) { + String id = inv.getController().getPara("id"); + if (id != null && !id.isEmpty()) { + inv.invoke(); + } else { + inv.getController().renderError(400); + } + } +} diff --git a/src/main/java/cn/cloudowr/dict/Main.java b/src/main/java/cn/cloudowr/dict/Main.java new file mode 100644 index 0000000..123de29 --- /dev/null +++ b/src/main/java/cn/cloudowr/dict/Main.java @@ -0,0 +1,12 @@ +package cn.cloudowr.dict; + +import com.jfinal.core.JFinal; + +/** + * Created by lyf66 on 2017/2/16. + */ +public class Main { + public static void main(String[] args) { + JFinal.start("src/main/webapp", 4200, "/"); + } +} diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..2e5bc01 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,18 @@ + + + + cn.cloudowr.dict + com.jfinal.core.JFinalFilter + + configClass + cn.cloudowr.dict.Config + + + + cn.cloudowr.dict + /* + + \ No newline at end of file diff --git a/src/main/webapp/doc/api.txt b/src/main/webapp/doc/api.txt new file mode 100644 index 0000000..685ef0b --- /dev/null +++ b/src/main/webapp/doc/api.txt @@ -0,0 +1,21 @@ +dict (String id required) { + return dict json +} +dictList (int pageNum default 0, int pageSize default 20) { + return dict list json +} +addDict (key-value pairs) { + return true or false +} +updateDict (String id required, String action optional, String[] keys optional) { + if (actions === 'unset') { + 删除指定id的dict的指定key + return true or false + } else { + 覆盖指定id的dict的指定key的对应value + return true or false + } +} +deleteDict (String id required) { + return true or false +} \ No newline at end of file