http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java ---------------------------------------------------------------------- diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java index 45628c7..8a9082b 100644 --- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java +++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java @@ -56,7 +56,7 @@ public interface RoleService extends JAXRSService { @GET @Path("{key}") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - RoleTO read(@NotNull @PathParam("key") Long key); + RoleTO read(@NotNull @PathParam("key") String key); /** * Creates a new role. @@ -85,5 +85,5 @@ public interface RoleService extends JAXRSService { */ @DELETE @Path("{key}") - void delete(@NotNull @PathParam("key") Long key); + void delete(@NotNull @PathParam("key") String key); }
http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java ---------------------------------------------------------------------- diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java index e6ec502..9049f92 100644 --- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java +++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java @@ -20,6 +20,7 @@ package org.apache.syncope.common.rest.api.service; import java.util.List; import javax.validation.constraints.NotNull; +import javax.ws.rs.BeanParam; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -28,11 +29,11 @@ import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.apache.syncope.common.lib.to.AbstractSchemaTO; import org.apache.syncope.common.lib.types.SchemaType; +import org.apache.syncope.common.rest.api.beans.SchemaQuery; /** * REST operations for attribute schemas. @@ -55,17 +56,18 @@ public interface SchemaService extends JAXRSService { @NotNull @PathParam("type") SchemaType type, @NotNull @PathParam("key") String key); /** - * Returns a list of schemas with matching type, for the given anyTypeClass if provided. + * Returns a list of schemas matching type and the given query. * * @param <T> actual SchemaTO * @param type type for schemas to be listed - * @param anyTypeClass any type class name + * @param query query conditions * @return list of schemas with matching type, for the given anyTypeClass if provided */ @GET @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - <T extends AbstractSchemaTO> List<T> list(@NotNull @PathParam("type") SchemaType type, - @QueryParam("anyType") String anyTypeClass); + <T extends AbstractSchemaTO> List<T> list( + @NotNull @PathParam("type") SchemaType type, + @BeanParam SchemaQuery query); /** * Creates a new schema. http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java ---------------------------------------------------------------------- diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java index 6d090dd..daaaf56 100644 --- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java +++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java @@ -50,7 +50,7 @@ public class AnyTypeClassLogic extends AbstractTransactionalLogic<AnyTypeClassTO if (anyType == null) { LOG.error("Could not find anyType '" + key + "'"); - throw new NotFoundException(String.valueOf(key)); + throw new NotFoundException(key); } return binder.getAnyTypeClassTO(anyType); @@ -77,7 +77,7 @@ public class AnyTypeClassLogic extends AbstractTransactionalLogic<AnyTypeClassTO AnyTypeClass anyType = anyTypeClassDAO.find(anyTypeClassTO.getKey()); if (anyType == null) { LOG.error("Could not find anyTypeClass '" + anyTypeClassTO.getKey() + "'"); - throw new NotFoundException(String.valueOf(anyTypeClassTO.getKey())); + throw new NotFoundException(anyTypeClassTO.getKey()); } binder.update(anyType, anyTypeClassTO); @@ -92,7 +92,7 @@ public class AnyTypeClassLogic extends AbstractTransactionalLogic<AnyTypeClassTO if (anyTypeClass == null) { LOG.error("Could not find anyTypeClass '" + key + "'"); - throw new NotFoundException(String.valueOf(key)); + throw new NotFoundException(key); } AnyTypeClassTO deleted = binder.getAnyTypeClassTO(anyTypeClass); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java ---------------------------------------------------------------------- diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java index 6e76e60..3116ae8 100644 --- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java +++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java @@ -53,7 +53,7 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> { if (anyType == null) { LOG.error("Could not find anyType '" + key + "'"); - throw new NotFoundException(String.valueOf(key)); + throw new NotFoundException(key); } return binder.getAnyTypeTO(anyType); @@ -82,7 +82,7 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> { AnyType anyType = anyTypeDAO.find(anyTypeTO.getKey()); if (anyType == null) { LOG.error("Could not find anyType '" + anyTypeTO.getKey() + "'"); - throw new NotFoundException(String.valueOf(anyTypeTO.getKey())); + throw new NotFoundException(anyTypeTO.getKey()); } EntitlementsHolder.getInstance().removeFor(anyTypeTO.getKey()); @@ -101,7 +101,7 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> { if (anyType == null) { LOG.error("Could not find anyType '" + key + "'"); - throw new NotFoundException(String.valueOf(key)); + throw new NotFoundException(key); } AnyTypeTO deleted = binder.getAnyTypeTO(anyType); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java ---------------------------------------------------------------------- diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java index a1dbfab..cfefdd0 100644 --- a/core/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java +++ b/core/logic/src/main/java/org/apache/syncope/core/logic/DomainLogic.java @@ -55,7 +55,7 @@ public class DomainLogic extends AbstractTransactionalLogic<DomainTO> { if (domain == null) { LOG.error("Could not find domain '" + key + "'"); - throw new NotFoundException(String.valueOf(key)); + throw new NotFoundException(key); } return binder.getDomainTO(domain); @@ -88,7 +88,7 @@ public class DomainLogic extends AbstractTransactionalLogic<DomainTO> { Domain domain = domainDAO.find(domainTO.getKey()); if (domain == null) { LOG.error("Could not find domain '" + domainTO.getKey() + "'"); - throw new NotFoundException(String.valueOf(domainTO.getKey())); + throw new NotFoundException(domainTO.getKey()); } binder.update(domain, domainTO); @@ -104,7 +104,7 @@ public class DomainLogic extends AbstractTransactionalLogic<DomainTO> { if (domain == null) { LOG.error("Could not find domain '" + key + "'"); - throw new NotFoundException(String.valueOf(key)); + throw new NotFoundException(key); } DomainTO deleted = binder.getDomainTO(domain); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java ---------------------------------------------------------------------- diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java index fc4c8ac..da2c13e 100644 --- a/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java +++ b/core/logic/src/main/java/org/apache/syncope/core/logic/NotificationLogic.java @@ -44,12 +44,12 @@ public class NotificationLogic extends AbstractTransactionalLogic<NotificationTO private NotificationDataBinder binder; @PreAuthorize("hasRole('" + StandardEntitlement.NOTIFICATION_READ + "')") - public NotificationTO read(final Long notificationKey) { - Notification notification = notificationDAO.find(notificationKey); + public NotificationTO read(final Long key) { + Notification notification = notificationDAO.find(key); if (notification == null) { - LOG.error("Could not find notification '" + notificationKey + "'"); + LOG.error("Could not find notification '" + key + "'"); - throw new NotFoundException(String.valueOf(notificationKey)); + throw new NotFoundException(String.valueOf(key)); } return binder.getNotificationTO(notification); @@ -86,16 +86,16 @@ public class NotificationLogic extends AbstractTransactionalLogic<NotificationTO } @PreAuthorize("hasRole('" + StandardEntitlement.NOTIFICATION_DELETE + "')") - public NotificationTO delete(final Long notificationKey) { - Notification notification = notificationDAO.find(notificationKey); + public NotificationTO delete(final Long key) { + Notification notification = notificationDAO.find(key); if (notification == null) { - LOG.error("Could not find notification '" + notificationKey + "'"); + LOG.error("Could not find notification '" + key + "'"); - throw new NotFoundException(String.valueOf(notificationKey)); + throw new NotFoundException(String.valueOf(key)); } NotificationTO deleted = binder.getNotificationTO(notification); - notificationDAO.delete(notificationKey); + notificationDAO.delete(key); return deleted; } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java ---------------------------------------------------------------------- diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java index 3c6bfa6..6d96e8b 100644 --- a/core/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java +++ b/core/logic/src/main/java/org/apache/syncope/core/logic/RelationshipTypeLogic.java @@ -50,7 +50,7 @@ public class RelationshipTypeLogic extends AbstractTransactionalLogic<Relationsh if (relationshipType == null) { LOG.error("Could not find relationshipType '" + key + "'"); - throw new NotFoundException(String.valueOf(key)); + throw new NotFoundException(key); } return binder.getRelationshipTypeTO(relationshipType); @@ -78,7 +78,7 @@ public class RelationshipTypeLogic extends AbstractTransactionalLogic<Relationsh RelationshipType relationshipType = relationshipTypeDAO.find(relationshipTypeTO.getKey()); if (relationshipType == null) { LOG.error("Could not find relationshipType '" + relationshipTypeTO.getKey() + "'"); - throw new NotFoundException(String.valueOf(relationshipTypeTO.getKey())); + throw new NotFoundException(relationshipTypeTO.getKey()); } binder.update(relationshipType, relationshipTypeTO); @@ -93,7 +93,7 @@ public class RelationshipTypeLogic extends AbstractTransactionalLogic<Relationsh if (relationshipType == null) { LOG.error("Could not find relationshipType '" + key + "'"); - throw new NotFoundException(String.valueOf(key)); + throw new NotFoundException(key); } RelationshipTypeTO deleted = binder.getRelationshipTypeTO(relationshipType); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java ---------------------------------------------------------------------- diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java index 60f65a0..92cb880 100644 --- a/core/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java +++ b/core/logic/src/main/java/org/apache/syncope/core/logic/RoleLogic.java @@ -44,12 +44,12 @@ public class RoleLogic extends AbstractTransactionalLogic<RoleTO> { private RoleDAO roleDAO; @PreAuthorize("hasRole('" + StandardEntitlement.ROLE_READ + "')") - public RoleTO read(final Long roleKey) { - Role role = roleDAO.find(roleKey); + public RoleTO read(final String key) { + Role role = roleDAO.find(key); if (role == null) { - LOG.error("Could not find role '" + roleKey + "'"); + LOG.error("Could not find role '" + key + "'"); - throw new NotFoundException(String.valueOf(roleKey)); + throw new NotFoundException(key); } return binder.getRoleTO(role); @@ -76,7 +76,7 @@ public class RoleLogic extends AbstractTransactionalLogic<RoleTO> { Role role = roleDAO.find(roleTO.getKey()); if (role == null) { LOG.error("Could not find role '" + roleTO.getKey() + "'"); - throw new NotFoundException(String.valueOf(roleTO.getKey())); + throw new NotFoundException(roleTO.getKey()); } binder.update(role, roleTO); @@ -86,16 +86,16 @@ public class RoleLogic extends AbstractTransactionalLogic<RoleTO> { } @PreAuthorize("hasRole('" + StandardEntitlement.ROLE_DELETE + "')") - public RoleTO delete(final Long roleKey) { - Role role = roleDAO.find(roleKey); + public RoleTO delete(final String key) { + Role role = roleDAO.find(key); if (role == null) { - LOG.error("Could not find role '" + roleKey + "'"); + LOG.error("Could not find role '" + key + "'"); - throw new NotFoundException(String.valueOf(roleKey)); + throw new NotFoundException(key); } RoleTO deleted = binder.getRoleTO(role); - roleDAO.delete(roleKey); + roleDAO.delete(key); return deleted; } @@ -103,12 +103,12 @@ public class RoleLogic extends AbstractTransactionalLogic<RoleTO> { protected RoleTO resolveReference(final Method method, final Object... args) throws UnresolvedReferenceException { - Long key = null; + String key = null; if (ArrayUtils.isNotEmpty(args)) { for (int i = 0; key == null && i < args.length; i++) { - if (args[i] instanceof Long) { - key = (Long) args[i]; + if (args[i] instanceof String) { + key = (String) args[i]; } else if (args[i] instanceof RoleTO) { key = ((RoleTO) args[i]).getKey(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java ---------------------------------------------------------------------- diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java index a57f2e1..1e94c96 100644 --- a/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java +++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java @@ -145,13 +145,26 @@ public class SchemaLogic extends AbstractTransactionalLogic<AbstractSchemaTO> { @PreAuthorize("isAuthenticated()") @SuppressWarnings("unchecked") - public <T extends AbstractSchemaTO> List<T> list(final SchemaType schemaType, final String anyTypeClass) { - AnyTypeClass clazz = anyTypeClass == null ? null : anyTypeClassDAO.find(anyTypeClass); + public <T extends AbstractSchemaTO> List<T> list( + final SchemaType schemaType, final List<String> anyTypeClasses) { + + List<AnyTypeClass> classes = new ArrayList<>(anyTypeClasses == null ? 0 : anyTypeClasses.size()); + if (anyTypeClasses != null) { + for (String anyTypeClass : anyTypeClasses) { + AnyTypeClass clazz = anyTypeClassDAO.find(anyTypeClass); + if (clazz == null) { + LOG.warn("Ignoring invalid {}: {}", AnyTypeClass.class.getSimpleName(), anyTypeClass); + } else { + classes.add(clazz); + } + } + } + List<T> result; switch (schemaType) { case VIRTUAL: result = CollectionUtils.collect( - clazz == null ? virSchemaDAO.findAll() : virSchemaDAO.findByAnyTypeClass(clazz), + classes.isEmpty() ? virSchemaDAO.findAll() : virSchemaDAO.findByAnyTypeClasses(classes), new Transformer<VirSchema, T>() { @Override @@ -163,7 +176,7 @@ public class SchemaLogic extends AbstractTransactionalLogic<AbstractSchemaTO> { case DERIVED: result = CollectionUtils.collect( - clazz == null ? derSchemaDAO.findAll() : derSchemaDAO.findByAnyTypeClass(clazz), + classes.isEmpty() ? derSchemaDAO.findAll() : derSchemaDAO.findByAnyTypeClasses(classes), new Transformer<DerSchema, T>() { @Override @@ -176,7 +189,7 @@ public class SchemaLogic extends AbstractTransactionalLogic<AbstractSchemaTO> { case PLAIN: default: result = CollectionUtils.collect( - clazz == null ? plainSchemaDAO.findAll() : plainSchemaDAO.findByAnyTypeClass(clazz), + classes.isEmpty() ? plainSchemaDAO.findAll() : plainSchemaDAO.findByAnyTypeClasses(classes), new Transformer<PlainSchema, T>() { @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/misc/src/main/java/org/apache/syncope/core/misc/search/SearchCondVisitor.java ---------------------------------------------------------------------- diff --git a/core/misc/src/main/java/org/apache/syncope/core/misc/search/SearchCondVisitor.java b/core/misc/src/main/java/org/apache/syncope/core/misc/search/SearchCondVisitor.java index c7efa8a..6b067ca 100644 --- a/core/misc/src/main/java/org/apache/syncope/core/misc/search/SearchCondVisitor.java +++ b/core/misc/src/main/java/org/apache/syncope/core/misc/search/SearchCondVisitor.java @@ -113,7 +113,7 @@ public class SearchCondVisitor extends AbstractSearchConditionVisitor<SearchBean case ROLES: RoleCond roleCond = new RoleCond(); - roleCond.setRoleKey(Long.valueOf(value)); + roleCond.setRoleKey(value); leaf = SearchCond.getLeafCond(roleCond); break; http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthDataAccessor.java ---------------------------------------------------------------------- diff --git a/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthDataAccessor.java b/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthDataAccessor.java index 1332404..afca81a 100644 --- a/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthDataAccessor.java +++ b/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthDataAccessor.java @@ -18,12 +18,12 @@ */ package org.apache.syncope.core.misc.security; -import java.util.ArrayList; import java.util.Arrays; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.List; +import java.util.Map; import java.util.Set; import javax.annotation.Resource; import org.apache.commons.collections4.Closure; @@ -260,6 +260,8 @@ public class AuthDataAccessor { if (user.isMustChangePassword()) { authorities.add(new SyncopeGrantedAuthority(StandardEntitlement.MUST_CHANGE_PASSWORD)); } else { + final Map<String, Set<String>> entForRealms = new HashMap<>(); + // Give entitlements as assigned by roles (with realms, where applicable) - assigned either // statically and dynamically for (final Role role : userDAO.findAllRoles(user)) { @@ -267,18 +269,19 @@ public class AuthDataAccessor { @Override public void execute(final String entitlement) { - SyncopeGrantedAuthority authority = new SyncopeGrantedAuthority(entitlement); - authorities.add(authority); + Set<String> realms = entForRealms.get(entitlement); + if (realms == null) { + realms = new HashSet<>(); + entForRealms.put(entitlement, realms); + } - List<String> realmFullPahs = new ArrayList<>(); CollectionUtils.collect(role.getRealms(), new Transformer<Realm, String>() { @Override public String transform(final Realm realm) { return realm.getFullPath(); } - }, realmFullPahs); - authority.addRealms(realmFullPahs); + }, realms); } }); } @@ -290,12 +293,22 @@ public class AuthDataAccessor { StandardEntitlement.GROUP_UPDATE, StandardEntitlement.GROUP_DELETE)) { - SyncopeGrantedAuthority authority = new SyncopeGrantedAuthority(entitlement); - authority.addRealm( - RealmUtils.getGroupOwnerRealm(group.getRealm().getFullPath(), group.getKey())); - authorities.add(authority); + Set<String> realms = entForRealms.get(entitlement); + if (realms == null) { + realms = new HashSet<>(); + entForRealms.put(entitlement, realms); + } + + realms.add(RealmUtils.getGroupOwnerRealm(group.getRealm().getFullPath(), group.getKey())); } } + + // Finally normalize realms for each given entitlement and generate authorities + for (Map.Entry<String, Set<String>> entry : entForRealms.entrySet()) { + SyncopeGrantedAuthority authority = new SyncopeGrantedAuthority(entry.getKey()); + authority.addRealms(RealmUtils.normalize(entry.getValue())); + authorities.add(authority); + } } } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/misc/src/main/java/org/apache/syncope/core/misc/security/SyncopeGrantedAuthority.java ---------------------------------------------------------------------- diff --git a/core/misc/src/main/java/org/apache/syncope/core/misc/security/SyncopeGrantedAuthority.java b/core/misc/src/main/java/org/apache/syncope/core/misc/security/SyncopeGrantedAuthority.java index 198b1e8..1cdae17 100644 --- a/core/misc/src/main/java/org/apache/syncope/core/misc/security/SyncopeGrantedAuthority.java +++ b/core/misc/src/main/java/org/apache/syncope/core/misc/security/SyncopeGrantedAuthority.java @@ -18,9 +18,9 @@ */ package org.apache.syncope.core.misc.security; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; -import java.util.List; import java.util.Set; import org.apache.commons.collections4.Closure; import org.apache.commons.collections4.CollectionUtils; @@ -53,7 +53,7 @@ public class SyncopeGrantedAuthority implements GrantedAuthority { return RealmUtils.normalizingAddTo(realms, newRealm); } - public void addRealms(final List<String> newRealms) { + public void addRealms(final Collection<String> newRealms) { CollectionUtils.forAllDo(newRealms, new Closure<String>() { @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/misc/src/test/java/org/apache/syncope/core/misc/search/SearchCondConverterTest.java ---------------------------------------------------------------------- diff --git a/core/misc/src/test/java/org/apache/syncope/core/misc/search/SearchCondConverterTest.java b/core/misc/src/test/java/org/apache/syncope/core/misc/search/SearchCondConverterTest.java index caa9c54..29f3c64 100644 --- a/core/misc/src/test/java/org/apache/syncope/core/misc/search/SearchCondConverterTest.java +++ b/core/misc/src/test/java/org/apache/syncope/core/misc/search/SearchCondConverterTest.java @@ -98,11 +98,11 @@ public class SearchCondConverterTest { @Test public void roles() { - String fiqlExpression = new UserFiqlSearchConditionBuilder().inRoles(1L).query(); - assertEquals(SpecialAttr.ROLES + "==1", fiqlExpression); + String fiqlExpression = new UserFiqlSearchConditionBuilder().inRoles("User reviewer").query(); + assertEquals(SpecialAttr.ROLES + "==User reviewer", fiqlExpression); RoleCond roleCond = new RoleCond(); - roleCond.setRoleKey(1L); + roleCond.setRoleKey("User reviewer"); SearchCond simpleCond = SearchCond.getLeafCond(roleCond); assertEquals(simpleCond, SearchCondConverter.convert(fiqlExpression)); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java index d1a3101..d838df7 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RoleDAO.java @@ -23,11 +23,9 @@ import org.apache.syncope.core.persistence.api.entity.Realm; import org.apache.syncope.core.persistence.api.entity.Role; import org.apache.syncope.core.persistence.api.entity.user.User; -public interface RoleDAO extends DAO<Role, Long> { +public interface RoleDAO extends DAO<Role, String> { - Role find(Long key); - - Role find(String name); + Role find(String key); List<Role> findByRealm(Realm realm); @@ -37,7 +35,7 @@ public interface RoleDAO extends DAO<Role, Long> { void delete(Role role); - void delete(Long key); + void delete(String key); void refreshDynMemberships(User user); } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SchemaDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SchemaDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SchemaDAO.java index 9e350fb..64a78fb 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SchemaDAO.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/SchemaDAO.java @@ -18,6 +18,7 @@ */ package org.apache.syncope.core.persistence.api.dao; +import java.util.Collection; import java.util.List; import org.apache.syncope.core.persistence.api.entity.AnyTypeClass; import org.apache.syncope.core.persistence.api.entity.Schema; @@ -26,7 +27,7 @@ public interface SchemaDAO<S extends Schema> extends DAO<S, String> { S find(String name); - List<S> findByAnyTypeClass(AnyTypeClass anyTypeClass); + List<S> findByAnyTypeClasses(Collection<AnyTypeClass> anyTypeClasses); List<S> findAll(); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/RoleCond.java ---------------------------------------------------------------------- diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/RoleCond.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/RoleCond.java index be6688f..0ee7648 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/RoleCond.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/search/RoleCond.java @@ -22,13 +22,13 @@ public class RoleCond extends AbstractSearchCond { private static final long serialVersionUID = 3581958527829522490L; - private Long roleKey; + private String roleKey; - public Long getRoleKey() { + public String getRoleKey() { return roleKey; } - public void setRoleKey(final Long roleKey) { + public void setRoleKey(final String roleKey) { this.roleKey = roleKey; } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Role.java ---------------------------------------------------------------------- diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Role.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Role.java index dba65ae..c26c15b 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Role.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Role.java @@ -22,11 +22,9 @@ import org.apache.syncope.core.persistence.api.entity.user.DynRoleMembership; import java.util.List; import java.util.Set; -public interface Role extends Entity<Long> { +public interface Role extends Entity<String> { - String getName(); - - void setName(String name); + void setKey(String name); Set<String> getEntitlements(); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java index 7b1df89..f5c3922 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java @@ -399,10 +399,8 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea if (any == null) { LOG.error("Could not find {} with id {}, even though returned by the native query", typeKind, actualKey); - } else { - if (!result.contains(any)) { - result.add(any); - } + } else if (!result.contains(any)) { + result.add(any); } } @@ -554,7 +552,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea query.append("SELECT DISTINCT any_id ").append("FROM "). append(svs.role().name).append(" WHERE "). - append("role_id=?").append(setParameter(parameters, cond.getRoleKey())). + append("role_name=?").append(setParameter(parameters, cond.getRoleKey())). append(')'); if (not) { @@ -565,7 +563,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea query.append("SELECT DISTINCT any_id ").append("FROM "). append(svs.dynrolemembership().name).append(" WHERE "). - append("role_id=?").append(setParameter(parameters, cond.getRoleKey())). + append("role_name=?").append(setParameter(parameters, cond.getRoleKey())). append(')'); return query.toString(); @@ -721,20 +719,18 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea append(" WHERE any_id NOT IN (SELECT any_id FROM "). append(svs.nullAttr().name). append(" WHERE schema_name='").append(schema.getKey()).append("')"); + } else if (cond.getType() == AttributeCond.Type.ISNULL) { + query.append(svs.nullAttr().name). + append(" WHERE schema_name='").append(schema.getKey()).append("'"); } else { - if (cond.getType() == AttributeCond.Type.ISNULL) { - query.append(svs.nullAttr().name). - append(" WHERE schema_name='").append(schema.getKey()).append("'"); + if (schema.isUniqueConstraint()) { + query.append(svs.uniqueAttr().name); } else { - if (schema.isUniqueConstraint()) { - query.append(svs.uniqueAttr().name); - } else { - query.append(svs.attr().name); - } - query.append(" WHERE schema_name='").append(schema.getKey()); - - fillAttributeQuery(query, attrValue, schema, cond, not, parameters, svs); + query.append(svs.attr().name); } + query.append(" WHERE schema_name='").append(schema.getKey()); + + fillAttributeQuery(query, attrValue, schema, cond, not, parameters, svs); } return query.toString(); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java index 9a01442..a999e14 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java @@ -18,6 +18,7 @@ */ package org.apache.syncope.core.persistence.jpa.dao; +import java.util.Collections; import java.util.List; import javax.persistence.TypedQuery; import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO; @@ -85,13 +86,13 @@ public class JPAAnyTypeClassDAO extends AbstractDAO<AnyTypeClass, String> implem return; } - for (PlainSchema schema : plainSchemaDAO.findByAnyTypeClass(anyTypeClass)) { + for (PlainSchema schema : plainSchemaDAO.findByAnyTypeClasses(Collections.singletonList(anyTypeClass))) { schema.setAnyTypeClass(null); } - for (DerSchema schema : derSchemaDAO.findByAnyTypeClass(anyTypeClass)) { + for (DerSchema schema : derSchemaDAO.findByAnyTypeClasses(Collections.singletonList(anyTypeClass))) { schema.setAnyTypeClass(null); } - for (VirSchema schema : virSchemaDAO.findByAnyTypeClass(anyTypeClass)) { + for (VirSchema schema : virSchemaDAO.findByAnyTypeClasses(Collections.singletonList(anyTypeClass))) { schema.setAnyTypeClass(null); } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java index 8221493..5b342b2 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java @@ -18,6 +18,7 @@ */ package org.apache.syncope.core.persistence.jpa.dao; +import java.util.Collection; import java.util.List; import javax.persistence.TypedQuery; import org.apache.syncope.common.lib.types.AnyTypeKind; @@ -43,13 +44,16 @@ public class JPADerSchemaDAO extends AbstractDAO<DerSchema, String> implements D } @Override - public List<DerSchema> findByAnyTypeClass(final AnyTypeClass anyTypeClass) { + public List<DerSchema> findByAnyTypeClasses(final Collection<AnyTypeClass> anyTypeClasses) { StringBuilder queryString = new StringBuilder("SELECT e FROM "). append(JPADerSchema.class.getSimpleName()). - append(" e WHERE e.anyTypeClass=:anyTypeClass"); + append(" e WHERE "); + for (AnyTypeClass anyTypeClass : anyTypeClasses) { + queryString.append("e.anyTypeClass.name='").append(anyTypeClass.getKey()).append("' OR"); + } - TypedQuery<DerSchema> query = entityManager().createQuery(queryString.toString(), DerSchema.class); - query.setParameter("anyTypeClass", anyTypeClass); + TypedQuery<DerSchema> query = entityManager().createQuery( + queryString.substring(0, queryString.length() - 3), DerSchema.class); return query.getResultList(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java ---------------------------------------------------------------------- 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 47e8fe3..d6e0315 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 @@ -18,6 +18,7 @@ */ package org.apache.syncope.core.persistence.jpa.dao; +import java.util.Collection; import java.util.List; import javax.persistence.TypedQuery; import org.apache.syncope.common.lib.types.AnyTypeKind; @@ -49,13 +50,16 @@ public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema, String> implemen } @Override - public List<PlainSchema> findByAnyTypeClass(final AnyTypeClass anyTypeClass) { + public List<PlainSchema> findByAnyTypeClasses(final Collection<AnyTypeClass> anyTypeClasses) { StringBuilder queryString = new StringBuilder("SELECT e FROM "). append(JPAPlainSchema.class.getSimpleName()). - append(" e WHERE e.anyTypeClass=:anyTypeClass"); + append(" e WHERE "); + for (AnyTypeClass anyTypeClass : anyTypeClasses) { + queryString.append("e.anyTypeClass.name='").append(anyTypeClass.getKey()).append("' OR"); + } - TypedQuery<PlainSchema> query = entityManager().createQuery(queryString.toString(), PlainSchema.class); - query.setParameter("anyTypeClass", anyTypeClass); + TypedQuery<PlainSchema> query = entityManager().createQuery( + queryString.substring(0, queryString.length() - 3), PlainSchema.class); return query.getResultList(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java ---------------------------------------------------------------------- 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 168241f..4dc1688 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 @@ -19,7 +19,6 @@ package org.apache.syncope.core.persistence.jpa.dao; import java.util.List; -import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.types.AnyTypeKind; @@ -37,33 +36,17 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @Repository -public class JPARoleDAO extends AbstractDAO<Role, Long> implements RoleDAO { +public class JPARoleDAO extends AbstractDAO<Role, String> implements RoleDAO { @Autowired private AnySearchDAO searchDAO; @Override - public Role find(final Long key) { + public Role find(final String key) { return entityManager().find(JPARole.class, key); } @Override - public Role find(final String name) { - TypedQuery<Role> query = entityManager().createQuery( - "SELECT e FROM " + JPARole.class.getSimpleName() + " e WHERE e.name=:name", Role.class); - query.setParameter("name", name); - - Role result = null; - try { - result = query.getSingleResult(); - } catch (NoResultException e) { - LOG.debug("Found more than one match", e); - } - - return result; - } - - @Override public List<Role> findByRealm(final Realm realm) { TypedQuery<Role> query = entityManager().createQuery( "SELECT e FROM " + JPARole.class.getSimpleName() + " e WHERE :realm MEMBER OF e.realms", Role.class); @@ -108,7 +91,7 @@ public class JPARoleDAO extends AbstractDAO<Role, Long> implements RoleDAO { } @Override - public void delete(final Long key) { + public void delete(final String key) { Role role = find(key); if (role == null) { return; http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java ---------------------------------------------------------------------- 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 aa38d77..854b065 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 @@ -18,6 +18,7 @@ */ package org.apache.syncope.core.persistence.jpa.dao; +import java.util.Collection; import java.util.List; import javax.persistence.TypedQuery; import org.apache.syncope.common.lib.types.AnyTypeKind; @@ -45,13 +46,16 @@ public class JPAVirSchemaDAO extends AbstractDAO<VirSchema, String> implements V } @Override - public List<VirSchema> findByAnyTypeClass(final AnyTypeClass anyTypeClass) { + public List<VirSchema> findByAnyTypeClasses(final Collection<AnyTypeClass> anyTypeClasses) { StringBuilder queryString = new StringBuilder("SELECT e FROM "). append(JPAVirSchema.class.getSimpleName()). - append(" e WHERE e.anyTypeClass=:anyTypeClass"); + append(" e WHERE "); + for (AnyTypeClass anyTypeClass : anyTypeClasses) { + queryString.append("e.anyTypeClass.name='").append(anyTypeClass.getKey()).append("' OR"); + } - TypedQuery<VirSchema> query = entityManager().createQuery(queryString.toString(), VirSchema.class); - query.setParameter("anyTypeClass", anyTypeClass); + TypedQuery<VirSchema> query = entityManager().createQuery( + queryString.substring(0, queryString.length() - 3), VirSchema.class); return query.getResultList(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java index 529a606..78d7380 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java @@ -37,37 +37,34 @@ import javax.persistence.ManyToMany; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.validation.Valid; -import javax.validation.constraints.NotNull; import org.apache.syncope.core.persistence.api.entity.user.DynRoleMembership; import org.apache.syncope.core.persistence.api.entity.Realm; import org.apache.syncope.core.persistence.api.entity.Role; +import org.apache.syncope.core.persistence.jpa.validation.entity.RoleCheck; @Entity @Table(name = JPARole.TABLE) @Cacheable -public class JPARole extends AbstractEntity<Long> implements Role { +@RoleCheck +public class JPARole extends AbstractEntity<String> implements Role { private static final long serialVersionUID = -7657701119422588832L; public static final String TABLE = "SyncopeRole"; @Id - private Long id; - - @Column(unique = true) - @NotNull private String name; @ElementCollection(fetch = FetchType.EAGER) @Column(name = "entitlement") @CollectionTable(name = "SyncopeRole_entitlements", joinColumns = - @JoinColumn(name = "role_id", referencedColumnName = "id")) + @JoinColumn(name = "role_name", referencedColumnName = "name")) private Set<String> entitlements = new HashSet<>(); @ManyToMany(fetch = FetchType.EAGER) @JoinTable(joinColumns = - @JoinColumn(name = "role_id"), + @JoinColumn(name = "role_name"), inverseJoinColumns = @JoinColumn(name = "realm_id")) @Valid @@ -78,17 +75,12 @@ public class JPARole extends AbstractEntity<Long> implements Role { private JPADynRoleMembership dynMembership; @Override - public Long getKey() { - return id; - } - - @Override - public String getName() { + public String getKey() { return name; } @Override - public void setName(final String name) { + public void setKey(final String name) { this.name = name; } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java index 26fd229..3626804 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java @@ -92,7 +92,7 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User { @JoinTable(joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = - @JoinColumn(name = "role_id")) + @JoinColumn(name = "role_name")) private List<JPARole> roles = new ArrayList<>(); @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner") @@ -442,8 +442,8 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User { res = passwordHistory.subList(size >= passwordHistory.size() ? 0 : passwordHistory.size() - size, passwordHistory.size()).contains(cipherAlgorithm == null - ? password - : Encryptor.getInstance().encode(password, cipherAlgorithm)); + ? password + : Encryptor.getInstance().encode(password, cipherAlgorithm)); } catch (Exception e) { LOG.error("Error evaluating password history", e); } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java index d328eac..2f97699 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/ExternalResourceValidator.java @@ -189,7 +189,7 @@ public class ExternalResourceValidator extends AbstractValidator<ExternalResourc public boolean isValid(final ExternalResource resource, final ConstraintValidatorContext context) { context.disableDefaultConstraintViolation(); - if (!NAME_PATTERN.matcher(resource.getKey()).matches()) { + if (resource.getKey() == null || !NAME_PATTERN.matcher(resource.getKey()).matches()) { context.buildConstraintViolationWithTemplate( getTemplate(EntityViolationType.InvalidName, "Invalid Resource name")). addPropertyNode("name").addConstraintViolation(); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/RoleCheck.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/RoleCheck.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/RoleCheck.java new file mode 100644 index 0000000..fbb5f0a --- /dev/null +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/RoleCheck.java @@ -0,0 +1,41 @@ +/* + * 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.persistence.jpa.validation.entity; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import javax.validation.Constraint; +import javax.validation.Payload; + +@Target({ ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = RoleValidator.class) +@Documented +public @interface RoleCheck { + + String message() default "{org.apache.syncope.core.persistence.validation.role}"; + + Class<?>[] groups() default {}; + + Class<? extends Payload>[] payload() default {}; +} http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/RoleValidator.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/RoleValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/RoleValidator.java new file mode 100644 index 0000000..29558a0 --- /dev/null +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/RoleValidator.java @@ -0,0 +1,40 @@ +/* + * 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.persistence.jpa.validation.entity; + +import javax.validation.ConstraintValidatorContext; +import org.apache.syncope.common.lib.types.EntityViolationType; +import org.apache.syncope.core.persistence.api.entity.Role; + +public class RoleValidator extends AbstractValidator<RoleCheck, Role> { + + @Override + public boolean isValid(final Role role, final ConstraintValidatorContext context) { + context.disableDefaultConstraintViolation(); + + if (role.getKey() == null || !NAME_PATTERN.matcher(role.getKey()).matches()) { + context.buildConstraintViolationWithTemplate( + getTemplate(EntityViolationType.InvalidName, "Invalid Role name")). + addPropertyNode("name").addConstraintViolation(); + return false; + } + + return true; + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml b/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml index 15ff3aa..a2eb846 100644 --- a/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml +++ b/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml @@ -75,15 +75,6 @@ under the License. </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.JPARole"> - <attributes> - <id name="id"> - <generated-value generator="SEQ_Role" strategy="TABLE"/> - <table-generator name="SEQ_Role" pk-column-value="SEQ_Role" initial-value="100"/> - </id> - </attributes> - </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership"> <attributes> <id name="id"> http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml b/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml index 15ff3aa..a2eb846 100644 --- a/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml +++ b/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml @@ -75,15 +75,6 @@ under the License. </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.JPARole"> - <attributes> - <id name="id"> - <generated-value generator="SEQ_Role" strategy="TABLE"/> - <table-generator name="SEQ_Role" pk-column-value="SEQ_Role" initial-value="100"/> - </id> - </attributes> - </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership"> <attributes> <id name="id"> http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml b/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml index aeb24ee..5b820ff 100644 --- a/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml +++ b/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml @@ -75,15 +75,6 @@ under the License. </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.JPARole"> - <attributes> - <id name="id"> - <generated-value generator="SEQ_Role" strategy="TABLE"/> - <table-generator name="SEQ_Role" pk-column-value="SEQ_Role" initial-value="100"/> - </id> - </attributes> - </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership"> <attributes> <id name="id"> http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/main/resources/views.xml ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/resources/views.xml b/core/persistence-jpa/src/main/resources/views.xml index 2e14834..fd0bf9c 100644 --- a/core/persistence-jpa/src/main/resources/views.xml +++ b/core/persistence-jpa/src/main/resources/views.xml @@ -90,13 +90,13 @@ under the License. <entry key="user_search_role"> CREATE VIEW user_search_role AS - SELECT ss.user_id AS any_id, ss.role_id AS role_id + SELECT ss.user_id AS any_id, ss.role_name AS role_name FROM SyncopeUser_SyncopeRole ss </entry> <entry key="user_search_dynrmemb"> CREATE VIEW user_search_dynrmemb AS - SELECT ds.user_id AS any_id, d.role_id AS role_id + SELECT ds.user_id AS any_id, d.role_name AS role_name FROM DynRoleMembership d, DynRoleMembership_User ds WHERE d.id = ds.dynRoleMembership_id </entry> http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java index b5f99ce..5c8dde9 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java @@ -91,7 +91,7 @@ public class AnySearchTest extends AbstractTest { assertTrue(searchDAO.matches(user, SearchCond.getLeafCond(groupCond), AnyTypeKind.USER)); RoleCond roleCond = new RoleCond(); - roleCond.setRoleKey(3L); + roleCond.setRoleKey("Other"); assertTrue(searchDAO.matches(user, SearchCond.getLeafCond(roleCond), AnyTypeKind.USER)); } @@ -228,7 +228,7 @@ public class AnySearchTest extends AbstractTest { @Test public void searchByRole() { RoleCond roleCond = new RoleCond(); - roleCond.setRoleKey(3L); + roleCond.setRoleKey("Other"); List<User> users = searchDAO.search(SyncopeConstants.FULL_ADMIN_REALMS, SearchCond.getLeafCond(roleCond), AnyTypeKind.USER); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java index b57e713..ce2039a 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RoleTest.java @@ -45,15 +45,12 @@ public class RoleTest extends AbstractTest { @Test public void find() { - Role role1 = roleDAO.find(2L); - assertNotNull(role1); - assertNotNull(role1.getName()); - assertFalse(role1.getRealms().isEmpty()); - assertFalse(role1.getEntitlements().isEmpty()); - assertTrue(role1.getEntitlements().contains(StandardEntitlement.USER_LIST)); - - Role role2 = roleDAO.find(role1.getName()); - assertEquals(role1, role2); + Role role = roleDAO.find("User manager"); + assertNotNull(role); + assertNotNull(role.getKey()); + assertFalse(role.getRealms().isEmpty()); + assertFalse(role.getEntitlements().isEmpty()); + assertTrue(role.getEntitlements().contains(StandardEntitlement.USER_LIST)); } @Test @@ -69,7 +66,7 @@ public class RoleTest extends AbstractTest { @Test public void save() { Role role = entityFactory.newEntity(Role.class); - role.setName("new"); + role.setKey("new"); role.add(realmDAO.getRoot()); role.add(realmDAO.find("/even/two")); role.getEntitlements().add(StandardEntitlement.LOG_LIST); @@ -81,9 +78,9 @@ public class RoleTest extends AbstractTest { @Test public void delete() { - assertNotNull(roleDAO.find(3L)); + assertNotNull(roleDAO.find("Other")); - roleDAO.delete(3L); - assertNull(roleDAO.find(3L)); + roleDAO.delete("Other"); + assertNull(roleDAO.find("Other")); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java index 24a4e7e..001a984 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnySearchTest.java @@ -85,7 +85,7 @@ public class AnySearchTest extends AbstractTest { public void searchByDynMembership() { // 1. create role with dynamic membership Role role = entityFactory.newEntity(Role.class); - role.setName("new"); + role.setKey("new"); role.add(realmDAO.getRoot()); role.add(realmDAO.find("/even/two")); role.getEntitlements().add(StandardEntitlement.LOG_LIST); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java index 5bf1b83..2b67e6a 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RealmTest.java @@ -45,7 +45,7 @@ public class RealmTest extends AbstractTest { Realm realm = realmDAO.find("/odd"); assertNotNull(realm); - Role role = roleDAO.find(1L); + Role role = roleDAO.find("User reviewer"); assertTrue(role.getRealms().contains(realm)); int beforeSize = role.getRealms().size(); @@ -54,7 +54,7 @@ public class RealmTest extends AbstractTest { realmDAO.flush(); - role = roleDAO.find(1L); + role = roleDAO.find("User reviewer"); assertEquals(beforeSize - 1, role.getRealms().size()); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java index bff367e..a3a4ea6 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java @@ -98,7 +98,7 @@ public class RoleTest extends AbstractTest { // 1. create role with dynamic membership Role role = entityFactory.newEntity(Role.class); - role.setName("new"); + role.setKey("new"); role.add(realmDAO.getRoot()); role.add(realmDAO.find("/even/two")); role.getEntitlements().add(StandardEntitlement.LOG_LIST); @@ -165,7 +165,7 @@ public class RoleTest extends AbstractTest { public void delete() { // 0. create role Role role = entityFactory.newEntity(Role.class); - role.setName("new"); + role.setKey("new"); role.add(realmDAO.getRoot()); role.add(realmDAO.find("/even/two")); role.getEntitlements().add(StandardEntitlement.LOG_LIST); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/persistence-jpa/src/test/resources/domains/MasterContent.xml ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml index 73fee53..b0a1a1a 100644 --- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml +++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml @@ -8,7 +8,7 @@ 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 + 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 @@ -170,37 +170,37 @@ under the License. <ARelationship id="1" left_anyObject_id="1" right_anyObject_id="2" type_name="neighborhood"/> - <SyncopeRole id="1" name="User reviewer"/> - <SyncopeRole_entitlements entitlement="USER_READ" role_id="1"/> - <SyncopeRole_entitlements entitlement="USER_LIST" role_id="1"/> - <SyncopeRole_entitlements entitlement="USER_SEARCH" role_id="1"/> - <SyncopeRole_Realm role_id="1" realm_id="2"/> - <SyncopeRole_Realm role_id="1" realm_id="3"/> + <SyncopeRole name="User reviewer"/> + <SyncopeRole_entitlements entitlement="USER_READ" role_name="User reviewer"/> + <SyncopeRole_entitlements entitlement="USER_LIST" role_name="User reviewer"/> + <SyncopeRole_entitlements entitlement="USER_SEARCH" role_name="User reviewer"/> + <SyncopeRole_Realm role_name="User reviewer" realm_id="2"/> + <SyncopeRole_Realm role_name="User reviewer" realm_id="3"/> - <SyncopeRole id="2" name="User manager"/> - <SyncopeRole_entitlements entitlement="USER_READ" role_id="2"/> - <SyncopeRole_entitlements entitlement="USER_LIST" role_id="2"/> - <SyncopeRole_entitlements entitlement="USER_SEARCH" role_id="2"/> - <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_id="2"/> - <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_SUBMIT" role_id="2"/> - <SyncopeRole_Realm role_id="2" realm_id="1"/> + <SyncopeRole name="User manager"/> + <SyncopeRole_entitlements entitlement="USER_READ" role_name="User manager"/> + <SyncopeRole_entitlements entitlement="USER_LIST" role_name="User manager"/> + <SyncopeRole_entitlements entitlement="USER_SEARCH" role_name="User manager"/> + <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_name="User manager"/> + <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_SUBMIT" role_name="User manager"/> + <SyncopeRole_Realm role_name="User manager" realm_id="1"/> - <SyncopeRole id="3" name="Other"/> - <SyncopeRole_entitlements entitlement="SCHEMA_READ" role_id="3"/> - <SyncopeRole_entitlements entitlement="GROUP_READ" role_id="3"/> - <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_id="3"/> - <SyncopeRole_Realm role_id="3" realm_id="2"/> + <SyncopeRole name="Other"/> + <SyncopeRole_entitlements entitlement="SCHEMA_READ" role_name="Other"/> + <SyncopeRole_entitlements entitlement="GROUP_READ" role_name="Other"/> + <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_name="Other"/> + <SyncopeRole_Realm role_name="Other" realm_id="2"/> - <SyncopeRole id="4" name="Search for /even/two"/> - <SyncopeRole_entitlements entitlement="USER_READ" role_id="4"/> - <SyncopeRole_entitlements entitlement="USER_SEARCH" role_id="4"/> - <SyncopeRole_Realm role_id="4" realm_id="4"/> + <SyncopeRole name="Search for /even/two"/> + <SyncopeRole_entitlements entitlement="USER_READ" role_name="Search for /even/two"/> + <SyncopeRole_entitlements entitlement="USER_SEARCH" role_name="Search for /even/two"/> + <SyncopeRole_Realm role_name="Search for /even/two" realm_id="4"/> <SyncopeUser id="1" workflowId="4" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1" realm_id="3" username="rossini" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/> - <SyncopeUser_SyncopeRole user_id="1" role_id="3"/> + <SyncopeUser_SyncopeRole user_id="1" role_name="Other"/> <SyncopeUser id="2" workflowId="6" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1" realm_id="1" username="verdi" creator="admin" lastModifier="admin" @@ -213,13 +213,13 @@ under the License. realm_id="1" username="bellini" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/> - <SyncopeUser_SyncopeRole user_id="4" role_id="1"/> - <SyncopeUser_SyncopeRole user_id="4" role_id="2"/> + <SyncopeUser_SyncopeRole user_id="4" role_name="User reviewer"/> + <SyncopeUser_SyncopeRole user_id="4" role_name="User manager"/> <SyncopeUser id="5" workflowId="12" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1" realm_id="1" username="puccini" creator="admin" lastModifier="admin" creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/> - <SyncopeUser_SyncopeRole user_id="5" role_id="4"/> + <SyncopeUser_SyncopeRole user_id="5" role_name="Search for /even/two"/> <SyncopeGroup id="1" name="root" realm_id="1" @@ -1110,4 +1110,4 @@ under the License. <SyncopeLogger logName="syncope.audit.[REST]:[EntitlementLogic]:[]:[getOwn]:[SUCCESS]" logLevel="DEBUG" logType="AUDIT"/> <SecurityQuestion id="1" content="What's your mother's maiden name?"/> -</dataset> +</dataset> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeClassDataBinderImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeClassDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeClassDataBinderImpl.java index 8a33e12..047633d 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeClassDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeClassDataBinderImpl.java @@ -18,6 +18,7 @@ */ package org.apache.syncope.core.provisioning.java.data; +import java.util.Collections; import org.apache.syncope.common.lib.to.AnyTypeClassTO; import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO; import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO; @@ -63,7 +64,7 @@ public class AnyTypeClassDataBinderImpl implements AnyTypeClassDataBinder { anyTypeClass.setKey(anyTypeClassTO.getKey()); } - for (PlainSchema schema : plainSchemaDAO.findByAnyTypeClass(anyTypeClass)) { + for (PlainSchema schema : plainSchemaDAO.findByAnyTypeClasses(Collections.singletonList(anyTypeClass))) { schema.setAnyTypeClass(null); } @@ -78,7 +79,7 @@ public class AnyTypeClassDataBinderImpl implements AnyTypeClassDataBinder { } } - for (DerSchema schema : derSchemaDAO.findByAnyTypeClass(anyTypeClass)) { + for (DerSchema schema : derSchemaDAO.findByAnyTypeClasses(Collections.singletonList(anyTypeClass))) { schema.setAnyTypeClass(null); } @@ -93,7 +94,7 @@ public class AnyTypeClassDataBinderImpl implements AnyTypeClassDataBinder { } } - for (VirSchema schema : virSchemaDAO.findByAnyTypeClass(anyTypeClass)) { + for (VirSchema schema : virSchemaDAO.findByAnyTypeClasses(Collections.singletonList(anyTypeClass))) { schema.setAnyTypeClass(null); } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java index 542b07c..1bef90e 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java @@ -75,7 +75,7 @@ public class RoleDataBinderImpl implements RoleDataBinder { @Override public void update(final Role role, final RoleTO roleTO) { - role.setName(roleTO.getName()); + role.setKey(roleTO.getKey()); role.getEntitlements().clear(); role.getEntitlements().addAll(roleTO.getEntitlements()); @@ -93,17 +93,15 @@ public class RoleDataBinderImpl implements RoleDataBinder { // dynamic membership if (role.getKey() == null && roleTO.getDynMembershipCond() != null) { setDynMembership(role, roleTO.getDynMembershipCond()); - } else { - if (role.getDynMembership() != null && roleTO.getDynMembershipCond() == null) { - role.setDynMembership(null); - } else if (role.getDynMembership() == null && roleTO.getDynMembershipCond() != null) { - setDynMembership(role, roleTO.getDynMembershipCond()); - } else if (role.getDynMembership() != null && roleTO.getDynMembershipCond() != null - && !role.getDynMembership().getFIQLCond().equals(roleTO.getDynMembershipCond())) { - - role.getDynMembership().getMembers().clear(); - setDynMembership(role, roleTO.getDynMembershipCond()); - } + } else if (role.getDynMembership() != null && roleTO.getDynMembershipCond() == null) { + role.setDynMembership(null); + } else if (role.getDynMembership() == null && roleTO.getDynMembershipCond() != null) { + setDynMembership(role, roleTO.getDynMembershipCond()); + } else if (role.getDynMembership() != null && roleTO.getDynMembershipCond() != null + && !role.getDynMembership().getFIQLCond().equals(roleTO.getDynMembershipCond())) { + + role.getDynMembership().getMembers().clear(); + setDynMembership(role, roleTO.getDynMembershipCond()); } } @@ -112,7 +110,6 @@ public class RoleDataBinderImpl implements RoleDataBinder { RoleTO roleTO = new RoleTO(); roleTO.setKey(role.getKey()); - roleTO.setName(role.getName()); roleTO.getEntitlements().addAll(role.getEntitlements()); CollectionUtils.collect(role.getRealms(), new Transformer<Realm, String>() { http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java ---------------------------------------------------------------------- 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 5bf13c5..ca3448c 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 @@ -32,10 +32,10 @@ import org.apache.commons.collections4.Transformer; import org.apache.commons.lang3.StringUtils; import org.apache.syncope.common.lib.SyncopeClientCompositeException; import org.apache.syncope.common.lib.SyncopeClientException; -import org.apache.syncope.common.lib.patch.LongPatchItem; import org.apache.syncope.common.lib.patch.MembershipPatch; import org.apache.syncope.common.lib.patch.PasswordPatch; import org.apache.syncope.common.lib.patch.RelationshipPatch; +import org.apache.syncope.common.lib.patch.StringPatchItem; import org.apache.syncope.common.lib.patch.UserPatch; import org.apache.syncope.common.lib.to.MembershipTO; import org.apache.syncope.common.lib.to.RelationshipTO; @@ -164,7 +164,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat SyncopeClientCompositeException scce = SyncopeClientException.buildComposite(); // roles - for (Long roleKey : userTO.getRoles()) { + for (String roleKey : userTO.getRoles()) { Role role = roleDAO.find(roleKey); if (role == null) { LOG.warn("Ignoring unknown role with id {}", roleKey); @@ -317,7 +317,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat } // roles - for (LongPatchItem patch : userPatch.getRoles()) { + for (StringPatchItem patch : userPatch.getRoles()) { Role role = roleDAO.find(patch.getValue()); if (role == null) { LOG.warn("Ignoring unknown role with key {}", patch.getValue()); @@ -452,10 +452,10 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat if (details) { // roles - CollectionUtils.collect(user.getRoles(), new Transformer<Role, Long>() { + CollectionUtils.collect(user.getRoles(), new Transformer<Role, String>() { @Override - public Long transform(final Role role) { + public String transform(final Role role) { return role.getKey(); } }, userTO.getRoles()); @@ -480,10 +480,10 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat }, userTO.getMemberships()); // dynamic memberships - CollectionUtils.collect(userDAO.findDynRoleMemberships(user), new Transformer<Role, Long>() { + CollectionUtils.collect(userDAO.findDynRoleMemberships(user), new Transformer<Role, String>() { @Override - public Long transform(final Role role) { + public String transform(final Role role) { return role.getKey(); } }, userTO.getDynRoles()); http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RoleServiceImpl.java ---------------------------------------------------------------------- diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RoleServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RoleServiceImpl.java index 006767c..1eec4a3 100644 --- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RoleServiceImpl.java +++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RoleServiceImpl.java @@ -40,14 +40,14 @@ public class RoleServiceImpl extends AbstractServiceImpl implements RoleService } @Override - public RoleTO read(final Long roleKey) { - return logic.read(roleKey); + public RoleTO read(final String key) { + return logic.read(key); } @Override public Response create(final RoleTO roleTO) { RoleTO created = logic.create(roleTO); - URI location = uriInfo.getAbsolutePathBuilder().path(String.valueOf(created.getKey())).build(); + URI location = uriInfo.getAbsolutePathBuilder().path(created.getKey()).build(); return Response.created(location). header(RESTHeaders.RESOURCE_KEY, created.getKey()). build(); @@ -59,8 +59,8 @@ public class RoleServiceImpl extends AbstractServiceImpl implements RoleService } @Override - public void delete(final Long roleKey) { - logic.delete(roleKey); + public void delete(final String key) { + logic.delete(key); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SchemaServiceImpl.java ---------------------------------------------------------------------- diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SchemaServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SchemaServiceImpl.java index 07d84fb..fc98926 100644 --- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SchemaServiceImpl.java +++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/SchemaServiceImpl.java @@ -24,6 +24,7 @@ import javax.ws.rs.core.Response; import org.apache.syncope.common.lib.to.AbstractSchemaTO; import org.apache.syncope.common.lib.types.SchemaType; import org.apache.syncope.common.rest.api.RESTHeaders; +import org.apache.syncope.common.rest.api.beans.SchemaQuery; import org.apache.syncope.common.rest.api.service.SchemaService; import org.apache.syncope.core.logic.SchemaLogic; import org.springframework.beans.factory.annotation.Autowired; @@ -51,8 +52,8 @@ public class SchemaServiceImpl extends AbstractServiceImpl implements SchemaServ } @Override - public <T extends AbstractSchemaTO> List<T> list(final SchemaType schemaType, final String anyTypeClass) { - return logic.list(schemaType, anyTypeClass); + public <T extends AbstractSchemaTO> List<T> list(final SchemaType schemaType, final SchemaQuery query) { + return logic.list(schemaType, query.getAnyTypeClasses()); } @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/b738d3e9/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java index c118224..2d98fd8 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractTaskITCase.java @@ -35,13 +35,13 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; -import org.apache.syncope.client.lib.SyncopeClient; import org.apache.syncope.common.lib.to.AbstractTaskTO; import org.apache.syncope.common.lib.to.NotificationTaskTO; import org.apache.syncope.common.lib.to.PagedResult; import org.apache.syncope.common.lib.to.TaskExecTO; import org.apache.syncope.common.lib.to.UserTO; import org.apache.syncope.common.lib.types.TaskType; +import org.apache.syncope.common.rest.api.beans.TaskQuery; import org.apache.syncope.common.rest.api.service.TaskService; import org.apache.syncope.core.logic.notification.NotificationJob; @@ -166,7 +166,7 @@ public abstract class AbstractTaskITCase extends AbstractITCase { protected NotificationTaskTO findNotificationTaskBySender(final String sender) { PagedResult<NotificationTaskTO> tasks = - taskService.list(TaskType.NOTIFICATION, SyncopeClient.getTaskQueryBuilder().build()); + taskService.list(TaskType.NOTIFICATION, new TaskQuery.Builder().build()); assertNotNull(tasks); assertFalse(tasks.getResult().isEmpty());
