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 2015/11/23 13:22:39 UTC
[2/2] syncope git commit: [SYNCOPE-666] Adjusting TypeExtension for
JAXB
[SYNCOPE-666] Adjusting TypeExtension for JAXB
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/07451e4c
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/07451e4c
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/07451e4c
Branch: refs/heads/master
Commit: 07451e4cc978a56b0e958fb59608b7e431e6f7e7
Parents: c3e4c38
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Nov 23 13:22:27 2015 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Nov 23 13:22:27 2015 +0100
----------------------------------------------------------------------
.../syncope/common/lib/patch/GroupPatch.java | 33 ++++++++----
.../apache/syncope/common/lib/to/GroupTO.java | 42 +++++++--------
.../syncope/common/lib/to/TypeExtensionTO.java | 55 ++++++++++++++++++++
.../java/data/GroupDataBinderImpl.java | 42 ++++++++-------
.../syncope/fit/core/reference/GroupITCase.java | 27 ++++++----
5 files changed, 138 insertions(+), 61 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/07451e4c/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java
index c6347c1..209b33e 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java
@@ -20,13 +20,15 @@ package org.apache.syncope.common.lib.patch;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
+import org.apache.syncope.common.lib.to.TypeExtensionTO;
@XmlRootElement(name = "groupPatch")
@XmlType
@@ -44,9 +46,7 @@ public class GroupPatch extends AnyPatch {
private StringReplacePatchItem udynMembershipCond;
- @XmlJavaTypeAdapter(XmlGenericMapAdapter.class)
- @JsonIgnore
- private final Map<String, Set<String>> typeExtensions = new HashMap<>();
+ private final List<TypeExtensionTO> typeExtensions = new ArrayList<>();
public StringReplacePatchItem getName() {
return name;
@@ -88,8 +88,21 @@ public class GroupPatch extends AnyPatch {
this.udynMembershipCond = udynMembershipCond;
}
- @JsonProperty
- public Map<String, Set<String>> getTypeExtensions() {
+ @JsonIgnore
+ public TypeExtensionTO getTypeExtension(final String anyType) {
+ return CollectionUtils.find(typeExtensions, new Predicate<TypeExtensionTO>() {
+
+ @Override
+ public boolean evaluate(final TypeExtensionTO typeExtension) {
+ return anyType != null && anyType.equals(typeExtension.getAnyType());
+ }
+ });
+ }
+
+ @XmlElementWrapper(name = "typeExtensions")
+ @XmlElement(name = "typeExtension")
+ @JsonProperty("typeExtensions")
+ public List<TypeExtensionTO> getTypeExtensions() {
return typeExtensions;
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/07451e4c/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java
index 9c375c8..c304b9e 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java
@@ -20,13 +20,14 @@ package org.apache.syncope.common.lib.to;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.types.AnyTypeKind;
@XmlRootElement(name = "group")
@@ -45,9 +46,7 @@ public class GroupTO extends AnyTO {
private String udynMembershipCond;
- @XmlJavaTypeAdapter(XmlGenericMapAdapter.class)
- @JsonIgnore
- private final Map<String, Set<String>> typeExtensions = new HashMap<>();
+ private final List<TypeExtensionTO> typeExtensions = new ArrayList<>();
@Override
public String getType() {
@@ -99,21 +98,22 @@ public class GroupTO extends AnyTO {
this.udynMembershipCond = uDynMembershipCond;
}
- @JsonProperty
- public Map<String, Set<String>> getTypeExtensions() {
- return typeExtensions;
- }
+ @JsonIgnore
+ public TypeExtensionTO getTypeExtension(final String anyType) {
+ return CollectionUtils.find(typeExtensions, new Predicate<TypeExtensionTO>() {
- public static long fromDisplayName(final String displayName) {
- long result = 0;
- if (displayName != null && !displayName.isEmpty() && displayName.indexOf(' ') != -1) {
- try {
- result = Long.valueOf(displayName.split(" ")[0]);
- } catch (NumberFormatException e) {
- // ignore
+ @Override
+ public boolean evaluate(final TypeExtensionTO typeExtension) {
+ return anyType != null && anyType.equals(typeExtension.getAnyType());
}
- }
+ });
+ }
- return result;
+ @XmlElementWrapper(name = "typeExtensions")
+ @XmlElement(name = "typeExtension")
+ @JsonProperty("typeExtensions")
+ public List<TypeExtensionTO> getTypeExtensions() {
+ return typeExtensions;
}
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/07451e4c/common/lib/src/main/java/org/apache/syncope/common/lib/to/TypeExtensionTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/TypeExtensionTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/TypeExtensionTO.java
new file mode 100644
index 0000000..f8dea41
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/TypeExtensionTO.java
@@ -0,0 +1,55 @@
+/*
+ * 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.to;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+import org.apache.syncope.common.lib.AbstractBaseBean;
+
+@XmlRootElement(name = "typeExtension")
+@XmlType
+public class TypeExtensionTO extends AbstractBaseBean {
+
+ private static final long serialVersionUID = -5422809645030924811L;
+
+ private String anyType;
+
+ private final List<String> auxClasses = new ArrayList<>();
+
+ public String getAnyType() {
+ return anyType;
+ }
+
+ public void setAnyType(final String anyType) {
+ this.anyType = anyType;
+ }
+
+ @XmlElementWrapper(name = "auxClasses")
+ @XmlElement(name = "class")
+ @JsonProperty("auxClasses")
+ public List<String> getAuxClasses() {
+ return auxClasses;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/07451e4c/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 1f8655f..9562ff7 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
@@ -19,11 +19,9 @@
package org.apache.syncope.core.provisioning.java.data;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
import org.apache.commons.lang3.StringUtils;
@@ -31,6 +29,7 @@ import org.apache.syncope.common.lib.SyncopeClientCompositeException;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.patch.GroupPatch;
import org.apache.syncope.common.lib.to.GroupTO;
+import org.apache.syncope.common.lib.to.TypeExtensionTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.ResourceOperation;
@@ -128,17 +127,17 @@ public class GroupDataBinderImpl extends AbstractAnyDataBinder implements GroupD
}
// type extensions
- for (Map.Entry<String, Set<String>> entry : groupTO.getTypeExtensions().entrySet()) {
- AnyType anyType = anyTypeDAO.find(entry.getKey());
+ for (TypeExtensionTO typeExtTO : groupTO.getTypeExtensions()) {
+ AnyType anyType = anyTypeDAO.find(typeExtTO.getAnyType());
if (anyType == null) {
- LOG.warn("Ignoring invalid {}: {}", AnyType.class.getSimpleName(), entry.getKey());
+ LOG.warn("Ignoring invalid {}: {}", AnyType.class.getSimpleName(), typeExtTO.getAnyType());
} else {
TypeExtension typeExt = entityFactory.newEntity(TypeExtension.class);
typeExt.setAnyType(anyType);
typeExt.setGroup(group);
group.add(typeExt);
- for (String name : entry.getValue()) {
+ for (String name : typeExtTO.getAuxClasses()) {
AnyTypeClass anyTypeClass = anyTypeClassDAO.find(name);
if (anyTypeClass == null) {
LOG.warn("Ignoring invalid {}: {}", AnyTypeClass.class.getSimpleName(), name);
@@ -224,10 +223,10 @@ public class GroupDataBinderImpl extends AbstractAnyDataBinder implements GroupD
}
// type extensions
- for (Map.Entry<String, Set<String>> entry : groupPatch.getTypeExtensions().entrySet()) {
- AnyType anyType = anyTypeDAO.find(entry.getKey());
+ for (TypeExtensionTO typeExtTO : groupPatch.getTypeExtensions()) {
+ AnyType anyType = anyTypeDAO.find(typeExtTO.getAnyType());
if (anyType == null) {
- LOG.warn("Ignoring invalid {}: {}", AnyType.class.getSimpleName(), entry.getKey());
+ LOG.warn("Ignoring invalid {}: {}", AnyType.class.getSimpleName(), typeExtTO.getAnyType());
} else {
TypeExtension typeExt = group.getTypeExtension(anyType);
if (typeExt == null) {
@@ -238,7 +237,7 @@ public class GroupDataBinderImpl extends AbstractAnyDataBinder implements GroupD
}
// add all classes contained in the TO
- for (String name : entry.getValue()) {
+ for (String name : typeExtTO.getAuxClasses()) {
AnyTypeClass anyTypeClass = anyTypeClassDAO.find(name);
if (anyTypeClass == null) {
LOG.warn("Ignoring invalid {}: {}", AnyTypeClass.class.getSimpleName(), name);
@@ -249,7 +248,7 @@ public class GroupDataBinderImpl extends AbstractAnyDataBinder implements GroupD
// remove all classes not contained in the TO
for (Iterator<? extends AnyTypeClass> itor = typeExt.getAuxClasses().iterator(); itor.hasNext();) {
AnyTypeClass anyTypeClass = itor.next();
- if (!entry.getValue().contains(anyTypeClass.getKey())) {
+ if (!typeExtTO.getAuxClasses().contains(anyTypeClass.getKey())) {
itor.remove();
}
}
@@ -264,7 +263,7 @@ public class GroupDataBinderImpl extends AbstractAnyDataBinder implements GroupD
// remove all type extensions not contained in the TO
for (Iterator<? extends TypeExtension> itor = group.getTypeExtensions().iterator(); itor.hasNext();) {
TypeExtension typeExt = itor.next();
- if (!groupPatch.getTypeExtensions().containsKey(typeExt.getAnyType().getKey())) {
+ if (groupPatch.getTypeExtension(typeExt.getAnyType().getKey()) == null) {
itor.remove();
}
}
@@ -308,14 +307,17 @@ public class GroupDataBinderImpl extends AbstractAnyDataBinder implements GroupD
}
for (TypeExtension typeExt : group.getTypeExtensions()) {
- groupTO.getTypeExtensions().put(typeExt.getAnyType().getKey(),
- CollectionUtils.collect(typeExt.getAuxClasses(), new Transformer<AnyTypeClass, String>() {
-
- @Override
- public String transform(final AnyTypeClass clazz) {
- return clazz.getKey();
- }
- }, new HashSet<String>()));
+ TypeExtensionTO typeExtTO = new TypeExtensionTO();
+ typeExtTO.setAnyType(typeExt.getAnyType().getKey());
+ typeExtTO.getAuxClasses().addAll(CollectionUtils.collect(typeExt.getAuxClasses(),
+ new Transformer<AnyTypeClass, String>() {
+
+ @Override
+ public String transform(final AnyTypeClass clazz) {
+ return clazz.getKey();
+ }
+ }));
+ groupTO.getTypeExtensions().add(typeExtTO);
}
return groupTO;
http://git-wip-us.apache.org/repos/asf/syncope/blob/07451e4c/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java
index 502b832..052262c 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java
@@ -28,9 +28,6 @@ import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.InputStream;
import java.security.AccessControlException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
@@ -65,6 +62,7 @@ import org.apache.syncope.common.lib.to.GroupTO;
import org.apache.syncope.common.lib.to.MappingTO;
import org.apache.syncope.common.lib.to.ProvisionTO;
import org.apache.syncope.common.lib.to.ProvisioningResult;
+import org.apache.syncope.common.lib.to.TypeExtensionTO;
import org.apache.syncope.common.lib.to.UserTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.AttrSchemaType;
@@ -692,25 +690,34 @@ public class GroupITCase extends AbstractITCase {
@Test
public void typeExtensions() {
+ TypeExtensionTO typeExtension = new TypeExtensionTO();
+ typeExtension.setAnyType(AnyTypeKind.USER.name());
+ typeExtension.getAuxClasses().add("csv");
+
GroupTO groupTO = getBasicSampleTO("typeExtensions");
- groupTO.getTypeExtensions().put(AnyTypeKind.USER.name(), Collections.singleton("csv"));
+ groupTO.getTypeExtensions().add(typeExtension);
groupTO = createGroup(groupTO).getAny();
assertNotNull(groupTO);
assertEquals(1, groupTO.getTypeExtensions().size());
- assertEquals(1, groupTO.getTypeExtensions().get(AnyTypeKind.USER.name()).size());
- assertEquals(Collections.singleton("csv"), groupTO.getTypeExtensions().get(AnyTypeKind.USER.name()));
+ assertEquals(1, groupTO.getTypeExtension(AnyTypeKind.USER.name()).getAuxClasses().size());
+ assertTrue(groupTO.getTypeExtension(AnyTypeKind.USER.name()).getAuxClasses().contains("csv"));
+
+ typeExtension = new TypeExtensionTO();
+ typeExtension.setAnyType(AnyTypeKind.USER.name());
+ typeExtension.getAuxClasses().add("csv");
+ typeExtension.getAuxClasses().add("other");
GroupPatch groupPatch = new GroupPatch();
groupPatch.setKey(groupTO.getKey());
- groupPatch.getTypeExtensions().put(AnyTypeKind.USER.name(), new HashSet<>(Arrays.asList("csv", "other")));
+ groupPatch.getTypeExtensions().add(typeExtension);
groupTO = updateGroup(groupPatch).getAny();
assertNotNull(groupTO);
assertEquals(1, groupTO.getTypeExtensions().size());
- assertEquals(2, groupTO.getTypeExtensions().get(AnyTypeKind.USER.name()).size());
- assertTrue(groupTO.getTypeExtensions().get(AnyTypeKind.USER.name()).contains("csv"));
- assertTrue(groupTO.getTypeExtensions().get(AnyTypeKind.USER.name()).contains("other"));
+ assertEquals(2, groupTO.getTypeExtension(AnyTypeKind.USER.name()).getAuxClasses().size());
+ assertTrue(groupTO.getTypeExtension(AnyTypeKind.USER.name()).getAuxClasses().contains("csv"));
+ assertTrue(groupTO.getTypeExtension(AnyTypeKind.USER.name()).getAuxClasses().contains("other"));
}
@Test