Procházet zdrojové kódy

修改actions 为 List<String>

zhouhao před 8 roky
rodič
revize
1a25f77710
16 změnil soubory, kde provedl 151 přidání a 42 odebrání
  1. 1 1
      hsweb-examples/hsweb-examples-oauth2/hsweb-examples-oauth2-server/src/main/java/org/hswebframework/web/example/oauth2/OAuth2ServerApplication.java
  2. 5 5
      hsweb-examples/hsweb-examples-simple/pom.xml
  3. 2 2
      hsweb-examples/hsweb-examples-simple/src/main/java/org/hswebframework/web/example/simple/SpringBootExample.java
  4. 4 1
      hsweb-examples/hsweb-examples-simple/src/main/resources/application.yml
  5. 6 4
      hsweb-system/hsweb-system-authorization/hsweb-system-authorization-entity/src/main/java/org/hswebframework/web/entity/authorization/FieldAccessEntity.java
  6. 2 1
      hsweb-system/hsweb-system-authorization/hsweb-system-authorization-service/hsweb-system-authorization-service-simple/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthentication.java
  7. 12 0
      hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-api/src/main/java/org/hswebframework/web/service/dictionary/builder/DictionaryParserBuilder.java
  8. 1 1
      hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/parser/SingleDictParser.java
  9. 3 2
      hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/pom.xml
  10. 25 13
      hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/SimpleDictionaryParser.java
  11. 10 3
      hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/SimpleDictionaryParserService.java
  12. 31 0
      hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/builder/SimpleDictionaryParserBuilder.java
  13. 39 0
      hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/parser/ScriptSingleDictParser.java
  14. 0 1
      hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/parser/SimpleDictParserFormatter.java
  15. 9 1
      hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/parser/SimpleSingleDictParser.java
  16. 1 7
      hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/test/java/org/hswebframework/web/starter/dictionary/DictionaryParserTests.java

+ 1 - 1
hsweb-examples/hsweb-examples-oauth2/hsweb-examples-oauth2-server/src/main/java/org/hswebframework/web/example/oauth2/OAuth2ServerApplication.java

