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/09/20 11:23:59 UTC
[1/2] syncope git commit: [SYNCOPE-948] Improvement provided
Repository: syncope
Updated Branches:
refs/heads/2_0_X 3be11e82b -> 95d4b15ae
refs/heads/master 228bf3ed5 -> 84cb7fb4f
[SYNCOPE-948] Improvement provided
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/95d4b15a
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/95d4b15a
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/95d4b15a
Branch: refs/heads/2_0_X
Commit: 95d4b15aeada2816c7fc44b54c83926f0d9634ea
Parents: 3be11e8
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Sep 20 13:21:18 2016 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Sep 20 13:23:10 2016 +0200
----------------------------------------------------------------------
.../anyobject/AnyObjectResultManager.java | 3 --
.../cli/commands/group/GroupResultManager.java | 3 --
.../cli/commands/user/UserResultManager.java | 3 --
.../client/console/wizards/any/PlainAttrs.java | 12 ++---
.../client/console/wizards/any/VirAttrs.java | 12 +++--
.../syncope/common/lib/AnyOperations.java | 7 ++-
.../apache/syncope/common/lib/to/AttrTO.java | 27 ++++++-----
.../syncope/common/lib/AnyOperationsTest.java | 51 ++++++++++++++++++++
.../syncope/core/logic/ConfigurationLogic.java | 2 +-
.../core/logic/report/XSLTTransformer.java | 2 +-
.../test/resources/domains/MasterContent.xml | 10 ++--
.../api/data/ConfigurationDataBinder.java | 2 +-
.../java/data/AbstractAnyDataBinder.java | 50 +++++++++++--------
.../java/data/AnyObjectDataBinderImpl.java | 3 +-
.../java/data/ConfigurationDataBinderImpl.java | 35 ++++++--------
.../java/data/GroupDataBinderImpl.java | 10 +++-
.../java/data/UserDataBinderImpl.java | 3 +-
.../syncope/fit/core/AnyObjectITCase.java | 2 +
.../syncope/fit/core/ConfigurationITCase.java | 2 +
19 files changed, 154 insertions(+), 85 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectResultManager.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectResultManager.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectResultManager.java
index a107239..1e2c3e6 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectResultManager.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectResultManager.java
@@ -68,9 +68,6 @@ public class AnyObjectResultManager extends CommonsResultManager {
.append(attribute.getSchema())
.append(": ")
.append(attribute.getValues());
- if (attribute.isReadonly()) {
- attributeMessageBuilder.append(" - is readonly");
- }
System.out.println(attributeMessageBuilder.toString());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupResultManager.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupResultManager.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupResultManager.java
index db4796d..da4c349 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupResultManager.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupResultManager.java
@@ -71,9 +71,6 @@ public class GroupResultManager extends CommonsResultManager {
.append(attribute.getSchema())
.append(": ")
.append(attribute.getValues());
- if (attribute.isReadonly()) {
- attributeMessageBuilder.append(" - is readonly");
- }
System.out.println(attributeMessageBuilder.toString());
System.out.println("");
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java
index 2c479a4..4a1111a 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java
@@ -88,9 +88,6 @@ public class UserResultManager extends CommonsResultManager {
.append(attrTO.getSchema())
.append(": ")
.append(attrTO.getValues());
- if (attrTO.isReadonly()) {
- attributeSentence.append(" - is readonly.");
- }
System.out.println(attributeSentence);
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
index c5c2f0c..96d9273 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
@@ -106,7 +106,7 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
return new PlainSchemas(
panelId,
membershipSchemas.get(membershipTO.getGroupKey()),
- new ListModel<AttrTO>(getAttrsFromTO(membershipTO)));
+ new ListModel<>(getAttrsFromTO(membershipTO)));
}
}), Model.of(-1)).setOutputMarkupId(true));
}
@@ -150,8 +150,8 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
if (attrMap.get(schema.getKey()) == null || attrMap.get(schema.getKey()).getValues().isEmpty()) {
attrTO.getValues().add("");
- // is important to set readonly only after values setting
- attrTO.setReadonly(schema.isReadonly());
+ // is important to set the schema info only after values setting
+ attrTO.setSchemaInfo(schema);
} else {
attrTO.getValues().addAll(attrMap.get(schema.getKey()).getValues());
}
@@ -175,8 +175,8 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
if (attrMap.get(schema.getKey()) == null || attrMap.get(schema.getKey()).getValues().isEmpty()) {
attrTO.getValues().add("");
- // is important to set readonly only after values setting
- attrTO.setReadonly(schema.isReadonly());
+ // is important to set the schema info only after values setting
+ attrTO.setSchemaInfo(schema);
} else {
attrTO.getValues().addAll(attrMap.get(schema.getKey()).getValues());
}
@@ -232,7 +232,7 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
break;
case Enum:
- panel = new AjaxDropDownChoicePanel<>("panel", schemaTO.getKey(), new Model<String>(), false);
+ panel = new AjaxDropDownChoicePanel<>("panel", schemaTO.getKey(), new Model<>(), false);
((AjaxDropDownChoicePanel<String>) panel).setChoices(SchemaUtils.getEnumeratedValues(schemaTO));
if (StringUtils.isNotBlank(schemaTO.getEnumerationKeys())) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
index 27bc7f3..b3432f8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
@@ -175,19 +175,21 @@ public class VirAttrs extends AbstractAttrs<VirSchemaTO> {
protected void populateItem(final ListItem<AttrTO> item) {
AttrTO attrTO = item.getModelObject();
- attrTO.setReadonly(attrTO.isReadonly());
+ AjaxTextFieldPanel panel =
+ new AjaxTextFieldPanel("panel", attrTO.getSchema(), new Model<String>(), false);
- final AjaxTextFieldPanel panel
- = new AjaxTextFieldPanel("panel", attrTO.getSchema(), new Model<String>(), false);
+ boolean readonly = attrTO.getSchemaInfo() == null
+ ? false
+ : VirSchemaTO.class.cast(attrTO.getSchemaInfo()).isReadonly();
if (mode == AjaxWizard.Mode.TEMPLATE) {
- item.add(panel.enableJexlHelp().setEnabled(!attrTO.isReadonly()));
+ item.add(panel.enableJexlHelp().setEnabled(!readonly));
} else {
item.add(new MultiFieldPanel.Builder<>(
new PropertyModel<List<String>>(attrTO, "values")).build(
"panel",
attrTO.getSchema(),
- panel).setEnabled(!attrTO.isReadonly()));
+ panel).setEnabled(!readonly));
}
}
});
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
index 2d3f8f9..b4cc329 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
@@ -186,8 +186,11 @@ public final class AnyOperations {
attrTO(new AttrTO.Builder().schema(attrTO.getSchema()).build()).
build());
}
- } else {
- AttrPatch patch = new AttrPatch.Builder().operation(PatchOperation.ADD_REPLACE).attrTO(attrTO).build();
+ } else if (!originalAttrs.containsKey(attrTO.getSchema())
+ || !originalAttrs.get(attrTO.getSchema()).getValues().equals(attrTO.getValues())) {
+
+ AttrPatch patch = new AttrPatch.Builder().operation(PatchOperation.ADD_REPLACE).attrTO(attrTO).
+ build();
if (!patch.isEmpty()) {
result.getPlainAttrs().add(patch);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java
index 65a6b51..7822a6b 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java
@@ -45,8 +45,8 @@ public class AttrTO extends AbstractBaseBean {
return this;
}
- public Builder readonly(final boolean readonly) {
- instance.setReadonly(readonly);
+ public Builder schemaInfo(final AbstractSchemaTO schemaInfo) {
+ instance.schemaInfo = schemaInfo;
return this;
}
@@ -71,6 +71,11 @@ public class AttrTO extends AbstractBaseBean {
}
/**
+ * (Optional) schema information for this attribute.
+ */
+ private AbstractSchemaTO schemaInfo;
+
+ /**
* Name of the schema that this attribute is referring to.
*/
private String schema;
@@ -81,9 +86,15 @@ public class AttrTO extends AbstractBaseBean {
private final List<String> values = new ArrayList<>();
/**
- * Whether this attribute is read-only or not.
+ * @return schema information for this attribute; may be {@code NULL}
*/
- private boolean readonly = false;
+ public AbstractSchemaTO getSchemaInfo() {
+ return schemaInfo;
+ }
+
+ public void setSchemaInfo(final AbstractSchemaTO schemaInfo) {
+ this.schemaInfo = schemaInfo;
+ }
/**
* @return the name of the schema that this attribute is referring to
@@ -110,12 +121,4 @@ public class AttrTO extends AbstractBaseBean {
public List<String> getValues() {
return values;
}
-
- public boolean isReadonly() {
- return readonly;
- }
-
- public void setReadonly(final boolean readonly) {
- this.readonly = readonly;
- }
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/common/lib/src/test/java/org/apache/syncope/common/lib/AnyOperationsTest.java
----------------------------------------------------------------------
diff --git a/common/lib/src/test/java/org/apache/syncope/common/lib/AnyOperationsTest.java b/common/lib/src/test/java/org/apache/syncope/common/lib/AnyOperationsTest.java
new file mode 100644
index 0000000..51b6423
--- /dev/null
+++ b/common/lib/src/test/java/org/apache/syncope/common/lib/AnyOperationsTest.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.syncope.common.lib.patch.AnyObjectPatch;
+import org.apache.syncope.common.lib.patch.AttrPatch;
+import org.apache.syncope.common.lib.to.AnyObjectTO;
+import org.apache.syncope.common.lib.to.AttrTO;
+import org.apache.syncope.common.lib.types.PatchOperation;
+import org.junit.Test;
+
+public class AnyOperationsTest {
+
+ @Test
+ public void mindiff() {
+ AnyObjectTO oldOne = new AnyObjectTO();
+ oldOne.setName("name");
+ oldOne.getPlainAttrs().add(new AttrTO.Builder().schema("plain").value("oldValue").build());
+ oldOne.getPlainAttrs().add(new AttrTO.Builder().schema("encrypted").value("oldValue").build());
+
+ AnyObjectTO newOne = new AnyObjectTO();
+ newOne.setName("name");
+ newOne.getPlainAttrs().add(new AttrTO.Builder().schema("plain").value("newValue").build());
+ newOne.getPlainAttrs().add(new AttrTO.Builder().schema("encrypted").value("oldValue").build());
+
+ AnyObjectPatch diff = AnyOperations.diff(newOne, oldOne, true);
+ assertEquals(1, diff.getPlainAttrs().size());
+
+ AttrPatch patch = diff.getPlainAttrs().iterator().next();
+ assertEquals(PatchOperation.ADD_REPLACE, patch.getOperation());
+ assertEquals("plain", patch.getAttrTO().getSchema());
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/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 b6c31b4..200cc7a 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
@@ -103,7 +103,7 @@ public class ConfigurationLogic extends AbstractTransactionalLogic<AttrTO> {
@PreAuthorize("hasRole('" + StandardEntitlement.CONFIGURATION_SET + "')")
public void set(final AttrTO value) {
- confDAO.save(binder.getAttribute(value));
+ confDAO.save(binder.getAttr(value));
}
@PreAuthorize("hasRole('" + StandardEntitlement.CONFIGURATION_EXPORT + "')")
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/core/logic/src/main/java/org/apache/syncope/core/logic/report/XSLTTransformer.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/report/XSLTTransformer.java b/core/logic/src/main/java/org/apache/syncope/core/logic/report/XSLTTransformer.java
index 91ecb92..3dd6d78 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/report/XSLTTransformer.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/report/XSLTTransformer.java
@@ -132,7 +132,7 @@ public class XSLTTransformer extends AbstractSAXTransformer implements CachingPi
if (parameters == null) {
this.parameters = null;
} else {
- this.parameters = new HashMap<>(parameters);
+ this.parameters = new HashMap<String, Object>(parameters);
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index 123da30..40a2e63 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -1055,7 +1055,7 @@ under the License.
pullMode="INCREMENTAL" unmatchingRule="ASSIGN" matchingRule="UPDATE" active="1"/>
<AnyTemplatePullTask id="3a6173a9-8c34-4e37-b3b1-0c2ea385fac0"
pullTask_id="c41b9b71-9bfa-4f90-89f2-84787def4c5c" anyType_id="USER"
- template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":["csv"],"derAttrs":[{"schema":"cn","readonly":false,"values":[""]}],"virAttrs":[],"resources":["resource-testdb"],"relationships":[],"memberships":[{"rightType":"GROUP","rightKey":"f779c0d4-633b-4be5-8f57-32eb478a3ca5","groupName":null}],"dynGroups":[],"roles":[],"dynRoles":[],"plainAttrs":[{"schema":"ctype","readonly":false,"values":["email == 'test8@syncope.apache.org'? 'TYPE_8': 'TYPE_OTHER'"]}]}'/>
+ template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":["csv"],"derAttrs":[{"schema":"cn","values":[""]}],"virAttrs":[],"resources":["resource-testdb"],"relationships":[],"memberships":[{"rightType":"GROUP","rightKey":"f779c0d4-633b-4be5-8f57-32eb478a3ca5","groupName":null}],"dynGroups":[],"roles":[],"dynRoles":[],"plainAttrs":[{"schema":"ctype","values":["email == 'test8@syncope.apache.org'? 'TYPE_8': 'TYPE_OTHER'"]}]}'/>
<AnyTemplatePullTask id="b3772d66-ec06-4133-bf38-b3273845ac5b"
pullTask_id="c41b9b71-9bfa-4f90-89f2-84787def4c5c" anyType_id="GROUP"
template='{"@class":"org.apache.syncope.common.lib.to.GroupTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"GROUP","realm":null,"status":null,"name":null,"userOwner":null,"groupOwner":null,"udynMembershipCond":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"plainAttrs":[]}'/>
@@ -1071,7 +1071,7 @@ under the License.
destinationRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="0" syncStatus="1" pullMode="FULL_RECONCILIATION"
unmatchingRule="PROVISION" matchingRule="UPDATE" active="1"/>
<AnyTemplatePullTask id="6c3f578d-327b-4a7c-8037-6f5ba24eb770" pullTask_id="83f7e85d-9774-43fe-adba-ccd856312994" anyType_id="USER"
- template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"relationships":[],"memberships":[],"dynGroups":[],"roles":[],"dynRoles":[],"plainAttrs":[{"schema":"ctype","readonly":false,"values":["'type a'"]},{"schema":"userId","readonly":false,"values":["'reconciled@syncope.apache.org'"]},{"schema":"fullname","readonly":false,"values":["'reconciled fullname'"]},{"schema":"surname","readonly":false,"values":["'surname'"]}]}'/>
+ template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"relationships":[],"memberships":[],"dynGroups":[],"roles":[],"dynRoles":[],"plainAttrs":[{"schema":"ctype","values":["'type a'"]},{"schema":"userId","values":["'reconciled@syncope.apache.org'"]},{"schema":"fullname","values":["'reconciled fullname'"]},{"schema":"surname","values":["'surname'"]}]}'/>
<AnyTemplatePullTask id="45b61137-c7c3-49ee-86e0-9efffa75ae68" pullTask_id="83f7e85d-9774-43fe-adba-ccd856312994" anyType_id="GROUP"
template='{"@class":"org.apache.syncope.common.lib.to.GroupTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"GROUP","realm":null,"status":null,"name":null,"userOwner":null,"groupOwner":null,"udynMembershipCond":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"plainAttrs":[]}'/>
<Task DTYPE="PullTask" id="81d88f73-d474-4450-9031-605daa4e313f" name="TestDB2 Task" resource_id="resource-testdb2"
@@ -1084,9 +1084,9 @@ under the License.
destinationRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" pullMode="FULL_RECONCILIATION" performCreate="1" performDelete="1" performUpdate="1" syncStatus="0"
unmatchingRule="PROVISION" matchingRule="UPDATE" active="1"/>
<AnyTemplatePullTask id="df655a2a-40c0-43b1-a157-3f4988802f58" pullTask_id="1e419ca4-ea81-4493-a14f-28b90113686d" anyType_id="USER"
- template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":"'/' + title","status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":["minimal group"],"derAttrs":[],"virAttrs":[{"schema":"virtualReadOnly","readonly":true,"values":[""]}],"resources":["resource-ldap"],"roles":[],"dynRoles":[],"relationships":[],"memberships":[],"dynGroups":[],"plainAttrs":[]}'/>
+ template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":"'/' + title","status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":["minimal group"],"derAttrs":[],"virAttrs":[{"schema":"virtualReadOnly","values":[""]}],"resources":["resource-ldap"],"roles":[],"dynRoles":[],"relationships":[],"memberships":[],"dynGroups":[],"plainAttrs":[]}'/>
<AnyTemplatePullTask id="fda22ff3-98f3-42e4-a2ae-cd9a28282d57" pullTask_id="1e419ca4-ea81-4493-a14f-28b90113686d" anyType_id="GROUP"
- template='{"@class":"org.apache.syncope.common.lib.to.GroupTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"GROUP","realm":null,"status":null,"name":null,"userOwner":null,"groupOwner":null,"udynMembershipCond":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"plainAttrs":[{"schema":"show","readonly":false,"values":["true"]}]}'/>
+ template='{"@class":"org.apache.syncope.common.lib.to.GroupTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"GROUP","realm":null,"status":null,"name":null,"userOwner":null,"groupOwner":null,"udynMembershipCond":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"plainAttrs":[{"schema":"show","values":["true"]}]}'/>
<PullTask_actionsClassNames pullTask_id="1e419ca4-ea81-4493-a14f-28b90113686d" actionClassName="org.apache.syncope.core.provisioning.java.pushpull.LDAPMembershipPullActions"/>
<Task DTYPE="PullTask" id="38abbf9e-a1a3-40a1-a15f-7d0ac02f47f1" name="VirAttrCache test" resource_id="resource-csv"
destinationRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="0" performUpdate="1" performDelete="0" syncStatus="0" pullMode="FULL_RECONCILIATION"
@@ -1150,7 +1150,7 @@ under the License.
destinationRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" pullMode="INCREMENTAL"
unmatchingRule="PROVISION" matchingRule="UPDATE" active="1"/>
<AnyTemplatePullTask id="8bc41ba1-cc1d-4ee0-bb43-61cd148b414f" pullTask_id="986867e2-993b-430e-8feb-aa9abb4c1dcd" anyType_id="USER"
- template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":["resource-testdb"],"roles":[],"dynRoles":[],"relationships":[],"memberships":[],"dynGroups":[],"plainAttrs":[{"schema":"firstname","readonly":false,"values":[""]},{"schema":"userId","readonly":false,"values":["'test'"]},{"schema":"fullname","readonly":false,"values":["'test'"]},{"schema":"surname","readonly":false,"values":["'test'"]}]}'/>
+ template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":["resource-testdb"],"roles":[],"dynRoles":[],"relationships":[],"memberships":[],"dynGroups":[],"plainAttrs":[{"schema":"firstname","values":[""]},{"schema":"userId","values":["'test'"]},{"schema":"fullname","values":["'test'"]},{"schema":"surname","values":["'test'"]}]}'/>
<AnyTemplatePullTask id="9af0e343-8a37-42d2-9bc7-6e2e3b103219" pullTask_id="986867e2-993b-430e-8feb-aa9abb4c1dcd" anyType_id="GROUP"
template='{"@class":"org.apache.syncope.common.lib.to.GroupTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"GROUP","realm":null,"status":null,"name":null,"userOwner":null,"groupOwner":null,"udynMembershipCond":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"plainAttrs":[]}'/>
<Task DTYPE="PullTask" id="feae4e57-15ca-40d9-b973-8b9015efca49" name="CSV (unlink matching; ignore unmatching)" resource_id="resource-csv"
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/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 e62407f..0956d24 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
@@ -28,6 +28,6 @@ public interface ConfigurationDataBinder {
List<AttrTO> getConfTO();
- CPlainAttr getAttribute(AttrTO attributeTO);
+ CPlainAttr getAttr(AttrTO attrTO);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
index 167ced4..0bb5e25 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
@@ -89,6 +89,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.apache.syncope.core.persistence.api.entity.GroupableRelatable;
import org.apache.syncope.core.provisioning.java.IntAttrNameParser;
import org.apache.syncope.core.provisioning.api.IntAttrName;
+import org.apache.syncope.core.provisioning.api.data.SchemaDataBinder;
import org.apache.syncope.core.provisioning.java.utils.MappingUtils;
abstract class AbstractAnyDataBinder {
@@ -96,6 +97,9 @@ abstract class AbstractAnyDataBinder {
protected static final Logger LOG = LoggerFactory.getLogger(AbstractAnyDataBinder.class);
@Autowired
+ protected SchemaDataBinder schemaDataBinder;
+
+ @Autowired
protected RealmDAO realmDAO;
@Autowired
@@ -198,8 +202,8 @@ abstract class AbstractAnyDataBinder {
List<String> valuesProvided = schema.isMultivalue()
? values
: (values.isEmpty()
- ? Collections.<String>emptyList()
- : Collections.singletonList(values.iterator().next()));
+ ? Collections.<String>emptyList()
+ : Collections.singletonList(values.iterator().next()));
for (String value : valuesProvided) {
if (StringUtils.isBlank(value)) {
@@ -549,40 +553,48 @@ abstract class AbstractAnyDataBinder {
}
}
- protected void fillTO(final AnyTO anyTO,
+ protected void fillTO(
+ final AnyTO anyTO,
final String realmFullPath,
final Collection<? extends AnyTypeClass> auxClasses,
final Collection<? extends PlainAttr<?>> plainAttrs,
final Map<DerSchema, String> derAttrs,
final Map<VirSchema, List<String>> virAttrs,
- final Collection<? extends ExternalResource> resources) {
+ final Collection<? extends ExternalResource> resources,
+ final boolean details) {
anyTO.setRealm(realmFullPath);
CollectionUtils.collect(auxClasses, EntityUtils.<AnyTypeClass>keyTransformer(), anyTO.getAuxClasses());
for (PlainAttr<?> plainAttr : plainAttrs) {
- anyTO.getPlainAttrs().add(new AttrTO.Builder().
+ AttrTO.Builder attrTOBuilder = new AttrTO.Builder().
schema(plainAttr.getSchema().getKey()).
- values(plainAttr.getValuesAsStrings()).
- readonly(plainAttr.getSchema().isReadonly()).
- build());
+ values(plainAttr.getValuesAsStrings());
+ if (details) {
+ attrTOBuilder.schemaInfo(schemaDataBinder.getPlainSchemaTO(plainAttr.getSchema()));
+ }
+ anyTO.getPlainAttrs().add(attrTOBuilder.build());
}
for (Map.Entry<DerSchema, String> entry : derAttrs.entrySet()) {
- anyTO.getDerAttrs().add(new AttrTO.Builder().
+ AttrTO.Builder attrTOBuilder = new AttrTO.Builder().
schema(entry.getKey().getKey()).
- value(entry.getValue()).
- readonly(true).
- build());
+ value(entry.getValue());
+ if (details) {
+ attrTOBuilder.schemaInfo(schemaDataBinder.getDerSchemaTO(entry.getKey()));
+ }
+ anyTO.getDerAttrs().add(attrTOBuilder.build());
}
for (Map.Entry<VirSchema, List<String>> entry : virAttrs.entrySet()) {
- anyTO.getVirAttrs().add(new AttrTO.Builder().
+ AttrTO.Builder attrTOBuilder = new AttrTO.Builder().
schema(entry.getKey().getKey()).
- values(entry.getValue()).
- readonly(entry.getKey().isReadonly()).
- build());
+ values(entry.getValue());
+ if (details) {
+ attrTOBuilder.schemaInfo(schemaDataBinder.getVirSchemaTO(entry.getKey()));
+ }
+ anyTO.getVirAttrs().add(attrTOBuilder.build());
}
for (ExternalResource resource : resources) {
@@ -611,7 +623,7 @@ abstract class AbstractAnyDataBinder {
membershipTO.getPlainAttrs().add(new AttrTO.Builder().
schema(plainAttr.getSchema().getKey()).
values(plainAttr.getValuesAsStrings()).
- readonly(plainAttr.getSchema().isReadonly()).
+ schemaInfo(schemaDataBinder.getPlainSchemaTO(plainAttr.getSchema())).
build());
}
@@ -619,7 +631,7 @@ abstract class AbstractAnyDataBinder {
membershipTO.getDerAttrs().add(new AttrTO.Builder().
schema(entry.getKey().getKey()).
value(entry.getValue()).
- readonly(true).
+ schemaInfo(schemaDataBinder.getDerSchemaTO(entry.getKey())).
build());
}
@@ -627,7 +639,7 @@ abstract class AbstractAnyDataBinder {
membershipTO.getVirAttrs().add(new AttrTO.Builder().
schema(entry.getKey().getKey()).
values(entry.getValue()).
- readonly(entry.getKey().isReadonly()).
+ schemaInfo(schemaDataBinder.getVirSchemaTO(entry.getKey())).
build());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
index a998a66..677bf81 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
@@ -97,7 +97,8 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
anyObject.getPlainAttrs(),
derAttrHandler.getValues(anyObject),
virAttrValues,
- anyObjectDAO.findAllResources(anyObject));
+ anyObjectDAO.findAllResources(anyObject),
+ details);
if (details) {
// relationships
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/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 5d277b3..56b0b92 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
@@ -48,28 +48,23 @@ public class ConfigurationDataBinderImpl extends AbstractAnyDataBinder implement
@Override
public List<AttrTO> getConfTO() {
- final List<AttrTO> attrTOs = new ArrayList<>();
- for (final CPlainAttr plainAttr : confDAO.get().getPlainAttrs()) {
- final AttrTO attrTO = new AttrTO();
- attrTO.setSchema(plainAttr.getSchema().getKey());
- attrTO.getValues().addAll(plainAttr.getValuesAsStrings());
- attrTO.setReadonly(plainAttr.getSchema().isReadonly());
- attrTOs.add(attrTO);
+ List<AttrTO> attrTOs = new ArrayList<>();
+ for (CPlainAttr attr : confDAO.get().getPlainAttrs()) {
+ attrTOs.add(getAttrTO(attr));
}
return attrTOs;
}
@Override
public AttrTO getAttrTO(final CPlainAttr attr) {
- AttrTO attributeTO = new AttrTO();
- attributeTO.setSchema(attr.getSchema().getKey());
- attributeTO.getValues().addAll(attr.getValuesAsStrings());
- attributeTO.setReadonly(attr.getSchema().isReadonly());
-
- return attributeTO;
+ return new AttrTO.Builder().
+ schemaInfo(schemaDataBinder.getPlainSchemaTO(attr.getSchema())).
+ schema(attr.getSchema().getKey()).
+ values(attr.getValuesAsStrings()).
+ build();
}
- private void fillAttribute(final List<String> values,
+ private void fillAttr(final List<String> values,
final PlainSchema schema, final CPlainAttr attr, final SyncopeClientException invalidValues) {
// if schema is multivalue, all values are considered for addition;
@@ -77,8 +72,8 @@ public class ConfigurationDataBinderImpl extends AbstractAnyDataBinder implement
List<String> valuesProvided = schema.isMultivalue()
? values
: (values.isEmpty()
- ? Collections.<String>emptyList()
- : Collections.singletonList(values.iterator().next()));
+ ? Collections.<String>emptyList()
+ : Collections.singletonList(values.iterator().next()));
if (valuesProvided.isEmpty()) {
JexlContext jexlContext = new MapContext();
@@ -120,16 +115,16 @@ public class ConfigurationDataBinderImpl extends AbstractAnyDataBinder implement
}
@Override
- public CPlainAttr getAttribute(final AttrTO attributeTO) {
- PlainSchema schema = getPlainSchema(attributeTO.getSchema());
+ public CPlainAttr getAttr(final AttrTO attrTO) {
+ PlainSchema schema = getPlainSchema(attrTO.getSchema());
if (schema == null) {
- throw new NotFoundException("Conf schema " + attributeTO.getSchema());
+ throw new NotFoundException("Conf schema " + attrTO.getSchema());
} else {
SyncopeClientException invalidValues = SyncopeClientException.build(ClientExceptionType.InvalidValues);
CPlainAttr attr = entityFactory.newEntity(CPlainAttr.class);
attr.setSchema(schema);
- fillAttribute(attributeTO.getValues(), schema, attr, invalidValues);
+ fillAttr(attrTO.getValues(), schema, attr, invalidValues);
if (!invalidValues.isEmpty()) {
throw invalidValues;
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
index c7ab1b1..d0d751a 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
@@ -332,8 +332,14 @@ public class GroupDataBinderImpl extends AbstractAnyDataBinder implements GroupD
Map<VirSchema, List<String>> virAttrValues = details
? virAttrHandler.getValues(group)
: Collections.<VirSchema, List<String>>emptyMap();
- fillTO(groupTO, group.getRealm().getFullPath(), group.getAuxClasses(),
- group.getPlainAttrs(), derAttrValues, virAttrValues, group.getResources());
+ fillTO(groupTO,
+ group.getRealm().getFullPath(),
+ group.getAuxClasses(),
+ group.getPlainAttrs(),
+ derAttrValues,
+ virAttrValues,
+ group.getResources(),
+ details);
if (group.getUDynMembership() != null) {
groupTO.setUDynMembershipCond(group.getUDynMembership().getFIQLCond());
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index 5816820..4437713 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -570,7 +570,8 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
user.getPlainAttrs(),
derAttrHandler.getValues(user),
virAttrValues,
- userDAO.findAllResources(user));
+ userDAO.findAllResources(user),
+ details);
if (details) {
// roles
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java
index b4aaf2e..95325a9 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java
@@ -180,6 +180,8 @@ public class AnyObjectITCase extends AbstractITCase {
anyObjectService.update(anyObjectTO.getKey(), SchemaType.PLAIN, updated);
AttrTO location = anyObjectService.read(anyObjectTO.getKey(), SchemaType.PLAIN, "location");
+ // need to remove schemaInfo which is included when reading the any object
+ location.setSchemaInfo(null);
assertEquals(updated, location);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/95d4b15a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConfigurationITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConfigurationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConfigurationITCase.java
index d1780e7..d2d9b64 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConfigurationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConfigurationITCase.java
@@ -58,6 +58,7 @@ public class ConfigurationITCase extends AbstractITCase {
configurationService.set(conf);
AttrTO actual = configurationService.get(conf.getSchema());
+ actual.setSchemaInfo(null);
assertEquals(actual, conf);
}
@@ -81,6 +82,7 @@ public class ConfigurationITCase extends AbstractITCase {
configurationService.set(conf);
AttrTO actual = configurationService.get(conf.getSchema());
+ actual.setSchemaInfo(null);
assertEquals(actual, conf);
}
[2/2] syncope git commit: [SYNCOPE-948] Improvement provided
Posted by il...@apache.org.
[SYNCOPE-948] Improvement provided
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/84cb7fb4
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/84cb7fb4
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/84cb7fb4
Branch: refs/heads/master
Commit: 84cb7fb4f449c4bd76580273eaa6eca2e3ad70f4
Parents: 228bf3e
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Sep 20 13:21:18 2016 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Sep 20 13:23:40 2016 +0200
----------------------------------------------------------------------
.../anyobject/AnyObjectResultManager.java | 3 --
.../cli/commands/group/GroupResultManager.java | 3 --
.../cli/commands/user/UserResultManager.java | 3 --
.../client/console/wizards/any/PlainAttrs.java | 12 ++---
.../client/console/wizards/any/VirAttrs.java | 12 +++--
.../syncope/common/lib/AnyOperations.java | 7 ++-
.../apache/syncope/common/lib/to/AttrTO.java | 27 ++++++-----
.../syncope/common/lib/AnyOperationsTest.java | 51 ++++++++++++++++++++
.../syncope/core/logic/ConfigurationLogic.java | 2 +-
.../core/logic/report/XSLTTransformer.java | 2 +-
.../test/resources/domains/MasterContent.xml | 10 ++--
.../api/data/ConfigurationDataBinder.java | 2 +-
.../java/data/AbstractAnyDataBinder.java | 50 +++++++++++--------
.../java/data/AnyObjectDataBinderImpl.java | 3 +-
.../java/data/ConfigurationDataBinderImpl.java | 35 ++++++--------
.../java/data/GroupDataBinderImpl.java | 10 +++-
.../java/data/UserDataBinderImpl.java | 3 +-
.../syncope/fit/core/AnyObjectITCase.java | 2 +
.../syncope/fit/core/ConfigurationITCase.java | 2 +
19 files changed, 154 insertions(+), 85 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectResultManager.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectResultManager.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectResultManager.java
index a107239..1e2c3e6 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectResultManager.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/anyobject/AnyObjectResultManager.java
@@ -68,9 +68,6 @@ public class AnyObjectResultManager extends CommonsResultManager {
.append(attribute.getSchema())
.append(": ")
.append(attribute.getValues());
- if (attribute.isReadonly()) {
- attributeMessageBuilder.append(" - is readonly");
- }
System.out.println(attributeMessageBuilder.toString());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupResultManager.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupResultManager.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupResultManager.java
index db4796d..da4c349 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupResultManager.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/group/GroupResultManager.java
@@ -71,9 +71,6 @@ public class GroupResultManager extends CommonsResultManager {
.append(attribute.getSchema())
.append(": ")
.append(attribute.getValues());
- if (attribute.isReadonly()) {
- attributeMessageBuilder.append(" - is readonly");
- }
System.out.println(attributeMessageBuilder.toString());
System.out.println("");
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java
index 2c479a4..4a1111a 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java
@@ -88,9 +88,6 @@ public class UserResultManager extends CommonsResultManager {
.append(attrTO.getSchema())
.append(": ")
.append(attrTO.getValues());
- if (attrTO.isReadonly()) {
- attributeSentence.append(" - is readonly.");
- }
System.out.println(attributeSentence);
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
index c5c2f0c..96d9273 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
@@ -106,7 +106,7 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
return new PlainSchemas(
panelId,
membershipSchemas.get(membershipTO.getGroupKey()),
- new ListModel<AttrTO>(getAttrsFromTO(membershipTO)));
+ new ListModel<>(getAttrsFromTO(membershipTO)));
}
}), Model.of(-1)).setOutputMarkupId(true));
}
@@ -150,8 +150,8 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
if (attrMap.get(schema.getKey()) == null || attrMap.get(schema.getKey()).getValues().isEmpty()) {
attrTO.getValues().add("");
- // is important to set readonly only after values setting
- attrTO.setReadonly(schema.isReadonly());
+ // is important to set the schema info only after values setting
+ attrTO.setSchemaInfo(schema);
} else {
attrTO.getValues().addAll(attrMap.get(schema.getKey()).getValues());
}
@@ -175,8 +175,8 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
if (attrMap.get(schema.getKey()) == null || attrMap.get(schema.getKey()).getValues().isEmpty()) {
attrTO.getValues().add("");
- // is important to set readonly only after values setting
- attrTO.setReadonly(schema.isReadonly());
+ // is important to set the schema info only after values setting
+ attrTO.setSchemaInfo(schema);
} else {
attrTO.getValues().addAll(attrMap.get(schema.getKey()).getValues());
}
@@ -232,7 +232,7 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
break;
case Enum:
- panel = new AjaxDropDownChoicePanel<>("panel", schemaTO.getKey(), new Model<String>(), false);
+ panel = new AjaxDropDownChoicePanel<>("panel", schemaTO.getKey(), new Model<>(), false);
((AjaxDropDownChoicePanel<String>) panel).setChoices(SchemaUtils.getEnumeratedValues(schemaTO));
if (StringUtils.isNotBlank(schemaTO.getEnumerationKeys())) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
index 27bc7f3..b3432f8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
@@ -175,19 +175,21 @@ public class VirAttrs extends AbstractAttrs<VirSchemaTO> {
protected void populateItem(final ListItem<AttrTO> item) {
AttrTO attrTO = item.getModelObject();
- attrTO.setReadonly(attrTO.isReadonly());
+ AjaxTextFieldPanel panel =
+ new AjaxTextFieldPanel("panel", attrTO.getSchema(), new Model<String>(), false);
- final AjaxTextFieldPanel panel
- = new AjaxTextFieldPanel("panel", attrTO.getSchema(), new Model<String>(), false);
+ boolean readonly = attrTO.getSchemaInfo() == null
+ ? false
+ : VirSchemaTO.class.cast(attrTO.getSchemaInfo()).isReadonly();
if (mode == AjaxWizard.Mode.TEMPLATE) {
- item.add(panel.enableJexlHelp().setEnabled(!attrTO.isReadonly()));
+ item.add(panel.enableJexlHelp().setEnabled(!readonly));
} else {
item.add(new MultiFieldPanel.Builder<>(
new PropertyModel<List<String>>(attrTO, "values")).build(
"panel",
attrTO.getSchema(),
- panel).setEnabled(!attrTO.isReadonly()));
+ panel).setEnabled(!readonly));
}
}
});
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
index 2d3f8f9..b4cc329 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
@@ -186,8 +186,11 @@ public final class AnyOperations {
attrTO(new AttrTO.Builder().schema(attrTO.getSchema()).build()).
build());
}
- } else {
- AttrPatch patch = new AttrPatch.Builder().operation(PatchOperation.ADD_REPLACE).attrTO(attrTO).build();
+ } else if (!originalAttrs.containsKey(attrTO.getSchema())
+ || !originalAttrs.get(attrTO.getSchema()).getValues().equals(attrTO.getValues())) {
+
+ AttrPatch patch = new AttrPatch.Builder().operation(PatchOperation.ADD_REPLACE).attrTO(attrTO).
+ build();
if (!patch.isEmpty()) {
result.getPlainAttrs().add(patch);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java
index 65a6b51..7822a6b 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java
@@ -45,8 +45,8 @@ public class AttrTO extends AbstractBaseBean {
return this;
}
- public Builder readonly(final boolean readonly) {
- instance.setReadonly(readonly);
+ public Builder schemaInfo(final AbstractSchemaTO schemaInfo) {
+ instance.schemaInfo = schemaInfo;
return this;
}
@@ -71,6 +71,11 @@ public class AttrTO extends AbstractBaseBean {
}
/**
+ * (Optional) schema information for this attribute.
+ */
+ private AbstractSchemaTO schemaInfo;
+
+ /**
* Name of the schema that this attribute is referring to.
*/
private String schema;
@@ -81,9 +86,15 @@ public class AttrTO extends AbstractBaseBean {
private final List<String> values = new ArrayList<>();
/**
- * Whether this attribute is read-only or not.
+ * @return schema information for this attribute; may be {@code NULL}
*/
- private boolean readonly = false;
+ public AbstractSchemaTO getSchemaInfo() {
+ return schemaInfo;
+ }
+
+ public void setSchemaInfo(final AbstractSchemaTO schemaInfo) {
+ this.schemaInfo = schemaInfo;
+ }
/**
* @return the name of the schema that this attribute is referring to
@@ -110,12 +121,4 @@ public class AttrTO extends AbstractBaseBean {
public List<String> getValues() {
return values;
}
-
- public boolean isReadonly() {
- return readonly;
- }
-
- public void setReadonly(final boolean readonly) {
- this.readonly = readonly;
- }
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/common/lib/src/test/java/org/apache/syncope/common/lib/AnyOperationsTest.java
----------------------------------------------------------------------
diff --git a/common/lib/src/test/java/org/apache/syncope/common/lib/AnyOperationsTest.java b/common/lib/src/test/java/org/apache/syncope/common/lib/AnyOperationsTest.java
new file mode 100644
index 0000000..51b6423
--- /dev/null
+++ b/common/lib/src/test/java/org/apache/syncope/common/lib/AnyOperationsTest.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.syncope.common.lib.patch.AnyObjectPatch;
+import org.apache.syncope.common.lib.patch.AttrPatch;
+import org.apache.syncope.common.lib.to.AnyObjectTO;
+import org.apache.syncope.common.lib.to.AttrTO;
+import org.apache.syncope.common.lib.types.PatchOperation;
+import org.junit.Test;
+
+public class AnyOperationsTest {
+
+ @Test
+ public void mindiff() {
+ AnyObjectTO oldOne = new AnyObjectTO();
+ oldOne.setName("name");
+ oldOne.getPlainAttrs().add(new AttrTO.Builder().schema("plain").value("oldValue").build());
+ oldOne.getPlainAttrs().add(new AttrTO.Builder().schema("encrypted").value("oldValue").build());
+
+ AnyObjectTO newOne = new AnyObjectTO();
+ newOne.setName("name");
+ newOne.getPlainAttrs().add(new AttrTO.Builder().schema("plain").value("newValue").build());
+ newOne.getPlainAttrs().add(new AttrTO.Builder().schema("encrypted").value("oldValue").build());
+
+ AnyObjectPatch diff = AnyOperations.diff(newOne, oldOne, true);
+ assertEquals(1, diff.getPlainAttrs().size());
+
+ AttrPatch patch = diff.getPlainAttrs().iterator().next();
+ assertEquals(PatchOperation.ADD_REPLACE, patch.getOperation());
+ assertEquals("plain", patch.getAttrTO().getSchema());
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/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 b6c31b4..200cc7a 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
@@ -103,7 +103,7 @@ public class ConfigurationLogic extends AbstractTransactionalLogic<AttrTO> {
@PreAuthorize("hasRole('" + StandardEntitlement.CONFIGURATION_SET + "')")
public void set(final AttrTO value) {
- confDAO.save(binder.getAttribute(value));
+ confDAO.save(binder.getAttr(value));
}
@PreAuthorize("hasRole('" + StandardEntitlement.CONFIGURATION_EXPORT + "')")
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/core/logic/src/main/java/org/apache/syncope/core/logic/report/XSLTTransformer.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/report/XSLTTransformer.java b/core/logic/src/main/java/org/apache/syncope/core/logic/report/XSLTTransformer.java
index 91ecb92..3dd6d78 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/report/XSLTTransformer.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/report/XSLTTransformer.java
@@ -132,7 +132,7 @@ public class XSLTTransformer extends AbstractSAXTransformer implements CachingPi
if (parameters == null) {
this.parameters = null;
} else {
- this.parameters = new HashMap<>(parameters);
+ this.parameters = new HashMap<String, Object>(parameters);
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index 123da30..40a2e63 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -1055,7 +1055,7 @@ under the License.
pullMode="INCREMENTAL" unmatchingRule="ASSIGN" matchingRule="UPDATE" active="1"/>
<AnyTemplatePullTask id="3a6173a9-8c34-4e37-b3b1-0c2ea385fac0"
pullTask_id="c41b9b71-9bfa-4f90-89f2-84787def4c5c" anyType_id="USER"
- template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":["csv"],"derAttrs":[{"schema":"cn","readonly":false,"values":[""]}],"virAttrs":[],"resources":["resource-testdb"],"relationships":[],"memberships":[{"rightType":"GROUP","rightKey":"f779c0d4-633b-4be5-8f57-32eb478a3ca5","groupName":null}],"dynGroups":[],"roles":[],"dynRoles":[],"plainAttrs":[{"schema":"ctype","readonly":false,"values":["email == 'test8@syncope.apache.org'? 'TYPE_8': 'TYPE_OTHER'"]}]}'/>
+ template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":["csv"],"derAttrs":[{"schema":"cn","values":[""]}],"virAttrs":[],"resources":["resource-testdb"],"relationships":[],"memberships":[{"rightType":"GROUP","rightKey":"f779c0d4-633b-4be5-8f57-32eb478a3ca5","groupName":null}],"dynGroups":[],"roles":[],"dynRoles":[],"plainAttrs":[{"schema":"ctype","values":["email == 'test8@syncope.apache.org'? 'TYPE_8': 'TYPE_OTHER'"]}]}'/>
<AnyTemplatePullTask id="b3772d66-ec06-4133-bf38-b3273845ac5b"
pullTask_id="c41b9b71-9bfa-4f90-89f2-84787def4c5c" anyType_id="GROUP"
template='{"@class":"org.apache.syncope.common.lib.to.GroupTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"GROUP","realm":null,"status":null,"name":null,"userOwner":null,"groupOwner":null,"udynMembershipCond":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"plainAttrs":[]}'/>
@@ -1071,7 +1071,7 @@ under the License.
destinationRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="0" syncStatus="1" pullMode="FULL_RECONCILIATION"
unmatchingRule="PROVISION" matchingRule="UPDATE" active="1"/>
<AnyTemplatePullTask id="6c3f578d-327b-4a7c-8037-6f5ba24eb770" pullTask_id="83f7e85d-9774-43fe-adba-ccd856312994" anyType_id="USER"
- template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"relationships":[],"memberships":[],"dynGroups":[],"roles":[],"dynRoles":[],"plainAttrs":[{"schema":"ctype","readonly":false,"values":["'type a'"]},{"schema":"userId","readonly":false,"values":["'reconciled@syncope.apache.org'"]},{"schema":"fullname","readonly":false,"values":["'reconciled fullname'"]},{"schema":"surname","readonly":false,"values":["'surname'"]}]}'/>
+ template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"relationships":[],"memberships":[],"dynGroups":[],"roles":[],"dynRoles":[],"plainAttrs":[{"schema":"ctype","values":["'type a'"]},{"schema":"userId","values":["'reconciled@syncope.apache.org'"]},{"schema":"fullname","values":["'reconciled fullname'"]},{"schema":"surname","values":["'surname'"]}]}'/>
<AnyTemplatePullTask id="45b61137-c7c3-49ee-86e0-9efffa75ae68" pullTask_id="83f7e85d-9774-43fe-adba-ccd856312994" anyType_id="GROUP"
template='{"@class":"org.apache.syncope.common.lib.to.GroupTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"GROUP","realm":null,"status":null,"name":null,"userOwner":null,"groupOwner":null,"udynMembershipCond":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"plainAttrs":[]}'/>
<Task DTYPE="PullTask" id="81d88f73-d474-4450-9031-605daa4e313f" name="TestDB2 Task" resource_id="resource-testdb2"
@@ -1084,9 +1084,9 @@ under the License.
destinationRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" pullMode="FULL_RECONCILIATION" performCreate="1" performDelete="1" performUpdate="1" syncStatus="0"
unmatchingRule="PROVISION" matchingRule="UPDATE" active="1"/>
<AnyTemplatePullTask id="df655a2a-40c0-43b1-a157-3f4988802f58" pullTask_id="1e419ca4-ea81-4493-a14f-28b90113686d" anyType_id="USER"
- template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":"'/' + title","status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":["minimal group"],"derAttrs":[],"virAttrs":[{"schema":"virtualReadOnly","readonly":true,"values":[""]}],"resources":["resource-ldap"],"roles":[],"dynRoles":[],"relationships":[],"memberships":[],"dynGroups":[],"plainAttrs":[]}'/>
+ template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":"'/' + title","status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":["minimal group"],"derAttrs":[],"virAttrs":[{"schema":"virtualReadOnly","values":[""]}],"resources":["resource-ldap"],"roles":[],"dynRoles":[],"relationships":[],"memberships":[],"dynGroups":[],"plainAttrs":[]}'/>
<AnyTemplatePullTask id="fda22ff3-98f3-42e4-a2ae-cd9a28282d57" pullTask_id="1e419ca4-ea81-4493-a14f-28b90113686d" anyType_id="GROUP"
- template='{"@class":"org.apache.syncope.common.lib.to.GroupTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"GROUP","realm":null,"status":null,"name":null,"userOwner":null,"groupOwner":null,"udynMembershipCond":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"plainAttrs":[{"schema":"show","readonly":false,"values":["true"]}]}'/>
+ template='{"@class":"org.apache.syncope.common.lib.to.GroupTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"GROUP","realm":null,"status":null,"name":null,"userOwner":null,"groupOwner":null,"udynMembershipCond":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"plainAttrs":[{"schema":"show","values":["true"]}]}'/>
<PullTask_actionsClassNames pullTask_id="1e419ca4-ea81-4493-a14f-28b90113686d" actionClassName="org.apache.syncope.core.provisioning.java.pushpull.LDAPMembershipPullActions"/>
<Task DTYPE="PullTask" id="38abbf9e-a1a3-40a1-a15f-7d0ac02f47f1" name="VirAttrCache test" resource_id="resource-csv"
destinationRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="0" performUpdate="1" performDelete="0" syncStatus="0" pullMode="FULL_RECONCILIATION"
@@ -1150,7 +1150,7 @@ under the License.
destinationRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" pullMode="INCREMENTAL"
unmatchingRule="PROVISION" matchingRule="UPDATE" active="1"/>
<AnyTemplatePullTask id="8bc41ba1-cc1d-4ee0-bb43-61cd148b414f" pullTask_id="986867e2-993b-430e-8feb-aa9abb4c1dcd" anyType_id="USER"
- template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":["resource-testdb"],"roles":[],"dynRoles":[],"relationships":[],"memberships":[],"dynGroups":[],"plainAttrs":[{"schema":"firstname","readonly":false,"values":[""]},{"schema":"userId","readonly":false,"values":["'test'"]},{"schema":"fullname","readonly":false,"values":["'test'"]},{"schema":"surname","readonly":false,"values":["'test'"]}]}'/>
+ template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":["resource-testdb"],"roles":[],"dynRoles":[],"relationships":[],"memberships":[],"dynGroups":[],"plainAttrs":[{"schema":"firstname","values":[""]},{"schema":"userId","values":["'test'"]},{"schema":"fullname","values":["'test'"]},{"schema":"surname","values":["'test'"]}]}'/>
<AnyTemplatePullTask id="9af0e343-8a37-42d2-9bc7-6e2e3b103219" pullTask_id="986867e2-993b-430e-8feb-aa9abb4c1dcd" anyType_id="GROUP"
template='{"@class":"org.apache.syncope.common.lib.to.GroupTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"GROUP","realm":null,"status":null,"name":null,"userOwner":null,"groupOwner":null,"udynMembershipCond":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"plainAttrs":[]}'/>
<Task DTYPE="PullTask" id="feae4e57-15ca-40d9-b973-8b9015efca49" name="CSV (unlink matching; ignore unmatching)" resource_id="resource-csv"
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/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 e62407f..0956d24 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
@@ -28,6 +28,6 @@ public interface ConfigurationDataBinder {
List<AttrTO> getConfTO();
- CPlainAttr getAttribute(AttrTO attributeTO);
+ CPlainAttr getAttr(AttrTO attrTO);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
index 167ced4..0bb5e25 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
@@ -89,6 +89,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.apache.syncope.core.persistence.api.entity.GroupableRelatable;
import org.apache.syncope.core.provisioning.java.IntAttrNameParser;
import org.apache.syncope.core.provisioning.api.IntAttrName;
+import org.apache.syncope.core.provisioning.api.data.SchemaDataBinder;
import org.apache.syncope.core.provisioning.java.utils.MappingUtils;
abstract class AbstractAnyDataBinder {
@@ -96,6 +97,9 @@ abstract class AbstractAnyDataBinder {
protected static final Logger LOG = LoggerFactory.getLogger(AbstractAnyDataBinder.class);
@Autowired
+ protected SchemaDataBinder schemaDataBinder;
+
+ @Autowired
protected RealmDAO realmDAO;
@Autowired
@@ -198,8 +202,8 @@ abstract class AbstractAnyDataBinder {
List<String> valuesProvided = schema.isMultivalue()
? values
: (values.isEmpty()
- ? Collections.<String>emptyList()
- : Collections.singletonList(values.iterator().next()));
+ ? Collections.<String>emptyList()
+ : Collections.singletonList(values.iterator().next()));
for (String value : valuesProvided) {
if (StringUtils.isBlank(value)) {
@@ -549,40 +553,48 @@ abstract class AbstractAnyDataBinder {
}
}
- protected void fillTO(final AnyTO anyTO,
+ protected void fillTO(
+ final AnyTO anyTO,
final String realmFullPath,
final Collection<? extends AnyTypeClass> auxClasses,
final Collection<? extends PlainAttr<?>> plainAttrs,
final Map<DerSchema, String> derAttrs,
final Map<VirSchema, List<String>> virAttrs,
- final Collection<? extends ExternalResource> resources) {
+ final Collection<? extends ExternalResource> resources,
+ final boolean details) {
anyTO.setRealm(realmFullPath);
CollectionUtils.collect(auxClasses, EntityUtils.<AnyTypeClass>keyTransformer(), anyTO.getAuxClasses());
for (PlainAttr<?> plainAttr : plainAttrs) {
- anyTO.getPlainAttrs().add(new AttrTO.Builder().
+ AttrTO.Builder attrTOBuilder = new AttrTO.Builder().
schema(plainAttr.getSchema().getKey()).
- values(plainAttr.getValuesAsStrings()).
- readonly(plainAttr.getSchema().isReadonly()).
- build());
+ values(plainAttr.getValuesAsStrings());
+ if (details) {
+ attrTOBuilder.schemaInfo(schemaDataBinder.getPlainSchemaTO(plainAttr.getSchema()));
+ }
+ anyTO.getPlainAttrs().add(attrTOBuilder.build());
}
for (Map.Entry<DerSchema, String> entry : derAttrs.entrySet()) {
- anyTO.getDerAttrs().add(new AttrTO.Builder().
+ AttrTO.Builder attrTOBuilder = new AttrTO.Builder().
schema(entry.getKey().getKey()).
- value(entry.getValue()).
- readonly(true).
- build());
+ value(entry.getValue());
+ if (details) {
+ attrTOBuilder.schemaInfo(schemaDataBinder.getDerSchemaTO(entry.getKey()));
+ }
+ anyTO.getDerAttrs().add(attrTOBuilder.build());
}
for (Map.Entry<VirSchema, List<String>> entry : virAttrs.entrySet()) {
- anyTO.getVirAttrs().add(new AttrTO.Builder().
+ AttrTO.Builder attrTOBuilder = new AttrTO.Builder().
schema(entry.getKey().getKey()).
- values(entry.getValue()).
- readonly(entry.getKey().isReadonly()).
- build());
+ values(entry.getValue());
+ if (details) {
+ attrTOBuilder.schemaInfo(schemaDataBinder.getVirSchemaTO(entry.getKey()));
+ }
+ anyTO.getVirAttrs().add(attrTOBuilder.build());
}
for (ExternalResource resource : resources) {
@@ -611,7 +623,7 @@ abstract class AbstractAnyDataBinder {
membershipTO.getPlainAttrs().add(new AttrTO.Builder().
schema(plainAttr.getSchema().getKey()).
values(plainAttr.getValuesAsStrings()).
- readonly(plainAttr.getSchema().isReadonly()).
+ schemaInfo(schemaDataBinder.getPlainSchemaTO(plainAttr.getSchema())).
build());
}
@@ -619,7 +631,7 @@ abstract class AbstractAnyDataBinder {
membershipTO.getDerAttrs().add(new AttrTO.Builder().
schema(entry.getKey().getKey()).
value(entry.getValue()).
- readonly(true).
+ schemaInfo(schemaDataBinder.getDerSchemaTO(entry.getKey())).
build());
}
@@ -627,7 +639,7 @@ abstract class AbstractAnyDataBinder {
membershipTO.getVirAttrs().add(new AttrTO.Builder().
schema(entry.getKey().getKey()).
values(entry.getValue()).
- readonly(entry.getKey().isReadonly()).
+ schemaInfo(schemaDataBinder.getVirSchemaTO(entry.getKey())).
build());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
index a998a66..677bf81 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
@@ -97,7 +97,8 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
anyObject.getPlainAttrs(),
derAttrHandler.getValues(anyObject),
virAttrValues,
- anyObjectDAO.findAllResources(anyObject));
+ anyObjectDAO.findAllResources(anyObject),
+ details);
if (details) {
// relationships
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/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 5d277b3..56b0b92 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
@@ -48,28 +48,23 @@ public class ConfigurationDataBinderImpl extends AbstractAnyDataBinder implement
@Override
public List<AttrTO> getConfTO() {
- final List<AttrTO> attrTOs = new ArrayList<>();
- for (final CPlainAttr plainAttr : confDAO.get().getPlainAttrs()) {
- final AttrTO attrTO = new AttrTO();
- attrTO.setSchema(plainAttr.getSchema().getKey());
- attrTO.getValues().addAll(plainAttr.getValuesAsStrings());
- attrTO.setReadonly(plainAttr.getSchema().isReadonly());
- attrTOs.add(attrTO);
+ List<AttrTO> attrTOs = new ArrayList<>();
+ for (CPlainAttr attr : confDAO.get().getPlainAttrs()) {
+ attrTOs.add(getAttrTO(attr));
}
return attrTOs;
}
@Override
public AttrTO getAttrTO(final CPlainAttr attr) {
- AttrTO attributeTO = new AttrTO();
- attributeTO.setSchema(attr.getSchema().getKey());
- attributeTO.getValues().addAll(attr.getValuesAsStrings());
- attributeTO.setReadonly(attr.getSchema().isReadonly());
-
- return attributeTO;
+ return new AttrTO.Builder().
+ schemaInfo(schemaDataBinder.getPlainSchemaTO(attr.getSchema())).
+ schema(attr.getSchema().getKey()).
+ values(attr.getValuesAsStrings()).
+ build();
}
- private void fillAttribute(final List<String> values,
+ private void fillAttr(final List<String> values,
final PlainSchema schema, final CPlainAttr attr, final SyncopeClientException invalidValues) {
// if schema is multivalue, all values are considered for addition;
@@ -77,8 +72,8 @@ public class ConfigurationDataBinderImpl extends AbstractAnyDataBinder implement
List<String> valuesProvided = schema.isMultivalue()
? values
: (values.isEmpty()
- ? Collections.<String>emptyList()
- : Collections.singletonList(values.iterator().next()));
+ ? Collections.<String>emptyList()
+ : Collections.singletonList(values.iterator().next()));
if (valuesProvided.isEmpty()) {
JexlContext jexlContext = new MapContext();
@@ -120,16 +115,16 @@ public class ConfigurationDataBinderImpl extends AbstractAnyDataBinder implement
}
@Override
- public CPlainAttr getAttribute(final AttrTO attributeTO) {
- PlainSchema schema = getPlainSchema(attributeTO.getSchema());
+ public CPlainAttr getAttr(final AttrTO attrTO) {
+ PlainSchema schema = getPlainSchema(attrTO.getSchema());
if (schema == null) {
- throw new NotFoundException("Conf schema " + attributeTO.getSchema());
+ throw new NotFoundException("Conf schema " + attrTO.getSchema());
} else {
SyncopeClientException invalidValues = SyncopeClientException.build(ClientExceptionType.InvalidValues);
CPlainAttr attr = entityFactory.newEntity(CPlainAttr.class);
attr.setSchema(schema);
- fillAttribute(attributeTO.getValues(), schema, attr, invalidValues);
+ fillAttr(attrTO.getValues(), schema, attr, invalidValues);
if (!invalidValues.isEmpty()) {
throw invalidValues;
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
index c7ab1b1..d0d751a 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java
@@ -332,8 +332,14 @@ public class GroupDataBinderImpl extends AbstractAnyDataBinder implements GroupD
Map<VirSchema, List<String>> virAttrValues = details
? virAttrHandler.getValues(group)
: Collections.<VirSchema, List<String>>emptyMap();
- fillTO(groupTO, group.getRealm().getFullPath(), group.getAuxClasses(),
- group.getPlainAttrs(), derAttrValues, virAttrValues, group.getResources());
+ fillTO(groupTO,
+ group.getRealm().getFullPath(),
+ group.getAuxClasses(),
+ group.getPlainAttrs(),
+ derAttrValues,
+ virAttrValues,
+ group.getResources(),
+ details);
if (group.getUDynMembership() != null) {
groupTO.setUDynMembershipCond(group.getUDynMembership().getFIQLCond());
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index 5816820..4437713 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -570,7 +570,8 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
user.getPlainAttrs(),
derAttrHandler.getValues(user),
virAttrValues,
- userDAO.findAllResources(user));
+ userDAO.findAllResources(user),
+ details);
if (details) {
// roles
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java
index b4aaf2e..95325a9 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java
@@ -180,6 +180,8 @@ public class AnyObjectITCase extends AbstractITCase {
anyObjectService.update(anyObjectTO.getKey(), SchemaType.PLAIN, updated);
AttrTO location = anyObjectService.read(anyObjectTO.getKey(), SchemaType.PLAIN, "location");
+ // need to remove schemaInfo which is included when reading the any object
+ location.setSchemaInfo(null);
assertEquals(updated, location);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/84cb7fb4/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConfigurationITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConfigurationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConfigurationITCase.java
index d1780e7..d2d9b64 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConfigurationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConfigurationITCase.java
@@ -58,6 +58,7 @@ public class ConfigurationITCase extends AbstractITCase {
configurationService.set(conf);
AttrTO actual = configurationService.get(conf.getSchema());
+ actual.setSchemaInfo(null);
assertEquals(actual, conf);
}
@@ -81,6 +82,7 @@ public class ConfigurationITCase extends AbstractITCase {
configurationService.set(conf);
AttrTO actual = configurationService.get(conf.getSchema());
+ actual.setSchemaInfo(null);
assertEquals(actual, conf);
}