More replacements thanks to commons-collections
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/bac03b25 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/bac03b25 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/bac03b25 Branch: refs/heads/SYNCOPE-119 Commit: bac03b2569644991e26d2879da2eda47bf9debb9 Parents: 091c735 Author: Francesco Chicchiriccò <ilgro...@apache.org> Authored: Wed Apr 8 10:00:38 2015 +0200 Committer: Francesco Chicchiriccò <ilgro...@apache.org> Committed: Wed Apr 8 10:00:38 2015 +0200 ---------------------------------------------------------------------- .../syncope/core/logic/NotificationTest.java | 14 ++--- .../syncope/core/misc/CollectionUtils2.java | 61 ++++++++++++++++++++ .../persistence/api/GroupEntitlementUtil.java | 14 +++-- .../validation/InvalidEntityException.java | 15 ++--- .../jpa/entity/AbstractPlainAttr.java | 2 +- .../api/cache/VirAttrCacheValue.java | 3 +- .../api/propagation/PropagationManager.java | 3 +- .../provisioning/java/AsyncConnectorFacade.java | 4 +- .../java/DefaultGroupProvisioningManager.java | 9 +-- .../java/DefaultUserProvisioningManager.java | 18 +++--- .../java/cache/DisabledVirAttrCache.java | 2 +- .../data/AbstractAttributableDataBinder.java | 4 +- .../notification/NotificationManagerImpl.java | 19 +++--- .../DBPasswordPropagationActions.java | 28 ++++----- .../LDAPMembershipPropagationActions.java | 4 +- .../LDAPPasswordPropagationActions.java | 27 +++++---- .../propagation/PropagationManagerImpl.java | 47 +++++++-------- .../java/sync/AbstractProvisioningJob.java | 13 +++-- .../java/sync/AbstractSyncResultHandler.java | 2 +- .../java/sync/AbstractSyncopeResultHandler.java | 2 + .../java/sync/DBPasswordSyncActions.java | 28 ++++----- .../java/sync/LDAPMembershipSyncActions.java | 31 +++++----- .../java/sync/LDAPPasswordSyncActions.java | 2 +- 23 files changed, 213 insertions(+), 139 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java ---------------------------------------------------------------------- diff --git a/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java b/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java index fdf4d11..4555189 100644 --- a/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java +++ b/core/logic/src/test/java/org/apache/syncope/core/logic/NotificationTest.java @@ -256,7 +256,7 @@ public class NotificationTest { public void notifyByMail() throws Exception { // 1. create suitable notification for subsequent tests Notification notification = entityFactory.newEntity(Notification.class); - notification.addEvent("[REST]:[UserLogic]:[]:[create]:[SUCCESS]"); + notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]"); notification.setUserAbout(new UserFiqlSearchConditionBuilder().inGroups(7L).query()); notification.setRecipients(new UserFiqlSearchConditionBuilder().inGroups(8L).query()); notification.setSelfAsRecipient(true); @@ -314,7 +314,7 @@ public class NotificationTest { public void issueSYNCOPE192() throws Exception { // 1. create suitable notification for subsequent tests Notification notification = entityFactory.newEntity(Notification.class); - notification.addEvent("[REST]:[UserLogic]:[]:[create]:[SUCCESS]"); + notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]"); notification.setUserAbout(new UserFiqlSearchConditionBuilder().inGroups(7L).query()); notification.setRecipients(new UserFiqlSearchConditionBuilder().inGroups(8L).query()); notification.setSelfAsRecipient(true); @@ -366,7 +366,7 @@ public class NotificationTest { public void notifyByMailEmptyAbout() throws Exception { // 1. create suitable notification for subsequent tests Notification notification = entityFactory.newEntity(Notification.class); - notification.addEvent("[REST]:[UserLogic]:[]:[create]:[SUCCESS]"); + notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]"); notification.setUserAbout(null); notification.setRecipients(new UserFiqlSearchConditionBuilder().inGroups(8L).query()); notification.setSelfAsRecipient(true); @@ -416,7 +416,7 @@ public class NotificationTest { public void notifyByMailWithRetry() throws Exception { // 1. create suitable notification for subsequent tests Notification notification = entityFactory.newEntity(Notification.class); - notification.addEvent("[REST]:[UserLogic]:[]:[create]:[SUCCESS]"); + notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]"); notification.setUserAbout(null); notification.setRecipients(new UserFiqlSearchConditionBuilder().inGroups(8L).query()); notification.setSelfAsRecipient(true); @@ -485,7 +485,7 @@ public class NotificationTest { public void issueSYNCOPE445() throws Exception { // 1. create suitable notification for subsequent tests Notification notification = entityFactory.newEntity(Notification.class); - notification.addEvent("[REST]:[UserLogic]:[]:[create]:[SUCCESS]"); + notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]"); notification.setUserAbout(new UserFiqlSearchConditionBuilder().inGroups(7L).query()); notification.setRecipients(new UserFiqlSearchConditionBuilder().inGroups(8L).query()); notification.setSelfAsRecipient(true); @@ -544,7 +544,7 @@ public class NotificationTest { public void issueSYNCOPE492() throws Exception { // 1. create suitable disabled notification for subsequent tests Notification notification = entityFactory.newEntity(Notification.class); - notification.addEvent("[REST]:[UserLogic]:[]:[create]:[SUCCESS]"); + notification.getEvents().add("[REST]:[UserLogic]:[]:[create]:[SUCCESS]"); notification.setUserAbout(new UserFiqlSearchConditionBuilder().inGroups(7L).query()); notification.setSelfAsRecipient(true); @@ -588,7 +588,7 @@ public class NotificationTest { // 1. create suitable notification for subsequent tests Notification notification = entityFactory.newEntity(Notification.class); - notification.addEvent("[REST]:[GroupLogic]:[]:[create]:[SUCCESS]"); + notification.getEvents().add("[REST]:[GroupLogic]:[]:[create]:[SUCCESS]"); notification.setGroupAbout(new GroupFiqlSearchConditionBuilder().is("name").equalTo("group446").query()); notification.setSelfAsRecipient(false); http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/misc/src/main/java/org/apache/syncope/core/misc/CollectionUtils2.java ---------------------------------------------------------------------- diff --git a/core/misc/src/main/java/org/apache/syncope/core/misc/CollectionUtils2.java b/core/misc/src/main/java/org/apache/syncope/core/misc/CollectionUtils2.java new file mode 100644 index 0000000..44ddc5c --- /dev/null +++ b/core/misc/src/main/java/org/apache/syncope/core/misc/CollectionUtils2.java @@ -0,0 +1,61 @@ +/* + * 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.core.misc; + +import java.util.Iterator; + +public final class CollectionUtils2 { + + /** + * Returns the next element in <tt>iterator</tt> or <tt>defaultValue</tt> if the iterator is empty. + * + * @param defaultValue the default value to return if the iterator is empty + * @return the next element of <tt>iterator</tt> or the default value + */ + public static <T> T getNext(final Iterator<? extends T> iterator, final T defaultValue) { + return iterator.hasNext() ? iterator.next() : defaultValue; + } + + /** + * Returns the first element in <tt>iterable</tt> or <tt>defaultValue</tt> if the iterable is empty. + * + * <p/> + * If no default value is desired (and the caller instead wants a {@link java.util.NoSuchElementException} to be + * thrown), it is recommended that <tt>iterable.iterator().next()}</tt> is used instead. + * + * @param defaultValue the default value to return if the iterable is empty + * @return the first element of <tt>iterable</tt> or the default value + */ + public static <T> T getFirst(final Iterable<? extends T> iterable, final T defaultValue) { + return getNext(iterable.iterator(), defaultValue); + } + + /** + * Returns the first element in <tt>iterable</tt> or <tt>null</tt> if the iterable is empty. + * + * @return the first element of <tt>iterable</tt> or <tt>null</tt> + */ + public static <T> T getFirstOrNull(final Iterable<? extends T> iterable) { + return getNext(iterable.iterator(), null); + } + + private CollectionUtils2() { + // private constructor for static utility class + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/GroupEntitlementUtil.java ---------------------------------------------------------------------- diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/GroupEntitlementUtil.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/GroupEntitlementUtil.java index b0f104a..723dfe1 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/GroupEntitlementUtil.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/GroupEntitlementUtil.java @@ -22,6 +22,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.regex.Pattern; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Transformer; import org.apache.syncope.core.persistence.api.entity.Entitlement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,11 +75,13 @@ public final class GroupEntitlementUtil { } public static Set<Long> getGroupKeys(final List<Entitlement> entitlements) { - Set<String> names = new HashSet<>(entitlements.size()); - for (Entitlement entitlement : entitlements) { - names.add(entitlement.getKey()); - } - return GroupEntitlementUtil.getGroupKeys(names); + return getGroupKeys(CollectionUtils.collect(entitlements, new Transformer<Entitlement, String>() { + + @Override + public String transform(final Entitlement entitlement) { + return entitlement.getKey(); + } + }, new HashSet<String>())); } /** http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/attrvalue/validation/InvalidEntityException.java ---------------------------------------------------------------------- diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/attrvalue/validation/InvalidEntityException.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/attrvalue/validation/InvalidEntityException.java index 818fb61..97f1a58 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/attrvalue/validation/InvalidEntityException.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/attrvalue/validation/InvalidEntityException.java @@ -24,6 +24,8 @@ import java.util.Map; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.ValidationException; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; import org.apache.syncope.common.lib.types.EntityViolationType; /** @@ -97,14 +99,13 @@ public class InvalidEntityException extends ValidationException { } public final boolean hasViolation(final EntityViolationType type) { - boolean found = false; - for (Class<?> entity : violations.keySet()) { - if (violations.get(entity).contains(type)) { - found = true; - } - } + return CollectionUtils.exists(violations.keySet(), new Predicate<Class<?>>() { - return found; + @Override + public boolean evaluate(final Class<?> entity) { + return violations.get(entity).contains(type); + } + }); } public String getEntityClassSimpleName() { http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java index 2db17f0..aa7af95 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java @@ -80,7 +80,7 @@ public abstract class AbstractPlainAttr extends AbstractEntity<Long> implements result = Collections.singletonList(getUniqueValue().getValueAsString()); } - return result; + return Collections.unmodifiableList(result); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java ---------------------------------------------------------------------- diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java index 0db95ac..3288432 100644 --- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java +++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/cache/VirAttrCacheValue.java @@ -18,6 +18,7 @@ */ package org.apache.syncope.core.provisioning.api.cache; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -73,7 +74,7 @@ public class VirAttrCacheValue { res.addAll(value); } - return res; + return Collections.unmodifiableSet(res); } public Date getLastAccessDate() { http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java ---------------------------------------------------------------------- diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java index 277dfc9..895e0dc 100644 --- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java +++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java @@ -207,6 +207,7 @@ public interface PropagationManager { * the creation fails onto a mandatory resource. * * @param userKey to be deleted + * @param resourceNames resources * @param noPropResourceNames name of external resources not to be considered for propagation * @return list of propagation tasks */ @@ -231,7 +232,7 @@ public interface PropagationManager { * @param noPropResourceNames external resource names not to be considered for propagation * @return list of propagation tasks */ - List<PropagationTask> getUserUpdateTaskIds(User user, Boolean enable, Set<String> noPropResourceNames); + List<PropagationTask> getUserUpdateTaskIds(User user, Boolean enable, Collection<String> noPropResourceNames); /** * Performs update on each resource associated to the user. http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java index 416c8c0..ae2d297 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java @@ -154,7 +154,7 @@ public class AsyncConnectorFacade { @Async public Future<Set<String>> getSchemaNames(final ConnectorFacade connector, final boolean includeSpecial) { - final Set<String> schemaNames = new HashSet<String>(); + final Set<String> schemaNames = new HashSet<>(); try { final Schema schema = connector.schema(); @@ -175,7 +175,7 @@ public class AsyncConnectorFacade { @Async public Future<Set<ObjectClass>> getSupportedObjectClasses(final ConnectorFacade connector) { - final Set<ObjectClass> objectClasses = new HashSet<ObjectClass>(); + final Set<ObjectClass> objectClasses = new HashSet<>(); try { final Schema schema = connector.schema(); http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java index 7dc3366..2adbdd0 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java @@ -26,6 +26,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Set; +import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -74,7 +75,8 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager public Map.Entry<Long, List<PropagationStatus>> create(final GroupTO subject, final Set<String> excludedResources) { WorkflowResult<Long> created = gwfAdapter.create(subject); - AuthContextUtil.extendAuthContext(created.getResult(), GroupEntitlementUtil.getEntitlementNameFromGroupKey(created.getResult())); + AuthContextUtil.extendAuthContext(created.getResult(), GroupEntitlementUtil.getEntitlementNameFromGroupKey( + created.getResult())); List<PropagationTask> tasks = propagationManager.getGroupCreateTaskIds(created, subject.getVirAttrs(), excludedResources); @@ -100,7 +102,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager groupOwnerMap.put(created.getResult(), groupOwner.getValues().iterator().next()); } - AuthContextUtil.extendAuthContext(created.getResult(), + AuthContextUtil.extendAuthContext(created.getResult(), GroupEntitlementUtil.getEntitlementNameFromGroupKey(created.getResult())); List<PropagationTask> tasks = propagationManager.getGroupCreateTaskIds( @@ -198,8 +200,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager public List<PropagationStatus> deprovision(final Long groupKey, final Collection<String> resources) { Group group = groupDAO.authFetch(groupKey); - Set<String> noPropResourceName = group.getResourceNames(); - noPropResourceName.removeAll(resources); + Collection<String> noPropResourceName = CollectionUtils.removeAll(group.getResourceNames(), resources); List<PropagationTask> tasks = propagationManager.getGroupDeleteTaskIds( groupKey, new HashSet<>(resources), noPropResourceName); http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java index c9fbe0f..4eb425f 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java @@ -25,6 +25,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.commons.collections4.CollectionUtils; import org.apache.syncope.common.lib.mod.MembershipMod; import org.apache.syncope.common.lib.mod.StatusMod; import org.apache.syncope.common.lib.mod.UserMod; @@ -234,11 +235,11 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager { } protected List<PropagationStatus> propagateStatus(final User user, final StatusMod statusMod) { - Set<String> resourcesToBeExcluded = new HashSet<>(user.getResourceNames()); - resourcesToBeExcluded.removeAll(statusMod.getResourceNames()); + Collection<String> noPropResourceNames = + CollectionUtils.removeAll(user.getResourceNames(), statusMod.getResourceNames()); List<PropagationTask> tasks = propagationManager.getUserUpdateTaskIds( - user, statusMod.getType() != StatusMod.ModType.SUSPEND, resourcesToBeExcluded); + user, statusMod.getType() != StatusMod.ModType.SUSPEND, noPropResourceNames); PropagationReporter propReporter = ApplicationContextProvider.getApplicationContext().getBean(PropagationReporter.class); try { @@ -274,11 +275,10 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager { public List<PropagationStatus> deprovision(final Long userKey, final Collection<String> resources) { final User user = userDAO.authFetch(userKey); - final Set<String> noPropResourceName = user.getResourceNames(); - noPropResourceName.removeAll(resources); + Collection<String> noPropResourceNames = CollectionUtils.removeAll(user.getResourceNames(), resources); final List<PropagationTask> tasks = - propagationManager.getUserDeleteTaskIds(userKey, new HashSet<>(resources), noPropResourceName); + propagationManager.getUserDeleteTaskIds(userKey, new HashSet<>(resources), noPropResourceNames); final PropagationReporter propagationReporter = ApplicationContextProvider.getApplicationContext().getBean(PropagationReporter.class); try { @@ -330,12 +330,10 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager { } } - PropagationReporter propagationReporter = ApplicationContextProvider.getApplicationContext(). - getBean(PropagationReporter.class); - List<PropagationTask> tasks = propagationManager.getUserUpdateTaskIds( updated, updated.getResult().getKey().getPassword() != null, excludedResources); - + PropagationReporter propagationReporter = ApplicationContextProvider.getApplicationContext(). + getBean(PropagationReporter.class); try { taskExecutor.execute(tasks, propagationReporter); } catch (PropagationException e) { http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java index d1e0dda..3c3dcca 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/cache/DisabledVirAttrCache.java @@ -38,7 +38,7 @@ public class DisabledVirAttrCache implements VirAttrCache { } @Override - public boolean isValidEntry(VirAttrCacheValue value) { + public boolean isValidEntry(final VirAttrCacheValue value) { return false; } http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAttributableDataBinder.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAttributableDataBinder.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAttributableDataBinder.java index a33e062..2c94b8b 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAttributableDataBinder.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAttributableDataBinder.java @@ -166,7 +166,6 @@ abstract class AbstractAttributableDataBinder { schema = plainSchemaDAO.find(schemaName, reference); // safely ignore invalid schemas from AttrTO - // see http://code.google.com/p/syncope/issues/detail?id=17 if (schema == null) { LOG.debug("Ignoring invalid schema {}", schemaName); } else if (schema.isReadonly()) { @@ -753,8 +752,7 @@ abstract class AbstractAttributableDataBinder { if ((type == AttributableType.USER && resource.getUmapping() != null) || (type == AttributableType.GROUP && resource.getGmapping() != null)) { - MappingItem accountIdItem = - attrUtilFactory.getInstance(type).getAccountIdItem(resource); + MappingItem accountIdItem = attrUtilFactory.getInstance(type).getAccountIdItem(resource); if (accountIdItem == null) { throw new NotFoundException( "AccountId mapping for " + type + " " + subject.getKey() http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java index 169ac88..dac783b 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java @@ -36,6 +36,7 @@ import org.apache.syncope.common.lib.types.AuditElements.Result; import org.apache.syncope.common.lib.types.AuditLoggerName; import org.apache.syncope.common.lib.types.IntMappingType; import org.apache.syncope.common.lib.types.SubjectType; +import org.apache.syncope.core.misc.CollectionUtils2; import org.apache.syncope.core.persistence.api.GroupEntitlementUtil; import org.apache.syncope.core.persistence.api.dao.ConfDAO; import org.apache.syncope.core.persistence.api.dao.EntitlementDAO; @@ -347,15 +348,8 @@ public class NotificationManagerImpl implements NotificationManager { case UserPlainSchema: UPlainAttr attr = user.getPlainAttr(recipientAttrName); - if (attr != null && !attr.getValuesAsStrings().isEmpty()) { - email = attr.getValuesAsStrings().get(0); - } - break; - - case UserVirtualSchema: - UVirAttr virAttr = user.getVirAttr(recipientAttrName); - if (virAttr != null && !virAttr.getValues().isEmpty()) { - email = virAttr.getValues().get(0); + if (attr != null) { + email = CollectionUtils2.getFirstOrNull(attr.getValuesAsStrings()); } break; @@ -366,6 +360,13 @@ public class NotificationManagerImpl implements NotificationManager { } break; + case UserVirtualSchema: + UVirAttr virAttr = user.getVirAttr(recipientAttrName); + if (virAttr != null) { + email = CollectionUtils2.getFirstOrNull(virAttr.getValues()); + } + break; + default: } http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java index fd4b3dc..1e75acb 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java @@ -19,8 +19,9 @@ package org.apache.syncope.core.provisioning.java.propagation; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; import org.apache.syncope.common.lib.types.AttributableType; import org.apache.syncope.common.lib.types.CipherAlgorithm; import org.apache.syncope.common.lib.types.ConnConfProperty; @@ -85,22 +86,23 @@ public class DBPasswordPropagationActions extends DefaultPropagationActions { } } - private String getCipherAlgorithm(ConnInstance connInstance) { - String cipherAlgorithm = CLEARTEXT; - for (Iterator<ConnConfProperty> propertyIterator = connInstance.getConfiguration().iterator(); - propertyIterator.hasNext();) { + private String getCipherAlgorithm(final ConnInstance connInstance) { + ConnConfProperty cipherAlgorithm = + CollectionUtils.find(connInstance.getConfiguration(), new Predicate<ConnConfProperty>() { - ConnConfProperty property = propertyIterator.next(); - if ("cipherAlgorithm".equals(property.getSchema().getName()) - && property.getValues() != null && !property.getValues().isEmpty()) { + @Override + public boolean evaluate(final ConnConfProperty property) { + return "cipherAlgorithm".equals(property.getSchema().getName()) + && property.getValues() != null && !property.getValues().isEmpty(); + } + }); - return (String) property.getValues().get(0); - } - } - return cipherAlgorithm; + return cipherAlgorithm == null + ? CLEARTEXT + : (String) cipherAlgorithm.getValues().get(0); } - private boolean cipherAlgorithmMatches(String connectorAlgorithm, CipherAlgorithm userAlgorithm) { + private boolean cipherAlgorithmMatches(final String connectorAlgorithm, final CipherAlgorithm userAlgorithm) { if (userAlgorithm == null) { return false; } http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java index 0bd204f..f62aca0 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java @@ -92,9 +92,9 @@ public class LDAPMembershipPropagationActions extends DefaultPropagationActions } LOG.debug("Group accountLinks to propagate for membership: {}", groupAccountLinks); - Set<Attribute> attributes = new HashSet<Attribute>(task.getAttributes()); + Set<Attribute> attributes = new HashSet<>(task.getAttributes()); - Set<String> groups = new HashSet<String>(groupAccountLinks); + Set<String> groups = new HashSet<>(groupAccountLinks); Attribute ldapGroups = AttributeUtil.find(getGroupMembershipAttrName(), attributes); if (ldapGroups != null) { http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java index fc1b00c..37ce2fa 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java @@ -19,8 +19,9 @@ package org.apache.syncope.core.provisioning.java.propagation; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; import org.apache.syncope.common.lib.types.AttributableType; import org.apache.syncope.common.lib.types.CipherAlgorithm; import org.apache.syncope.common.lib.types.ConnConfProperty; @@ -91,18 +92,20 @@ public class LDAPPasswordPropagationActions extends DefaultPropagationActions { } } - private String getCipherAlgorithm(ConnInstance connInstance) { - String cipherAlgorithm = CLEARTEXT; - for (Iterator<ConnConfProperty> propertyIterator = connInstance.getConfiguration().iterator(); - propertyIterator.hasNext();) { + private String getCipherAlgorithm(final ConnInstance connInstance) { + ConnConfProperty cipherAlgorithm = + CollectionUtils.find(connInstance.getConfiguration(), new Predicate<ConnConfProperty>() { - ConnConfProperty property = propertyIterator.next(); - if ("passwordHashAlgorithm".equals(property.getSchema().getName()) - && property.getValues() != null && !property.getValues().isEmpty()) { - return (String) property.getValues().get(0); - } - } - return cipherAlgorithm; + @Override + public boolean evaluate(final ConnConfProperty property) { + return "passwordHashAlgorithm".equals(property.getSchema().getName()) + && property.getValues() != null && !property.getValues().isEmpty(); + } + }); + + return cipherAlgorithm == null + ? CLEARTEXT + : (String) cipherAlgorithm.getValues().get(0); } private boolean cipherAlgorithmMatches(String connectorAlgorithm, CipherAlgorithm userAlgorithm) { http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java index 3108368..122261f 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java @@ -26,6 +26,8 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; import org.apache.syncope.common.lib.mod.AttrMod; import org.apache.syncope.common.lib.mod.MembershipMod; import org.apache.syncope.common.lib.mod.UserMod; @@ -173,10 +175,15 @@ public class PropagationManagerImpl implements PropagationManager { virAttrHandler.fillVirtual(user, vAttrs, attrUtilFactory.getInstance(AttributableType.USER)); } - for (Membership membership : user.getMemberships()) { - MembershipTO membershipTO; + for (final Membership membership : user.getMemberships()) { if (membership.getVirAttrs() != null && !membership.getVirAttrs().isEmpty()) { - membershipTO = findMembershipTO(membership, membershipTOs); + MembershipTO membershipTO = CollectionUtils.find(membershipTOs, new Predicate<MembershipTO>() { + + @Override + public boolean evaluate(final MembershipTO membershipTO) { + return membershipTO.getGroupId() == membership.getGroup().getKey(); + } + }); if (membershipTO != null) { virAttrHandler.fillVirtual(membership, membershipTO.getVirAttrs(), attrUtilFactory.getInstance(AttributableType.MEMBERSHIP)); @@ -276,7 +283,7 @@ public class PropagationManagerImpl implements PropagationManager { */ @Override public List<PropagationTask> getUserUpdateTaskIds(final User user, final Boolean enable, - final Set<String> noPropResourceNames) throws NotFoundException { + final Collection<String> noPropResourceNames) throws NotFoundException { return getUpdateTaskIds( user, // user to be updated on external resources @@ -385,6 +392,7 @@ public class PropagationManagerImpl implements PropagationManager { * @throws NotFoundException if group is not found * @throws UnauthorizedGroupException if caller doesn't own enough entitlements to administer the given group */ + @Override public List<PropagationTask> getGroupUpdateTaskIds(final WorkflowResult<Long> wfResult, final Set<String> vAttrsToBeRemoved, final Set<AttrMod> vAttrsToBeUpdated, final Set<String> noPropResourceNames) @@ -413,9 +421,16 @@ public class PropagationManagerImpl implements PropagationManager { // SYNCOPE-458 fill membership virtual attributes if (subject instanceof User) { final User user = (User) subject; - for (Membership membership : user.getMemberships()) { + for (final Membership membership : user.getMemberships()) { if (membership.getVirAttrs() != null && !membership.getVirAttrs().isEmpty()) { - final MembershipMod membershipMod = findMembershipMod(membership, membershipsToAdd); + final MembershipMod membershipMod = CollectionUtils.find(membershipsToAdd, + new Predicate<MembershipMod>() { + + @Override + public boolean evaluate(final MembershipMod membershipMod) { + return membershipMod.getGroup() == membership.getGroup().getKey(); + } + }); if (membershipMod != null) { virAttrHandler.fillVirtual(membership, membershipMod.getVirAttrsToRemove() == null ? Collections.<String>emptySet() @@ -750,24 +765,4 @@ public class PropagationManagerImpl implements PropagationManager { return tasks; } - - protected MembershipTO findMembershipTO(final Membership membership, final Collection<MembershipTO> memberships) { - for (MembershipTO membershipTO : memberships) { - if (membershipTO.getGroupId() == membership.getGroup().getKey()) { - return membershipTO; - } - } - LOG.error("No MembershipTO found for membership {}", membership); - return null; - } - - protected MembershipMod findMembershipMod(final Membership membership, final Set<MembershipMod> membershipMods) { - for (MembershipMod membershipMod : membershipMods) { - if (membershipMod.getGroup() == membership.getGroup().getKey()) { - return membershipMod; - } - } - LOG.error("No MembershipMod found for membership {}", membership); - return null; - } } http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java index 197d4d5..0920146 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java @@ -22,6 +22,8 @@ import java.lang.reflect.ParameterizedType; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Transformer; import org.apache.syncope.common.lib.types.TraceLevel; import org.apache.syncope.core.persistence.api.dao.EntitlementDAO; import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO; @@ -315,11 +317,14 @@ public abstract class AbstractProvisioningJob<T extends ProvisioningTask, A exte @Override protected String doExecute(final boolean dryRun) throws JobExecutionException { // PRE: grant all authorities (i.e. setup the SecurityContextHolder) - final List<GrantedAuthority> authorities = new ArrayList<>(); + List<GrantedAuthority> authorities = new ArrayList<>(); + CollectionUtils.collect(entitlementDAO.findAll(), new Transformer<Entitlement, GrantedAuthority>() { - for (Entitlement entitlement : entitlementDAO.findAll()) { - authorities.add(new SimpleGrantedAuthority(entitlement.getKey())); - } + @Override + public GrantedAuthority transform(final Entitlement entitlement) { + return new SimpleGrantedAuthority(entitlement.getKey()); + } + }, authorities); final UserDetails userDetails = new User("admin", "FAKE_PASSWORD", true, true, true, true, authorities); http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java index 5b9b3a7..3067ca5 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java @@ -513,7 +513,7 @@ public abstract class AbstractSyncResultHandler extends AbstractSyncopeResultHan LOG.debug("Subject to ignore {}", delta.getObject().getUid().getUidValue()); - final List<ProvisioningResult> ignoreResults = new ArrayList<ProvisioningResult>(); + final List<ProvisioningResult> ignoreResults = new ArrayList<>(); final ProvisioningResult result = new ProvisioningResult(); result.setId(null); http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java index cb1890b..ec33571 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java @@ -116,10 +116,12 @@ public abstract class AbstractSyncopeResultHandler<T extends ProvisioningTask, A */ protected ProvisioningProfile<T, A> profile; + @Override public void setProfile(final ProvisioningProfile<T, A> profile) { this.profile = profile; } + @Override public ProvisioningProfile<T, A> getProfile() { return profile; } http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java index 75f2078..2b3ca02 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/DBPasswordSyncActions.java @@ -18,7 +18,8 @@ */ package org.apache.syncope.core.provisioning.java.sync; -import java.util.Iterator; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; import org.apache.syncope.common.lib.mod.AbstractSubjectMod; import org.apache.syncope.common.lib.mod.UserMod; import org.apache.syncope.common.lib.to.AbstractSubjectTO; @@ -105,18 +106,19 @@ public class DBPasswordSyncActions extends DefaultSyncActions { } private String getCipherAlgorithm(final ConnInstance connInstance) { - String cipherAlgorithm = CLEARTEXT; - for (Iterator<ConnConfProperty> propertyIterator = connInstance.getConfiguration().iterator(); - propertyIterator.hasNext();) { - - ConnConfProperty property = propertyIterator.next(); - if ("cipherAlgorithm".equals(property.getSchema().getName()) - && property.getValues() != null && !property.getValues().isEmpty()) { - - return (String) property.getValues().get(0); - } - } - return cipherAlgorithm; + ConnConfProperty cipherAlgorithm = + CollectionUtils.find(connInstance.getConfiguration(), new Predicate<ConnConfProperty>() { + + @Override + public boolean evaluate(final ConnConfProperty property) { + return "cipherAlgorithm".equals(property.getSchema().getName()) + && property.getValues() != null && !property.getValues().isEmpty(); + } + }); + + return cipherAlgorithm == null + ? CLEARTEXT + : (String) cipherAlgorithm.getValues().get(0); } @Transactional(readOnly = true) http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java index 736cb3f..526b494 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java @@ -20,9 +20,10 @@ package org.apache.syncope.core.provisioning.java.sync; import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; import org.apache.syncope.common.lib.mod.AbstractSubjectMod; import org.apache.syncope.common.lib.mod.MembershipMod; import org.apache.syncope.common.lib.mod.UserMod; @@ -32,7 +33,6 @@ import org.apache.syncope.common.lib.types.AuditElements; import org.apache.syncope.common.lib.types.AuditElements.Result; import org.apache.syncope.common.lib.types.ConnConfProperty; import org.apache.syncope.core.persistence.api.dao.GroupDAO; -import org.apache.syncope.core.persistence.api.entity.ConnInstance; import org.apache.syncope.core.persistence.api.entity.ExternalResource; import org.apache.syncope.core.persistence.api.entity.membership.Membership; import org.apache.syncope.core.persistence.api.entity.group.Group; @@ -98,20 +98,19 @@ public class LDAPMembershipSyncActions extends DefaultSyncActions { * @return the name of the attribute used to keep track of group memberships */ protected String getGroupMembershipAttrName(final Connector connector) { - ConnInstance connInstance = connector.getActiveConnInstance(); - Iterator<ConnConfProperty> propertyIterator = connInstance.getConfiguration().iterator(); - String groupMembershipName = "uniquemember"; - while (propertyIterator.hasNext()) { - ConnConfProperty property = propertyIterator.next(); - if ("groupMemberAttribute".equals(property.getSchema().getName()) - && property.getValues() != null && !property.getValues().isEmpty()) { - - groupMembershipName = (String) property.getValues().get(0); - break; - } - } - - return groupMembershipName; + ConnConfProperty groupMembership = CollectionUtils.find(connector.getActiveConnInstance().getConfiguration(), + new Predicate<ConnConfProperty>() { + + @Override + public boolean evaluate(final ConnConfProperty property) { + return "groupMemberAttribute".equals(property.getSchema().getName()) + && property.getValues() != null && !property.getValues().isEmpty(); + } + }); + + return groupMembership == null + ? "uniquemember" + : (String) groupMembership.getValues().get(0); } /** http://git-wip-us.apache.org/repos/asf/syncope/blob/bac03b25/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPPasswordSyncActions.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPPasswordSyncActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPPasswordSyncActions.java index 16cd796..fe1a8aa 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPPasswordSyncActions.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPPasswordSyncActions.java @@ -82,7 +82,7 @@ public class LDAPPasswordSyncActions extends DefaultSyncActions { return delta; } - private void parseEncodedPassword(String password) { + private void parseEncodedPassword(final String password) { if (password != null && password.startsWith("{")) { int closingBracketIndex = password.indexOf('}'); String digest = password.substring(1, password.indexOf('}'));