This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/master by this push: new c7d3c995db A few optimizations around incremental pull task execution c7d3c995db is described below commit c7d3c995dbc972f619652ce45a84900eb238095c Author: Francesco Chicchiriccò <ilgro...@apache.org> AuthorDate: Fri Oct 14 10:19:22 2022 +0200 A few optimizations around incremental pull task execution --- .../syncope/core/logic/ReconciliationLogic.java | 2 +- .../apache/syncope/core/logic/ResourceLogic.java | 6 ++-- .../persistence/api/entity/ExternalResource.java | 5 ++-- .../jpa/entity/JPAExternalResource.java | 7 ++--- .../core/persistence/jpa/inner/AnyTypeTest.java | 2 +- .../core/persistence/jpa/inner/PolicyTest.java | 13 +++++---- .../core/persistence/jpa/inner/ResourceTest.java | 32 +++++++++++----------- .../persistence/jpa/outer/PlainSchemaTest.java | 11 +++----- .../core/persistence/jpa/outer/ResourceTest.java | 20 ++++++-------- .../core/persistence/jpa/outer/VirSchemaTest.java | 7 +++-- .../provisioning/java/DefaultMappingManager.java | 4 +-- .../provisioning/java/DefaultVirAttrHandler.java | 2 +- .../java/data/AbstractAnyDataBinder.java | 4 +-- .../java/data/ResourceDataBinderImpl.java | 2 +- .../java/data/SchemaDataBinderImpl.java | 2 +- .../provisioning/java/data/UserDataBinderImpl.java | 4 +-- .../java/job/report/ReconciliationReportlet.java | 2 +- .../AbstractPropagationTaskExecutor.java | 5 ++-- .../propagation/DefaultPropagationManager.java | 12 ++++---- .../LDAPMembershipPropagationActions.java | 2 +- .../pushpull/AbstractProvisioningJobDelegate.java | 9 +++--- .../java/pushpull/AbstractPullResultHandler.java | 3 +- .../java/pushpull/AbstractPushResultHandler.java | 3 +- .../provisioning/java/pushpull/InboundMatcher.java | 2 +- .../java/pushpull/LDAPMembershipPullActions.java | 3 +- .../java/pushpull/PullJobDelegate.java | 13 +++++++-- .../java/DefaultMappingManagerTest.java | 6 ++-- .../java/data/ResourceDataBinderTest.java | 16 +++++------ .../pushpull/LDAPMembershipPullActionsTest.java | 4 +-- .../core/spring/security/AuthDataAccessor.java | 13 ++------- .../core/spring/security/WebSecurityContext.java | 3 -- 31 files changed, 108 insertions(+), 111 deletions(-) diff --git a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java index 5223b589ac..ec8e974a8e 100644 --- a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java +++ b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java @@ -177,7 +177,7 @@ public class ReconciliationLogic extends AbstractTransactionalLogic<EntityTO> { if (resource == null) { throw new NotFoundException("Resource '" + resourceKey + "'"); } - Provision provision = resource.getProvision(anyType.getKey()). + Provision provision = resource.getProvisionByAnyType(anyType.getKey()). orElseThrow(() -> new NotFoundException( "Provision for " + anyType + " on Resource '" + resourceKey + "'")); if (provision.getMapping() == null) { diff --git a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java index 5407d59136..1fd59b9b63 100644 --- a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java +++ b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java @@ -206,7 +206,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> { if (anyType == null) { throw new NotFoundException("AnyType '" + anyTypeKey + '\''); } - Provision provision = resource.getProvision(anyType.getKey()). + Provision provision = resource.getProvisionByAnyType(anyType.getKey()). orElseThrow(() -> new NotFoundException( "Provision for AnyType '" + anyTypeKey + "' in Resource '" + key + '\'')); @@ -239,7 +239,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> { if (anyType == null) { throw new NotFoundException("AnyType '" + anyTypeKey + '\''); } - Provision provision = resource.getProvision(anyType.getKey()). + Provision provision = resource.getProvisionByAnyType(anyType.getKey()). orElseThrow(() -> new NotFoundException( "Provision for AnyType '" + anyTypeKey + "' in Resource '" + key + '\'')); @@ -302,7 +302,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> { if (resource == null) { throw new NotFoundException("Resource '" + resourceKey + "'"); } - Provision provision = resource.getProvision(anyType.getKey()). + Provision provision = resource.getProvisionByAnyType(anyType.getKey()). orElseThrow(() -> new NotFoundException( "Provision for " + anyType + " on Resource '" + resourceKey + "'")); if (provision.getMapping() == null) { diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ExternalResource.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ExternalResource.java index 370c1932cc..657d16d098 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ExternalResource.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/ExternalResource.java @@ -31,7 +31,6 @@ import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy; import org.apache.syncope.core.persistence.api.entity.policy.PropagationPolicy; import org.apache.syncope.core.persistence.api.entity.policy.PullPolicy; import org.apache.syncope.core.persistence.api.entity.policy.PushPolicy; -import org.identityconnectors.framework.common.objects.ObjectClass; public interface ExternalResource extends ProvidedKeyEntity { @@ -105,9 +104,9 @@ public interface ExternalResource extends ProvidedKeyEntity { void setRandomPwdIfNotProvided(boolean condition); - Optional<Provision> getProvision(String anyType); + Optional<Provision> getProvisionByAnyType(String anyType); - Optional<Provision> getProvision(ObjectClass objectClass); + Optional<Provision> getProvisionByObjectClass(String objectClass); List<Provision> getProvisions(); diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAExternalResource.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAExternalResource.java index 5a5b1602a1..339ff1484a 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAExternalResource.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAExternalResource.java @@ -66,7 +66,6 @@ import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPullPolicy; import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPushPolicy; import org.apache.syncope.core.persistence.jpa.validation.entity.ExternalResourceCheck; import org.apache.syncope.core.provisioning.api.serialization.POJOHelper; -import org.identityconnectors.framework.common.objects.ObjectClass; /** * Resource for propagation and pull. @@ -202,15 +201,15 @@ public class JPAExternalResource extends AbstractProvidedKeyEntity implements Ex } @Override - public Optional<Provision> getProvision(final String anyType) { + public Optional<Provision> getProvisionByAnyType(final String anyType) { return getProvisions().stream(). filter(provision -> provision.getAnyType().equals(anyType)).findFirst(); } @Override - public Optional<Provision> getProvision(final ObjectClass objectClass) { + public Optional<Provision> getProvisionByObjectClass(final String objectClass) { return getProvisions().stream(). - filter(provision -> provision.getObjectClass().equals(objectClass.getObjectClassValue())).findFirst(); + filter(provision -> provision.getObjectClass().equals(objectClass)).findFirst(); } @Override diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeTest.java index d962da7141..1605e9c884 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyTypeTest.java @@ -116,6 +116,6 @@ public class AnyTypeTest extends AbstractTest { @Test public void deleteInvalid() { - assertThrows(IllegalArgumentException.class, () -> anyTypeDAO.delete(anyTypeDAO.findUser().getKey())); + assertThrows(IllegalArgumentException.class, () -> anyTypeDAO.delete(AnyTypeKind.USER.name())); } } diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java index 6fa39397fb..190b55817a 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java @@ -33,6 +33,7 @@ import org.apache.syncope.common.lib.policy.DefaultAuthPolicyConf; import org.apache.syncope.common.lib.policy.DefaultPasswordRuleConf; import org.apache.syncope.common.lib.policy.DefaultPullCorrelationRuleConf; import org.apache.syncope.common.lib.policy.DefaultPushCorrelationRuleConf; +import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.BackOffStrategy; import org.apache.syncope.common.lib.types.ConflictResolutionAction; import org.apache.syncope.common.lib.types.IdMImplementationType; @@ -90,7 +91,7 @@ public class PolicyTest extends AbstractTest { PullPolicy pullPolicy = policyDAO.find("880f8553-069b-4aed-9930-2cd53873f544"); assertNotNull(pullPolicy); - PullCorrelationRuleEntity pullCR = pullPolicy.getCorrelationRule(anyTypeDAO.findUser().getKey()).orElse(null); + PullCorrelationRuleEntity pullCR = pullPolicy.getCorrelationRule(AnyTypeKind.USER.name()).orElse(null); assertNotNull(pullCR); DefaultPullCorrelationRuleConf pullCRConf = POJOHelper.deserialize(pullCR.getImplementation().getBody(), DefaultPullCorrelationRuleConf.class); @@ -102,7 +103,7 @@ public class PolicyTest extends AbstractTest { PushPolicy pushPolicy = policyDAO.find("fb6530e5-892d-4f47-a46b-180c5b6c5c83"); assertNotNull(pushPolicy); - PushCorrelationRuleEntity pushCR = pushPolicy.getCorrelationRule(anyTypeDAO.findUser().getKey()).orElse(null); + PushCorrelationRuleEntity pushCR = pushPolicy.getCorrelationRule(AnyTypeKind.USER.name()).orElse(null); assertNotNull(pushCR); DefaultPushCorrelationRuleConf pushCRConf = POJOHelper.deserialize(pushCR.getImplementation().getBody(), DefaultPushCorrelationRuleConf.class); @@ -214,9 +215,9 @@ public class PolicyTest extends AbstractTest { assertNotNull(pullPolicy); assertEquals(pullURuleName, - pullPolicy.getCorrelationRule(anyTypeDAO.findUser().getKey()).get().getImplementation().getKey()); + pullPolicy.getCorrelationRule(AnyTypeKind.USER.name()).get().getImplementation().getKey()); assertEquals(pullGRuleName, - pullPolicy.getCorrelationRule(anyTypeDAO.findGroup().getKey()).get().getImplementation().getKey()); + pullPolicy.getCorrelationRule(AnyTypeKind.GROUP.name()).get().getImplementation().getKey()); } @Test @@ -258,9 +259,9 @@ public class PolicyTest extends AbstractTest { assertNotNull(pushPolicy); assertEquals(pushURuleName, - pushPolicy.getCorrelationRule(anyTypeDAO.findUser().getKey()).get().getImplementation().getKey()); + pushPolicy.getCorrelationRule(AnyTypeKind.USER.name()).get().getImplementation().getKey()); assertEquals(pushGRuleName, - pushPolicy.getCorrelationRule(anyTypeDAO.findGroup().getKey()).get().getImplementation().getKey()); + pushPolicy.getCorrelationRule(AnyTypeKind.GROUP.name()).get().getImplementation().getKey()); } @Test diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java index 8a9677e4ed..0cd2b02fdb 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ResourceTest.java @@ -32,11 +32,11 @@ import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.to.Item; import org.apache.syncope.common.lib.to.Mapping; import org.apache.syncope.common.lib.to.Provision; +import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.EntityViolationType; import org.apache.syncope.common.lib.types.IdMEntitlement; import org.apache.syncope.common.lib.types.MappingPurpose; import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException; -import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO; import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO; import org.apache.syncope.core.persistence.api.entity.ConnInstance; import org.apache.syncope.core.persistence.api.entity.ExternalResource; @@ -58,9 +58,6 @@ public class ResourceTest extends AbstractTest { @Autowired private ExternalResourceDAO resourceDAO; - @Autowired - private AnyTypeDAO anyTypeDAO; - @Test public void findById() { ExternalResource resource = resourceDAO.find("ws-target-resource-1"); @@ -71,7 +68,7 @@ public class ResourceTest extends AbstractTest { assertEquals("net.tirasa.connid.bundles.soap.WebServiceConnector", connector.getConnectorName()); assertEquals("net.tirasa.connid.bundles.soap", connector.getBundleName()); - Mapping mapping = resource.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping(); + Mapping mapping = resource.getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping(); assertFalse(mapping.getItems().isEmpty()); assertTrue(mapping.getItems().stream(). @@ -117,7 +114,7 @@ public class ResourceTest extends AbstractTest { public void getConnObjectKey() { ExternalResource resource = resourceDAO.find("ws-target-resource-2"); assertNotNull(resource); - assertEquals("fullname", resource.getProvision(anyTypeDAO.findUser().getKey()).get(). + assertEquals("fullname", resource.getProvisionByAnyType(AnyTypeKind.USER.name()).get(). getMapping().getConnObjectKeyItem().get().getIntAttrName()); } @@ -128,7 +125,7 @@ public class ResourceTest extends AbstractTest { resource.setPropagationPriority(2); Provision provision = new Provision(); - provision.setAnyType(anyTypeDAO.findUser().getKey()); + provision.setAnyType(AnyTypeKind.USER.name()); provision.setObjectClass(ObjectClass.ACCOUNT_NAME); resource.getProvisions().add(provision); @@ -149,8 +146,10 @@ public class ResourceTest extends AbstractTest { entityManager().flush(); assertNotNull(actual); assertNotNull(actual.getConnector()); - assertNotNull(actual.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping()); - assertFalse(actual.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping().getItems().isEmpty()); + assertNotNull(actual.getProvisionByAnyType(AnyTypeKind.USER.name()). + get().getMapping()); + assertFalse(actual.getProvisionByAnyType(AnyTypeKind.USER.name()). + get().getMapping().getItems().isEmpty()); assertEquals(Integer.valueOf(2), actual.getPropagationPriority()); } @@ -164,7 +163,7 @@ public class ResourceTest extends AbstractTest { resource.setConnector(connector); Provision provision = new Provision(); - provision.setAnyType(anyTypeDAO.findUser().getKey()); + provision.setAnyType(AnyTypeKind.USER.name()); provision.setObjectClass(ObjectClass.ACCOUNT_NAME); resource.getProvisions().add(provision); @@ -190,7 +189,7 @@ public class ResourceTest extends AbstractTest { resource.setConnector(connector); Provision provision = new Provision(); - provision.setAnyType(anyTypeDAO.findUser().getKey()); + provision.setAnyType(AnyTypeKind.USER.name()); provision.setObjectClass(ObjectClass.ACCOUNT_NAME); resource.getProvisions().add(provision); @@ -217,7 +216,7 @@ public class ResourceTest extends AbstractTest { resource.setKey("invalidProvision"); Provision provision = new Provision(); - provision.setAnyType(anyTypeDAO.findUser().getKey()); + provision.setAnyType(AnyTypeKind.USER.name()); provision.setObjectClass(ObjectClass.ACCOUNT_NAME); resource.getProvisions().add(provision); @@ -231,7 +230,7 @@ public class ResourceTest extends AbstractTest { mapping.setConnObjectKeyItem(connObjectKey); provision = new Provision(); - provision.setAnyType(anyTypeDAO.findGroup().getKey()); + provision.setAnyType(AnyTypeKind.GROUP.name()); provision.setObjectClass(ObjectClass.ACCOUNT_NAME); resource.getProvisions().add(provision); @@ -250,7 +249,7 @@ public class ResourceTest extends AbstractTest { resource.setPropagationPriority(2); Provision provision = new Provision(); - provision.setAnyType(anyTypeDAO.findUser().getKey()); + provision.setAnyType(AnyTypeKind.USER.name()); provision.setObjectClass(ObjectClass.ACCOUNT_NAME); resource.getProvisions().add(provision); @@ -284,7 +283,7 @@ public class ResourceTest extends AbstractTest { resource.setConnector(connector); Provision provision = new Provision(); - provision.setAnyType(anyTypeDAO.findUser().getKey()); + provision.setAnyType(AnyTypeKind.USER.name()); provision.setObjectClass(ObjectClass.ACCOUNT_NAME); resource.getProvisions().add(provision); @@ -314,7 +313,8 @@ public class ResourceTest extends AbstractTest { entityManager().flush(); assertNotNull(actual); - assertEquals(3, actual.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping().getItems().size()); + assertEquals(3, actual.getProvisionByAnyType(AnyTypeKind.USER.name()). + get().getMapping().getItems().size()); } @Test diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java index c107d59093..388e4369cd 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java @@ -32,10 +32,10 @@ import java.util.stream.Stream; import javax.persistence.EntityExistsException; import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.to.Item; +import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.AttrSchemaType; import org.apache.syncope.common.lib.types.IdMEntitlement; import org.apache.syncope.common.lib.types.IdRepoEntitlement; -import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO; import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO; import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO; import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO; @@ -59,9 +59,6 @@ import org.springframework.transaction.annotation.Transactional; @Transactional("Master") public class PlainSchemaTest extends AbstractTest { - @Autowired - private AnyTypeDAO anyTypeDAO; - @Autowired private UserDAO userDAO; @@ -123,7 +120,7 @@ public class PlainSchemaTest extends AbstractTest { // fullname is mapped as ConnObjectKey for ws-target-resource-2, need to swap it otherwise validation errors // will be raised resourceDAO.find("ws-target-resource-2"). - getProvision(anyTypeDAO.findUser().getKey()).get().getMapping().getItems(). + getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping().getItems(). forEach(item -> { if ("fullname".equals(item.getIntAttrName())) { item.setConnObjectKey(false); @@ -192,12 +189,12 @@ public class PlainSchemaTest extends AbstractTest { @Test public void deleteFirstname() { int pre = resourceDAO.find("resource-db-pull"). - getProvision(anyTypeDAO.findUser().getKey()).get().getMapping().getItems().size(); + getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping().getItems().size(); plainSchemaDAO.delete("firstname"); assertNull(plainSchemaDAO.find("firstname")); assertEquals(pre - 1, resourceDAO.find("resource-db-pull"). - getProvision(anyTypeDAO.findUser().getKey()).get().getMapping().getItems().size()); + getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping().getItems().size()); } } diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java index dc7a929cbe..8b9dc51a0a 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java @@ -30,9 +30,9 @@ import java.util.stream.Collectors; import org.apache.syncope.common.lib.to.Item; import org.apache.syncope.common.lib.to.Mapping; import org.apache.syncope.common.lib.to.Provision; +import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.MappingPurpose; import org.apache.syncope.common.lib.types.TaskType; -import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO; import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO; import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO; import org.apache.syncope.core.persistence.api.dao.PolicyDAO; @@ -58,9 +58,6 @@ public class ResourceTest extends AbstractTest { @Autowired private ConnInstanceDAO connInstanceDAO; - @Autowired - private AnyTypeDAO anyTypeDAO; - @Autowired private UserDAO userDAO; @@ -108,7 +105,7 @@ public class ResourceTest extends AbstractTest { resource.setConnector(connector); Provision provision = new Provision(); - provision.setAnyType(anyTypeDAO.findUser().getKey()); + provision.setAnyType(AnyTypeKind.USER.name()); provision.setObjectClass(ObjectClass.ACCOUNT_NAME); resource.getProvisions().add(provision); @@ -142,7 +139,7 @@ public class ResourceTest extends AbstractTest { ExternalResource actual = resourceDAO.save(resource); entityManager().flush(); assertNotNull(actual); - assertNotNull(actual.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping()); + assertNotNull(actual.getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping()); entityManager().flush(); resourceDAO.detach(actual); @@ -170,8 +167,8 @@ public class ResourceTest extends AbstractTest { assertTrue(resource.getConnector().equals(connector)); // check mappings - List<Item> items = resource.getProvision( - anyTypeDAO.findUser().getKey()).get().getMapping().getItems(); + List<Item> items = resource.getProvisionByAnyType( + AnyTypeKind.USER.name()).get().getMapping().getItems(); assertNotNull(items); assertEquals(5, items.size()); @@ -240,13 +237,14 @@ public class ResourceTest extends AbstractTest { ExternalResource csv = resourceDAO.find("resource-csv"); assertNotNull(csv); - int origMapItems = csv.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping().getItems().size(); + int origMapItems = csv.getProvisionByAnyType( + AnyTypeKind.USER.name()).get().getMapping().getItems().size(); Item newMapItem = new Item(); newMapItem.setIntAttrName("TEST"); newMapItem.setExtAttrName("TEST"); newMapItem.setPurpose(MappingPurpose.PROPAGATION); - csv.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping().add(newMapItem); + csv.getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping().add(newMapItem); resourceDAO.save(csv); entityManager().flush(); @@ -255,6 +253,6 @@ public class ResourceTest extends AbstractTest { assertNotNull(csv); assertEquals( origMapItems + 1, - csv.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping().getItems().size()); + csv.getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping().getItems().size()); } } diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java index 7fab7be0c3..ba1ecd9a5a 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java @@ -24,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.syncope.common.lib.to.Item; +import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO; import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO; import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO; @@ -51,7 +52,7 @@ public class VirSchemaTest extends AbstractTest { ExternalResource resource = resourceDAO.find("ws-target-resource-1"); assertNotNull(resource); assertTrue(virSchemaDAO.find(resource).isEmpty()); - assertTrue(virSchemaDAO.find(resource.getKey(), anyTypeDAO.findUser().getKey()).isEmpty()); + assertTrue(virSchemaDAO.find(resource.getKey(), AnyTypeKind.USER.name()).isEmpty()); VirSchema virSchema = entityFactory.newEntity(VirSchema.class); virSchema.setKey("vSchema"); @@ -71,8 +72,8 @@ public class VirSchemaTest extends AbstractTest { assertFalse(virSchemaDAO.find(resource).isEmpty()); assertTrue(virSchemaDAO.find(resource).contains(virSchema.getKey())); - assertFalse(virSchemaDAO.find(resource.getKey(), anyTypeDAO.findUser().getKey()).isEmpty()); - assertTrue(virSchemaDAO.find(resource.getKey(), anyTypeDAO.findUser().getKey()).contains(virSchema)); + assertFalse(virSchemaDAO.find(resource.getKey(), AnyTypeKind.USER.name()).isEmpty()); + assertTrue(virSchemaDAO.find(resource.getKey(), AnyTypeKind.USER.name()).contains(virSchema)); Item item = virSchema.asLinkingMappingItem(); assertNotNull(item); diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java index 41a7274ef8..35b54b32a2 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java @@ -736,10 +736,10 @@ public class DefaultMappingManager implements MappingManager { case "userOwner": case "groupOwner": - Mapping uMappingTO = provision.getAnyType().equals(anyTypeDAO.findUser().getKey()) + Mapping uMappingTO = provision.getAnyType().equals(AnyTypeKind.USER.name()) ? provision.getMapping() : null; - Mapping gMappingTO = provision.getAnyType().equals(anyTypeDAO.findGroup().getKey()) + Mapping gMappingTO = provision.getAnyType().equals(AnyTypeKind.GROUP.name()) ? provision.getMapping() : null; diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultVirAttrHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultVirAttrHandler.java index bd578a9a1b..0bd8cc5b34 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultVirAttrHandler.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultVirAttrHandler.java @@ -113,7 +113,7 @@ public class DefaultVirAttrHandler implements VirAttrHandler { LOG.debug("Found in cache: {}={}", cacheKey, cacheValue); result.put(schema, cacheValue.getValues()); } else if (schema.getAnyType().equals(any.getType())) { - schema.getResource().getProvision(schema.getAnyType().getKey()).ifPresent(provision -> { + schema.getResource().getProvisionByAnyType(schema.getAnyType().getKey()).ifPresent(provision -> { Set<VirSchema> schemasToRead = toRead.get(Pair.of(schema.getResource(), provision)); if (schemasToRead == null) { schemasToRead = new HashSet<>(); diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java index 97ad8f378b..c8a89310f8 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java @@ -200,7 +200,7 @@ abstract class AbstractAnyDataBinder { Map<String, ConnObject> onResources = new HashMap<>(); resources.stream().map(resourceDAO::find).filter(Objects::nonNull).forEach(resource -> { - resource.getProvision(any.getType().getKey()). + resource.getProvisionByAnyType(any.getType().getKey()). ifPresent(provision -> MappingUtils.getConnObjectKeyItem(provision).ifPresent(keyItem -> { Pair<String, Set<Attribute>> prepared = mappingManager.prepareAttrsFromAny( @@ -319,7 +319,7 @@ abstract class AbstractAnyDataBinder { SyncopeClientException reqValMissing = SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing); resources.forEach(resource -> { - Optional<Provision> provision = resource.getProvision(any.getType().getKey()); + Optional<Provision> provision = resource.getProvisionByAnyType(any.getType().getKey()); if (resource.isEnforceMandatoryCondition() && provision.isPresent()) { List<String> missingAttrNames = evaluateMandatoryCondition(resource, provision.get(), any); if (!missingAttrNames.isEmpty()) { diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java index 0d76a4b79a..4927d4c5a0 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java @@ -149,7 +149,7 @@ public class ResourceDataBinderImpl implements ResourceDataBinder { LOG.debug("Invalid {} specified {}, ignoring...", AnyType.class.getSimpleName(), provisionTO.getAnyType()); } else { - Provision provision = resource.getProvision(anyType.getKey()).orElse(null); + Provision provision = resource.getProvisionByAnyType(anyType.getKey()).orElse(null); if (provision == null) { provision = new Provision(); provision.setAnyType(anyType.getKey()); diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java index 131ed2483d..89ceae71cc 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java @@ -356,7 +356,7 @@ public class SchemaDataBinderImpl implements SchemaDataBinder { sce.getElements().add("AnyType " + schemaTO.getAnyType() + " not found"); throw sce; } - Provision provision = resource.getProvision(anyType.getKey()).orElse(null); + Provision provision = resource.getProvisionByAnyType(anyType.getKey()).orElse(null); if (provision == null) { SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidSchemaDefinition); sce.getElements().add("Provision for AnyType" + schemaTO.getAnyType() diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java index a9c0c36faf..b61320990a 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java @@ -443,7 +443,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat } protected boolean isPasswordMapped(final ExternalResource resource) { - return resource.getProvision(anyTypeDAO.findUser().getKey()). + return resource.getProvisionByAnyType(AnyTypeKind.USER.name()). filter(provision -> provision.getMapping() != null). map(provision -> provision.getMapping().getItems().stream().anyMatch(Item::isPassword)). orElse(false); @@ -747,7 +747,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat propByRes.addAll( ResourceOperation.UPDATE, anyUtils.getAllResources(saved).stream(). - map(resource -> resource.getProvision(saved.getType().getKey()). + map(resource -> resource.getProvisionByAnyType(saved.getType().getKey()). filter(mappingManager::hasMustChangePassword). map(provision -> resource.getKey()). orElse(null)). diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/ReconciliationReportlet.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/ReconciliationReportlet.java index c939275259..9bc0f66502 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/ReconciliationReportlet.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/ReconciliationReportlet.java @@ -285,7 +285,7 @@ public class ReconciliationReportlet extends AbstractReportlet { AnyUtils anyUtils = anyUtilsFactory.getInstance(any); anyUtils.getAllResources(any).forEach(resource -> { - Provision provision = resource.getProvision(any.getType().getKey()).orElse(null); + Provision provision = resource.getProvisionByAnyType(any.getType().getKey()).orElse(null); Optional<Item> connObjectKeyItem = MappingUtils.getConnObjectKeyItem(provision); String connObjectKeyValue = connObjectKeyItem.isPresent() ? mappingManager.getConnObjectKeyValue(any, resource, provision).get() diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java index bd75358897..91be9326c3 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java @@ -197,7 +197,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask Uid result = connector.create(taskInfo.getObjectClass(), attributes, null, propagationAttempted); - taskInfo.getResource().getProvision(taskInfo.getAnyType()). + taskInfo.getResource().getProvisionByAnyType(taskInfo.getAnyType()). filter(provision -> provision.getUidOnCreate() != null). ifPresent(provision -> anyUtilsFactory.getInstance(taskInfo.getAnyTypeKind()).addAttr( validator, @@ -511,7 +511,8 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask Uid uid = null; Result result; try { - provision = taskInfo.getResource().getProvision(taskInfo.getObjectClass()).orElse(null); + provision = taskInfo.getResource(). + getProvisionByObjectClass(taskInfo.getObjectClass().getObjectClassValue()).orElse(null); orgUnit = taskInfo.getResource().getOrgUnit(); if (taskInfo.getBeforeObj().isEmpty()) { diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationManager.java index 6bb431bc78..bf367e3668 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationManager.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationManager.java @@ -468,7 +468,7 @@ public class DefaultPropagationManager implements PropagationManager { propByRes.asMap().forEach((resourceKey, operation) -> { ExternalResource resource = resourceDAO.find(resourceKey); Provision provision = Optional.ofNullable(resource). - flatMap(externalResource -> externalResource.getProvision(any.getType().getKey())).orElse(null); + flatMap(r -> r.getProvisionByAnyType(any.getType().getKey())).orElse(null); Stream<Item> mappingItems = provision == null ? Stream.empty() : MappingUtils.getPropagationItems(provision.getMapping().getItems().stream()); @@ -514,7 +514,7 @@ public class DefaultPropagationManager implements PropagationManager { Provision provision = account == null || account.getResource() == null ? null - : account.getResource().getProvision(AnyTypeKind.USER.name()).orElse(null); + : account.getResource().getProvisionByAnyType(AnyTypeKind.USER.name()).orElse(null); Stream<Item> mappingItems = provision == null ? Stream.empty() : MappingUtils.getPropagationItems(provision.getMapping().getItems().stream()); @@ -621,7 +621,7 @@ public class DefaultPropagationManager implements PropagationManager { anyUtilsFactory.getInstance(kind).dao().findAllResourceKeys(key).stream(). map(resourceDAO::find). filter(resource -> !excludedResources.contains(resource.getKey()) - && resource.getProvision(any.getType().getKey()).isPresent() + && resource.getProvisionByAnyType(any.getType().getKey()).isPresent() && resource.getPropagationPolicy() != null && resource.getPropagationPolicy().isUpdateDelta()). forEach(resource -> { Pair<String, Set<Attribute>> preparedAttrs = mappingManager.prepareAttrsFromAny( @@ -630,7 +630,7 @@ public class DefaultPropagationManager implements PropagationManager { changePwd, enable, resource, - resource.getProvision(any.getType().getKey()).get()); + resource.getProvisionByAnyType(any.getType().getKey()).get()); attrs.put( Pair.of(resource.getKey(), preparedAttrs.getLeft()), preparedAttrs.getRight()); @@ -639,7 +639,7 @@ public class DefaultPropagationManager implements PropagationManager { if (any instanceof User) { ((User) any).getLinkedAccounts().stream(). filter(account -> !excludedResources.contains(account.getResource().getKey()) - && account.getResource().getProvision(any.getType().getKey()).isPresent() + && account.getResource().getProvisionByAnyType(any.getType().getKey()).isPresent() && account.getResource().getPropagationPolicy() != null && account.getResource().getPropagationPolicy().isUpdateDelta()). forEach(account -> { @@ -648,7 +648,7 @@ public class DefaultPropagationManager implements PropagationManager { account, password, true, - account.getResource().getProvision(any.getType().getKey()).get()); + account.getResource().getProvisionByAnyType(any.getType().getKey()).get()); attrs.put( Pair.of(account.getResource().getKey(), account.getConnObjectKeyValue()), preparedAttrs); 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 9cb4215b3f..2a0cd1297e 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 @@ -110,7 +110,7 @@ public class LDAPMembershipPropagationActions implements PropagationActions { return; } - Optional<Provision> groupProvision = taskInfo.getResource().getProvision(AnyTypeKind.GROUP.name()); + Optional<Provision> groupProvision = taskInfo.getResource().getProvisionByAnyType(AnyTypeKind.GROUP.name()); if (groupProvision.isPresent() && groupProvision.get().getMapping() != null && StringUtils.isNotBlank(groupProvision.get().getMapping().getConnObjectLink())) { diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java index 5b654a0c6a..7155fcfa56 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java @@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.syncope.common.lib.to.Mapping; import org.apache.syncope.common.lib.to.Provision; import org.apache.syncope.common.lib.to.ProvisioningReport; +import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.TraceLevel; import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO; import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO; @@ -404,11 +405,11 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask } // Summary, also to be included for FAILURE and ALL, so create it anyway. - boolean includeUser = resource.getProvision(anyTypeDAO.findUser().getKey()).isPresent(); - boolean includeGroup = resource.getProvision(anyTypeDAO.findGroup().getKey()).isPresent(); + boolean includeUser = resource.getProvisionByAnyType(AnyTypeKind.USER.name()).isPresent(); + boolean includeGroup = resource.getProvisionByAnyType(AnyTypeKind.GROUP.name()).isPresent(); boolean includeAnyObject = resource.getProvisions().stream().anyMatch( - provision -> !provision.getAnyType().equals(anyTypeDAO.findUser().getKey()) - && !provision.getAnyType().equals(anyTypeDAO.findGroup().getKey())); + provision -> !provision.getAnyType().equals(AnyTypeKind.USER.name()) + && !provision.getAnyType().equals(AnyTypeKind.GROUP.name())); boolean includeRealm = resource.getOrgUnit() != null; if (includeUser) { diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java index f9204488d5..440d0cfb18 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java @@ -132,7 +132,8 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan public boolean handle(final SyncDelta delta) { Provision provision = null; try { - provision = profile.getTask().getResource().getProvision(delta.getObject().getObjectClass()). + provision = profile.getTask().getResource(). + getProvisionByObjectClass(delta.getObject().getObjectClass().getObjectClassValue()). orElseThrow(() -> new JobExecutionException( "No provision found on " + profile.getTask().getResource() + " for " + delta.getObject().getObjectClass())); diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java index 7911d3529e..8069984a92 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java @@ -212,7 +212,8 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan try { any = getAnyUtils().dao().authFind(anyKey); - Provision provision = profile.getTask().getResource().getProvision(any.getType().getKey()).orElse(null); + Provision provision = profile.getTask().getResource(). + getProvisionByAnyType(any.getType().getKey()).orElse(null); if (provision == null) { throw new JobExecutionException("No provision found on " + profile.getTask().getResource() + " for " + any.getType().getKey()); diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/InboundMatcher.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/InboundMatcher.java index 3ca42deca6..1dce092727 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/InboundMatcher.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/InboundMatcher.java @@ -140,7 +140,7 @@ public class InboundMatcher { final ExternalResource resource, final Connector connector) { - Optional<Provision> provision = resource.getProvision(anyType.getKey()); + Optional<Provision> provision = resource.getProvisionByAnyType(anyType.getKey()); if (provision.isEmpty()) { return Optional.empty(); } diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java index 3815d16729..3bb5a9cc86 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java @@ -29,6 +29,7 @@ import org.apache.syncope.common.lib.to.EntityTO; import org.apache.syncope.common.lib.to.GroupTO; import org.apache.syncope.common.lib.to.Provision; import org.apache.syncope.common.lib.to.ProvisioningReport; +import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO; import org.apache.syncope.core.persistence.api.dao.GroupDAO; import org.apache.syncope.core.persistence.api.dao.PullMatch; @@ -165,7 +166,7 @@ public class LDAPMembershipPullActions extends SchedulingPullActions { } Optional<Provision> provision = profile.getTask().getResource(). - getProvision(anyTypeDAO.findUser().getKey()).filter(p -> p.getMapping() != null); + getProvisionByAnyType(AnyTypeKind.USER.name()).filter(p -> p.getMapping() != null); if (provision.isEmpty()) { super.after(profile, delta, entity, result); } diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java index 5b74e44abc..055449838d 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java @@ -336,6 +336,7 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> i handler.setProfile(profile); handler.setPullExecutor(this); + boolean setSyncTokens = false; try { Set<String> moreAttrsToGet = new HashSet<>(); profile.getActions().forEach(a -> moreAttrsToGet.addAll(a.moreAttrsToGet(profile, provision))); @@ -361,9 +362,7 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> i options); if (!dryRun) { - provision.setSyncToken( - ConnObjectUtils.toString(latestSyncTokens.get(provision.getObjectClass()))); - resourceDAO.save(pullTask.getResource()); + setSyncTokens = true; } break; @@ -396,6 +395,14 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> i } } catch (Throwable t) { throw new JobExecutionException("While pulling from connector", t); + } finally { + if (setSyncTokens) { + latestSyncTokens.forEach((objectClass, syncToken) -> { + pullTask.getResource().getProvisionByObjectClass(objectClass). + ifPresent(p -> p.setSyncToken(ConnObjectUtils.toString(syncToken))); + }); + resourceDAO.save(pullTask.getResource()); + } } } try { diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DefaultMappingManagerTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DefaultMappingManagerTest.java index e15ed0c937..e6e6a0cb71 100644 --- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DefaultMappingManagerTest.java +++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DefaultMappingManagerTest.java @@ -92,7 +92,7 @@ public class DefaultMappingManagerTest extends AbstractTest { public void prepareAttrsForUser() { User bellini = userDAO.findByUsername("bellini"); ExternalResource ldap = resourceDAO.find("resource-ldap"); - Provision provision = ldap.getProvision(AnyTypeKind.USER.name()).get(); + Provision provision = ldap.getProvisionByAnyType(AnyTypeKind.USER.name()).get(); assertNotEquals(CipherAlgorithm.AES, bellini.getCipherAlgorithm()); @@ -171,7 +171,7 @@ public class DefaultMappingManagerTest extends AbstractTest { public void prepareAttrsForLinkedAccount() { User vivaldi = userDAO.findByUsername("vivaldi"); ExternalResource ldap = resourceDAO.find("resource-ldap"); - Provision provision = ldap.getProvision(AnyTypeKind.USER.name()).get(); + Provision provision = ldap.getProvisionByAnyType(AnyTypeKind.USER.name()).get(); LinkedAccount account = entityFactory.newEntity(LinkedAccount.class); account.setConnObjectKeyValue("admin"); @@ -281,7 +281,7 @@ public class DefaultMappingManagerTest extends AbstractTest { // 3. check propagation attrs ExternalResource csv = resourceDAO.find("resource-csv"); - Provision provision = csv.getProvision(AnyTypeKind.USER.name()).get(); + Provision provision = csv.getProvisionByAnyType(AnyTypeKind.USER.name()).get(); assertNotNull(provision); Pair<String, Set<Attribute>> attrs = mappingManager.prepareAttrsFromAny( diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderTest.java index 14f08b61d3..b1866fd0ac 100644 --- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderTest.java +++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderTest.java @@ -91,10 +91,10 @@ public class ResourceDataBinderTest extends AbstractTest { Set<Item> beforeUserIdMappings = new HashSet<>(); for (ExternalResource res : resourceDAO.findAll()) { - if (res.getProvision(anyTypeDAO.findUser().getKey()).isPresent() - && res.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping() != null) { + if (res.getProvisionByAnyType(AnyTypeKind.USER.name()).isPresent() + && res.getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping() != null) { - for (Item mapItem : res.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping().getItems()) { + for (Item mapItem : res.getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping().getItems()) { if (userId.getKey().equals(mapItem.getIntAttrName())) { beforeUserIdMappings.add(mapItem); } @@ -127,8 +127,8 @@ public class ResourceDataBinderTest extends AbstractTest { resource = resourceDAO.save(resource); entityManager().flush(); assertNotNull(resource); - assertNotNull(resource.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping()); - assertEquals(1, resource.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping().getItems().size()); + assertNotNull(resource.getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping()); + assertEquals(1, resource.getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping().getItems().size()); ExternalResource actual = resourceDAO.find("resource-issue42"); entityManager().flush(); @@ -139,10 +139,10 @@ public class ResourceDataBinderTest extends AbstractTest { Set<Item> afterUserIdMappings = new HashSet<>(); for (ExternalResource res : resourceDAO.findAll()) { - if (res.getProvision(anyTypeDAO.findUser().getKey()).isPresent() - && res.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping() != null) { + if (res.getProvisionByAnyType(AnyTypeKind.USER.name()).isPresent() + && res.getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping() != null) { - for (Item mapItem : res.getProvision(anyTypeDAO.findUser().getKey()).get().getMapping().getItems()) { + for (Item mapItem : res.getProvisionByAnyType(AnyTypeKind.USER.name()).get().getMapping().getItems()) { if (userId.getKey().equals(mapItem.getIntAttrName())) { afterUserIdMappings.add(mapItem); } diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActionsTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActionsTest.java index 87ef0b5de8..a4d6ce0030 100644 --- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActionsTest.java +++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActionsTest.java @@ -197,7 +197,7 @@ public class LDAPMembershipPullActionsTest extends AbstractTest { entity = new GroupTO(); when(connectorObj.getAttributeByName(anyString())).thenReturn(attribute); - when(externalResource.getProvision(anyString())).thenAnswer(ic -> Optional.of(mock(Provision.class))); + when(externalResource.getProvisionByAnyType(anyString())).thenAnswer(ic -> Optional.of(mock(Provision.class))); ldapMembershipPullActions.after(profile, syncDelta, entity, result); @@ -212,7 +212,7 @@ public class LDAPMembershipPullActionsTest extends AbstractTest { List<String> expected = List.of(expectedUid); when(connectorObj.getAttributeByName(anyString())).thenReturn(attribute); - when(externalResource.getProvision(anyString())).thenAnswer(ic -> Optional.empty()); + when(externalResource.getProvisionByAnyType(anyString())).thenAnswer(ic -> Optional.empty()); when(inboundMatcher.match(any(AnyType.class), anyString(), any(ExternalResource.class), any(Connector.class))). thenReturn(Optional.of(new PullMatch(MatchType.ANY, user))); diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java index 437a1abbc1..1ff38fbe5a 100644 --- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java +++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java @@ -43,7 +43,6 @@ import org.apache.syncope.common.lib.types.IdRepoEntitlement; import org.apache.syncope.core.persistence.api.ImplementationLookup; import org.apache.syncope.core.persistence.api.dao.AccessTokenDAO; import org.apache.syncope.core.persistence.api.dao.AnySearchDAO; -import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO; import org.apache.syncope.core.persistence.api.dao.DelegationDAO; import org.apache.syncope.core.persistence.api.dao.GroupDAO; import org.apache.syncope.core.persistence.api.dao.RealmDAO; @@ -52,7 +51,6 @@ import org.apache.syncope.core.persistence.api.dao.UserDAO; import org.apache.syncope.core.persistence.api.dao.search.AttrCond; import org.apache.syncope.core.persistence.api.dao.search.SearchCond; import org.apache.syncope.core.persistence.api.entity.AccessToken; -import org.apache.syncope.core.persistence.api.entity.AnyType; import org.apache.syncope.core.persistence.api.entity.Delegation; import org.apache.syncope.core.persistence.api.entity.DynRealm; import org.apache.syncope.core.persistence.api.entity.ExternalResource; @@ -104,8 +102,6 @@ public class AuthDataAccessor { protected final GroupDAO groupDAO; - protected final AnyTypeDAO anyTypeDAO; - protected final AnySearchDAO anySearchDAO; protected final AccessTokenDAO accessTokenDAO; @@ -131,7 +127,6 @@ public class AuthDataAccessor { final RealmDAO realmDAO, final UserDAO userDAO, final GroupDAO groupDAO, - final AnyTypeDAO anyTypeDAO, final AnySearchDAO anySearchDAO, final AccessTokenDAO accessTokenDAO, final ConfParamOps confParamOps, @@ -146,7 +141,6 @@ public class AuthDataAccessor { this.realmDAO = realmDAO; this.userDAO = userDAO; this.groupDAO = groupDAO; - this.anyTypeDAO = anyTypeDAO; this.anySearchDAO = anySearchDAO; this.accessTokenDAO = accessTokenDAO; this.confParamOps = confParamOps; @@ -289,13 +283,12 @@ public class AuthDataAccessor { ExternalResource resource = itor.next(); String connObjectKey = null; try { - AnyType userType = anyTypeDAO.findUser(); - Provision provision = resource.getProvision(userType.getKey()). + Provision provision = resource.getProvisionByAnyType(AnyTypeKind.USER.name()). orElseThrow(() -> new AccountNotFoundException( - "Unable to locate provision for user type " + userType.getKey())); + "Unable to locate provision for user type " + AnyTypeKind.USER.name())); connObjectKey = mappingManager.getConnObjectKeyValue(user, resource, provision). orElseThrow(() -> new AccountNotFoundException( - "Unable to locate conn object key value for " + userType.getKey())); + "Unable to locate conn object key value for " + AnyTypeKind.USER.name())); Uid uid = connectorManager.getConnector(resource).authenticate(connObjectKey, password, null); if (uid != null) { authenticated = true; diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/WebSecurityContext.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/WebSecurityContext.java index e9ffb1b855..938a2b6709 100644 --- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/WebSecurityContext.java +++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/WebSecurityContext.java @@ -23,7 +23,6 @@ import org.apache.syncope.common.keymaster.client.api.DomainOps; import org.apache.syncope.core.persistence.api.ImplementationLookup; import org.apache.syncope.core.persistence.api.dao.AccessTokenDAO; import org.apache.syncope.core.persistence.api.dao.AnySearchDAO; -import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO; import org.apache.syncope.core.persistence.api.dao.DelegationDAO; import org.apache.syncope.core.persistence.api.dao.GroupDAO; import org.apache.syncope.core.persistence.api.dao.RealmDAO; @@ -171,7 +170,6 @@ public class WebSecurityContext { final RealmDAO realmDAO, final UserDAO userDAO, final GroupDAO groupDAO, - final AnyTypeDAO anyTypeDAO, final AnySearchDAO anySearchDAO, final AccessTokenDAO accessTokenDAO, final ConfParamOps confParamOps, @@ -187,7 +185,6 @@ public class WebSecurityContext { realmDAO, userDAO, groupDAO, - anyTypeDAO, anySearchDAO, accessTokenDAO, confParamOps,