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());