@@ -107,7 +107,7 @@ public class OAuth2ServerApplication implements CommandLineRunner {
         //password 属性不能读取和修改
         FieldAccessEntity fieldAccessEntity = new FieldAccessEntity();
         fieldAccessEntity.setField("password");
-        fieldAccessEntity.setActions(ActionEntity.create(Permission.ACTION_QUERY, Permission.ACTION_UPDATE));
+        fieldAccessEntity.setActions(Arrays.asList(Permission.ACTION_QUERY, Permission.ACTION_UPDATE));
 
         PermissionEntity permission = entityFactory.newInstance(PermissionEntity.class);
         permission.setName("测试");

+ 5 - 5
hsweb-examples/hsweb-examples-simple/pom.xml

@@ -102,11 +102,11 @@
             <artifactId>hsweb-system-menu-starter</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.hswebframework.web</groupId>
-            <artifactId>hsweb-authorization-shiro</artifactId>
-            <version>${project.version}</version>
-        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>org.hswebframework.web</groupId>-->
+            <!--<artifactId>hsweb-authorization-shiro</artifactId>-->
+            <!--<version>${project.version}</version>-->
+        <!--</dependency>-->
         <dependency>
             <groupId>org.hswebframework.web</groupId>
             <artifactId>hsweb-system-oauth2-server-starter</artifactId>

+ 2 - 2
hsweb-examples/hsweb-examples-simple/src/main/java/org/hswebframework/web/example/simple/SpringBootExample.java

@@ -122,7 +122,7 @@ public class SpringBootExample implements CommandLineRunner {
     @Autowired
     EntityFactory     entityFactory;
     @Autowired
-    OAuth2ClientDao oAuth2ClientDao;
+    OAuth2ClientDao   oAuth2ClientDao;
 
     public static void main(String[] args) {
         SpringApplication.run(SpringBootExample.class);
@@ -150,7 +150,7 @@ public class SpringBootExample implements CommandLineRunner {
         //password 属性不能读取和修改
         FieldAccessEntity fieldAccessEntity = new FieldAccessEntity();
         fieldAccessEntity.setField("password");
-        fieldAccessEntity.setActions(ActionEntity.create(Permission.ACTION_QUERY, Permission.ACTION_UPDATE));
+        fieldAccessEntity.setActions(Arrays.asList(Permission.ACTION_QUERY, Permission.ACTION_UPDATE));
 
         PermissionEntity permission = entityFactory.newInstance(PermissionEntity.class);
         permission.setName("测试");

+ 4 - 1
hsweb-examples/hsweb-examples-simple/src/main/resources/application.yml

@@ -1,3 +1,4 @@
+
 spring:
     aop:
         auto: true
@@ -22,4 +23,6 @@ hsweb:
           -  source-base-package: org.hswebframework.web.entity.authorization
              target-base-package: org.hswebframework.web.entity.authorization
              mapping:
-                UserEntity: SimpleUserEntity
+                UserEntity: SimpleUserEntity
+server:
+  port: 8081

+ 6 - 4
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-entity/src/main/java/org/hswebframework/web/entity/authorization/FieldAccessEntity.java

@@ -2,7 +2,9 @@ package org.hswebframework.web.entity.authorization;
 
 import org.hswebframework.web.commons.entity.CloneableEntity;
 
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -17,7 +19,7 @@ public class FieldAccessEntity implements CloneableEntity {
 
     private String describe;
 
-    private List<ActionEntity> actions;
+    private List<String> actions;
 
     private boolean defaultCheck;
 
@@ -45,12 +47,12 @@ public class FieldAccessEntity implements CloneableEntity {
         this.defaultCheck = defaultCheck;
     }
 
-    public List<ActionEntity> getActions() {
+    public List<String> getActions() {
         if (actions == null) actions = Collections.emptyList();
         return actions;
     }
 
-    public void setActions(List<ActionEntity> actions) {
+    public void setActions(List<String> actions) {
         this.actions = actions;
     }
 
@@ -61,7 +63,7 @@ public class FieldAccessEntity implements CloneableEntity {
         target.setDescribe(getDescribe());
         target.setDefaultCheck(isDefaultCheck());
         if (actions != null) {
-            target.setActions(actions.stream().map(ActionEntity::clone).collect(Collectors.toList()));
+            target.setActions(new ArrayList<>(actions));
         }
         return target;
     }

+ 2 - 1
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-service/hsweb-system-authorization-service-simple/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthentication.java

@@ -43,6 +43,7 @@ public class SimpleAuthentication implements Authentication {
 
     public SimpleAuthentication() {
     }
+
     public SimpleAuthentication(UserEntity user,
                                 List<RoleEntity> roleEntities,
                                 List<PermissionRoleEntity> permissionRoleEntities,
@@ -193,7 +194,7 @@ public class SimpleAuthentication implements Authentication {
         public static SimpleFieldAccess of(FieldAccessEntity entity) {
             SimpleFieldAccess access = new SimpleFieldAccess();
             access.setField(entity.getField());
-            access.setActions(entity.getActions().stream().map(ActionEntity::getAction).collect(Collectors.toSet()));
+            access.setActions(new HashSet<>(entity.getActions()));
             return access;
         }
 

+ 12 - 0
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-api/src/main/java/org/hswebframework/web/service/dictionary/builder/DictionaryParserBuilder.java

@@ -0,0 +1,12 @@
+package org.hswebframework.web.service.dictionary.builder;
+
+import org.hswebframework.web.service.dictionary.parser.SingleDictParser;
+
+/**
+ * TODO 完成注释
+ *
+ * @author zhouhao
+ */
+public interface DictionaryParserBuilder {
+    SingleDictParser build(String config);
+}

+ 1 - 1
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/parser/SingleDictParser.java

@@ -1,4 +1,4 @@
-package org.hswebframework.web.service.dictionary.simple.parser;
+package org.hswebframework.web.service.dictionary.parser;
 
 import java.io.Serializable;
 import java.util.Optional;

+ 3 - 2
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/pom.xml

@@ -39,8 +39,9 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.hswebframework</groupId>
-            <artifactId>hsweb-expands-script</artifactId>
+            <groupId>org.hswebframework.web</groupId>
+            <artifactId>hsweb-commons-utils</artifactId>
+            <version>${project.version}</version>
         </dependency>
     </dependencies>
 </project>

+ 25 - 13
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/SimpleDictionaryParser.java

@@ -1,17 +1,12 @@
 package org.hswebframework.web.service.dictionary.simple;
 
-import org.hswebframework.web.ExpressionUtils;
 import org.hswebframework.web.entity.dictionary.DictionaryEntity;
 import org.hswebframework.web.entity.dictionary.DictionaryItemEntity;
 import org.hswebframework.web.service.dictionary.DictionaryParser;
 import org.hswebframework.web.service.dictionary.simple.parser.SimpleSingleDictParser;
-import org.hswebframework.web.service.dictionary.simple.parser.SingleDictParser;
+import org.hswebframework.web.service.dictionary.parser.SingleDictParser;
 
-import java.io.Serializable;
 import java.util.*;
-import java.util.function.Function;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
 
 /**
  * 简单的字典解析器实现,支持树形结构字典
@@ -42,32 +37,49 @@ import java.util.stream.Collectors;
  */
 public class SimpleDictionaryParser<V> implements DictionaryParser<V> {
 
-    private SimpleSingleDictParser toTextParser = new SimpleSingleDictParser();
+    private SingleDictParser toTextParser;
 
-    private SimpleSingleDictParser toValueParser = new SimpleSingleDictParser();
+    private SingleDictParser toValueParser;
 
-    public SimpleSingleDictParser getToTextParser() {
+    private Map<String, String> toTextExpressions = new HashMap<>();
+
+    private Map<String, String> toValueExpressions = new HashMap<>();
+
+    public SingleDictParser getToTextParser() {
         return toTextParser;
     }
 
-    public SimpleSingleDictParser getToValueParser() {
+    public SingleDictParser getToValueParser() {
         return toValueParser;
     }
 
+    public void setToTextParser(SingleDictParser toTextParser) {
+        this.toTextParser = toTextParser;
+    }
+
+    public void setToValueParser(SingleDictParser toValueParser) {
+        this.toValueParser = toValueParser;
+    }
+
     //设置DictionaryEntity作为配置
-    public void setDict(DictionaryEntity<? extends DictionaryItemEntity> dict) {
+    public SimpleDictionaryParser<V> setDict(DictionaryEntity<? extends DictionaryItemEntity> dict) {
+        SimpleSingleDictParser toTextParser = new SimpleSingleDictParser();
         toTextParser.setDict(dict, DictionaryItemEntity::getValue
                 , DictionaryItemEntity::getText
-                , DictionaryItemEntity::getTextExpression);
+                , item -> toTextExpressions.get(item.getId()));
 
+        SimpleSingleDictParser toValueParser = new SimpleSingleDictParser();
         toValueParser.setDict(dict, DictionaryItemEntity::getText
                 , DictionaryItemEntity::getValue,
-                DictionaryItemEntity::getValueExpression);
+                item -> toValueExpressions.get(item.getId()));
 
         toValueParser.getTargetFormat().setSplitter(",");
         toValueParser.getTargetFormat().setChildStartChar(",");
         toValueParser.getTargetFormat().setChildEndChar("");
         toValueParser.getTargetFormat().setChildSplitter(",");
+        this.setToTextParser(toTextParser);
+        this.setToValueParser(toValueParser);
+        return this;
     }
 
     @Override

+ 10 - 3
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/SimpleDictionaryParserService.java

@@ -24,6 +24,7 @@ import org.hswebframework.web.id.IDGenerator;
 import org.hswebframework.web.service.GenericEntityService;
 import org.hswebframework.web.service.dictionary.DictionaryParser;
 import org.hswebframework.web.service.dictionary.DictionaryParserService;
+import org.hswebframework.web.service.dictionary.builder.DictionaryParserBuilder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -38,6 +39,9 @@ public class SimpleDictionaryParserService extends GenericEntityService<Dictiona
     @Autowired
     private DictionaryParserDao dictionaryParserDao;
 
+    @Autowired
+    private DictionaryParserBuilder dictionaryParserBuilder;
+
     @Override
     protected IDGenerator<String> getIDGenerator() {
         return IDGenerator.MD5;
@@ -50,9 +54,12 @@ public class SimpleDictionaryParserService extends GenericEntityService<Dictiona
 
     @Override
     public <V> DictionaryParser<V> getParser(DictionaryEntity<? extends DictionaryItemEntity> dict, String parserId) {
-
-        // TODO: 17-3-9
-        return null;
+        DictionaryParserEntity entity = selectByPk(parserId);
+        assertNotNull(entity);
+        SimpleDictionaryParser<V> parser = new SimpleDictionaryParser<>();
+        parser.setToValueParser(dictionaryParserBuilder.build(entity.getTextToValueParser()));
+        parser.setToTextParser(dictionaryParserBuilder.build(entity.getValueToTextParser()));
+        return parser;
     }
 
 }

+ 31 - 0
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/builder/SimpleDictionaryParserBuilder.java

@@ -0,0 +1,31 @@
+package org.hswebframework.web.service.dictionary.simple.builder;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.hswebframework.web.service.dictionary.builder.DictionaryParserBuilder;
+import org.hswebframework.web.service.dictionary.parser.SingleDictParser;
+import org.hswebframework.web.service.dictionary.simple.parser.SimpleSingleDictParser;
+
+import java.util.Objects;
+
+/**
+ * TODO 完成注释
+ *
+ * @author zhouhao
+ */
+public class SimpleDictionaryParserBuilder implements DictionaryParserBuilder {
+    @Override
+    public SingleDictParser build(String config) {
+        Objects.requireNonNull(config, "config is null");
+        JSONObject object = JSON.parseObject(config);
+        String type = object.getString("type");
+        switch (type) {
+            case "simple":
+                return object.getObject("parser", SimpleSingleDictParser.class);
+            case "script":
+
+            default:
+                throw new UnsupportedOperationException(config);
+        }
+    }
+}

+ 39 - 0
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/parser/ScriptSingleDictParser.java

@@ -0,0 +1,39 @@
+package org.hswebframework.web.service.dictionary.simple.parser;
+
+import org.hswebframework.expands.script.engine.DynamicScriptEngine;
+import org.hswebframework.expands.script.engine.DynamicScriptEngineFactory;
+import org.hswebframework.web.ExpressionUtils;
+import org.hswebframework.web.service.dictionary.parser.SingleDictParser;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * TODO 完成注释
+ *
+ * @author zhouhao
+ */
+public class ScriptSingleDictParser implements SingleDictParser {
+    private String script;
+
+    private String language;
+
+    @Override
+    public Optional<String> parse(String target, Object context) {
+        Map<String, Object> vars = new HashMap<>();
+        vars.put("context", context);
+        DynamicScriptEngine engine = DynamicScriptEngineFactory.getEngine(language);
+        String scriptId = String.valueOf(script.hashCode());
+        try {
+            if (!engine.compiled(scriptId)) {
+                engine.compile(scriptId, language);
+            }
+            Object result = engine.execute(scriptId, vars).getIfSuccess();
+            if (result == null) return null;
+            return Optional.of(String.valueOf(result));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

+ 0 - 1
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/parser/SimpleDictParserFormatter.java

@@ -4,7 +4,6 @@ import org.hswebframework.web.RegexUtils;
 
 import java.util.*;
 import java.util.function.BiFunction;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**

+ 9 - 1
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/main/java/org/hswebframework/web/service/dictionary/simple/parser/SimpleSingleDictParser.java

@@ -3,10 +3,10 @@ package org.hswebframework.web.service.dictionary.simple.parser;
 import org.hswebframework.web.ExpressionUtils;
 import org.hswebframework.web.entity.dictionary.DictionaryEntity;
 import org.hswebframework.web.entity.dictionary.DictionaryItemEntity;
+import org.hswebframework.web.service.dictionary.parser.SingleDictParser;
 
 import java.io.Serializable;
 import java.util.*;
-import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
@@ -34,6 +34,14 @@ public class SimpleSingleDictParser implements SingleDictParser {
         dict.getItems().forEach(item -> addMapping(item, keyGetter, valueGetter, expressionGetter));
     }
 
+    public void setSourceFormat(DictParserFormat sourceFormat) {
+        this.sourceFormat = sourceFormat;
+    }
+
+    public void setTargetFormat(DictParserFormat targetFormat) {
+        this.targetFormat = targetFormat;
+    }
+
     public DictParserFormat getTargetFormat() {
         return targetFormat;
     }

+ 1 - 7
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-service/hsweb-system-dictionary-service-simple/src/test/java/org/hswebframework/web/starter/dictionary/DictionaryParserTests.java

@@ -40,11 +40,6 @@ public class DictionaryParserTests {
 
     @Before
     public void init() {
-        SimpleDictionaryParser<String> parser = new SimpleDictionaryParser<>();
-
-//        parser.getToTextParser().getTargetFormat().setSplitter("、");
-//        parser.getToValueParser().getSourceFormat().setSplitter("、");
-
         SimpleDictionaryEntity dictionaryEntity = new SimpleDictionaryEntity();
         String json = "[" +
                 "{'value':'1','text':'水果','children':" +
@@ -66,8 +61,7 @@ public class DictionaryParserTests {
 
         List<SimpleDictionaryItemEntity> itemEntities = JSON.parseArray(json, SimpleDictionaryItemEntity.class);
         dictionaryEntity.setItems(itemEntities);
-        parser.setDict(dictionaryEntity);
-        this.parser = parser;
+        this.parser = SimpleDictionaryParser.setDict(dictionaryEntity);
     }
 
     //支持表达式