You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2016/01/22 17:44:42 UTC

[3/5] syncope git commit: Fixing configuration set for mandatory schema

Fixing configuration set for mandatory schema


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/29726bb6
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/29726bb6
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/29726bb6

Branch: refs/heads/master
Commit: 29726bb6b8fc7d4e2564599e0f2d6ef2d99356ab
Parents: 8b5bfca
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jan 22 16:42:27 2016 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jan 22 16:44:04 2016 +0100

----------------------------------------------------------------------
 .../syncope/core/logic/ConfigurationLogic.java  |  2 +-
 .../api/data/ConfigurationDataBinder.java       |  3 +-
 .../java/data/ConfigurationDataBinderImpl.java  | 29 ++++++++++++++++++--
 .../fit/core/reference/ConfigurationITCase.java | 27 ++++++++++++++++--
 4 files changed, 52 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/29726bb6/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
index 4a7d4ca..5f2ef24 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
@@ -74,7 +74,7 @@ public class ConfigurationLogic extends AbstractTransactionalLogic<AttrTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.CONFIGURATION_LIST + "')")
     public List<AttrTO> list() {
-        return binder.getConfTO(confDAO.get());
+        return binder.getConfTO();
     }
 
     @PreAuthorize("isAuthenticated()")

http://git-wip-us.apache.org/repos/asf/syncope/blob/29726bb6/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConfigurationDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConfigurationDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConfigurationDataBinder.java
index 020a6ae..e62407f 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConfigurationDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConfigurationDataBinder.java
@@ -21,13 +21,12 @@ package org.apache.syncope.core.provisioning.api.data;
 import java.util.List;
 import org.apache.syncope.common.lib.to.AttrTO;
 import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
-import org.apache.syncope.core.persistence.api.entity.conf.Conf;
 
 public interface ConfigurationDataBinder {
 
     AttrTO getAttrTO(CPlainAttr attr);
 
-    List<AttrTO> getConfTO(Conf conf);
+    List<AttrTO> getConfTO();
 
     CPlainAttr getAttribute(AttrTO attributeTO);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/29726bb6/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConfigurationDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConfigurationDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConfigurationDataBinderImpl.java
index c0f0485..00935f7 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConfigurationDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConfigurationDataBinderImpl.java
@@ -22,10 +22,14 @@ import java.util.ArrayList;
 import org.apache.syncope.core.provisioning.api.data.ConfigurationDataBinder;
 import java.util.Collections;
 import java.util.List;
+import org.apache.commons.jexl3.JexlContext;
+import org.apache.commons.jexl3.MapContext;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.AttrTO;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
+import org.apache.syncope.core.misc.jexl.JexlUtils;
 import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidPlainAttrValueException;
+import org.apache.syncope.core.persistence.api.dao.ConfDAO;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrUniqueValue;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
@@ -33,16 +37,19 @@ import org.apache.syncope.core.persistence.api.entity.PlainSchema;
 import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
 import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttrUniqueValue;
 import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttrValue;
-import org.apache.syncope.core.persistence.api.entity.conf.Conf;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 @Component
 public class ConfigurationDataBinderImpl extends AbstractAnyDataBinder implements ConfigurationDataBinder {
 
+    @Autowired
+    private ConfDAO confDAO;
+
     @Override
-    public List<AttrTO> getConfTO(final Conf conf) {
+    public List<AttrTO> getConfTO() {
         final List<AttrTO> attrTOs = new ArrayList<>();
-        for (final CPlainAttr plainAttr : conf.getPlainAttrs()) {
+        for (final CPlainAttr plainAttr : confDAO.get().getPlainAttrs()) {
             final AttrTO attrTO = new AttrTO();
             attrTO.setSchema(plainAttr.getSchema().getKey());
             attrTO.getValues().addAll(plainAttr.getValuesAsStrings());
@@ -73,6 +80,22 @@ public class ConfigurationDataBinderImpl extends AbstractAnyDataBinder implement
                         ? Collections.<String>emptyList()
                         : Collections.singletonList(values.iterator().next()));
 
+        if (valuesProvided.isEmpty()) {
+            JexlContext jexlContext = new MapContext();
+            JexlUtils.addPlainAttrsToContext(confDAO.get().getPlainAttrs(), jexlContext);
+
+            if (!schema.isReadonly()
+                    && Boolean.parseBoolean(JexlUtils.evaluate(schema.getMandatoryCondition(), jexlContext))) {
+
+                LOG.error("Mandatory schema " + schema.getKey() + " not provided with values");
+
+                SyncopeClientException reqValMissing = SyncopeClientException.build(
+                        ClientExceptionType.RequiredValuesMissing);
+                reqValMissing.getElements().add(schema.getKey());
+                throw reqValMissing;
+            }
+        }
+
         for (String value : valuesProvided) {
             if (value == null || value.isEmpty()) {
                 LOG.debug("Null value for {}, ignoring", schema.getKey());

http://git-wip-us.apache.org/repos/asf/syncope/blob/29726bb6/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java
index 6bc000e..1fb3221 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java
@@ -55,10 +55,31 @@ public class ConfigurationITCase extends AbstractITCase {
         testKey.setType(AttrSchemaType.String);
         createSchema(SchemaType.PLAIN, testKey);
 
-        AttrTO conf = new AttrTO();
-        conf.setSchema(testKey.getKey());
-        conf.getValues().add("testValue");
+        AttrTO conf = new AttrTO.Builder().schema(testKey.getKey()).value("testValue").build();
+
+        configurationService.set(conf);
+
+        AttrTO actual = configurationService.get(conf.getSchema());
+        assertEquals(actual, conf);
+    }
 
+    @Test
+    public void createRequired() {
+        PlainSchemaTO testKey = new PlainSchemaTO();
+        testKey.setKey("testKey" + getUUIDString());
+        testKey.setType(AttrSchemaType.String);
+        testKey.setMandatoryCondition("true");
+        createSchema(SchemaType.PLAIN, testKey);
+
+        AttrTO conf = new AttrTO.Builder().schema(testKey.getKey()).build();
+        try {
+            configurationService.set(conf);
+            fail();
+        } catch (SyncopeClientException e) {
+            assertEquals(ClientExceptionType.RequiredValuesMissing, e.getType());
+        }
+
+        conf.getValues().add("testValue");
         configurationService.set(conf);
 
         AttrTO actual = configurationService.get(conf.getSchema());