You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2018/11/06 16:16:12 UTC
[syncope] 02/02: [SYNCOPE-1392] Removing BeanUtils#copyProperties
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
commit d2524ead7102e38f6b490c3da792f43bcd81ae51
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Tue Nov 6 17:15:14 2018 +0100
[SYNCOPE-1392] Removing BeanUtils#copyProperties
---
.../org/apache/syncope/core/logic/LoggerLogic.java | 10 +-
.../core/persistence/jpa/dao/AbstractAnyDAO.java | 43 +----
.../core/persistence/jpa/dao/JPAAnyObjectDAO.java | 34 +---
.../core/persistence/jpa/dao/JPADynRealmDAO.java | 14 +-
.../jpa/dao/JPAExternalResourceDAO.java | 104 ++---------
.../core/persistence/jpa/dao/JPAGroupDAO.java | 60 ++-----
.../persistence/jpa/dao/JPAPlainSchemaDAO.java | 13 +-
.../core/persistence/jpa/dao/JPARoleDAO.java | 15 +-
.../core/persistence/jpa/dao/JPAUserDAO.java | 43 ++---
.../core/persistence/jpa/dao/JPAVirSchemaDAO.java | 14 +-
.../java/data/AccessTokenDataBinderImpl.java | 6 +-
.../java/data/AnyObjectDataBinderImpl.java | 16 +-
.../java/data/ConnInstanceDataBinderImpl.java | 28 ++-
.../java/data/ImplementationDataBinderImpl.java | 14 +-
.../java/data/NotificationDataBinderImpl.java | 29 +++-
.../java/data/RemediationDataBinderImpl.java | 12 +-
.../java/data/ReportDataBinderImpl.java | 22 ++-
.../java/data/ResourceDataBinderImpl.java | 39 ++++-
.../java/data/SchemaDataBinderImpl.java | 46 ++++-
.../java/data/SecurityQuestionDataBinderImpl.java | 7 +-
.../provisioning/java/data/TaskDataBinderImpl.java | 114 +++++++-----
.../provisioning/java/data/UserDataBinderImpl.java | 23 ++-
.../org/apache/syncope/core/spring/BeanUtils.java | 193 ---------------------
.../camel/data/CamelRouteDataBinderImpl.java | 7 +-
.../flowable/impl/FlowableUserRequestHandler.java | 23 ++-
.../flowable/impl/FlowableUserWorkflowAdapter.java | 2 +-
.../java/data/OIDCProviderDataBinderImpl.java | 17 +-
.../java/data/SAML2IdPDataBinderImpl.java | 19 +-
.../syncope/fit/core/NotificationITCase.java | 7 +-
.../apache/syncope/fit/core/PlainSchemaITCase.java | 4 +-
.../apache/syncope/fit/core/PullTaskITCase.java | 2 +-
31 files changed, 374 insertions(+), 606 deletions(-)
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
index b96a4a2..57e2007 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
@@ -55,7 +55,6 @@ import org.apache.syncope.core.persistence.api.dao.LoggerDAO;
import org.apache.syncope.core.persistence.api.dao.NotFoundException;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
import org.apache.syncope.core.persistence.api.entity.Logger;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.provisioning.java.pushpull.PushJobDelegate;
import org.apache.syncope.core.provisioning.java.pushpull.PullJobDelegate;
import org.apache.syncope.core.spring.security.AuthContextUtils;
@@ -116,7 +115,8 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> {
private List<LoggerTO> list(final LoggerType type) {
return loggerDAO.findAll(type).stream().map(logger -> {
LoggerTO loggerTO = new LoggerTO();
- BeanUtils.copyProperties(logger, loggerTO);
+ loggerTO.setKey(logger.getKey());
+ loggerTO.setLevel(logger.getLevel());
return loggerTO;
}).collect(Collectors.toList());
}
@@ -230,7 +230,8 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> {
ctx.updateLoggers();
LoggerTO result = new LoggerTO();
- BeanUtils.copyProperties(syncopeLogger, result);
+ result.setKey(syncopeLogger.getKey());
+ result.setLevel(syncopeLogger.getLevel());
return result;
}
@@ -262,7 +263,8 @@ public class LoggerLogic extends AbstractTransactionalLogic<LoggerTO> {
}
LoggerTO loggerToDelete = new LoggerTO();
- BeanUtils.copyProperties(syncopeLogger, loggerToDelete);
+ loggerToDelete.setKey(syncopeLogger.getKey());
+ loggerToDelete.setLevel(syncopeLogger.getLevel());
// remove SyncopeLogger from local storage, so that LoggerLoader won't load this next time
loggerDAO.delete(syncopeLogger);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
index 3320bb6..568b007 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
@@ -58,7 +58,6 @@ import org.apache.syncope.core.persistence.api.entity.group.Group;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.persistence.jpa.entity.user.JPAUser;
-import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.transaction.annotation.Propagation;
@@ -69,41 +68,17 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
@Autowired
protected ApplicationEventPublisher publisher;
+ @Autowired
private PlainSchemaDAO plainSchemaDAO;
+ @Autowired
private DerSchemaDAO derSchemaDAO;
- private DynRealmDAO dynRealmDAO;
+ @Autowired
+ protected DynRealmDAO dynRealmDAO;
private AnyUtils anyUtils;
- private PlainSchemaDAO plainSchemaDAO() {
- synchronized (this) {
- if (plainSchemaDAO == null) {
- plainSchemaDAO = ApplicationContextProvider.getApplicationContext().getBean(PlainSchemaDAO.class);
- }
- }
- return plainSchemaDAO;
- }
-
- private DerSchemaDAO derSchemaDAO() {
- synchronized (this) {
- if (derSchemaDAO == null) {
- derSchemaDAO = ApplicationContextProvider.getApplicationContext().getBean(DerSchemaDAO.class);
- }
- }
- return derSchemaDAO;
- }
-
- protected DynRealmDAO dynRealmDAO() {
- synchronized (this) {
- if (dynRealmDAO == null) {
- dynRealmDAO = ApplicationContextProvider.getApplicationContext().getBean(DynRealmDAO.class);
- }
- }
- return dynRealmDAO;
- }
-
protected abstract AnyUtils init();
protected AnyUtils anyUtils() {
@@ -197,7 +172,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
final PlainAttrValue attrValue,
final boolean ignoreCaseMatch) {
- PlainSchema schema = plainSchemaDAO().find(schemaKey);
+ PlainSchema schema = plainSchemaDAO.find(schemaKey);
if (schema == null) {
LOG.error("Invalid schema '{}'", schemaKey);
return Collections.<A>emptyList();
@@ -235,7 +210,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
final PlainAttrValue attrUniqueValue,
final boolean ignoreCaseMatch) {
- PlainSchema schema = plainSchemaDAO().find(schemaKey);
+ PlainSchema schema = plainSchemaDAO.find(schemaKey);
if (schema == null) {
LOG.error("Invalid schema '{}'", schemaKey);
return null;
@@ -334,7 +309,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
for (int i = 0; i < identifiers.size(); i++) {
if (!used.contains(identifiers.get(i))) {
// verify schema existence and get schema type
- PlainSchema schema = plainSchemaDAO().find(identifiers.get(i));
+ PlainSchema schema = plainSchemaDAO.find(identifiers.get(i));
if (schema == null) {
LOG.error("Invalid schema '{}', ignoring", identifiers.get(i));
} else {
@@ -394,7 +369,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
@Override
public List<A> findByDerAttrValue(final String schemaKey, final String value, final boolean ignoreCaseMatch) {
- DerSchema schema = derSchemaDAO().find(schemaKey);
+ DerSchema schema = derSchemaDAO.find(schemaKey);
if (schema == null) {
LOG.error("Invalid schema '{}'", schemaKey);
return Collections.<A>emptyList();
@@ -541,7 +516,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
? (String) ((Object[]) resultKey)[0]
: ((String) resultKey)).
forEachOrdered((actualKey) -> {
- DynRealm dynRealm = dynRealmDAO().find(actualKey.toString());
+ DynRealm dynRealm = dynRealmDAO.find(actualKey.toString());
if (dynRealm == null) {
LOG.error("Could not find dynRealm with id {}, even though returned by the native query",
actualKey);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
index a7211de..278434f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
@@ -55,7 +55,7 @@ import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAnyObject;
import org.apache.syncope.core.persistence.jpa.entity.user.JPAURelationship;
import org.apache.syncope.core.provisioning.api.event.AnyCreatedUpdatedEvent;
import org.apache.syncope.core.provisioning.api.event.AnyDeletedEvent;
-import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@@ -63,28 +63,12 @@ import org.springframework.transaction.annotation.Transactional;
@Repository
public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObjectDAO {
+ @Autowired
private UserDAO userDAO;
+ @Autowired
private GroupDAO groupDAO;
- private UserDAO userDAO() {
- synchronized (this) {
- if (userDAO == null) {
- userDAO = ApplicationContextProvider.getApplicationContext().getBean(UserDAO.class);
- }
- }
- return userDAO;
- }
-
- private GroupDAO groupDAO() {
- synchronized (this) {
- if (groupDAO == null) {
- groupDAO = ApplicationContextProvider.getApplicationContext().getBean(GroupDAO.class);
- }
- }
- return groupDAO;
- }
-
@Override
protected AnyUtils init() {
return new JPAAnyUtilsFactory().getInstance(AnyTypeKind.ANY_OBJECT);
@@ -211,8 +195,8 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
AnyObject merged = super.save(anyObject);
publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, merged, AuthContextUtils.getDomain()));
- Pair<Set<String>, Set<String>> dynGroupMembs = groupDAO().refreshDynMemberships(merged);
- dynRealmDAO().refreshDynMemberships(merged);
+ Pair<Set<String>, Set<String>> dynGroupMembs = groupDAO.refreshDynMemberships(merged);
+ dynRealmDAO.refreshDynMemberships(merged);
return Pair.of(merged, dynGroupMembs);
}
@@ -247,8 +231,8 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
@Override
public void delete(final AnyObject anyObject) {
- groupDAO().removeDynMemberships(anyObject);
- dynRealmDAO().removeDynMemberships(anyObject.getKey());
+ groupDAO.removeDynMemberships(anyObject);
+ dynRealmDAO.removeDynMemberships(anyObject.getKey());
findARelationships(anyObject).forEach(relationship -> {
relationship.getLeftEnd().getRelationships().remove(relationship);
@@ -258,7 +242,7 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
});
findURelationships(anyObject).forEach(relationship -> {
relationship.getLeftEnd().getRelationships().remove(relationship);
- userDAO().save(relationship.getLeftEnd());
+ userDAO.save(relationship.getLeftEnd());
entityManager().remove(relationship);
});
@@ -281,7 +265,7 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
? (String) ((Object[]) resultKey)[0]
: ((String) resultKey)).
forEachOrdered(actualKey -> {
- Group group = groupDAO().find(actualKey.toString());
+ Group group = groupDAO.find(actualKey.toString());
if (group == null) {
LOG.error("Could not find group with id {}, even though returned by the native query",
actualKey);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADynRealmDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADynRealmDAO.java
index b9d2f01..7fc9585 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADynRealmDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADynRealmDAO.java
@@ -47,24 +47,16 @@ public class JPADynRealmDAO extends AbstractDAO<DynRealm> implements DynRealmDAO
@Autowired
private ApplicationEventPublisher publisher;
+ @Autowired
private AnySearchDAO searchDAO;
private AnySearchDAO jpaAnySearchDAO;
- private AnySearchDAO searchDAO() {
- synchronized (this) {
- if (searchDAO == null) {
- searchDAO = ApplicationContextProvider.getApplicationContext().getBean(AnySearchDAO.class);
- }
- }
- return searchDAO;
- }
-
private AnySearchDAO jpaAnySearchDAO() {
synchronized (this) {
if (jpaAnySearchDAO == null) {
- if (AopUtils.getTargetClass(searchDAO()).equals(JPAAnySearchDAO.class)) {
- jpaAnySearchDAO = searchDAO();
+ if (AopUtils.getTargetClass(searchDAO).equals(JPAAnySearchDAO.class)) {
+ jpaAnySearchDAO = searchDAO;
} else {
jpaAnySearchDAO = (AnySearchDAO) ApplicationContextProvider.getBeanFactory().
createBean(JPAAnySearchDAO.class, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, true);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
index 9c573fd..f684a15 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
@@ -52,7 +52,6 @@ import org.apache.syncope.core.persistence.jpa.entity.resource.JPAExternalResour
import org.apache.syncope.core.persistence.jpa.entity.resource.JPAMapping;
import org.apache.syncope.core.persistence.jpa.entity.resource.JPAProvision;
import org.apache.syncope.core.provisioning.api.ConnectorRegistry;
-import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.apache.syncope.core.spring.security.DelegatedAdministrationException;
import org.springframework.beans.factory.annotation.Autowired;
@@ -65,95 +64,30 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem
@Autowired
private ConnectorRegistry connRegistry;
+ @Autowired
private TaskDAO taskDAO;
+ @Autowired
private AnyObjectDAO anyObjectDAO;
+ @Autowired
private UserDAO userDAO;
+ @Autowired
private GroupDAO groupDAO;
+ @Autowired
private PolicyDAO policyDAO;
+ @Autowired
private VirSchemaDAO virSchemaDAO;
+ @Autowired
private RealmDAO realmDAO;
+ @Autowired
private ExternalResourceHistoryConfDAO externalResourceHistoryConfDAO;
- private TaskDAO taskDAO() {
- synchronized (this) {
- if (taskDAO == null) {
- taskDAO = ApplicationContextProvider.getApplicationContext().getBean(TaskDAO.class);
- }
- }
- return taskDAO;
- }
-
- private AnyObjectDAO anyObjectDAO() {
- synchronized (this) {
- if (anyObjectDAO == null) {
- anyObjectDAO = ApplicationContextProvider.getApplicationContext().getBean(AnyObjectDAO.class);
- }
- }
- return anyObjectDAO;
- }
-
- private UserDAO userDAO() {
- synchronized (this) {
- if (userDAO == null) {
- userDAO = ApplicationContextProvider.getApplicationContext().getBean(UserDAO.class);
- }
- }
- return userDAO;
- }
-
- private GroupDAO groupDAO() {
- synchronized (this) {
- if (groupDAO == null) {
- groupDAO = ApplicationContextProvider.getApplicationContext().getBean(GroupDAO.class);
- }
- }
- return groupDAO;
- }
-
- private PolicyDAO policyDAO() {
- synchronized (this) {
- if (policyDAO == null) {
- policyDAO = ApplicationContextProvider.getApplicationContext().getBean(PolicyDAO.class);
- }
- }
- return policyDAO;
- }
-
- private VirSchemaDAO virSchemaDAO() {
- synchronized (this) {
- if (virSchemaDAO == null) {
- virSchemaDAO = ApplicationContextProvider.getApplicationContext().getBean(VirSchemaDAO.class);
- }
- }
- return virSchemaDAO;
- }
-
- private RealmDAO realmDAO() {
- synchronized (this) {
- if (realmDAO == null) {
- realmDAO = ApplicationContextProvider.getApplicationContext().getBean(RealmDAO.class);
- }
- }
- return realmDAO;
- }
-
- private ExternalResourceHistoryConfDAO externalResourceHistoryConfDAO() {
- synchronized (this) {
- if (externalResourceHistoryConfDAO == null) {
- externalResourceHistoryConfDAO = ApplicationContextProvider.getApplicationContext().
- getBean(ExternalResourceHistoryConfDAO.class);
- }
- }
- return externalResourceHistoryConfDAO;
- }
-
@Override
public int count() {
Query query = entityManager().createQuery(
@@ -302,19 +236,19 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem
return;
}
- taskDAO().deleteAll(resource, TaskType.PROPAGATION);
- taskDAO().deleteAll(resource, TaskType.PULL);
- taskDAO().deleteAll(resource, TaskType.PUSH);
+ taskDAO.deleteAll(resource, TaskType.PROPAGATION);
+ taskDAO.deleteAll(resource, TaskType.PULL);
+ taskDAO.deleteAll(resource, TaskType.PUSH);
- realmDAO().findByResource(resource).
+ realmDAO.findByResource(resource).
forEach(realm -> realm.getResources().remove(resource));
- anyObjectDAO().findByResource(resource).
+ anyObjectDAO.findByResource(resource).
forEach(anyObject -> anyObject.getResources().remove(resource));
- userDAO().findByResource(resource).
+ userDAO.findByResource(resource).
forEach(user -> user.getResources().remove(resource));
- groupDAO().findByResource(resource).
+ groupDAO.findByResource(resource).
forEach(group -> group.getResources().remove(resource));
- policyDAO().findByResource(resource).
+ policyDAO.findByResource(resource).
forEach(policy -> policy.getResources().remove(resource));
resource.getProvisions().stream().
@@ -327,10 +261,10 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem
provision.setMapping(null);
provision.setResource(null);
}).
- forEach(provision -> virSchemaDAO().findByProvision(provision).
- forEach(schema -> virSchemaDAO().delete(schema.getKey())));
+ forEach(provision -> virSchemaDAO.findByProvision(provision).
+ forEach(schema -> virSchemaDAO.delete(schema.getKey())));
- externalResourceHistoryConfDAO().deleteByEntity(resource);
+ externalResourceHistoryConfDAO.deleteByEntity(resource);
if (resource.getConnector() != null && resource.getConnector().getResources() != null
&& !resource.getConnector().getResources().isEmpty()) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
index cdb25918..b8125ef 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
@@ -86,46 +86,22 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
@Autowired
private PlainAttrDAO plainAttrDAO;
+ @Autowired
private UserDAO userDAO;
+ @Autowired
private AnyObjectDAO anyObjectDAO;
+ @Autowired
private AnySearchDAO searchDAO;
private AnySearchDAO jpaAnySearchDAO;
- private UserDAO userDAO() {
- synchronized (this) {
- if (userDAO == null) {
- userDAO = ApplicationContextProvider.getApplicationContext().getBean(UserDAO.class);
- }
- }
- return userDAO;
- }
-
- private AnyObjectDAO anyObjectDAO() {
- synchronized (this) {
- if (anyObjectDAO == null) {
- anyObjectDAO = ApplicationContextProvider.getApplicationContext().getBean(AnyObjectDAO.class);
- }
- }
- return anyObjectDAO;
- }
-
- private AnySearchDAO searchDAO() {
- synchronized (this) {
- if (searchDAO == null) {
- searchDAO = ApplicationContextProvider.getApplicationContext().getBean(AnySearchDAO.class);
- }
- }
- return searchDAO;
- }
-
private AnySearchDAO jpaAnySearchDAO() {
synchronized (this) {
if (jpaAnySearchDAO == null) {
- if (AopUtils.getTargetClass(searchDAO()).equals(JPAAnySearchDAO.class)) {
- jpaAnySearchDAO = searchDAO();
+ if (AopUtils.getTargetClass(searchDAO).equals(JPAAnySearchDAO.class)) {
+ jpaAnySearchDAO = searchDAO;
} else {
jpaAnySearchDAO = (AnySearchDAO) ApplicationContextProvider.getBeanFactory().
createBean(JPAAnySearchDAO.class, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, true);
@@ -210,16 +186,16 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
@Transactional(readOnly = true)
@Override
public List<Group> findOwnedByUser(final String userKey) {
- User owner = userDAO().find(userKey);
+ User owner = userDAO.find(userKey);
if (owner == null) {
return Collections.<Group>emptyList();
}
StringBuilder queryString = new StringBuilder("SELECT e FROM ").append(JPAGroup.class.getSimpleName()).
append(" e WHERE e.userOwner=:owner ");
- for (String groupKey : userDAO().findAllGroupKeys(owner)) {
+ userDAO.findAllGroupKeys(owner).forEach(groupKey -> {
queryString.append("OR e.groupOwner.id='").append(groupKey).append("' ");
- }
+ });
TypedQuery<Group> query = entityManager().createQuery(queryString.toString(), Group.class);
query.setParameter("owner", owner);
@@ -289,10 +265,10 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
clearUDynMembers(merged);
if (merged.getUDynMembership() != null) {
SearchCond cond = buildDynMembershipCond(merged.getUDynMembership().getFIQLCond(), merged.getRealm());
- int count = searchDAO().count(
+ int count = searchDAO.count(
Collections.<String>singleton(merged.getRealm().getFullPath()), cond, AnyTypeKind.USER);
for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) {
- List<User> matching = searchDAO().search(
+ List<User> matching = searchDAO.search(
Collections.<String>singleton(merged.getRealm().getFullPath()),
cond,
page,
@@ -313,10 +289,10 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
clearADynMembers(merged);
merged.getADynMemberships().stream().forEach(memb -> {
SearchCond cond = buildDynMembershipCond(memb.getFIQLCond(), merged.getRealm());
- int count = searchDAO().count(
+ int count = searchDAO.count(
Collections.<String>singleton(merged.getRealm().getFullPath()), cond, AnyTypeKind.ANY_OBJECT);
for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) {
- List<AnyObject> matching = searchDAO().search(
+ List<AnyObject> matching = searchDAO.search(
Collections.<String>singleton(merged.getRealm().getFullPath()),
cond,
page,
@@ -337,14 +313,14 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
}
});
- dynRealmDAO().refreshDynMemberships(merged);
+ dynRealmDAO.refreshDynMemberships(merged);
return merged;
}
@Override
public void delete(final Group group) {
- dynRealmDAO().removeDynMemberships(group.getKey());
+ dynRealmDAO.removeDynMemberships(group.getKey());
findAMemberships(group).forEach(membership -> {
AnyObject leftEnd = membership.getLeftEnd();
@@ -357,7 +333,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
return attr;
}).forEachOrdered(attr -> plainAttrDAO.delete(attr));
- anyObjectDAO().save(leftEnd);
+ anyObjectDAO.save(leftEnd);
publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, leftEnd, AuthContextUtils.getDomain()));
});
@@ -372,7 +348,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
return attr;
}).forEachOrdered(attr -> plainAttrDAO.delete(attr));
- userDAO().save(leftEnd);
+ userDAO.save(leftEnd);
publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, leftEnd, AuthContextUtils.getDomain()));
});
@@ -506,7 +482,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
@Override
public Set<String> removeDynMemberships(final AnyObject anyObject) {
- List<Group> dynGroups = anyObjectDAO().findDynGroups(anyObject.getKey());
+ List<Group> dynGroups = anyObjectDAO.findDynGroups(anyObject.getKey());
Query delete = entityManager().createNativeQuery("DELETE FROM " + ADYNMEMB_TABLE + " WHERE any_id=?");
delete.setParameter(1, anyObject.getKey());
@@ -591,7 +567,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
@Override
public Set<String> removeDynMemberships(final User user) {
- List<Group> dynGroups = userDAO().findDynGroups(user.getKey());
+ List<Group> dynGroups = userDAO.findDynGroups(user.getKey());
Query delete = entityManager().createNativeQuery("DELETE FROM " + UDYNMEMB_TABLE + " WHERE any_id=?");
delete.setParameter(1, user.getKey());
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
index 458cf41..ef569d7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
@@ -33,7 +33,6 @@ import org.apache.syncope.core.persistence.api.entity.PlainAttr;
import org.apache.syncope.core.persistence.api.entity.PlainSchema;
import org.apache.syncope.core.persistence.jpa.entity.JPAAnyUtilsFactory;
import org.apache.syncope.core.persistence.jpa.entity.JPAPlainSchema;
-import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@@ -43,17 +42,9 @@ public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema> implements Plain
@Autowired
private PlainAttrDAO plainAttrDAO;
+ @Autowired
private ExternalResourceDAO resourceDAO;
- private ExternalResourceDAO resourceDAO() {
- synchronized (this) {
- if (resourceDAO == null) {
- resourceDAO = ApplicationContextProvider.getApplicationContext().getBean(ExternalResourceDAO.class);
- }
- }
- return resourceDAO;
- }
-
@Override
public PlainSchema find(final String key) {
return entityManager().find(JPAPlainSchema.class, key);
@@ -132,7 +123,7 @@ public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema> implements Plain
plainAttrDAO.delete(attr.getKey(), anyUtils.plainAttrClass());
});
- resourceDAO().deleteMapping(key);
+ resourceDAO.deleteMapping(key);
}
if (schema.getAnyTypeClass() != null) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
index 453fb55..4e8295d 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
@@ -34,7 +34,6 @@ import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.persistence.jpa.entity.JPARole;
import org.apache.syncope.core.persistence.jpa.entity.user.JPAUser;
import org.apache.syncope.core.provisioning.api.event.AnyCreatedUpdatedEvent;
-import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
@@ -49,17 +48,9 @@ public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
@Autowired
private ApplicationEventPublisher publisher;
+ @Autowired
private AnySearchDAO searchDAO;
- private AnySearchDAO searchDAO() {
- synchronized (this) {
- if (searchDAO == null) {
- searchDAO = ApplicationContextProvider.getApplicationContext().getBean(AnySearchDAO.class);
- }
- }
- return searchDAO;
- }
-
@Override
public int count() {
Query query = entityManager().createQuery(
@@ -108,7 +99,7 @@ public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
// refresh dynamic memberships
clearDynMembers(merged);
if (merged.getDynMembership() != null) {
- List<User> matching = searchDAO().search(
+ List<User> matching = searchDAO.search(
SearchCondConverter.convert(merged.getDynMembership().getFIQLCond()), AnyTypeKind.USER);
matching.forEach((user) -> {
@@ -187,7 +178,7 @@ public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
delete.setParameter(2, user.getKey());
delete.executeUpdate();
- if (searchDAO().matches(user, SearchCondConverter.convert(role.getDynMembership().getFIQLCond()))) {
+ if (searchDAO.matches(user, SearchCondConverter.convert(role.getDynMembership().getFIQLCond()))) {
Query insert = entityManager().createNativeQuery("INSERT INTO " + DYNMEMB_TABLE + " VALUES(?, ?)");
insert.setParameter(1, user.getKey());
insert.setParameter(2, role.getKey());
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
index adc36f5..a86ee8e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
@@ -43,7 +43,6 @@ import org.apache.syncope.core.provisioning.api.utils.policy.AccountPolicyExcept
import org.apache.syncope.core.provisioning.api.utils.policy.PasswordPolicyException;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.apache.syncope.core.spring.security.DelegatedAdministrationException;
-import org.apache.syncope.core.spring.ApplicationContextProvider;
import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException;
import org.apache.syncope.core.persistence.api.dao.AccessTokenDAO;
import org.apache.syncope.core.persistence.api.dao.AccountRule;
@@ -88,33 +87,17 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
@Autowired
private AccessTokenDAO accessTokenDAO;
- @Resource(name = "adminUser")
- private String adminUser;
-
- @Resource(name = "anonymousUser")
- private String anonymousUser;
-
+ @Autowired
private RealmDAO realmDAO;
+ @Autowired
private GroupDAO groupDAO;
- private RealmDAO realmDAO() {
- synchronized (this) {
- if (realmDAO == null) {
- realmDAO = ApplicationContextProvider.getApplicationContext().getBean(RealmDAO.class);
- }
- }
- return realmDAO;
- }
+ @Resource(name = "adminUser")
+ private String adminUser;
- private GroupDAO groupDAO() {
- synchronized (this) {
- if (groupDAO == null) {
- groupDAO = ApplicationContextProvider.getApplicationContext().getBean(GroupDAO.class);
- }
- }
- return groupDAO;
- }
+ @Resource(name = "anonymousUser")
+ private String anonymousUser;
@Override
protected AnyUtils init() {
@@ -244,7 +227,7 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
}
// add realm policies
- for (Realm realm : realmDAO().findAncestors(user.getRealm())) {
+ for (Realm realm : realmDAO.findAncestors(user.getRealm())) {
policy = realm.getPasswordPolicy();
if (policy != null) {
policies.add(policy);
@@ -274,7 +257,7 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
forEachOrdered(policy -> policies.add(policy));
// add realm policies
- realmDAO().findAncestors(user.getRealm()).stream().
+ realmDAO.findAncestors(user.getRealm()).stream().
map(realm -> realm.getAccountPolicy()).
filter(policy -> policy != null).
forEachOrdered(policy -> policies.add(policy));
@@ -401,8 +384,8 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, merged, AuthContextUtils.getDomain()));
roleDAO.refreshDynMemberships(merged);
- Pair<Set<String>, Set<String>> dynGroupMembs = groupDAO().refreshDynMemberships(merged);
- dynRealmDAO().refreshDynMemberships(merged);
+ Pair<Set<String>, Set<String>> dynGroupMembs = groupDAO.refreshDynMemberships(merged);
+ dynRealmDAO.refreshDynMemberships(merged);
return Pair.of(merged, dynGroupMembs);
}
@@ -420,8 +403,8 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
@Override
public void delete(final User user) {
roleDAO.removeDynMemberships(user.getKey());
- groupDAO().removeDynMemberships(user);
- dynRealmDAO().removeDynMemberships(user.getKey());
+ groupDAO.removeDynMemberships(user);
+ dynRealmDAO.removeDynMemberships(user.getKey());
AccessToken accessToken = accessTokenDAO.findByOwner(user.getUsername());
if (accessToken != null) {
@@ -480,7 +463,7 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
? (String) ((Object[]) resultKey)[0]
: ((String) resultKey)).
forEachOrdered(actualKey -> {
- Group group = groupDAO().find(actualKey.toString());
+ Group group = groupDAO.find(actualKey.toString());
if (group == null) {
LOG.error("Could not find group with id {}, even though returned by the native query",
actualKey);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java
index 65702a4..1d3043b 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java
@@ -38,23 +38,15 @@ import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPullPolicy;
import org.apache.syncope.core.persistence.jpa.entity.resource.JPAExternalResource;
import org.apache.syncope.core.persistence.jpa.entity.resource.JPAMapping;
import org.apache.syncope.core.persistence.jpa.entity.resource.JPAProvision;
-import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class JPAVirSchemaDAO extends AbstractDAO<VirSchema> implements VirSchemaDAO {
+ @Autowired
private ExternalResourceDAO resourceDAO;
- private ExternalResourceDAO resourceDAO() {
- synchronized (this) {
- if (resourceDAO == null) {
- resourceDAO = ApplicationContextProvider.getApplicationContext().getBean(ExternalResourceDAO.class);
- }
- }
- return resourceDAO;
- }
-
@Override
public VirSchema find(final String key) {
return entityManager().find(JPAVirSchema.class, key);
@@ -137,7 +129,7 @@ public class JPAVirSchemaDAO extends AbstractDAO<VirSchema> implements VirSchema
schema.getLabels().forEach(label -> label.setSchema(null));
- resourceDAO().deleteMapping(key);
+ resourceDAO.deleteMapping(key);
if (schema.getAnyTypeClass() != null) {
schema.getAnyTypeClass().getVirSchemas().remove(schema);
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java
index f6ec55f..9e1c8c9 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java
@@ -34,7 +34,6 @@ import org.apache.syncope.core.persistence.api.dao.ConfDAO;
import org.apache.syncope.core.persistence.api.entity.AccessToken;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
import org.apache.syncope.core.provisioning.api.data.AccessTokenDataBinder;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.spring.security.DefaultCredentialChecker;
import org.apache.syncope.core.spring.security.SecureRandomUtils;
import org.apache.syncope.core.spring.security.jws.AccessTokenJwsSignatureProvider;
@@ -176,7 +175,10 @@ public class AccessTokenDataBinderImpl implements AccessTokenDataBinder {
@Override
public AccessTokenTO getAccessTokenTO(final AccessToken accessToken) {
AccessTokenTO accessTokenTO = new AccessTokenTO();
- BeanUtils.copyProperties(accessToken, accessTokenTO);
+ accessTokenTO.setKey(accessToken.getKey());
+ accessTokenTO.setBody(accessToken.getBody());
+ accessTokenTO.setExpiryTime(accessToken.getExpiryTime());
+ accessTokenTO.setOwner(accessToken.getOwner());
return accessTokenTO;
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
index 1dd6194..3bab7fe 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
@@ -40,7 +40,6 @@ import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.PatchOperation;
import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.entity.AnyType;
import org.apache.syncope.core.persistence.api.entity.AnyUtils;
@@ -63,11 +62,6 @@ import org.springframework.transaction.annotation.Transactional;
@Transactional(rollbackFor = { Throwable.class })
public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements AnyObjectDataBinder {
- private static final String[] IGNORE_PROPERTIES = {
- "type", "realm", "auxClasses", "relationships", "memberships", "dynMemberships",
- "plainAttrs", "derAttrs", "virAttrs", "resources"
- };
-
@Autowired
private AnyTypeDAO anyTypeDAO;
@@ -80,9 +74,14 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
@Override
public AnyObjectTO getAnyObjectTO(final AnyObject anyObject, final boolean details) {
AnyObjectTO anyObjectTO = new AnyObjectTO();
+ anyObjectTO.setKey(anyObject.getKey());
+ anyObjectTO.setName(anyObject.getName());
anyObjectTO.setType(anyObject.getType().getKey());
-
- BeanUtils.copyProperties(anyObject, anyObjectTO, IGNORE_PROPERTIES);
+ anyObjectTO.setCreationDate(anyObject.getCreationDate());
+ anyObjectTO.setCreator(anyObject.getCreator());
+ anyObjectTO.setLastChangeDate(anyObject.getLastChangeDate());
+ anyObjectTO.setLastModifier(anyObject.getLastModifier());
+ anyObjectTO.setStatus(anyObject.getStatus());
Map<VirSchema, List<String>> virAttrValues = details
? virAttrHandler.getValues(anyObject)
@@ -471,5 +470,4 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
return propByRes;
}
-
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
index 6cd5e8e..d08338f 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
@@ -48,7 +48,6 @@ import org.apache.syncope.core.provisioning.api.utils.ConnPoolConfUtils;
import org.identityconnectors.framework.api.ConfigurationProperties;
import org.identityconnectors.framework.api.ConfigurationProperty;
import org.identityconnectors.framework.impl.api.ConfigurationPropertyImpl;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.identityconnectors.framework.api.ConnectorInfo;
import org.springframework.beans.factory.annotation.Autowired;
@@ -57,8 +56,6 @@ import org.springframework.stereotype.Component;
@Component
public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
- private static final String[] IGNORE_PROPERTIES = { "key", "poolConf", "location", "adminRealm", "conf" };
-
@Autowired
private ConnIdBundleManager connIdBundleManager;
@@ -103,7 +100,13 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
ConnInstance connInstance = entityFactory.newEntity(ConnInstance.class);
- BeanUtils.copyProperties(connInstanceTO, connInstance, IGNORE_PROPERTIES);
+ connInstance.setBundleName(connInstanceTO.getBundleName());
+ connInstance.setConnectorName(connInstanceTO.getConnectorName());
+ connInstance.setVersion(connInstanceTO.getVersion());
+ connInstance.setDisplayName(connInstanceTO.getDisplayName());
+ connInstance.setConnRequestTimeout(connInstanceTO.getConnRequestTimeout());
+ connInstance.getCapabilities().addAll(connInstanceTO.getCapabilities());
+
if (connInstanceTO.getAdminRealm() != null) {
connInstance.setAdminRealm(realmDAO.findByFullPath(connInstanceTO.getAdminRealm()));
}
@@ -242,13 +245,18 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
@Override
public ConnInstanceTO getConnInstanceTO(final ConnInstance connInstance) {
- ConnInstanceTO connInstanceTO = new ConnInstanceTO();
-
Pair<URI, ConnectorInfo> info = connIdBundleManager.getConnectorInfo(connInstance);
- BeanUtils.copyProperties(connInstance, connInstanceTO, IGNORE_PROPERTIES);
+
+ ConnInstanceTO connInstanceTO = new ConnInstanceTO();
connInstanceTO.setKey(connInstance.getKey());
+ connInstanceTO.setBundleName(connInstance.getBundleName());
+ connInstanceTO.setConnectorName(connInstance.getConnectorName());
+ connInstanceTO.setVersion(connInstance.getVersion());
+ connInstanceTO.setDisplayName(connInstance.getDisplayName());
+ connInstanceTO.setConnRequestTimeout(connInstance.getConnRequestTimeout());
connInstanceTO.setAdminRealm(connInstance.getAdminRealm().getFullPath());
connInstanceTO.setLocation(info.getLeft().toASCIIString());
+ connInstanceTO.getCapabilities().addAll(connInstance.getCapabilities());
connInstanceTO.getConf().addAll(connInstance.getConf());
// refresh stored properties in the given connInstance with direct information from underlying connector
ConfigurationProperties properties = connIdBundleManager.getConfigurationProperties(info.getRight());
@@ -273,7 +281,11 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
|| connInstance.getPoolConf().getMinIdle() != null)) {
ConnPoolConfTO poolConf = new ConnPoolConfTO();
- BeanUtils.copyProperties(connInstance.getPoolConf(), poolConf);
+ poolConf.setMaxIdle(connInstance.getPoolConf().getMaxIdle());
+ poolConf.setMaxObjects(connInstance.getPoolConf().getMaxObjects());
+ poolConf.setMaxWait(connInstance.getPoolConf().getMaxWait());
+ poolConf.setMinEvictableIdleTimeMillis(connInstance.getPoolConf().getMinEvictableIdleTimeMillis());
+ poolConf.setMinIdle(connInstance.getPoolConf().getMinIdle());
connInstanceTO.setPoolConf(poolConf);
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ImplementationDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ImplementationDataBinderImpl.java
index 91df46f..1346a91 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ImplementationDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ImplementationDataBinderImpl.java
@@ -41,15 +41,14 @@ import org.apache.syncope.core.provisioning.api.propagation.PropagationActions;
import org.apache.syncope.core.provisioning.api.pushpull.PullActions;
import org.apache.syncope.core.persistence.api.dao.PullCorrelationRule;
import org.apache.syncope.core.persistence.api.dao.PushCorrelationRule;
+import org.apache.syncope.core.provisioning.api.notification.RecipientsProvider;
import org.apache.syncope.core.provisioning.api.pushpull.PushActions;
import org.apache.syncope.core.provisioning.api.pushpull.ReconFilterBuilder;
import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
-import org.apache.syncope.core.spring.BeanUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import org.apache.syncope.core.provisioning.api.notification.RecipientsProvider;
@Component
public class ImplementationDataBinderImpl implements ImplementationDataBinder {
@@ -80,7 +79,10 @@ public class ImplementationDataBinderImpl implements ImplementationDataBinder {
throw sce;
}
- BeanUtils.copyProperties(implementationTO, implementation);
+ implementation.setKey(implementationTO.getKey());
+ implementation.setEngine(implementationTO.getEngine());
+ implementation.setType(implementationTO.getType());
+ implementation.setBody(implementationTO.getBody());
if (implementation.getEngine() == ImplementationEngine.JAVA) {
Class<?> base = null;
@@ -191,7 +193,11 @@ public class ImplementationDataBinderImpl implements ImplementationDataBinder {
@Override
public ImplementationTO getImplementationTO(final Implementation implementation) {
ImplementationTO implementationTO = new ImplementationTO();
- BeanUtils.copyProperties(implementation, implementationTO);
+ implementationTO.setKey(implementation.getKey());
+ implementationTO.setEngine(implementation.getEngine());
+ implementationTO.setType(implementation.getType());
+ implementationTO.setBody(implementation.getBody());
+
return implementationTO;
}
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/NotificationDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/NotificationDataBinderImpl.java
index b4131ac..edbe242 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/NotificationDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/NotificationDataBinderImpl.java
@@ -29,7 +29,6 @@ import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
import org.apache.syncope.core.persistence.api.entity.Notification;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.ImplementationDAO;
import org.apache.syncope.core.persistence.api.dao.MailTemplateDAO;
@@ -48,8 +47,6 @@ public class NotificationDataBinderImpl implements NotificationDataBinder {
private static final Logger LOG = LoggerFactory.getLogger(NotificationDataBinder.class);
- private static final String[] IGNORE_PROPERTIES = { "key", "template", "abouts", "recipientsProvider" };
-
@Autowired
private MailTemplateDAO mailTemplateDAO;
@@ -70,8 +67,15 @@ public class NotificationDataBinderImpl implements NotificationDataBinder {
NotificationTO notificationTO = new NotificationTO();
notificationTO.setKey(notification.getKey());
notificationTO.setTemplate(notification.getTemplate().getKey());
-
- BeanUtils.copyProperties(notification, notificationTO, IGNORE_PROPERTIES);
+ notificationTO.getEvents().addAll(notification.getEvents());
+ notificationTO.setRecipientsFIQL(notification.getRecipientsFIQL());
+ notificationTO.getStaticRecipients().addAll(notification.getStaticRecipients());
+ notificationTO.setRecipientAttrName(notification.getRecipientAttrName());
+ notificationTO.setSelfAsRecipient(notification.isSelfAsRecipient());
+ notificationTO.setSender(notification.getSender());
+ notificationTO.setSubject(notification.getSubject());
+ notificationTO.setTraceLevel(notification.getTraceLevel());
+ notificationTO.setActive(notification.isActive());
notification.getAbouts().forEach(about -> {
notificationTO.getAbouts().put(about.getAnyType().getKey(), about.get());
@@ -93,7 +97,20 @@ public class NotificationDataBinderImpl implements NotificationDataBinder {
@Override
public void update(final Notification notification, final NotificationTO notificationTO) {
- BeanUtils.copyProperties(notificationTO, notification, IGNORE_PROPERTIES);
+ notification.setRecipientsFIQL(notificationTO.getRecipientsFIQL());
+
+ notification.getStaticRecipients().clear();
+ notification.getStaticRecipients().addAll(notificationTO.getStaticRecipients());
+
+ notification.setRecipientAttrName(notificationTO.getRecipientAttrName());
+ notification.setSelfAsRecipient(notificationTO.isSelfAsRecipient());
+ notification.setSender(notificationTO.getSender());
+ notification.setSubject(notificationTO.getSubject());
+ notification.setTraceLevel(notificationTO.getTraceLevel());
+ notification.setActive(notificationTO.isActive());
+
+ notification.getEvents().clear();
+ notification.getEvents().addAll(notificationTO.getEvents());
SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing);
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RemediationDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RemediationDataBinderImpl.java
index 36bac89..c445d93 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RemediationDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RemediationDataBinderImpl.java
@@ -21,20 +21,19 @@ package org.apache.syncope.core.provisioning.java.data;
import org.apache.syncope.common.lib.to.RemediationTO;
import org.apache.syncope.core.persistence.api.entity.Remediation;
import org.apache.syncope.core.provisioning.api.data.RemediationDataBinder;
-import org.apache.syncope.core.spring.BeanUtils;
import org.springframework.stereotype.Component;
@Component
public class RemediationDataBinderImpl implements RemediationDataBinder {
- private static final String[] IGNORE_PROPERTIES = {
- "anyType", "payload", "anyTOPayload", "anyPatchPayload", "keyPayload", "pullTask" };
-
@Override
public RemediationTO getRemediationTO(final Remediation remediation) {
RemediationTO remediationTO = new RemediationTO();
-
- BeanUtils.copyProperties(remediation, remediationTO);
+ remediationTO.setKey(remediation.getKey());
+ remediationTO.setOperation(remediation.getOperation());
+ remediationTO.setError(remediation.getError());
+ remediationTO.setInstant(remediation.getInstant());
+ remediationTO.setRemoteName(remediation.getRemoteName());
switch (remediation.getOperation()) {
case CREATE:
@@ -63,5 +62,4 @@ public class RemediationDataBinderImpl implements RemediationDataBinder {
return remediationTO;
}
-
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ReportDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ReportDataBinderImpl.java
index ed1b3a2..f1d6537 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ReportDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ReportDataBinderImpl.java
@@ -31,7 +31,6 @@ import org.apache.syncope.core.persistence.api.dao.ReportExecDAO;
import org.apache.syncope.core.persistence.api.entity.Report;
import org.apache.syncope.core.persistence.api.entity.ReportExec;
import org.apache.syncope.core.provisioning.api.job.JobNamer;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.persistence.api.dao.ReportTemplateDAO;
import org.apache.syncope.core.persistence.api.entity.Entity;
import org.apache.syncope.core.persistence.api.entity.Implementation;
@@ -51,10 +50,6 @@ public class ReportDataBinderImpl implements ReportDataBinder {
private static final Logger LOG = LoggerFactory.getLogger(ReportDataBinder.class);
- private static final String[] IGNORE_REPORT_PROPERTIES = { "key", "template", "reportlets", "executions" };
-
- private static final String[] IGNORE_REPORT_EXECUTION_PROPERTIES = { "key", "report", "execResult" };
-
@Autowired
private ReportTemplateDAO reportTemplateDAO;
@@ -69,7 +64,9 @@ public class ReportDataBinderImpl implements ReportDataBinder {
@Override
public void getReport(final Report report, final ReportTO reportTO) {
- BeanUtils.copyProperties(reportTO, report, IGNORE_REPORT_PROPERTIES);
+ report.setName(reportTO.getName());
+ report.setCronExpression(reportTO.getCronExpression());
+ report.setActive(reportTO.isActive());
ReportTemplate template = reportTemplateDAO.find(reportTO.getTemplate());
if (template == null) {
@@ -96,8 +93,9 @@ public class ReportDataBinderImpl implements ReportDataBinder {
ReportTO reportTO = new ReportTO();
reportTO.setKey(report.getKey());
reportTO.setTemplate(report.getTemplate().getKey());
-
- BeanUtils.copyProperties(report, reportTO, IGNORE_REPORT_PROPERTIES);
+ reportTO.setName(report.getName());
+ reportTO.setCronExpression(report.getCronExpression());
+ reportTO.setActive(report.isActive());
reportTO.getReportlets().addAll(
report.getReportlets().stream().map(Entity::getKey).collect(Collectors.toList()));
@@ -142,13 +140,13 @@ public class ReportDataBinderImpl implements ReportDataBinder {
public ExecTO getExecTO(final ReportExec execution) {
ExecTO execTO = new ExecTO();
execTO.setKey(execution.getKey());
- BeanUtils.copyProperties(execution, execTO, IGNORE_REPORT_EXECUTION_PROPERTIES);
- if (execution.getKey() != null) {
- execTO.setKey(execution.getKey());
- }
execTO.setJobType(JobType.REPORT);
execTO.setRefKey(execution.getReport().getKey());
execTO.setRefDesc(buildRefDesc(execution.getReport()));
+ execTO.setStatus(execution.getStatus());
+ execTO.setMessage(execution.getMessage());
+ execTO.setStart(execution.getStart());
+ execTO.setEnd(execution.getEnd());
return execTO;
}
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 b5a1ce9..c9f6eb0 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
@@ -51,7 +51,6 @@ import org.apache.syncope.core.persistence.api.entity.resource.Mapping;
import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
import org.apache.syncope.core.provisioning.java.jexl.JexlUtils;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.ConfDAO;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceHistoryConfDAO;
@@ -86,8 +85,6 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
private static final Logger LOG = LoggerFactory.getLogger(ResourceDataBinder.class);
- private static final String[] ITEM_IGNORE_PROPERTIES = { "key", "mapping", "transformers" };
-
@Autowired
private AnyTypeDAO anyTypeDAO;
@@ -337,7 +334,14 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
}
OrgUnitItem item = entityFactory.newEntity(OrgUnitItem.class);
- BeanUtils.copyProperties(itemTO, item, ITEM_IGNORE_PROPERTIES);
+ item.setIntAttrName(itemTO.getIntAttrName());
+ item.setExtAttrName(itemTO.getExtAttrName());
+ item.setPurpose(itemTO.getPurpose());
+ item.setMandatoryCondition(itemTO.getMandatoryCondition());
+ item.setConnObjectKey(itemTO.isConnObjectKey());
+ item.setPassword(itemTO.isPassword());
+ item.setPropagationJEXLTransformer(itemTO.getPropagationJEXLTransformer());
+ item.setPullJEXLTransformer(itemTO.getPullJEXLTransformer());
item.setOrgUnit(orgUnit);
if (item.isConnObjectKey()) {
orgUnit.setConnObjectKeyItem(item);
@@ -476,7 +480,14 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
}
MappingItem item = entityFactory.newEntity(MappingItem.class);
- BeanUtils.copyProperties(itemTO, item, ITEM_IGNORE_PROPERTIES);
+ item.setIntAttrName(itemTO.getIntAttrName());
+ item.setExtAttrName(itemTO.getExtAttrName());
+ item.setPurpose(itemTO.getPurpose());
+ item.setMandatoryCondition(itemTO.getMandatoryCondition());
+ item.setConnObjectKey(itemTO.isConnObjectKey());
+ item.setPassword(itemTO.isPassword());
+ item.setPropagationJEXLTransformer(itemTO.getPropagationJEXLTransformer());
+ item.setPullJEXLTransformer(itemTO.getPullJEXLTransformer());
item.setMapping(mapping);
if (item.isConnObjectKey()) {
@@ -581,7 +592,14 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
items.forEach(item -> {
ItemTO itemTO = new ItemTO();
itemTO.setKey(item.getKey());
- BeanUtils.copyProperties(item, itemTO, ITEM_IGNORE_PROPERTIES);
+ itemTO.setIntAttrName(item.getIntAttrName());
+ itemTO.setExtAttrName(item.getExtAttrName());
+ itemTO.setPurpose(item.getPurpose());
+ itemTO.setMandatoryCondition(item.getMandatoryCondition());
+ itemTO.setConnObjectKey(item.isConnObjectKey());
+ itemTO.setPassword(item.isPassword());
+ itemTO.setPropagationJEXLTransformer(item.getPropagationJEXLTransformer());
+ itemTO.setPullJEXLTransformer(item.getPullJEXLTransformer());
if (itemTO.isConnObjectKey()) {
containerTO.setConnObjectKeyItem(itemTO);
@@ -635,7 +653,14 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
ItemTO itemTO = new ItemTO();
itemTO.setKey(linkingMappingItem.getKey());
- BeanUtils.copyProperties(linkingMappingItem, itemTO, ITEM_IGNORE_PROPERTIES);
+ itemTO.setIntAttrName(linkingMappingItem.getIntAttrName());
+ itemTO.setExtAttrName(linkingMappingItem.getExtAttrName());
+ itemTO.setPurpose(linkingMappingItem.getPurpose());
+ itemTO.setMandatoryCondition(linkingMappingItem.getMandatoryCondition());
+ itemTO.setConnObjectKey(linkingMappingItem.isConnObjectKey());
+ itemTO.setPassword(linkingMappingItem.isPassword());
+ itemTO.setPropagationJEXLTransformer(linkingMappingItem.getPropagationJEXLTransformer());
+ itemTO.setPullJEXLTransformer(linkingMappingItem.getPullJEXLTransformer());
provisionTO.getMapping().getLinkingItems().add(itemTO);
});
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 f91378f..623c3df 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
@@ -33,7 +33,6 @@ import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
import org.apache.syncope.core.persistence.api.entity.DerSchema;
import org.apache.syncope.core.persistence.api.entity.PlainSchema;
import org.apache.syncope.core.persistence.api.entity.VirSchema;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.provisioning.java.jexl.JexlUtils;
import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
@@ -62,8 +61,6 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
private static final Logger LOG = LoggerFactory.getLogger(SchemaDataBinder.class);
- private static final String[] IGNORE_PROPERTIES = { "anyTypeClass", "provision", "resource", "validator" };
-
@Autowired
private AnyTypeClassDAO anyTypeClassDAO;
@@ -119,7 +116,19 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
throw sce;
}
- BeanUtils.copyProperties(schemaTO, schema, IGNORE_PROPERTIES);
+ schema.setKey(schemaTO.getKey());
+ schema.setType(schemaTO.getType());
+ schema.setCipherAlgorithm(schemaTO.getCipherAlgorithm());
+ schema.setConversionPattern(schemaTO.getConversionPattern());
+ schema.setEnumerationKeys(schemaTO.getEnumerationKeys());
+ schema.setEnumerationValues(schemaTO.getEnumerationValues());
+ schema.setMandatoryCondition(schemaTO.getMandatoryCondition());
+ schema.setMimeType(schemaTO.getMimeType());
+ schema.setMultivalue(schemaTO.isMultivalue());
+ schema.setReadonly(schemaTO.isReadonly());
+ schema.setSecretKey(schemaTO.getSecretKey());
+ schema.setUniqueConstraint(schemaTO.isUniqueConstraint());
+
labels(schemaTO, schema);
if (schemaTO.getValidator() == null) {
@@ -201,8 +210,19 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
}
PlainSchemaTO schemaTO = new PlainSchemaTO();
+ schemaTO.setKey(schema.getKey());
+ schemaTO.setType(schema.getType());
+ schemaTO.setCipherAlgorithm(schema.getCipherAlgorithm());
+ schemaTO.setConversionPattern(schema.getConversionPattern());
+ schemaTO.setEnumerationKeys(schema.getEnumerationKeys());
+ schemaTO.setEnumerationValues(schema.getEnumerationValues());
+ schemaTO.setMandatoryCondition(schema.getMandatoryCondition());
+ schemaTO.setMimeType(schema.getMimeType());
+ schemaTO.setMultivalue(schema.isMultivalue());
+ schemaTO.setReadonly(schema.isReadonly());
+ schemaTO.setSecretKey(schema.getSecretKey());
+ schemaTO.setUniqueConstraint(schema.isUniqueConstraint());
- BeanUtils.copyProperties(schema, schemaTO, IGNORE_PROPERTIES);
labels(schema, schemaTO);
schemaTO.setAnyTypeClass(schema.getAnyTypeClass() == null ? null : schema.getAnyTypeClass().getKey());
@@ -234,7 +254,9 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
throw scce;
}
- BeanUtils.copyProperties(schemaTO, schema, IGNORE_PROPERTIES);
+ schema.setKey(schemaTO.getKey());
+ schema.setExpression(schemaTO.getExpression());
+
labels(schemaTO, schema);
DerSchema merged = derSchemaDAO.save(schema);
@@ -277,8 +299,9 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
}
DerSchemaTO schemaTO = new DerSchemaTO();
+ schemaTO.setKey(schema.getKey());
+ schemaTO.setExpression(schema.getExpression());
- BeanUtils.copyProperties(schema, schemaTO, IGNORE_PROPERTIES);
labels(schema, schemaTO);
schemaTO.setAnyTypeClass(schema.getAnyTypeClass() == null ? null : schema.getAnyTypeClass().getKey());
@@ -288,7 +311,10 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
// --------------- VIRTUAL -----------------
private VirSchema fill(final VirSchema schema, final VirSchemaTO schemaTO) {
- BeanUtils.copyProperties(schemaTO, schema, IGNORE_PROPERTIES);
+ schema.setKey(schemaTO.getKey());
+ schema.setExtAttrName(schemaTO.getExtAttrName());
+ schema.setReadonly(schema.isReadonly());
+
labels(schemaTO, schema);
if (schemaTO.getAnyTypeClass() != null
@@ -350,8 +376,10 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
}
VirSchemaTO schemaTO = new VirSchemaTO();
+ schemaTO.setKey(schema.getKey());
+ schemaTO.setExtAttrName(schema.getExtAttrName());
+ schemaTO.setReadonly(schema.isReadonly());
- BeanUtils.copyProperties(schema, schemaTO, IGNORE_PROPERTIES);
labels(schema, schemaTO);
schemaTO.setAnyTypeClass(schema.getAnyTypeClass() == null ? null : schema.getAnyTypeClass().getKey());
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SecurityQuestionDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SecurityQuestionDataBinderImpl.java
index ed971eb..a291baf 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SecurityQuestionDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SecurityQuestionDataBinderImpl.java
@@ -22,7 +22,6 @@ import org.apache.syncope.core.provisioning.api.data.SecurityQuestionDataBinder;
import org.apache.syncope.common.lib.to.SecurityQuestionTO;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
import org.apache.syncope.core.persistence.api.entity.user.SecurityQuestion;
-import org.apache.syncope.core.spring.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -35,8 +34,8 @@ public class SecurityQuestionDataBinderImpl implements SecurityQuestionDataBinde
@Override
public SecurityQuestionTO getSecurityQuestionTO(final SecurityQuestion securityQuestion) {
SecurityQuestionTO securityQuestionTO = new SecurityQuestionTO();
-
- BeanUtils.copyProperties(securityQuestion, securityQuestionTO);
+ securityQuestionTO.setKey(securityQuestion.getKey());
+ securityQuestionTO.setContent(securityQuestion.getContent());
return securityQuestionTO;
}
@@ -50,6 +49,6 @@ public class SecurityQuestionDataBinderImpl implements SecurityQuestionDataBinde
@Override
public void update(final SecurityQuestion securityQuestion, final SecurityQuestionTO securityQuestionTO) {
- BeanUtils.copyProperties(securityQuestionTO, securityQuestion, "key");
+ securityQuestion.setContent(securityQuestionTO.getContent());
}
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
index 6fcc05e..aae4c62 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
@@ -18,6 +18,7 @@
*/
package org.apache.syncope.core.provisioning.java.data;
+import java.util.Objects;
import java.util.stream.Collectors;
import org.apache.syncope.core.provisioning.api.data.TaskDataBinder;
import org.apache.commons.lang3.StringUtils;
@@ -50,7 +51,6 @@ import org.apache.syncope.core.persistence.api.entity.task.Task;
import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
import org.apache.syncope.core.persistence.api.entity.task.TaskUtils;
import org.apache.syncope.core.provisioning.api.job.JobNamer;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.ImplementationDAO;
import org.apache.syncope.core.persistence.api.dao.RealmDAO;
@@ -80,12 +80,6 @@ public class TaskDataBinderImpl implements TaskDataBinder {
private static final Logger LOG = LoggerFactory.getLogger(TaskDataBinder.class);
- private static final String[] IGNORE_TASK_PROPERTIES = {
- "destinationRealm", "templates", "filters", "executions", "resource", "matchingRule", "unmatchingRule",
- "notification", "jobDelegate", "actions" };
-
- private static final String[] IGNORE_TASK_EXECUTION_PROPERTIES = { "key", "task" };
-
@Autowired
private RealmDAO realmDAO;
@@ -113,10 +107,10 @@ public class TaskDataBinderImpl implements TaskDataBinder {
@Autowired
private TaskUtilsFactory taskUtilsFactory;
- private void fill(final ProvisioningTask task, final ProvisioningTaskTO taskTO) {
- if (task instanceof PushTask && taskTO instanceof PushTaskTO) {
- PushTask pushTask = (PushTask) task;
- PushTaskTO pushTaskTO = (PushTaskTO) taskTO;
+ private void fill(final ProvisioningTask provisioningTask, final ProvisioningTaskTO provisioningTaskTO) {
+ if (provisioningTask instanceof PushTask && provisioningTaskTO instanceof PushTaskTO) {
+ PushTask pushTask = (PushTask) provisioningTask;
+ PushTaskTO pushTaskTO = (PushTaskTO) provisioningTaskTO;
Implementation jobDelegate = pushTaskTO.getJobDelegate() == null
? implementationDAO.find(ImplementationType.TASKJOB_DELEGATE).stream().
@@ -158,9 +152,9 @@ public class TaskDataBinderImpl implements TaskDataBinder {
// remove all filters not contained in the TO
pushTask.getFilters().
removeIf(anyFilter -> !pushTaskTO.getFilters().containsKey(anyFilter.getAnyType().getKey()));
- } else if (task instanceof PullTask && taskTO instanceof PullTaskTO) {
- PullTask pullTask = (PullTask) task;
- PullTaskTO pullTaskTO = (PullTaskTO) taskTO;
+ } else if (provisioningTask instanceof PullTask && provisioningTaskTO instanceof PullTaskTO) {
+ PullTask pullTask = (PullTask) provisioningTask;
+ PullTaskTO pullTaskTO = (PullTaskTO) provisioningTaskTO;
Implementation jobDelegate = pullTaskTO.getJobDelegate() == null
? implementationDAO.find(ImplementationType.TASKJOB_DELEGATE).stream().
@@ -224,21 +218,21 @@ public class TaskDataBinderImpl implements TaskDataBinder {
}
// 3. fill the remaining fields
- task.setPerformCreate(taskTO.isPerformCreate());
- task.setPerformUpdate(taskTO.isPerformUpdate());
- task.setPerformDelete(taskTO.isPerformDelete());
- task.setSyncStatus(taskTO.isSyncStatus());
+ provisioningTask.setPerformCreate(provisioningTaskTO.isPerformCreate());
+ provisioningTask.setPerformUpdate(provisioningTaskTO.isPerformUpdate());
+ provisioningTask.setPerformDelete(provisioningTaskTO.isPerformDelete());
+ provisioningTask.setSyncStatus(provisioningTaskTO.isSyncStatus());
- taskTO.getActions().forEach(action -> {
+ provisioningTaskTO.getActions().forEach(action -> {
Implementation implementation = implementationDAO.find(action);
if (implementation == null) {
LOG.debug("Invalid " + Implementation.class.getSimpleName() + " {}, ignoring...", action);
} else {
- task.add(implementation);
+ provisioningTask.add(implementation);
}
});
// remove all implementations not contained in the TO
- task.getActions().removeIf(implementation -> !taskTO.getActions().contains(implementation.getKey()));
+ provisioningTask.getActions().removeIf(impl -> !provisioningTaskTO.getActions().contains(impl.getKey()));
}
@Override
@@ -313,11 +307,11 @@ public class TaskDataBinderImpl implements TaskDataBinder {
@Override
public ExecTO getExecTO(final TaskExec execution) {
ExecTO execTO = new ExecTO();
- BeanUtils.copyProperties(execution, execTO, IGNORE_TASK_EXECUTION_PROPERTIES);
-
- if (execution.getKey() != null) {
- execTO.setKey(execution.getKey());
- }
+ execTO.setKey(execution.getKey());
+ execTO.setStatus(execution.getStatus());
+ execTO.setMessage(execution.getMessage());
+ execTO.setStart(execution.getStart());
+ execTO.setEnd(execution.getEnd());
if (execution.getTask() != null && execution.getTask().getKey() != null) {
execTO.setJobType(JobType.TASK);
@@ -328,26 +322,47 @@ public class TaskDataBinderImpl implements TaskDataBinder {
return execTO;
}
- private void setExecTime(final SchedTaskTO taskTO, final Task task) {
- taskTO.setLastExec(taskTO.getStart());
+ private void fill(final SchedTaskTO schedTaskTO, final SchedTask schedTask) {
+ schedTaskTO.setName(schedTask.getName());
+ schedTaskTO.setDescription(schedTask.getDescription());
+ schedTaskTO.setStart(schedTask.getStartAt());
+ schedTaskTO.setCronExpression(schedTask.getCronExpression());
+ schedTaskTO.setActive(schedTask.isActive());
- String triggerName = JobNamer.getTriggerName(JobNamer.getJobKey(task).getName());
+ schedTaskTO.setLastExec(schedTaskTO.getStart());
+
+ String triggerName = JobNamer.getTriggerName(JobNamer.getJobKey(schedTask).getName());
try {
Trigger trigger = scheduler.getScheduler().getTrigger(new TriggerKey(triggerName, Scheduler.DEFAULT_GROUP));
if (trigger != null) {
- taskTO.setLastExec(trigger.getPreviousFireTime());
- taskTO.setNextExec(trigger.getNextFireTime());
+ schedTaskTO.setLastExec(trigger.getPreviousFireTime());
+ schedTaskTO.setNextExec(trigger.getNextFireTime());
}
} catch (SchedulerException e) {
LOG.warn("While trying to get to " + triggerName, e);
}
+
+ if (schedTaskTO instanceof ProvisioningTaskTO && schedTask instanceof ProvisioningTask) {
+ ProvisioningTaskTO provisioningTaskTO = (ProvisioningTaskTO) schedTaskTO;
+ ProvisioningTask provisioningTask = (ProvisioningTask) schedTask;
+
+ provisioningTaskTO.setResource(provisioningTask.getResource().getKey());
+
+ provisioningTaskTO.getActions().addAll(
+ provisioningTask.getActions().stream().map(Entity::getKey).collect(Collectors.toList()));
+
+ provisioningTaskTO.setPerformCreate(provisioningTask.isPerformCreate());
+ provisioningTaskTO.setPerformUpdate(provisioningTask.isPerformUpdate());
+ provisioningTaskTO.setPerformDelete(provisioningTask.isPerformDelete());
+ provisioningTaskTO.setSyncStatus(provisioningTask.isSyncStatus());
+ }
}
@Override
public <T extends TaskTO> T getTaskTO(final Task task, final TaskUtils taskUtils, final boolean details) {
T taskTO = taskUtils.newTaskTO();
- BeanUtils.copyProperties(task, taskTO, IGNORE_TASK_PROPERTIES);
+ taskTO.setKey(task.getKey());
TaskExec latestExec = taskExecDAO.findLatestStarted(task);
if (latestExec == null) {
@@ -360,8 +375,8 @@ public class TaskDataBinderImpl implements TaskDataBinder {
if (details) {
task.getExecs().stream().
- filter(execution -> execution != null).
- forEachOrdered(execution -> taskTO.getExecutions().add(getExecTO(execution)));
+ filter(Objects::nonNull).
+ forEach(execution -> taskTO.getExecutions().add(getExecTO(execution)));
}
switch (taskUtils.getType()) {
@@ -369,17 +384,22 @@ public class TaskDataBinderImpl implements TaskDataBinder {
PropagationTask propagationTask = (PropagationTask) task;
PropagationTaskTO propagationTaskTO = (PropagationTaskTO) taskTO;
+ propagationTaskTO.setOperation(propagationTask.getOperation());
+ propagationTaskTO.setConnObjectKey(propagationTask.getConnObjectKey());
+ propagationTaskTO.setOldConnObjectKey(propagationTask.getOldConnObjectKey());
+ propagationTaskTO.setAttributes(propagationTask.getSerializedAttributes());
+ propagationTaskTO.setResource(propagationTask.getResource().getKey());
+ propagationTaskTO.setObjectClassName(propagationTask.getObjectClassName());
propagationTaskTO.setAnyTypeKind(propagationTask.getAnyTypeKind());
+ propagationTaskTO.setAnyType(propagationTask.getAnyType());
propagationTaskTO.setEntityKey(propagationTask.getEntityKey());
- propagationTaskTO.setResource(propagationTask.getResource().getKey());
- propagationTaskTO.setAttributes(propagationTask.getSerializedAttributes());
break;
case SCHEDULED:
SchedTask schedTask = (SchedTask) task;
SchedTaskTO schedTaskTO = (SchedTaskTO) taskTO;
- setExecTime(schedTaskTO, task);
+ fill(schedTaskTO, schedTask);
if (schedTask.getJobDelegate() != null) {
schedTaskTO.setJobDelegate(schedTask.getJobDelegate().getKey());
@@ -390,22 +410,19 @@ public class TaskDataBinderImpl implements TaskDataBinder {
PullTask pullTask = (PullTask) task;
PullTaskTO pullTaskTO = (PullTaskTO) taskTO;
- setExecTime(pullTaskTO, task);
+ fill(pullTaskTO, pullTask);
pullTaskTO.setDestinationRealm(pullTask.getDestinatioRealm().getFullPath());
- pullTaskTO.setResource(pullTask.getResource().getKey());
pullTaskTO.setMatchingRule(pullTask.getMatchingRule() == null
? MatchingRule.UPDATE : pullTask.getMatchingRule());
pullTaskTO.setUnmatchingRule(pullTask.getUnmatchingRule() == null
? UnmatchingRule.PROVISION : pullTask.getUnmatchingRule());
+ pullTaskTO.setPullMode(pullTask.getPullMode());
if (pullTask.getReconFilterBuilder() != null) {
pullTaskTO.setReconFilterBuilder(pullTask.getReconFilterBuilder().getKey());
}
- pullTaskTO.getActions().addAll(
- pullTask.getActions().stream().map(Entity::getKey).collect(Collectors.toList()));
-
pullTask.getTemplates().forEach(template -> {
pullTaskTO.getTemplates().put(template.getAnyType().getKey(), template.get());
});
@@ -417,18 +434,14 @@ public class TaskDataBinderImpl implements TaskDataBinder {
PushTask pushTask = (PushTask) task;
PushTaskTO pushTaskTO = (PushTaskTO) taskTO;
- setExecTime(pushTaskTO, task);
+ fill(pushTaskTO, pushTask);
pushTaskTO.setSourceRealm(pushTask.getSourceRealm().getFullPath());
- pushTaskTO.setResource(pushTask.getResource().getKey());
pushTaskTO.setMatchingRule(pushTask.getMatchingRule() == null
? MatchingRule.LINK : pushTask.getMatchingRule());
pushTaskTO.setUnmatchingRule(pushTask.getUnmatchingRule() == null
? UnmatchingRule.ASSIGN : pushTask.getUnmatchingRule());
- pushTaskTO.getActions().addAll(
- pushTask.getActions().stream().map(Entity::getKey).collect(Collectors.toList()));
-
pushTask.getFilters().forEach(filter -> {
pushTaskTO.getFilters().put(filter.getAnyType().getKey(), filter.getFIQLCond());
});
@@ -441,9 +454,16 @@ public class TaskDataBinderImpl implements TaskDataBinder {
notificationTaskTO.setNotification(notificationTask.getNotification().getKey());
notificationTaskTO.setAnyTypeKind(notificationTask.getAnyTypeKind());
notificationTaskTO.setEntityKey(notificationTask.getEntityKey());
+ notificationTaskTO.setSender(notificationTask.getSender());
+ notificationTaskTO.getRecipients().addAll(notificationTask.getRecipients());
+ notificationTaskTO.setSubject(notificationTask.getSubject());
+ notificationTaskTO.setHtmlBody(notificationTask.getHtmlBody());
+ notificationTaskTO.setTextBody(notificationTask.getTextBody());
+ notificationTaskTO.setExecuted(notificationTask.isExecuted());
if (notificationTask.isExecuted() && StringUtils.isBlank(taskTO.getLatestExecStatus())) {
taskTO.setLatestExecStatus("[EXECUTED]");
}
+ notificationTaskTO.setTraceLevel(notificationTask.getTraceLevel());
break;
default:
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 58c2d7d..e50f59e 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
@@ -54,7 +54,6 @@ import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
import org.apache.syncope.core.spring.security.AuthContextUtils;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.RoleDAO;
import org.apache.syncope.core.persistence.api.entity.AccessToken;
@@ -79,11 +78,6 @@ import org.springframework.transaction.annotation.Transactional;
@Transactional(rollbackFor = { Throwable.class })
public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDataBinder {
- private static final String[] IGNORE_PROPERTIES = {
- "type", "realm", "auxClasses", "roles", "dynRoles", "relationships", "memberships", "dynMemberships",
- "plainAttrs", "derAttrs", "virAttrs", "resources", "securityQuestion", "securityAnswer"
- };
-
@Autowired
private RoleDAO roleDAO;
@@ -567,9 +561,22 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
@Override
public UserTO getUserTO(final User user, final boolean details) {
UserTO userTO = new UserTO();
-
- BeanUtils.copyProperties(user, userTO, IGNORE_PROPERTIES);
+ userTO.setKey(user.getKey());
+ userTO.setUsername(user.getUsername());
+ userTO.setPassword(user.getPassword());
+ userTO.setType(user.getType().getKey());
+ userTO.setCreationDate(user.getCreationDate());
+ userTO.setCreator(user.getCreator());
+ userTO.setLastChangeDate(user.getLastChangeDate());
+ userTO.setLastModifier(user.getLastModifier());
+ userTO.setStatus(user.getStatus());
userTO.setSuspended(BooleanUtils.isTrue(user.isSuspended()));
+ userTO.setChangePwdDate(user.getChangePwdDate());
+ userTO.setFailedLogins(user.getFailedLogins());
+ userTO.setLastLoginDate(user.getLastLoginDate());
+ userTO.setMustChangePassword(user.isMustChangePassword());
+ userTO.setToken(user.getToken());
+ userTO.setTokenExpireTime(user.getTokenExpireTime());
if (user.getSecurityQuestion() != null) {
userTO.setSecurityQuestion(user.getSecurityQuestion().getKey());
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/BeanUtils.java b/core/spring/src/main/java/org/apache/syncope/core/spring/BeanUtils.java
deleted file mode 100644
index 980b022..0000000
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/BeanUtils.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * 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.spring;
-
-import static org.springframework.beans.BeanUtils.getPropertyDescriptor;
-import static org.springframework.beans.BeanUtils.getPropertyDescriptors;
-
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import org.springframework.beans.FatalBeanException;
-import org.springframework.util.Assert;
-import org.springframework.util.ClassUtils;
-
-/**
- * Overrides Spring's BeanUtils not using collection setters but instead getters + addAll() / putAll(),
- * in a JAXB friendly way.
- *
- * Refer to <a href="https://issues.apache.org/jira/browse/SYNCOPE-246">SYNCOPE-246</a> for more information.
- *
- * @see org.springframework.beans.BeanUtils
- */
-public final class BeanUtils {
-
- private BeanUtils() {
- // Empty private constructor for static utility classes
- }
-
- /**
- * Copy the property values of the given source bean into the target bean.
- * <p>
- * Note: The source and target classes do not have to match or even be derived
- * from each other, as long as the properties match. Any bean properties that the
- * source bean exposes but the target bean does not will silently be ignored.
- * </p><p>
- * This is just a convenience method. For more complex transfer needs,
- * consider using a full BeanWrapper.
- * </p>
- *
- * @param source the source bean
- * @param target the target bean
- * @see org.springframework.beans.BeanWrapper
- */
- public static void copyProperties(final Object source, final Object target) {
- copyProperties(source, target, null, (String[]) null);
- }
-
- /**
- * Copy the property values of the given source bean into the given target bean,
- * only setting properties defined in the given "editable" class (or interface).
- * <p>
- * Note: The source and target classes do not have to match or even be derived
- * from each other, as long as the properties match. Any bean properties that the
- * source bean exposes but the target bean does not will silently be ignored.
- * </p><p>
- * This is just a convenience method. For more complex transfer needs,
- * consider using a full BeanWrapper.
- * </p>
- *
- * @param source the source bean
- * @param target the target bean
- * @param editable the class (or interface) to restrict property setting to
- * @see org.springframework.beans.BeanWrapper
- */
- public static void copyProperties(final Object source, final Object target, final Class<?> editable) {
- copyProperties(source, target, editable, (String[]) null);
- }
-
- /**
- * Copy the property values of the given source bean into the given target bean,
- * ignoring the given "ignoreProperties".
- * <p>
- * Note: The source and target classes do not have to match or even be derived
- * from each other, as long as the properties match. Any bean properties that the
- * source bean exposes but the target bean does not will silently be ignored.
- * </p><p>
- * This is just a convenience method. For more complex transfer needs,
- * consider using a full BeanWrapper.
- * </p>
- *
- * @param source the source bean
- * @param target the target bean
- * @param ignoreProperties array of property names to ignore
- * @see org.springframework.beans.BeanWrapper
- */
- public static void copyProperties(final Object source, final Object target, final String... ignoreProperties) {
- copyProperties(source, target, null, ignoreProperties);
- }
-
- /**
- * Copy the property values of the given source bean into the given target bean.
- * <p>
- * Note: The source and target classes do not have to match or even be derived
- * from each other, as long as the properties match. Any bean properties that the
- * source bean exposes but the target bean does not will silently be ignored.
- * </p>
- *
- * @param source the source bean
- * @param target the target bean
- * @param editable the class (or interface) to restrict property setting to
- * @param ignoreProperties array of property names to ignore
- * @see org.springframework.beans.BeanWrapper
- */
- @SuppressWarnings("unchecked")
- private static void copyProperties(
- final Object source, final Object target, final Class<?> editable, final String... ignoreProperties) {
-
- Assert.notNull(source, "Source must not be null");
- Assert.notNull(target, "Target must not be null");
-
- Class<?> actualEditable = target.getClass();
- if (editable != null) {
- if (!editable.isInstance(target)) {
- throw new IllegalArgumentException("Target class [" + target.getClass().getName()
- + "] not assignable to Editable class [" + editable.getName() + "]");
- }
- actualEditable = editable;
- }
- PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable);
- List<String> ignoreList = (ignoreProperties == null)
- ? Collections.<String>emptyList() : Arrays.asList(ignoreProperties);
-
- for (PropertyDescriptor targetPd : targetPds) {
- if (ignoreProperties == null || (!ignoreList.contains(targetPd.getName()))) {
- PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName());
- if (sourcePd != null) {
- Method readMethod = sourcePd.getReadMethod();
- if (readMethod != null) {
- Method writeMethod = targetPd.getWriteMethod();
-
- try {
- // Diverts from Spring's BeanUtils: if no write method is found and property is collection,
- // try to use addAll() / putAll().
- if (writeMethod == null) {
- Object value = readMethod.invoke(source);
- Method targetReadMethod = targetPd.getReadMethod();
- if (targetReadMethod != null) {
- if (!Modifier.isPublic(targetReadMethod.getDeclaringClass().getModifiers())) {
- targetReadMethod.setAccessible(true);
- }
- Object destValue = targetReadMethod.invoke(target);
-
- if (value instanceof Collection && destValue instanceof Collection) {
- ((Collection) destValue).clear();
- ((Collection) destValue).addAll((Collection) value);
- } else if (value instanceof Map && destValue instanceof Map) {
- ((Map) destValue).clear();
- ((Map) destValue).putAll((Map) value);
- }
- }
- } else if (ClassUtils.isAssignable(
- writeMethod.getParameterTypes()[0], readMethod.getReturnType())) {
-
- if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {
- readMethod.setAccessible(true);
- }
- Object value = readMethod.invoke(source);
- if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) {
- writeMethod.setAccessible(true);
- }
- writeMethod.invoke(target, value);
- }
- } catch (Throwable ex) {
- throw new FatalBeanException(
- "Could not copy property '" + targetPd.getName() + "' from source to target", ex);
- }
- }
- }
- }
- }
- }
-}
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/data/CamelRouteDataBinderImpl.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/data/CamelRouteDataBinderImpl.java
index 5e7190a..e96f7db 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/data/CamelRouteDataBinderImpl.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/data/CamelRouteDataBinderImpl.java
@@ -19,7 +19,6 @@
package org.apache.syncope.core.provisioning.camel.data;
import org.apache.syncope.common.lib.to.CamelRouteTO;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.persistence.api.dao.CamelRouteDAO;
import org.apache.syncope.core.persistence.api.entity.CamelRoute;
import org.apache.syncope.core.provisioning.api.data.CamelRouteDataBinder;
@@ -35,7 +34,10 @@ public class CamelRouteDataBinderImpl implements CamelRouteDataBinder {
@Override
public CamelRouteTO getRouteTO(final CamelRoute route) {
CamelRouteTO routeTO = new CamelRouteTO();
- BeanUtils.copyProperties(route, routeTO);
+ routeTO.setKey(route.getKey());
+ routeTO.setAnyTypeKind(route.getAnyTypeKind());
+ routeTO.setContent(route.getContent());
+
return routeTO;
}
@@ -44,5 +46,4 @@ public class CamelRouteDataBinderImpl implements CamelRouteDataBinder {
route.setContent(routeTO.getContent());
routeDAO.save(route);
}
-
}
diff --git a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
index c1d20b1..ac28126 100644
--- a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
+++ b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
@@ -51,7 +51,6 @@ import org.apache.syncope.core.provisioning.api.WorkflowResult;
import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
import org.apache.syncope.core.provisioning.api.event.AnyDeletedEvent;
import org.apache.syncope.core.spring.ApplicationContextProvider;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.apache.syncope.core.workflow.api.WorkflowException;
import org.flowable.common.engine.api.FlowableException;
@@ -68,6 +67,7 @@ import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@@ -77,8 +77,6 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
protected static final Logger LOG = LoggerFactory.getLogger(UserRequestHandler.class);
- protected static final String[] PROPERTY_IGNORE_PROPS = { "type" };
-
@Autowired
protected WorkflowTaskManager wfTaskManager;
@@ -308,7 +306,11 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
protected UserRequestForm getForm(final Task task, final TaskFormData fd) {
UserRequestForm formTO =
getForm(task.getProcessInstanceId(), task.getId(), fd.getFormKey(), fd.getFormProperties());
- BeanUtils.copyProperties(task, formTO);
+ formTO.setCreateTime(task.getCreateTime());
+ formTO.setDueDate(task.getDueDate());
+ formTO.setExecutionId(task.getExecutionId());
+ formTO.setFormKey(task.getFormKey());
+ formTO.setOwner(task.getOwner());
return formTO;
}
@@ -322,7 +324,11 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
UserRequestForm formTO = getHistoricFormTO(
task.getProcessInstanceId(), task.getId(), task.getFormKey(), props);
- BeanUtils.copyProperties(task, formTO);
+ formTO.setCreateTime(task.getCreateTime());
+ formTO.setDueDate(task.getDueDate());
+ formTO.setExecutionId(task.getExecutionId());
+ formTO.setFormKey(task.getFormKey());
+ formTO.setOwner(task.getOwner());
HistoricActivityInstance historicActivityInstance = engine.getHistoryService().
createHistoricActivityInstanceQuery().
@@ -408,7 +414,12 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
formTO.getProperties().addAll(props.stream().map(fProp -> {
UserRequestFormProperty propertyTO = new UserRequestFormProperty();
- BeanUtils.copyProperties(fProp, propertyTO, PROPERTY_IGNORE_PROPS);
+ propertyTO.setId(fProp.getId());
+ propertyTO.setName(fProp.getName());
+ propertyTO.setReadable(fProp.isReadable());
+ propertyTO.setRequired(fProp.isRequired());
+ propertyTO.setWritable(fProp.isWritable());
+ propertyTO.setValue(fProp.getValue());
propertyTO.setType(fromFlowableFormType(fProp.getType()));
switch (propertyTO.getType()) {
case Date:
diff --git a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserWorkflowAdapter.java b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserWorkflowAdapter.java
index f3f1880..24e765d 100644
--- a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserWorkflowAdapter.java
+++ b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserWorkflowAdapter.java
@@ -35,7 +35,6 @@ import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.flowable.api.UserRequestHandler;
import org.apache.syncope.core.flowable.api.WorkflowTaskManager;
import org.apache.syncope.core.spring.security.AuthContextUtils;
-import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
import org.apache.syncope.core.flowable.support.DomainProcessEngine;
@@ -48,6 +47,7 @@ import org.flowable.bpmn.model.Process;
import org.flowable.common.engine.api.FlowableException;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
public class FlowableUserWorkflowAdapter extends AbstractUserWorkflowAdapter implements WorkflowTaskManager {
diff --git a/ext/oidcclient/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/OIDCProviderDataBinderImpl.java b/ext/oidcclient/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/OIDCProviderDataBinderImpl.java
index 888d7a5..bf3c5bb 100644
--- a/ext/oidcclient/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/OIDCProviderDataBinderImpl.java
+++ b/ext/oidcclient/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/OIDCProviderDataBinderImpl.java
@@ -41,7 +41,6 @@ import org.apache.syncope.core.provisioning.api.IntAttrName;
import org.apache.syncope.core.provisioning.api.data.OIDCProviderDataBinder;
import org.apache.syncope.core.provisioning.java.IntAttrNameParser;
import org.apache.syncope.core.provisioning.java.jexl.JexlUtils;
-import org.apache.syncope.core.spring.BeanUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -135,7 +134,13 @@ public class OIDCProviderDataBinderImpl implements OIDCProviderDataBinder {
}
OIDCProviderItem item = entityFactory.newEntity(OIDCProviderItem.class);
- BeanUtils.copyProperties(itemTO, item, ITEM_IGNORE_PROPERTIES);
+ item.setIntAttrName(itemTO.getIntAttrName());
+ item.setExtAttrName(itemTO.getExtAttrName());
+ item.setMandatoryCondition(itemTO.getMandatoryCondition());
+ item.setConnObjectKey(itemTO.isConnObjectKey());
+ item.setPassword(itemTO.isPassword());
+ item.setPropagationJEXLTransformer(itemTO.getPropagationJEXLTransformer());
+ item.setPullJEXLTransformer(itemTO.getPullJEXLTransformer());
item.setOP(op);
item.setPurpose(MappingPurpose.NONE);
if (item.isConnObjectKey()) {
@@ -219,7 +224,13 @@ public class OIDCProviderDataBinderImpl implements OIDCProviderDataBinder {
op.getItems().forEach(item -> {
ItemTO itemTO = new ItemTO();
itemTO.setKey(item.getKey());
- BeanUtils.copyProperties(item, itemTO, ITEM_IGNORE_PROPERTIES);
+ itemTO.setIntAttrName(item.getIntAttrName());
+ itemTO.setExtAttrName(item.getExtAttrName());
+ itemTO.setMandatoryCondition(item.getMandatoryCondition());
+ itemTO.setConnObjectKey(item.isConnObjectKey());
+ itemTO.setPassword(item.isPassword());
+ itemTO.setPropagationJEXLTransformer(item.getPropagationJEXLTransformer());
+ itemTO.setPullJEXLTransformer(item.getPullJEXLTransformer());
itemTO.setPurpose(MappingPurpose.NONE);
if (itemTO.isConnObjectKey()) {
diff --git a/ext/saml2sp/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SAML2IdPDataBinderImpl.java b/ext/saml2sp/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SAML2IdPDataBinderImpl.java
index 85c693a..fe0f8f0 100644
--- a/ext/saml2sp/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SAML2IdPDataBinderImpl.java
+++ b/ext/saml2sp/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SAML2IdPDataBinderImpl.java
@@ -42,7 +42,6 @@ import org.apache.syncope.core.provisioning.api.IntAttrName;
import org.apache.syncope.core.provisioning.api.data.SAML2IdPDataBinder;
import org.apache.syncope.core.provisioning.java.IntAttrNameParser;
import org.apache.syncope.core.provisioning.java.jexl.JexlUtils;
-import org.apache.syncope.core.spring.BeanUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -53,8 +52,6 @@ public class SAML2IdPDataBinderImpl implements SAML2IdPDataBinder {
private static final Logger LOG = LoggerFactory.getLogger(SAML2IdPDataBinder.class);
- private static final String[] ITEM_IGNORE_PROPERTIES = { "key", "purpose" };
-
@Autowired
private AnyTypeDAO anyTypeDAO;
@@ -135,7 +132,13 @@ public class SAML2IdPDataBinderImpl implements SAML2IdPDataBinder {
}
SAML2IdPItem item = entityFactory.newEntity(SAML2IdPItem.class);
- BeanUtils.copyProperties(itemTO, item, ITEM_IGNORE_PROPERTIES);
+ item.setIntAttrName(itemTO.getIntAttrName());
+ item.setExtAttrName(itemTO.getExtAttrName());
+ item.setMandatoryCondition(itemTO.getMandatoryCondition());
+ item.setConnObjectKey(itemTO.isConnObjectKey());
+ item.setPassword(itemTO.isPassword());
+ item.setPropagationJEXLTransformer(itemTO.getPropagationJEXLTransformer());
+ item.setPullJEXLTransformer(itemTO.getPullJEXLTransformer());
item.setIdP(idp);
item.setPurpose(MappingPurpose.NONE);
if (item.isConnObjectKey()) {
@@ -217,7 +220,13 @@ public class SAML2IdPDataBinderImpl implements SAML2IdPDataBinder {
idp.getItems().forEach(item -> {
ItemTO itemTO = new ItemTO();
itemTO.setKey(item.getKey());
- BeanUtils.copyProperties(item, itemTO, ITEM_IGNORE_PROPERTIES);
+ itemTO.setIntAttrName(item.getIntAttrName());
+ itemTO.setExtAttrName(item.getExtAttrName());
+ itemTO.setMandatoryCondition(item.getMandatoryCondition());
+ itemTO.setConnObjectKey(item.isConnObjectKey());
+ itemTO.setPassword(item.isPassword());
+ itemTO.setPropagationJEXLTransformer(item.getPropagationJEXLTransformer());
+ itemTO.setPullJEXLTransformer(item.getPullJEXLTransformer());
itemTO.setPurpose(MappingPurpose.NONE);
if (itemTO.isConnObjectKey()) {
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationITCase.java
index 5b104ec..7a6159b 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/NotificationITCase.java
@@ -89,10 +89,9 @@ public class NotificationITCase extends AbstractITCase {
@Test
public void update() {
- NotificationTO notificationTO = notificationService.read(
- "9e2b911c-25de-4c77-bcea-b86ed9451050");
- notificationTO.setRecipientsFIQL(SyncopeClient.getUserSearchConditionBuilder().inGroups(
- "bf825fe1-7320-4a54-bd64-143b5c18ab97").query());
+ NotificationTO notificationTO = notificationService.read("9e2b911c-25de-4c77-bcea-b86ed9451050");
+ notificationTO.setRecipientsFIQL(SyncopeClient.getUserSearchConditionBuilder().
+ inGroups("bf825fe1-7320-4a54-bd64-143b5c18ab97").query());
notificationService.update(notificationTO);
NotificationTO actual = notificationService.read(notificationTO.getKey());
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PlainSchemaITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PlainSchemaITCase.java
index fa04dd5..3135834 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PlainSchemaITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PlainSchemaITCase.java
@@ -100,7 +100,7 @@ public class PlainSchemaITCase extends AbstractITCase {
}
@Test
- public void createREnumWithoutEnumeration() {
+ public void createEnumWithNoValues() {
PlainSchemaTO schemaTO = new PlainSchemaTO();
schemaTO.setKey("enumcheck");
schemaTO.setType(AttrSchemaType.Enum);
@@ -151,7 +151,7 @@ public class PlainSchemaITCase extends AbstractITCase {
}
@Test
- public void testBinaryValidation() throws IOException {
+ public void binaryValidation() throws IOException {
// pdf - with validator
PlainSchemaTO schemaTOpdf = new PlainSchemaTO();
schemaTOpdf.setKey("BinaryPDF");
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
index b1ba164..4b6b864 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
@@ -446,7 +446,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
query()).
build());
assertNull(matchingUsers.getResult().get(0).getPlainAttr("title").orElse(null));
-
+
// SYNCOPE-1356 remove group membership from LDAP, pull and check in Syncope
ConnObjectTO groupConnObject = resourceService.readConnObject(
RESOURCE_NAME_LDAP, AnyTypeKind.GROUP.name(), matchingGroups.getResult().get(0).getKey());