Keiichi Watanabe 9 vuotta sitten
vanhempi
commit
046b638600

+ 36 - 0
src/main/java/org/codelibs/fess/app/web/admin/searchlist/AdminSearchlistAction.java

@@ -248,6 +248,24 @@ public class AdminSearchlistAction extends FessAdminAction {
         if (!fessConfig.validateIndexRequiredFields(form.doc)) {
             throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
         }
+        if (!fessConfig.validateIndexArrayFields(form.doc)) {
+            throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
+        }
+        if (!fessConfig.validateIndexDateFields(form.doc)) {
+            throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
+        }
+        if (!fessConfig.validateIndexIntegerFields(form.doc)) {
+            throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
+        }
+        if (!fessConfig.validateIndexLongFields(form.doc)) {
+            throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
+        }
+        if (!fessConfig.validateIndexFloatFields(form.doc)) {
+            throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
+        }
+        if (!fessConfig.validateIndexDoubleFields(form.doc)) {
+            throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
+        }
         verifyToken(() -> asEditHtml());
         getDoc(form).ifPresent(
                 entity -> {
@@ -279,6 +297,24 @@ public class AdminSearchlistAction extends FessAdminAction {
         if (!fessConfig.validateIndexRequiredFields(form.doc)) {
             throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
         }
+        if (!fessConfig.validateIndexArrayFields(form.doc)) {
+            throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
+        }
+        if (!fessConfig.validateIndexDateFields(form.doc)) {
+            throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
+        }
+        if (!fessConfig.validateIndexIntegerFields(form.doc)) {
+            throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
+        }
+        if (!fessConfig.validateIndexLongFields(form.doc)) {
+            throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
+        }
+        if (!fessConfig.validateIndexFloatFields(form.doc)) {
+            throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
+        }
+        if (!fessConfig.validateIndexDoubleFields(form.doc)) {
+            throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
+        }
         verifyToken(() -> asEditHtml());
         getDoc(form).ifPresent(
                 entity -> {

+ 49 - 11
src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java

@@ -48,6 +48,11 @@ import org.lastaflute.job.LaJob;
 import org.lastaflute.job.subsidiary.ConcurrentExec;
 import org.lastaflute.web.util.LaRequestUtil;
 import org.lastaflute.web.validation.RequiredValidator;
+import org.lastaflute.web.validation.theme.typed.DoubleTypeValidator;
+import org.lastaflute.web.validation.theme.typed.FloatTypeValidator;
+import org.lastaflute.web.validation.theme.typed.IntegerTypeValidator;
+import org.lastaflute.web.validation.theme.typed.LocalDateTimeTypeValidator;
+import org.lastaflute.web.validation.theme.typed.LongTypeValidator;
 
 public interface FessProp {
 
@@ -1064,6 +1069,12 @@ public interface FessProp {
         return fieldSet;
     }
 
+    public default boolean validateIndexArrayFields(final Map<String, Object> source) {
+        return stream(getIndexAdminArrayFields().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
+                        .allMatch(s -> source.get(s) instanceof String[] || source.get(s) instanceof List));
+    }
+
     String getIndexAdminDateFields();
 
     public default Set<String> getIndexAdminDateFieldSet() {
@@ -1078,6 +1089,13 @@ public interface FessProp {
         return fieldSet;
     }
 
+    public default boolean validateIndexDateFields(final Map<String, Object> source) {
+        final LocalDateTimeTypeValidator dateValidator = new LocalDateTimeTypeValidator();
+        return stream(getIndexAdminDateFields().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
+                        .allMatch(s -> dateValidator.isValid((String) source.get(s), null)));
+    }
+
     String getIndexAdminIntegerFields();
 
     public default Set<String> getIndexAdminIntegerFieldSet() {
@@ -1092,6 +1110,13 @@ public interface FessProp {
         return fieldSet;
     }
 
+    public default boolean validateIndexIntegerFields(final Map<String, Object> source) {
+        final IntegerTypeValidator integerValidator = new IntegerTypeValidator();
+        return stream(getIndexAdminIntegerFields().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
+                        .allMatch(s -> integerValidator.isValid((String) source.get(s), null)));
+    }
+
     String getIndexAdminLongFields();
 
     public default Set<String> getIndexAdminLongFieldSet() {
@@ -1106,6 +1131,13 @@ public interface FessProp {
         return fieldSet;
     }
 
+    public default boolean validateIndexLongFields(final Map<String, Object> source) {
+        final LongTypeValidator longValidator = new LongTypeValidator();
+        return stream(getIndexAdminLongFields().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
+                        .allMatch(s -> longValidator.isValid((String) source.get(s), null)));
+    }
+
     String getIndexAdminFloatFields();
 
     public default Set<String> getIndexAdminFloatFieldSet() {
@@ -1120,6 +1152,13 @@ public interface FessProp {
         return fieldSet;
     }
 
+    public default boolean validateIndexFloatFields(final Map<String, Object> source) {
+        final FloatTypeValidator floatValidator = new FloatTypeValidator();
+        return stream(getIndexAdminFloatFields().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
+                        .allMatch(s -> floatValidator.isValid((String) source.get(s), null)));
+    }
+
     String getIndexAdminDoubleFields();
 
     public default Set<String> getIndexAdminDoubleFieldSet() {
@@ -1134,6 +1173,13 @@ public interface FessProp {
         return fieldSet;
     }
 
+    public default boolean validateIndexDoubleFields(final Map<String, Object> source) {
+        final DoubleTypeValidator doubleValidator = new DoubleTypeValidator();
+        return stream(getIndexAdminDoubleFields().split(",")).get(
+                stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
+                        .allMatch(s -> doubleValidator.isValid((String) source.get(s), null)));
+    }
+
     public default Map<String, Object> convertToEditableDoc(final Map<String, Object> source) {
 
         final Set<String> arrayFieldSet = getIndexAdminArrayFieldSet();
@@ -1174,6 +1220,7 @@ public interface FessProp {
 
     public default Map<String, Object> convertToStorableDoc(final Map<String, Object> source) {
 
+        final RequiredValidator requiredValidator = new RequiredValidator();
         final Set<String> arrayFieldSet = getIndexAdminArrayFieldSet();
         final Set<String> dateFieldSet = getIndexAdminDateFieldSet();
         final Set<String> integerFieldSet = getIndexAdminIntegerFieldSet();
@@ -1184,7 +1231,7 @@ public interface FessProp {
         return source
                 .entrySet()
                 .stream()
-                .filter(e -> isNonEmptyValue(e.getValue()))
+                .filter(e -> requiredValidator.isValid(e.getValue(), null))
                 .map(e -> {
                     final String key = e.getKey();
                     Object value = e.getValue();
@@ -1207,7 +1254,7 @@ public interface FessProp {
                     return new Pair<String, Object>(key, value);
                 }).collect(Collectors.toMap(Pair::getFirst, Pair::getSecond));
     }
-
+    
     String getIndexAdminRequiredFields();
 
     public default boolean validateIndexRequiredFields(final Map<String, Object> source) {
@@ -1217,13 +1264,4 @@ public interface FessProp {
                         .allMatch(s -> requiredValidator.isValid(source.get(s), null)));
     }
 
-    public static boolean isNonEmptyValue(final Object value) {
-        if (value == null) {
-            return false;
-        }
-        if (value instanceof String && StringUtil.isEmpty((String) value)) {
-            return false;
-        }
-        return true;
-    }
 }