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 2017/08/22 15:09:16 UTC
[12/16] syncope git commit: [SYNCOPE-938] Switching from
commons-collections to Java 8 features
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/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 c0b211f..f180ed0 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
@@ -21,11 +21,8 @@ package org.apache.syncope.common.lib;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
-import org.apache.commons.collections4.Closure;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
@@ -115,16 +112,18 @@ public final class AnyOperations {
result.getAuxClasses().clear();
if (!incremental) {
- for (String auxClass : CollectionUtils.subtract(original.getAuxClasses(), updated.getAuxClasses())) {
- result.getAuxClasses().add(
- new StringPatchItem.Builder().operation(PatchOperation.DELETE).value(auxClass).build());
- }
+ original.getAuxClasses().stream().filter(auxClass -> !updated.getAuxClasses().contains(auxClass)).
+ forEach(auxClass -> {
+ result.getAuxClasses().add(new StringPatchItem.Builder().
+ operation(PatchOperation.DELETE).value(auxClass).build());
+ });
}
- for (String auxClass : CollectionUtils.subtract(updated.getAuxClasses(), original.getAuxClasses())) {
- result.getAuxClasses().add(
- new StringPatchItem.Builder().operation(PatchOperation.ADD_REPLACE).value(auxClass).build());
- }
+ updated.getAuxClasses().stream().filter(auxClass -> !original.getAuxClasses().contains(auxClass)).
+ forEach(auxClass -> {
+ result.getAuxClasses().add(new StringPatchItem.Builder().
+ operation(PatchOperation.ADD_REPLACE).value(auxClass).build());
+ });
// 3. plain attributes
Map<String, AttrTO> updatedAttrs = EntityTOUtils.buildAttrMap(updated.getPlainAttrs());
@@ -133,20 +132,16 @@ public final class AnyOperations {
result.getPlainAttrs().clear();
if (!incremental) {
- IterableUtils.forEach(CollectionUtils.subtract(originalAttrs.keySet(), updatedAttrs.keySet()),
- new Closure<String>() {
-
- @Override
- public void execute(final String schema) {
- result.getPlainAttrs().add(new AttrPatch.Builder().
- operation(PatchOperation.DELETE).
- attrTO(new AttrTO.Builder().schema(schema).build()).
- build());
- }
- });
+ originalAttrs.keySet().stream().filter(attr -> !updatedAttrs.containsKey(attr)).
+ forEach(schema -> {
+ result.getPlainAttrs().add(new AttrPatch.Builder().
+ operation(PatchOperation.DELETE).
+ attrTO(new AttrTO.Builder().schema(schema).build()).
+ build());
+ });
}
- for (AttrTO attrTO : updatedAttrs.values()) {
+ updatedAttrs.values().forEach(attrTO -> {
if (attrTO.getValues().isEmpty()) {
if (!incremental) {
result.getPlainAttrs().add(new AttrPatch.Builder().
@@ -163,7 +158,7 @@ public final class AnyOperations {
result.getPlainAttrs().add(patch);
}
}
- }
+ });
// 4. virtual attributes
result.getVirAttrs().clear();
@@ -173,16 +168,18 @@ public final class AnyOperations {
result.getResources().clear();
if (!incremental) {
- for (String resource : CollectionUtils.subtract(original.getResources(), updated.getResources())) {
- result.getResources().add(
- new StringPatchItem.Builder().operation(PatchOperation.DELETE).value(resource).build());
- }
+ original.getResources().stream().filter(resource -> !updated.getResources().contains(resource)).
+ forEach(resource -> {
+ result.getResources().add(new StringPatchItem.Builder().
+ operation(PatchOperation.DELETE).value(resource).build());
+ });
}
- for (String resource : CollectionUtils.subtract(updated.getResources(), original.getResources())) {
- result.getResources().add(
- new StringPatchItem.Builder().operation(PatchOperation.ADD_REPLACE).value(resource).build());
- }
+ updated.getResources().stream().filter(resource -> !original.getResources().contains(resource)).
+ forEach(resource -> {
+ result.getResources().add(new StringPatchItem.Builder().
+ operation(PatchOperation.ADD_REPLACE).value(resource).build());
+ });
}
/**
@@ -209,38 +206,41 @@ public final class AnyOperations {
Map<Pair<String, String>, RelationshipTO> originalRels =
EntityTOUtils.buildRelationshipMap(original.getRelationships());
- for (Map.Entry<Pair<String, String>, RelationshipTO> entry : updatedRels.entrySet()) {
- if (!originalRels.containsKey(entry.getKey())) {
- result.getRelationships().add(new RelationshipPatch.Builder().
- operation(PatchOperation.ADD_REPLACE).
- relationshipTO(entry.getValue()).build());
- }
- }
+ updatedRels.entrySet().stream().
+ filter(entry -> (!originalRels.containsKey(entry.getKey()))).
+ forEachOrdered(entry -> {
+ result.getRelationships().add(new RelationshipPatch.Builder().
+ operation(PatchOperation.ADD_REPLACE).
+ relationshipTO(entry.getValue()).build());
+ });
if (!incremental) {
- for (Pair<String, String> key : CollectionUtils.subtract(originalRels.keySet(), updatedRels.keySet())) {
- result.getRelationships().add(new RelationshipPatch.Builder().
- operation(PatchOperation.DELETE).
- relationshipTO(originalRels.get(key)).build());
- }
+ originalRels.keySet().stream().filter(relationship -> !updatedRels.containsKey(relationship)).
+ forEach(key -> {
+ result.getRelationships().add(new RelationshipPatch.Builder().
+ operation(PatchOperation.DELETE).
+ relationshipTO(originalRels.get(key)).build());
+ });
}
// 3. memberships
Map<String, MembershipTO> updatedMembs = EntityTOUtils.buildMembershipMap(updated.getMemberships());
Map<String, MembershipTO> originalMembs = EntityTOUtils.buildMembershipMap(original.getMemberships());
- for (Map.Entry<String, MembershipTO> entry : updatedMembs.entrySet()) {
- if (!originalMembs.containsKey(entry.getKey())) {
- result.getMemberships().add(new MembershipPatch.Builder().
- operation(PatchOperation.ADD_REPLACE).group(entry.getValue().getGroupKey()).build());
- }
- }
+ updatedMembs.entrySet().stream().
+ filter(entry -> (!originalMembs.containsKey(entry.getKey()))).
+ forEachOrdered(entry -> {
+ result.getMemberships().add(new MembershipPatch.Builder().
+ operation(PatchOperation.ADD_REPLACE).group(entry.getValue().getGroupKey()).
+ build());
+ });
if (!incremental) {
- for (String key : CollectionUtils.subtract(originalMembs.keySet(), updatedMembs.keySet())) {
- result.getMemberships().add(new MembershipPatch.Builder().
- operation(PatchOperation.DELETE).group(originalMembs.get(key).getGroupKey()).build());
- }
+ originalMembs.keySet().stream().filter(membership -> !updatedMembs.containsKey(membership)).
+ forEach(key -> {
+ result.getMemberships().add(new MembershipPatch.Builder().
+ operation(PatchOperation.DELETE).group(originalMembs.get(key).getGroupKey()).build());
+ });
}
return result;
@@ -290,16 +290,18 @@ public final class AnyOperations {
// 4. roles
if (!incremental) {
- for (String toRemove : CollectionUtils.subtract(original.getRoles(), updated.getRoles())) {
- result.getRoles().add(
- new StringPatchItem.Builder().operation(PatchOperation.DELETE).value(toRemove).build());
- }
+ original.getRoles().stream().filter(role -> !updated.getRoles().contains(role)).
+ forEach(toRemove -> {
+ result.getRoles().add(new StringPatchItem.Builder().
+ operation(PatchOperation.DELETE).value(toRemove).build());
+ });
}
- for (String toAdd : CollectionUtils.subtract(updated.getRoles(), original.getRoles())) {
- result.getRoles().add(
- new StringPatchItem.Builder().operation(PatchOperation.ADD_REPLACE).value(toAdd).build());
- }
+ updated.getRoles().stream().filter(role -> !original.getRoles().contains(role)).
+ forEach(toAdd -> {
+ result.getRoles().add(new StringPatchItem.Builder().
+ operation(PatchOperation.ADD_REPLACE).value(toAdd).build());
+ });
// 5. relationships
Map<Pair<String, String>, RelationshipTO> updatedRels =
@@ -307,48 +309,52 @@ public final class AnyOperations {
Map<Pair<String, String>, RelationshipTO> originalRels =
EntityTOUtils.buildRelationshipMap(original.getRelationships());
- for (Map.Entry<Pair<String, String>, RelationshipTO> entry : updatedRels.entrySet()) {
- if (!originalRels.containsKey(entry.getKey())) {
- result.getRelationships().add(new RelationshipPatch.Builder().
- operation(PatchOperation.ADD_REPLACE).
- relationshipTO(entry.getValue()).build());
- }
- }
+ updatedRels.entrySet().stream().
+ filter(entry -> (!originalRels.containsKey(entry.getKey()))).
+ forEachOrdered(entry -> {
+ result.getRelationships().add(new RelationshipPatch.Builder().
+ operation(PatchOperation.ADD_REPLACE).
+ relationshipTO(entry.getValue()).build());
+ });
if (!incremental) {
- for (Pair<String, String> key : CollectionUtils.subtract(originalRels.keySet(), updatedRels.keySet())) {
- result.getRelationships().add(new RelationshipPatch.Builder().
- operation(PatchOperation.DELETE).
- relationshipTO(originalRels.get(key)).build());
- }
+ originalRels.keySet().stream().filter(relationship -> !updatedRels.containsKey(relationship)).
+ forEach(key -> {
+ result.getRelationships().add(new RelationshipPatch.Builder().
+ operation(PatchOperation.DELETE).
+ relationshipTO(originalRels.get(key)).build());
+ });
}
// 6. memberships
Map<String, MembershipTO> updatedMembs = EntityTOUtils.buildMembershipMap(updated.getMemberships());
Map<String, MembershipTO> originalMembs = EntityTOUtils.buildMembershipMap(original.getMemberships());
- for (Map.Entry<String, MembershipTO> entry : updatedMembs.entrySet()) {
- MembershipPatch membershipPatch = new MembershipPatch.Builder().
- operation(PatchOperation.ADD_REPLACE).group(entry.getValue().getGroupKey()).build();
-
- MembershipTO omemb;
- if (originalMembs.containsKey(entry.getKey())) {
- // get the original membership
- omemb = originalMembs.get(entry.getKey());
- } else {
- // create an empty one to generate the patch
- omemb = new MembershipTO.Builder().group(entry.getKey()).build();
- }
-
- diff(entry.getValue(), omemb, membershipPatch, incremental);
- result.getMemberships().add(membershipPatch);
- }
+ updatedMembs.entrySet().stream().
+ map(entry -> {
+ MembershipPatch membershipPatch = new MembershipPatch.Builder().
+ operation(PatchOperation.ADD_REPLACE).group(entry.getValue().getGroupKey()).build();
+ MembershipTO omemb;
+ if (originalMembs.containsKey(entry.getKey())) {
+ // get the original membership
+ omemb = originalMembs.get(entry.getKey());
+ } else {
+ // create an empty one to generate the patch
+ omemb = new MembershipTO.Builder().group(entry.getKey()).build();
+ }
+ diff(entry.getValue(), omemb, membershipPatch, incremental);
+ return membershipPatch;
+ }).
+ forEachOrdered(membershipPatch -> {
+ result.getMemberships().add(membershipPatch);
+ });
if (!incremental) {
- for (String key : CollectionUtils.subtract(originalMembs.keySet(), updatedMembs.keySet())) {
- result.getMemberships().add(new MembershipPatch.Builder().
- operation(PatchOperation.DELETE).group(originalMembs.get(key).getGroupKey()).build());
- }
+ originalMembs.keySet().stream().filter(membership -> !updatedMembs.containsKey(membership)).
+ forEach(key -> {
+ result.getMemberships().add(new MembershipPatch.Builder().
+ operation(PatchOperation.DELETE).group(originalMembs.get(key).getGroupKey()).build());
+ });
}
return result;
@@ -403,7 +409,7 @@ public final class AnyOperations {
private static Collection<AttrTO> patch(final Map<String, AttrTO> attrs, final Set<AttrPatch> attrPatches) {
Map<String, AttrTO> rwattrs = new HashMap<>(attrs);
- for (AttrPatch patch : attrPatches) {
+ attrPatches.forEach(patch -> {
if (patch.getAttrTO() == null) {
LOG.warn("Invalid {} specified: {}", AttrPatch.class.getName(), patch);
} else {
@@ -412,7 +418,7 @@ public final class AnyOperations {
rwattrs.put(patch.getAttrTO().getSchema(), patch.getAttrTO());
}
}
- }
+ });
return rwattrs.values();
}
@@ -496,46 +502,44 @@ public final class AnyOperations {
}
// 1. relationships
- for (RelationshipPatch relPatch : anyObjectPatch.getRelationships()) {
- if (relPatch.getRelationshipTO() == null) {
- LOG.warn("Invalid {} specified: {}", RelationshipPatch.class.getName(), relPatch);
- } else {
- result.getRelationships().remove(relPatch.getRelationshipTO());
- if (relPatch.getOperation() == PatchOperation.ADD_REPLACE) {
- result.getRelationships().add(relPatch.getRelationshipTO());
- }
- }
- }
+ anyObjectPatch.getRelationships().
+ forEach(relPatch -> {
+ if (relPatch.getRelationshipTO() == null) {
+ LOG.warn("Invalid {} specified: {}", RelationshipPatch.class.getName(), relPatch);
+ } else {
+ result.getRelationships().remove(relPatch.getRelationshipTO());
+ if (relPatch.getOperation() == PatchOperation.ADD_REPLACE) {
+ result.getRelationships().add(relPatch.getRelationshipTO());
+ }
+ }
+ });
// 2. memberships
- for (final MembershipPatch membPatch : anyObjectPatch.getMemberships()) {
- if (membPatch.getGroup() == null) {
- LOG.warn("Invalid {} specified: {}", MembershipPatch.class.getName(), membPatch);
- } else {
- MembershipTO memb = IterableUtils.find(result.getMemberships(), new Predicate<MembershipTO>() {
-
- @Override
- public boolean evaluate(final MembershipTO object) {
- return membPatch.getGroup().equals(object.getGroupKey());
+ anyObjectPatch.getMemberships().
+ forEach(membPatch -> {
+ if (membPatch.getGroup() == null) {
+ LOG.warn("Invalid {} specified: {}", MembershipPatch.class.getName(), membPatch);
+ } else {
+ Optional<MembershipTO> memb = result.getMemberships().stream().
+ filter(membership -> membPatch.getGroup().equals(membership.getGroupKey())).findFirst();
+ if (memb.isPresent()) {
+ result.getMemberships().remove(memb.get());
+ }
+
+ if (membPatch.getOperation() == PatchOperation.ADD_REPLACE) {
+ MembershipTO newMembershipTO =
+ new MembershipTO.Builder().group(membPatch.getGroup()).build();
+
+ // 3. plain attributes
+ newMembershipTO.getPlainAttrs().addAll(membPatch.getPlainAttrs());
+
+ // 4. virtual attributes
+ newMembershipTO.getVirAttrs().addAll(membPatch.getVirAttrs());
+
+ result.getMemberships().add(newMembershipTO);
+ }
}
});
- if (memb != null) {
- result.getMemberships().remove(memb);
- }
-
- if (membPatch.getOperation() == PatchOperation.ADD_REPLACE) {
- MembershipTO newMembershipTO = new MembershipTO.Builder().group(membPatch.getGroup()).build();
-
- // 3. plain attributes
- newMembershipTO.getPlainAttrs().addAll(membPatch.getPlainAttrs());
-
- // 4. virtual attributes
- newMembershipTO.getVirAttrs().addAll(membPatch.getVirAttrs());
-
- result.getMemberships().add(newMembershipTO);
- }
- }
- }
return result;
}
@@ -555,46 +559,44 @@ public final class AnyOperations {
}
// 3. relationships
- for (RelationshipPatch relPatch : userPatch.getRelationships()) {
- if (relPatch.getRelationshipTO() == null) {
- LOG.warn("Invalid {} specified: {}", RelationshipPatch.class.getName(), relPatch);
- } else {
- result.getRelationships().remove(relPatch.getRelationshipTO());
- if (relPatch.getOperation() == PatchOperation.ADD_REPLACE) {
- result.getRelationships().add(relPatch.getRelationshipTO());
- }
- }
- }
+ userPatch.getRelationships().
+ forEach(relPatch -> {
+ if (relPatch.getRelationshipTO() == null) {
+ LOG.warn("Invalid {} specified: {}", RelationshipPatch.class.getName(), relPatch);
+ } else {
+ result.getRelationships().remove(relPatch.getRelationshipTO());
+ if (relPatch.getOperation() == PatchOperation.ADD_REPLACE) {
+ result.getRelationships().add(relPatch.getRelationshipTO());
+ }
+ }
+ });
// 4. memberships
- for (final MembershipPatch membPatch : userPatch.getMemberships()) {
- if (membPatch.getGroup() == null) {
- LOG.warn("Invalid {} specified: {}", MembershipPatch.class.getName(), membPatch);
- } else {
- MembershipTO memb = IterableUtils.find(result.getMemberships(), new Predicate<MembershipTO>() {
-
- @Override
- public boolean evaluate(final MembershipTO object) {
- return membPatch.getGroup().equals(object.getGroupKey());
+ userPatch.getMemberships().
+ forEach(membPatch -> {
+ if (membPatch.getGroup() == null) {
+ LOG.warn("Invalid {} specified: {}", MembershipPatch.class.getName(), membPatch);
+ } else {
+ Optional<MembershipTO> memb = result.getMemberships().stream().
+ filter(membership -> membPatch.getGroup().equals(membership.getGroupKey())).findFirst();
+ if (memb.isPresent()) {
+ result.getMemberships().remove(memb.get());
+ }
+
+ if (membPatch.getOperation() == PatchOperation.ADD_REPLACE) {
+ MembershipTO newMembershipTO =
+ new MembershipTO.Builder().group(membPatch.getGroup()).build();
+
+ // 3. plain attributes
+ newMembershipTO.getPlainAttrs().addAll(membPatch.getPlainAttrs());
+
+ // 4. virtual attributes
+ newMembershipTO.getVirAttrs().addAll(membPatch.getVirAttrs());
+
+ result.getMemberships().add(newMembershipTO);
+ }
}
});
- if (memb != null) {
- result.getMemberships().remove(memb);
- }
-
- if (membPatch.getOperation() == PatchOperation.ADD_REPLACE) {
- MembershipTO newMembershipTO = new MembershipTO.Builder().group(membPatch.getGroup()).build();
-
- // 3. plain attributes
- newMembershipTO.getPlainAttrs().addAll(membPatch.getPlainAttrs());
-
- // 4. virtual attributes
- newMembershipTO.getVirAttrs().addAll(membPatch.getVirAttrs());
-
- result.getMemberships().add(newMembershipTO);
- }
- }
- }
// 5. roles
for (StringPatchItem rolePatch : userPatch.getRoles()) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java b/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
index dfc0a1e..38f5202 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
@@ -22,30 +22,16 @@ import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import org.apache.commons.collections4.Transformer;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.to.AttrTO;
-import org.apache.syncope.common.lib.to.EntityTO;
import org.apache.syncope.common.lib.to.MembershipTO;
import org.apache.syncope.common.lib.to.RelationshipTO;
public final class EntityTOUtils {
- public static <E extends EntityTO> Transformer<E, String> keyTransformer() {
- return new Transformer<E, String>() {
-
- @Override
- public String transform(final E input) {
- return input.getKey();
- }
- };
- }
-
public static Map<String, AttrTO> buildAttrMap(final Collection<AttrTO> attrs) {
Map<String, AttrTO> result = new HashMap<>(attrs.size());
- for (AttrTO attributeTO : attrs) {
- result.put(attributeTO.getSchema(), attributeTO);
- }
+ attrs.forEach(attrTO -> result.put(attrTO.getSchema(), attrTO));
return Collections.unmodifiableMap(result);
}
@@ -54,18 +40,15 @@ public final class EntityTOUtils {
final Collection<RelationshipTO> relationships) {
Map<Pair<String, String>, RelationshipTO> result = new HashMap<>(relationships.size());
- for (RelationshipTO relationship : relationships) {
- result.put(Pair.of(relationship.getType(), relationship.getRightKey()), relationship);
- }
+ relationships.forEach(
+ relationship -> result.put(Pair.of(relationship.getType(), relationship.getRightKey()), relationship));
return Collections.unmodifiableMap(result);
}
public static Map<String, MembershipTO> buildMembershipMap(final Collection<MembershipTO> memberships) {
Map<String, MembershipTO> result = new HashMap<>(memberships.size());
- for (MembershipTO membership : memberships) {
- result.put(membership.getRightKey(), membership);
- }
+ memberships.forEach(membership -> result.put(membership.getRightKey(), membership));
return Collections.unmodifiableMap(result);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientCompositeException.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientCompositeException.java b/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientCompositeException.java
index b338df8..3e7bc0c 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientCompositeException.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientCompositeException.java
@@ -20,9 +20,8 @@ package org.apache.syncope.common.lib;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.Optional;
import java.util.Set;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.types.ClientExceptionType;
public class SyncopeClientCompositeException extends SyncopeClientException {
@@ -68,17 +67,12 @@ public class SyncopeClientCompositeException extends SyncopeClientException {
+ ClientExceptionType.class.getName() + " set");
}
- SyncopeClientException alreadyAdded = IterableUtils.find(exceptions, new Predicate<SyncopeClientException>() {
+ Optional<SyncopeClientException> alreadyAdded =
+ exceptions.stream().filter(ex -> ex.getType() == exception.getType()).findFirst();
- @Override
- public boolean evaluate(final SyncopeClientException ex) {
- return ex.getType() == exception.getType();
- }
- });
-
- return alreadyAdded == null
- ? exceptions.add(exception)
- : alreadyAdded.getElements().addAll(exception.getElements());
+ return alreadyAdded.isPresent()
+ ? alreadyAdded.get().getElements().addAll(exception.getElements())
+ : exceptions.add(exception);
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/collections/CircularFifoQueue.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/collections/CircularFifoQueue.java b/common/lib/src/main/java/org/apache/syncope/common/lib/collections/CircularFifoQueue.java
new file mode 100644
index 0000000..1977a7e
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/collections/CircularFifoQueue.java
@@ -0,0 +1,427 @@
+/*
+ * 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.collections;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Queue;
+
+/**
+ * CircularFifoQueue is a first-in first-out queue with a fixed size that
+ * replaces its oldest element if full.
+ *
+ * The removal order of a {@link CircularFifoQueue} is based on the
+ * insertion order; elements are removed in the same order in which they
+ * were added. The iteration order is the same as the removal order.
+ *
+ * The {@link #add(Object)}, {@link #remove()}, {@link #peek()}, {@link #poll},
+ * {@link #offer(Object)} operations all perform in constant time.
+ * All other operations perform in linear time or worse.
+ *
+ * This queue prevents null objects from being added.
+ *
+ * @param <E> the type of elements held in this collection
+ */
+public class CircularFifoQueue<E> extends AbstractCollection<E> implements Queue<E>, Serializable {
+
+ private static final long serialVersionUID = -8423413834657610406L;
+
+ /** Underlying storage array. */
+ private transient E[] elements;
+
+ /** Array index of first (oldest) queue element. */
+ private transient int start = 0;
+
+ /**
+ * Index mod maxElements of the array position following the last queue
+ * element. Queue elements start at elements[start] and "wrap around"
+ * elements[maxElements-1], ending at elements[decrement(end)].
+ * For example, elements = {c,a,b}, start=1, end=1 corresponds to
+ * the queue [a,b,c].
+ */
+ private transient int end = 0;
+
+ /** Flag to indicate if the queue is currently full. */
+ private transient boolean full = false;
+
+ /** Capacity of the queue. */
+ private final int maxElements;
+
+ /**
+ * Constructor that creates a queue with the default size of 32.
+ */
+ public CircularFifoQueue() {
+ this(32);
+ }
+
+ /**
+ * Constructor that creates a queue with the specified size.
+ *
+ * @param size the size of the queue (cannot be changed)
+ * @throws IllegalArgumentException if the size is < 1
+ */
+ @SuppressWarnings("unchecked")
+ public CircularFifoQueue(final int size) {
+ if (size <= 0) {
+ throw new IllegalArgumentException("The size must be greater than 0");
+ }
+ elements = (E[]) new Object[size];
+ maxElements = elements.length;
+ }
+
+ /**
+ * Constructor that creates a queue from the specified collection.
+ * The collection size also sets the queue size.
+ *
+ * @param coll the collection to copy into the queue, may not be null
+ * @throws NullPointerException if the collection is null
+ */
+ public CircularFifoQueue(final Collection<? extends E> coll) {
+ this(coll.size());
+ addAll(coll);
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Write the queue out using a custom routine.
+ *
+ * @param out the output stream
+ * @throws IOException if an I/O error occurs while writing to the output stream
+ */
+ private void writeObject(final ObjectOutputStream out) throws IOException {
+ out.defaultWriteObject();
+ out.writeInt(size());
+ for (final E e : this) {
+ out.writeObject(e);
+ }
+ }
+
+ /**
+ * Read the queue in using a custom routine.
+ *
+ * @param in the input stream
+ * @throws IOException if an I/O error occurs while writing to the output stream
+ * @throws ClassNotFoundException if the class of a serialized object can not be found
+ */
+ @SuppressWarnings("unchecked")
+ private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
+ in.defaultReadObject();
+ elements = (E[]) new Object[maxElements];
+ final int size = in.readInt();
+ for (int i = 0; i < size; i++) {
+ elements[i] = (E) in.readObject();
+ }
+ start = 0;
+ full = size == maxElements;
+ if (full) {
+ end = 0;
+ } else {
+ end = size;
+ }
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Returns the number of elements stored in the queue.
+ *
+ * @return this queue's size
+ */
+ @Override
+ public int size() {
+ int size;
+
+ if (end < start) {
+ size = maxElements - start + end;
+ } else if (end == start) {
+ size = full ? maxElements : 0;
+ } else {
+ size = end - start;
+ }
+
+ return size;
+ }
+
+ /**
+ * Returns true if this queue is empty; false otherwise.
+ *
+ * @return true if this queue is empty
+ */
+ @Override
+ public boolean isEmpty() {
+ return size() == 0;
+ }
+
+ /**
+ * {@inheritDoc}
+ * <p>
+ * A {@code CircularFifoQueue} can never be full, thus this returns always
+ * {@code false}.
+ *
+ * @return always returns {@code false}
+ */
+ public boolean isFull() {
+ return false;
+ }
+
+ /**
+ * Returns {@code true} if the capacity limit of this queue has been reached,
+ * i.e. the number of elements stored in the queue equals its maximum size.
+ *
+ * @return {@code true} if the capacity limit has been reached, {@code false} otherwise
+ * @since 4.1
+ */
+ public boolean isAtFullCapacity() {
+ return size() == maxElements;
+ }
+
+ /**
+ * Gets the maximum size of the collection (the bound).
+ *
+ * @return the maximum number of elements the collection can hold
+ */
+ public int maxSize() {
+ return maxElements;
+ }
+
+ /**
+ * Clears this queue.
+ */
+ @Override
+ public void clear() {
+ full = false;
+ start = 0;
+ end = 0;
+ Arrays.fill(elements, null);
+ }
+
+ /**
+ * Adds the given element to this queue. If the queue is full, the least recently added
+ * element is discarded so that a new element can be inserted.
+ *
+ * @param element the element to add
+ * @return true, always
+ * @throws NullPointerException if the given element is null
+ */
+ @Override
+ public boolean add(final E element) {
+ if (null == element) {
+ throw new NullPointerException("Attempted to add null object to queue");
+ }
+
+ if (isAtFullCapacity()) {
+ remove();
+ }
+
+ elements[end++] = element;
+
+ if (end >= maxElements) {
+ end = 0;
+ }
+
+ if (end == start) {
+ full = true;
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns the element at the specified position in this queue.
+ *
+ * @param index the position of the element in the queue
+ * @return the element at position {@code index}
+ * @throws NoSuchElementException if the requested position is outside the range [0, size)
+ */
+ public E get(final int index) {
+ final int sz = size();
+ if (index < 0 || index >= sz) {
+ throw new NoSuchElementException(
+ String.format("The specified index (%1$d) is outside the available range [0, %2$d)",
+ index, Integer.valueOf(sz)));
+ }
+
+ final int idx = (start + index) % maxElements;
+ return elements[idx];
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Adds the given element to this queue. If the queue is full, the least recently added
+ * element is discarded so that a new element can be inserted.
+ *
+ * @param element the element to add
+ * @return true, always
+ * @throws NullPointerException if the given element is null
+ */
+ @Override
+ public boolean offer(final E element) {
+ return add(element);
+ }
+
+ @Override
+ public E poll() {
+ if (isEmpty()) {
+ return null;
+ }
+ return remove();
+ }
+
+ @Override
+ public E element() {
+ if (isEmpty()) {
+ throw new NoSuchElementException("queue is empty");
+ }
+ return peek();
+ }
+
+ @Override
+ public E peek() {
+ if (isEmpty()) {
+ return null;
+ }
+ return elements[start];
+ }
+
+ @Override
+ public E remove() {
+ if (isEmpty()) {
+ throw new NoSuchElementException("queue is empty");
+ }
+
+ final E element = elements[start];
+ if (null != element) {
+ elements[start++] = null;
+
+ if (start >= maxElements) {
+ start = 0;
+ }
+ full = false;
+ }
+ return element;
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Increments the internal index.
+ *
+ * @param index the index to increment
+ * @return the updated index
+ */
+ private int increment(final int index) {
+ int result = index;
+ result++;
+ if (result >= maxElements) {
+ result = 0;
+ }
+ return result;
+ }
+
+ /**
+ * Decrements the internal index.
+ *
+ * @param index the index to decrement
+ * @return the updated index
+ */
+ private int decrement(final int index) {
+ int result = index;
+ result--;
+ if (result < 0) {
+ result = maxElements - 1;
+ }
+ return result;
+ }
+
+ /**
+ * Returns an iterator over this queue's elements.
+ *
+ * @return an iterator over this queue's elements
+ */
+ @Override
+ public Iterator<E> iterator() {
+ return new Iterator<E>() {
+
+ private int index = start;
+
+ private int lastReturnedIndex = -1;
+
+ private boolean isFirst = full;
+
+ @Override
+ public boolean hasNext() {
+ return isFirst || index != end;
+ }
+
+ @Override
+ public E next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ isFirst = false;
+ lastReturnedIndex = index;
+ index = increment(index);
+ return elements[lastReturnedIndex];
+ }
+
+ @Override
+ public void remove() {
+ if (lastReturnedIndex == -1) {
+ throw new IllegalStateException();
+ }
+
+ // First element can be removed quickly
+ if (lastReturnedIndex == start) {
+ CircularFifoQueue.this.remove();
+ lastReturnedIndex = -1;
+ return;
+ }
+
+ int pos = lastReturnedIndex + 1;
+ if (start < lastReturnedIndex && pos < end) {
+ // shift in one part
+ System.arraycopy(elements, pos, elements, lastReturnedIndex, end - pos);
+ } else {
+ // Other elements require us to shift the subsequent elements
+ while (pos != end) {
+ if (pos >= maxElements) {
+ elements[pos - 1] = elements[0];
+ pos = 0;
+ } else {
+ elements[decrement(pos)] = elements[pos];
+ pos = increment(pos);
+ }
+ }
+ }
+
+ lastReturnedIndex = -1;
+ end = decrement(end);
+ elements[end] = null;
+ full = false;
+ index = decrement(index);
+ }
+
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/collections/IteratorChain.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/collections/IteratorChain.java b/common/lib/src/main/java/org/apache/syncope/common/lib/collections/IteratorChain.java
new file mode 100644
index 0000000..c26de2a
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/collections/IteratorChain.java
@@ -0,0 +1,282 @@
+/*
+ * 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.collections;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Queue;
+
+/**
+ * An IteratorChain is an Iterator that wraps a number of Iterators.
+ *
+ * This class makes multiple iterators look like one to the caller. When any
+ * method from the Iterator interface is called, the IteratorChain will delegate
+ * to a single underlying Iterator. The IteratorChain will invoke the Iterators
+ * in sequence until all Iterators are exhausted.
+ *
+ * Under many circumstances, linking Iterators together in this manner is more
+ * efficient (and convenient) than reading out the contents of each Iterator
+ * into a List and creating a new Iterator.
+ *
+ * Calling a method that adds new Iterator <i>after a method in the Iterator
+ * interface has been called</i> will result in an UnsupportedOperationException.
+ *
+ * NOTE: As from version 3.0, the IteratorChain may contain no iterators. In
+ * this case the class will function as an empty iterator.
+ *
+ * NOTE: As from version 4.0, the IteratorChain stores the iterators in a queue
+ * and removes any reference to them as soon as they are not used anymore. Thus
+ * the methods {@code setIterator(Iterator)} and {@code getIterators()} have been
+ * removed and {@link #size()} will return the number of remaining iterators in
+ * the queue.
+ *
+ * @param <E> the type of elements held in this collection
+ */
+public class IteratorChain<E> implements Iterator<E> {
+
+ /** The chain of iterators. */
+ private final Queue<Iterator<? extends E>> iteratorChain = new LinkedList<>();
+
+ /** The current iterator. */
+ private Iterator<? extends E> currentIterator = null;
+
+ /**
+ * The "last used" Iterator is the Iterator upon which next() or hasNext()
+ * was most recently called used for the remove() operation only.
+ */
+ private Iterator<? extends E> lastUsedIterator = null;
+
+ /**
+ * ComparatorChain is "locked" after the first time compare(Object,Object)
+ * is called.
+ */
+ private boolean isLocked = false;
+
+ //-----------------------------------------------------------------------
+ /**
+ * Construct an IteratorChain with no Iterators.
+ *
+ * You will normally use {@link #addIterator(Iterator)} to add some
+ * iterators after using this constructor.
+ */
+ public IteratorChain() {
+ super();
+ }
+
+ /**
+ * Construct an IteratorChain with a single Iterator.
+ *
+ * This method takes one iterator. The newly constructed iterator will
+ * iterate through that iterator. Thus calling this constructor on its own
+ * will have no effect other than decorating the input iterator.
+ *
+ * You will normally use {@link #addIterator(Iterator)} to add some more
+ * iterators after using this constructor.
+ *
+ * @param iterator the first child iterator in the IteratorChain, not null
+ * @throws NullPointerException if the iterator is null
+ */
+ public IteratorChain(final Iterator<? extends E> iterator) {
+ super();
+ addIterator(iterator);
+ }
+
+ /**
+ * Constructs a new <code>IteratorChain</code> over the two given iterators.
+ *
+ * This method takes two iterators. The newly constructed iterator will
+ * iterate through each one of the input iterators in turn.
+ *
+ * @param first the first child iterator in the IteratorChain, not null
+ * @param second the second child iterator in the IteratorChain, not null
+ * @throws NullPointerException if either iterator is null
+ */
+ public IteratorChain(final Iterator<? extends E> first, final Iterator<? extends E> second) {
+ super();
+ addIterator(first);
+ addIterator(second);
+ }
+
+ /**
+ * Constructs a new <code>IteratorChain</code> over the array of iterators.
+ *
+ * This method takes an array of iterators. The newly constructed iterator
+ * will iterate through each one of the input iterators in turn.
+ *
+ * @param iteratorChain the array of iterators, not null
+ * @throws NullPointerException if iterators array is or contains null
+ */
+ public IteratorChain(final Iterator<? extends E>... iteratorChain) {
+ super();
+ for (final Iterator<? extends E> element : iteratorChain) {
+ addIterator(element);
+ }
+ }
+
+ /**
+ * Constructs a new <code>IteratorChain</code> over the collection of
+ * iterators.
+ *
+ * This method takes a collection of iterators. The newly constructed
+ * iterator will iterate through each one of the input iterators in turn.
+ *
+ * @param iteratorChain the collection of iterators, not null
+ * @throws NullPointerException if iterators collection is or contains null
+ * @throws ClassCastException if iterators collection doesn't contain an
+ * iterator
+ */
+ public IteratorChain(final Collection<Iterator<? extends E>> iteratorChain) {
+ super();
+ for (final Iterator<? extends E> iterator : iteratorChain) {
+ addIterator(iterator);
+ }
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Add an Iterator to the end of the chain
+ *
+ * @param iterator Iterator to add
+ * @throws IllegalStateException if I've already started iterating
+ * @throws NullPointerException if the iterator is null
+ */
+ public void addIterator(final Iterator<? extends E> iterator) {
+ checkLocked();
+ if (iterator == null) {
+ throw new NullPointerException("Iterator must not be null");
+ }
+ iteratorChain.add(iterator);
+ }
+
+ /**
+ * Returns the remaining number of Iterators in the current IteratorChain.
+ *
+ * @return Iterator count
+ */
+ public int size() {
+ return iteratorChain.size();
+ }
+
+ /**
+ * Determine if modifications can still be made to the IteratorChain.
+ * IteratorChains cannot be modified once they have executed a method from
+ * the Iterator interface.
+ *
+ * @return true if IteratorChain cannot be modified, false if it can
+ */
+ public boolean isLocked() {
+ return isLocked;
+ }
+
+ /**
+ * Checks whether the iterator chain is now locked and in use.
+ */
+ private void checkLocked() {
+ if (isLocked) {
+ throw new UnsupportedOperationException(
+ "IteratorChain cannot be changed after the first use of a method from the Iterator interface");
+ }
+ }
+
+ /**
+ * Lock the chain so no more iterators can be added. This must be called
+ * from all Iterator interface methods.
+ */
+ private void lockChain() {
+ if (!isLocked) {
+ isLocked = true;
+ }
+ }
+
+ /**
+ * Updates the current iterator field to ensure that the current Iterator is
+ * not exhausted
+ */
+ protected void updateCurrentIterator() {
+ if (currentIterator == null) {
+ if (iteratorChain.isEmpty()) {
+ currentIterator = Collections.emptyListIterator();
+ } else {
+ currentIterator = iteratorChain.remove();
+ }
+ // set last used iterator here, in case the user calls remove
+ // before calling hasNext() or next() (although they shouldn't)
+ lastUsedIterator = currentIterator;
+ }
+
+ while (!currentIterator.hasNext() && !iteratorChain.isEmpty()) {
+ currentIterator = iteratorChain.remove();
+ }
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Return true if any Iterator in the IteratorChain has a remaining element.
+ *
+ * @return true if elements remain
+ */
+ @Override
+ public boolean hasNext() {
+ lockChain();
+ updateCurrentIterator();
+ lastUsedIterator = currentIterator;
+
+ return currentIterator.hasNext();
+ }
+
+ /**
+ * Returns the next Object of the current Iterator
+ *
+ * @return Object from the current Iterator
+ * @throws java.util.NoSuchElementException if all the Iterators are
+ * exhausted
+ */
+ @Override
+ public E next() {
+ lockChain();
+ updateCurrentIterator();
+ lastUsedIterator = currentIterator;
+
+ return currentIterator.next();
+ }
+
+ /**
+ * Removes from the underlying collection the last element returned by the
+ * Iterator. As with next() and hasNext(), this method calls remove() on the
+ * underlying Iterator. Therefore, this method may throw an
+ * UnsupportedOperationException if the underlying Iterator does not support
+ * this method.
+ *
+ * @throws UnsupportedOperationException if the remove operator is not
+ * supported by the underlying Iterator
+ * @throws IllegalStateException if the next method has not yet been called,
+ * or the remove method has already been called after the last call to the
+ * next method.
+ */
+ @Override
+ public void remove() {
+ lockChain();
+ if (currentIterator == null) {
+ updateCurrentIterator();
+ }
+ lastUsedIterator.remove();
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/info/SystemInfo.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/info/SystemInfo.java b/common/lib/src/main/java/org/apache/syncope/common/lib/info/SystemInfo.java
index 2a0f1f4..216316b 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/info/SystemInfo.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/info/SystemInfo.java
@@ -24,8 +24,8 @@ 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.commons.collections4.queue.CircularFifoQueue;
import org.apache.syncope.common.lib.AbstractBaseBean;
+import org.apache.syncope.common.lib.collections.CircularFifoQueue;
@XmlRootElement(name = "systemInfo")
@XmlType
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapType.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapType.java
index e57a401..48dca0b 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapType.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapType.java
@@ -28,9 +28,7 @@ public class GenericMapType<K, V> {
}
public GenericMapType(final Map<K, V> map) {
- for (Map.Entry<K, V> e : map.entrySet()) {
- entry.add(new GenericMapEntryType<>(e));
- }
+ map.entrySet().forEach(e -> entry.add(new GenericMapEntryType<>(e)));
}
public List<GenericMapEntryType<K, V>> getEntry() {
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/XmlGenericMapAdapter.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/XmlGenericMapAdapter.java b/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/XmlGenericMapAdapter.java
index 1855164..63d6825 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/XmlGenericMapAdapter.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/XmlGenericMapAdapter.java
@@ -26,9 +26,7 @@ public class XmlGenericMapAdapter<K, V> extends XmlAdapter<GenericMapType<K, V>,
public Map<K, V> unmarshal(final GenericMapType<K, V> v) throws Exception {
Map<K, V> map = new HashMap<>();
- for (GenericMapEntryType<K, V> mapEntryType : v.getEntry()) {
- map.put(mapEntryType.getKey(), mapEntryType.getValue());
- }
+ v.getEntry().forEach(mapEntryType -> map.put(mapEntryType.getKey(), mapEntryType.getValue()));
return map;
}
@@ -37,12 +35,12 @@ public class XmlGenericMapAdapter<K, V> extends XmlAdapter<GenericMapType<K, V>,
public GenericMapType<K, V> marshal(final Map<K, V> v) throws Exception {
GenericMapType<K, V> mapType = new GenericMapType<>();
- for (Map.Entry<K, V> entry : v.entrySet()) {
+ v.entrySet().stream().map(entry -> {
GenericMapEntryType<K, V> mapEntryType = new GenericMapEntryType<>();
mapEntryType.setKey(entry.getKey());
mapEntryType.setValue(entry.getValue());
- mapType.getEntry().add(mapEntryType);
- }
+ return mapEntryType;
+ }).forEachOrdered(mapEntryType -> mapType.getEntry().add(mapEntryType));
return mapType;
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/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 0cf5f31..3bfaeab 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
@@ -24,13 +24,12 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
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.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter;
import org.apache.syncope.common.lib.to.TypeExtensionTO;
@@ -92,14 +91,9 @@ public class GroupPatch extends AnyPatch {
}
@JsonIgnore
- public TypeExtensionTO getTypeExtension(final String anyType) {
- return IterableUtils.find(typeExtensions, new Predicate<TypeExtensionTO>() {
-
- @Override
- public boolean evaluate(final TypeExtensionTO typeExtension) {
- return anyType != null && anyType.equals(typeExtension.getAnyType());
- }
- });
+ public Optional<TypeExtensionTO> getTypeExtension(final String anyType) {
+ return typeExtensions.stream().filter(
+ typeExtension -> anyType != null && anyType.equals(typeExtension.getAnyType())).findFirst();
}
@XmlElementWrapper(name = "typeExtensions")
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/PasswordPatch.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/PasswordPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/PasswordPatch.java
index 93e6b9e..b02e52e 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/PasswordPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/PasswordPatch.java
@@ -27,7 +27,6 @@ import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
-import org.apache.commons.collections4.CollectionUtils;
@XmlRootElement(name = "passwordPatch")
@XmlType
@@ -56,7 +55,9 @@ public class PasswordPatch extends StringReplacePatchItem {
}
public Builder resources(final String... resources) {
- CollectionUtils.addAll(getInstance().getResources(), resources);
+ for (String resource : resources) {
+ getInstance().getResources().add(resource);
+ }
return this;
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/search/SpecialAttr.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/search/SpecialAttr.java b/common/lib/src/main/java/org/apache/syncope/common/lib/search/SpecialAttr.java
index c744169..1a90376 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/search/SpecialAttr.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/search/SpecialAttr.java
@@ -19,8 +19,7 @@
package org.apache.syncope.common.lib.search;
import java.util.Arrays;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
+import java.util.Optional;
public enum SpecialAttr {
@@ -79,14 +78,8 @@ public enum SpecialAttr {
return literal;
}
- public static SpecialAttr fromString(final String value) {
- return IterableUtils.find(Arrays.asList(values()), new Predicate<SpecialAttr>() {
-
- @Override
- public boolean evaluate(final SpecialAttr specialAttr) {
- return specialAttr.literal.equals(value);
- }
- });
+ public static Optional<SpecialAttr> fromString(final String value) {
+ return Arrays.stream(values()).filter(specialAttr -> specialAttr.literal.equals(value)).findFirst();
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java
index af8b0ea..7641687 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java
@@ -22,12 +22,11 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
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.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
@XmlRootElement(name = "anyObject")
@XmlType
@@ -53,14 +52,10 @@ public class AnyObjectTO extends AnyTO implements GroupableRelatableTO {
@JsonIgnore
@Override
- public RelationshipTO getRelationship(final String type, final String rightKey) {
- return IterableUtils.find(relationships, new Predicate<RelationshipTO>() {
-
- @Override
- public boolean evaluate(final RelationshipTO object) {
- return type.equals(object.getType()) && rightKey.equals(object.getRightKey());
- }
- });
+ public Optional<RelationshipTO> getRelationship(final String type, final String rightKey) {
+ return relationships.stream().filter(
+ relationship -> type.equals(relationship.getType()) && rightKey.equals(relationship.getRightKey())).
+ findFirst();
}
@XmlElementWrapper(name = "relationships")
@@ -73,14 +68,8 @@ public class AnyObjectTO extends AnyTO implements GroupableRelatableTO {
@JsonIgnore
@Override
- public MembershipTO getMembership(final String groupKey) {
- return IterableUtils.find(memberships, new Predicate<MembershipTO>() {
-
- @Override
- public boolean evaluate(final MembershipTO object) {
- return groupKey.equals(object.getGroupKey());
- }
- });
+ public Optional<MembershipTO> getMembership(final String groupKey) {
+ return memberships.stream().filter(membership -> groupKey.equals(membership.getGroupKey())).findFirst();
}
@XmlElementWrapper(name = "memberships")
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
index 7796b62..e411e1a 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
@@ -24,13 +24,12 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
-import org.apache.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
@XmlType
@XmlSeeAlso({ UserTO.class, GroupTO.class, AnyObjectTO.class })
@@ -117,14 +116,8 @@ public abstract class AnyTO extends AbstractAnnotatedBean implements EntityTO, A
@JsonIgnore
@Override
- public AttrTO getPlainAttr(final String schema) {
- return IterableUtils.find(plainAttrs, new Predicate<AttrTO>() {
-
- @Override
- public boolean evaluate(final AttrTO object) {
- return object.getSchema().equals(schema);
- }
- });
+ public Optional<AttrTO> getPlainAttr(final String schema) {
+ return plainAttrs.stream().filter(attr -> attr.getSchema().equals(schema)).findFirst();
}
@XmlElementWrapper(name = "derAttrs")
@@ -137,14 +130,8 @@ public abstract class AnyTO extends AbstractAnnotatedBean implements EntityTO, A
@JsonIgnore
@Override
- public AttrTO getDerAttr(final String schema) {
- return IterableUtils.find(derAttrs, new Predicate<AttrTO>() {
-
- @Override
- public boolean evaluate(final AttrTO object) {
- return object.getSchema().equals(schema);
- }
- });
+ public Optional<AttrTO> getDerAttr(final String schema) {
+ return derAttrs.stream().filter(attr -> attr.getSchema().equals(schema)).findFirst();
}
@XmlElementWrapper(name = "virAttrs")
@@ -157,14 +144,8 @@ public abstract class AnyTO extends AbstractAnnotatedBean implements EntityTO, A
@JsonIgnore
@Override
- public AttrTO getVirAttr(final String schema) {
- return IterableUtils.find(virAttrs, new Predicate<AttrTO>() {
-
- @Override
- public boolean evaluate(final AttrTO object) {
- return object.getSchema().equals(schema);
- }
- });
+ public Optional<AttrTO> getVirAttr(final String schema) {
+ return virAttrs.stream().filter(attr -> attr.getSchema().equals(schema)).findFirst();
}
@XmlElementWrapper(name = "resources")
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/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 7822a6b..0c71ca6 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
@@ -28,7 +28,6 @@ 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.commons.collections4.CollectionUtils;
@XmlRootElement(name = "attribute")
@XmlType
@@ -56,7 +55,9 @@ public class AttrTO extends AbstractBaseBean {
}
public Builder values(final String... values) {
- CollectionUtils.addAll(instance.getValues(), values);
+ for (String value : values) {
+ instance.getValues().add(value);
+ }
return this;
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttributableTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttributableTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttributableTO.java
index 79e57b8..d0f900c 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttributableTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttributableTO.java
@@ -18,19 +18,20 @@
*/
package org.apache.syncope.common.lib.to;
+import java.util.Optional;
import java.util.Set;
public interface AttributableTO {
Set<AttrTO> getPlainAttrs();
- AttrTO getPlainAttr(String schema);
+ Optional<AttrTO> getPlainAttr(String schema);
Set<AttrTO> getDerAttrs();
- AttrTO getDerAttr(String schema);
+ Optional<AttrTO> getDerAttr(String schema);
Set<AttrTO> getVirAttrs();
- AttrTO getVirAttr(String schema);
+ Optional<AttrTO> getVirAttr(String schema);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java
index c2e67f4..6458fdb 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java
@@ -69,11 +69,9 @@ public class BulkActionResult extends AbstractBaseBean {
public List<String> getResultByStatus(final Status status) {
final List<String> result = new ArrayList<>();
- for (Map.Entry<String, Status> entry : results.entrySet()) {
- if (entry.getValue() == status) {
- result.add(entry.getKey());
- }
- }
+ results.entrySet().stream().
+ filter((entry) -> (entry.getValue() == status)).
+ forEachOrdered(entry -> result.add(entry.getKey()));
return Collections.unmodifiableList(result);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java
index 23fb590..76424fe 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnInstanceTO.java
@@ -23,14 +23,13 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
import javax.ws.rs.PathParam;
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.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.AbstractBaseBean;
import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.syncope.common.lib.types.ConnectorCapability;
@@ -122,14 +121,8 @@ public class ConnInstanceTO extends AbstractBaseBean implements EntityTO {
}
@JsonIgnore
- public ConnConfProperty getConf(final String schemaName) {
- return IterableUtils.find(conf, new Predicate<ConnConfProperty>() {
-
- @Override
- public boolean evaluate(final ConnConfProperty object) {
- return object.getSchema().getName().equals(schemaName);
- }
- });
+ public Optional<ConnConfProperty> getConf(final String schemaName) {
+ return conf.stream().filter(property -> property.getSchema().getName().equals(schemaName)).findFirst();
}
@XmlElementWrapper(name = "capabilities")
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnObjectTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnObjectTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnObjectTO.java
index 6301d68..6086066 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnObjectTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnObjectTO.java
@@ -21,13 +21,12 @@ package org.apache.syncope.common.lib.to;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.LinkedHashSet;
+import java.util.Optional;
import java.util.Set;
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.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.AbstractBaseBean;
@XmlRootElement(name = "connObject")
@@ -46,13 +45,7 @@ public class ConnObjectTO extends AbstractBaseBean {
}
@JsonIgnore
- public AttrTO getAttr(final String schema) {
- return IterableUtils.find(attrs, new Predicate<AttrTO>() {
-
- @Override
- public boolean evaluate(final AttrTO object) {
- return object.getSchema().equals(schema);
- }
- });
+ public Optional<AttrTO> getAttr(final String schema) {
+ return attrs.stream().filter(attr -> attr.getSchema().equals(schema)).findFirst();
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/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 0ae0885..c531840 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
@@ -24,13 +24,12 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
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.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter;
import org.apache.syncope.common.lib.types.AnyTypeKind;
@@ -102,14 +101,10 @@ public class GroupTO extends AnyTO {
}
@JsonIgnore
- public TypeExtensionTO getTypeExtension(final String anyType) {
- return IterableUtils.find(typeExtensions, new Predicate<TypeExtensionTO>() {
-
- @Override
- public boolean evaluate(final TypeExtensionTO typeExtension) {
- return anyType != null && anyType.equals(typeExtension.getAnyType());
- }
- });
+ public Optional<TypeExtensionTO> getTypeExtension(final String anyType) {
+ return typeExtensions.stream().filter(
+ typeExtension -> anyType != null && anyType.equals(typeExtension.getAnyType())).
+ findFirst();
}
@XmlElementWrapper(name = "typeExtensions")
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableRelatableTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableRelatableTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableRelatableTO.java
index f2b8dbc..37fcb3a 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableRelatableTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableRelatableTO.java
@@ -19,16 +19,17 @@
package org.apache.syncope.common.lib.to;
import java.util.List;
+import java.util.Optional;
public interface GroupableRelatableTO {
- MembershipTO getMembership(String groupKey);
+ Optional<MembershipTO> getMembership(String groupKey);
List<MembershipTO> getMemberships();
List<MembershipTO> getDynMemberships();
- RelationshipTO getRelationship(String type, String rightKey);
+ Optional<RelationshipTO> getRelationship(String type, String rightKey);
List<RelationshipTO> getRelationships();
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingTO.java
index 23c91ac..c3be6f2 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingTO.java
@@ -25,8 +25,6 @@ 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.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.AbstractBaseBean;
@XmlRootElement(name = "mapping")
@@ -51,13 +49,7 @@ public class MappingTO extends AbstractBaseBean implements ItemContainerTO {
@Override
public ItemTO getConnObjectKeyItem() {
- return IterableUtils.find(getItems(), new Predicate<ItemTO>() {
-
- @Override
- public boolean evaluate(final ItemTO item) {
- return item.isConnObjectKey();
- }
- });
+ return getItems().stream().filter(item -> item.isConnObjectKey()).findFirst().get();
}
protected boolean addConnObjectKeyItem(final ItemTO connObjectItem) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
index 5737c7f..9163aba 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
@@ -21,13 +21,12 @@ package org.apache.syncope.common.lib.to;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.HashSet;
+import java.util.Optional;
import java.util.Set;
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.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.types.AnyTypeKind;
@XmlRootElement(name = "membership")
@@ -111,14 +110,8 @@ public class MembershipTO extends RelationshipTO implements AttributableTO {
@JsonIgnore
@Override
- public AttrTO getPlainAttr(final String schema) {
- return IterableUtils.find(plainAttrs, new Predicate<AttrTO>() {
-
- @Override
- public boolean evaluate(final AttrTO object) {
- return object.getSchema().equals(schema);
- }
- });
+ public Optional<AttrTO> getPlainAttr(final String schema) {
+ return plainAttrs.stream().filter(attr -> attr.getSchema().equals(schema)).findFirst();
}
@XmlElementWrapper(name = "derAttrs")
@@ -131,14 +124,8 @@ public class MembershipTO extends RelationshipTO implements AttributableTO {
@JsonIgnore
@Override
- public AttrTO getDerAttr(final String schema) {
- return IterableUtils.find(derAttrs, new Predicate<AttrTO>() {
-
- @Override
- public boolean evaluate(final AttrTO object) {
- return object.getSchema().equals(schema);
- }
- });
+ public Optional<AttrTO> getDerAttr(final String schema) {
+ return derAttrs.stream().filter(attr -> attr.getSchema().equals(schema)).findFirst();
}
@XmlElementWrapper(name = "virAttrs")
@@ -151,13 +138,7 @@ public class MembershipTO extends RelationshipTO implements AttributableTO {
@JsonIgnore
@Override
- public AttrTO getVirAttr(final String schema) {
- return IterableUtils.find(virAttrs, new Predicate<AttrTO>() {
-
- @Override
- public boolean evaluate(final AttrTO object) {
- return object.getSchema().equals(schema);
- }
- });
+ public Optional<AttrTO> getVirAttr(final String schema) {
+ return virAttrs.stream().filter(attr -> attr.getSchema().equals(schema)).findFirst();
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/to/OrgUnitTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/OrgUnitTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/OrgUnitTO.java
index c18b05e..ae4255f 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/OrgUnitTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/OrgUnitTO.java
@@ -25,8 +25,6 @@ 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.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.AbstractBaseBean;
@XmlRootElement(name = "orgUnit")
@@ -81,13 +79,7 @@ public class OrgUnitTO extends AbstractBaseBean implements EntityTO, ItemContain
@Override
public ItemTO getConnObjectKeyItem() {
- return IterableUtils.find(getItems(), new Predicate<ItemTO>() {
-
- @Override
- public boolean evaluate(final ItemTO item) {
- return item.isConnObjectKey();
- }
- });
+ return getItems().stream().filter(item -> item.isConnObjectKey()).findFirst().get();
}
protected boolean addConnObjectKeyItem(final ItemTO connObjectItem) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
index 4bc9c0d..6286e93 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
@@ -23,14 +23,13 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
import javax.ws.rs.PathParam;
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.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
import org.apache.syncope.common.lib.AbstractBaseBean;
import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.syncope.common.lib.types.ConnectorCapability;
@@ -186,14 +185,10 @@ public class ResourceTO extends AbstractBaseBean implements EntityTO {
}
@JsonIgnore
- public ProvisionTO getProvision(final String anyType) {
- return IterableUtils.find(provisions, new Predicate<ProvisionTO>() {
-
- @Override
- public boolean evaluate(final ProvisionTO provisionTO) {
- return anyType != null && anyType.equals(provisionTO.getAnyType());
- }
- });
+ public Optional<ProvisionTO> getProvision(final String anyType) {
+ return provisions.stream().filter(
+ provision -> anyType != null && anyType.equals(provision.getAnyType())).
+ findFirst();
}
@XmlElementWrapper(name = "provisions")
http://git-wip-us.apache.org/repos/asf/syncope/blob/74ee038a/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java
index 6deab32..3e9cd4d 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java
@@ -24,12 +24,11 @@ import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.Optional;
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.commons.collections4.IterableUtils;
-import org.apache.commons.collections4.Predicate;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.apache.syncope.common.lib.types.AnyTypeKind;
@@ -197,14 +196,10 @@ public class UserTO extends AnyTO implements GroupableRelatableTO {
@JsonIgnore
@Override
- public RelationshipTO getRelationship(final String type, final String rightKey) {
- return IterableUtils.find(relationships, new Predicate<RelationshipTO>() {
-
- @Override
- public boolean evaluate(final RelationshipTO object) {
- return type.equals(object.getType()) && rightKey.equals(object.getRightKey());
- }
- });
+ public Optional<RelationshipTO> getRelationship(final String type, final String rightKey) {
+ return relationships.stream().filter(
+ relationship -> type.equals(relationship.getType()) && rightKey.equals(relationship.getRightKey())).
+ findFirst();
}
@XmlElementWrapper(name = "relationships")
@@ -217,14 +212,8 @@ public class UserTO extends AnyTO implements GroupableRelatableTO {
@JsonIgnore
@Override
- public MembershipTO getMembership(final String groupKey) {
- return IterableUtils.find(memberships, new Predicate<MembershipTO>() {
-
- @Override
- public boolean evaluate(final MembershipTO object) {
- return groupKey.equals(object.getGroupKey());
- }
- });
+ public Optional<MembershipTO> getMembership(final String groupKey) {
+ return memberships.stream().filter(membership -> groupKey.equals(membership.getGroupKey())).findFirst();
}
@XmlElementWrapper(name = "memberships")