http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java index 5c820fb..566739d 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java @@ -28,8 +28,8 @@ import org.apache.syncope.core.persistence.api.entity.PlainAttr; import org.apache.syncope.core.persistence.api.entity.PlainSchema; import org.apache.syncope.core.persistence.api.entity.user.UPlainAttr; import org.apache.syncope.core.persistence.api.entity.user.UPlainAttrUniqueValue; -import org.apache.syncope.core.persistence.api.entity.user.UPlainSchema; import org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue; +import org.apache.syncope.core.persistence.jpa.entity.JPAPlainSchema; @Entity @Table(name = JPAUPlainAttrUniqueValue.TABLE) @@ -47,7 +47,7 @@ public class JPAUPlainAttrUniqueValue extends AbstractPlainAttrValue implements @ManyToOne(optional = false) @JoinColumn(name = "schema_name") - private JPAUPlainSchema schema; + private JPAPlainSchema schema; @Override public Long getKey() { @@ -66,14 +66,14 @@ public class JPAUPlainAttrUniqueValue extends AbstractPlainAttrValue implements } @Override - public UPlainSchema getSchema() { + public PlainSchema getSchema() { return schema; } @Override public void setSchema(final PlainSchema schema) { - checkType(schema, JPAUPlainSchema.class); - this.schema = (JPAUPlainSchema) schema; + checkType(schema, JPAPlainSchema.class); + this.schema = (JPAPlainSchema) schema; } }
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainSchema.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainSchema.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainSchema.java deleted file mode 100644 index c5b8dac..0000000 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainSchema.java +++ /dev/null @@ -1,36 +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.persistence.jpa.entity.user; - -import javax.persistence.Cacheable; -import javax.persistence.Entity; -import javax.persistence.Table; -import org.apache.syncope.core.persistence.api.entity.user.UPlainSchema; -import org.apache.syncope.core.persistence.jpa.entity.AbstractPlainSchema; - -@Entity -@Table(name = JPAUPlainSchema.TABLE) -@Cacheable -public class JPAUPlainSchema extends AbstractPlainSchema implements UPlainSchema { - - public static final String TABLE = "UPlainSchema"; - - private static final long serialVersionUID = -7272127460142463237L; - -} http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java new file mode 100644 index 0000000..d4c8bb3 --- /dev/null +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java @@ -0,0 +1,78 @@ +/* + * 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.entity.user; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject; +import org.apache.syncope.core.persistence.api.entity.user.URelationship; +import org.apache.syncope.core.persistence.api.entity.user.User; +import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity; +import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAnyObject; + +@Entity +@Table(name = JPAURelationship.TABLE) +public class JPAURelationship extends AbstractEntity<Long> implements URelationship { + + private static final long serialVersionUID = 2778494939240083204L; + + public static final String TABLE = "URelationship"; + + @Id + private Long id; + + @ManyToOne + @Column(name = "user_id") + private JPAUser leftEnd; + + @ManyToOne + @Column(name = "anyObject_id") + private JPAAnyObject rightEnd; + + @Override + public Long getKey() { + return id; + } + + @Override + public JPAUser getLeftEnd() { + return leftEnd; + } + + @Override + public void setLeftEnd(final User leftEnd) { + checkType(leftEnd, JPAUser.class); + this.leftEnd = (JPAUser) leftEnd; + } + + @Override + public AnyObject getRightEnd() { + return rightEnd; + } + + @Override + public void setRightEnd(final AnyObject rightEnd) { + checkType(rightEnd, JPAAnyObject.class); + this.rightEnd = (JPAAnyObject) rightEnd; + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUVirAttr.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUVirAttr.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUVirAttr.java index c68280d..52a168e 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUVirAttr.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUVirAttr.java @@ -19,19 +19,15 @@ package org.apache.syncope.core.persistence.jpa.entity.user; import javax.persistence.Entity; -import javax.persistence.FetchType; import javax.persistence.ManyToOne; import javax.persistence.Table; -import org.apache.syncope.core.persistence.api.entity.Attributable; -import org.apache.syncope.core.persistence.api.entity.VirSchema; import org.apache.syncope.core.persistence.api.entity.user.UVirAttr; -import org.apache.syncope.core.persistence.api.entity.user.UVirSchema; import org.apache.syncope.core.persistence.api.entity.user.User; import org.apache.syncope.core.persistence.jpa.entity.AbstractVirAttr; @Entity @Table(name = JPAUVirAttr.TABLE) -public class JPAUVirAttr extends AbstractVirAttr implements UVirAttr { +public class JPAUVirAttr extends AbstractVirAttr<User> implements UVirAttr { private static final long serialVersionUID = 2943450934283989741L; @@ -40,28 +36,15 @@ public class JPAUVirAttr extends AbstractVirAttr implements UVirAttr { @ManyToOne private JPAUser owner; - @ManyToOne(fetch = FetchType.EAGER) - private JPAUVirSchema virSchema; - @Override public User getOwner() { return owner; } @Override - public void setOwner(final Attributable<?, ?, ?> owner) { + public void setOwner(final User owner) { checkType(owner, JPAUser.class); this.owner = (JPAUser) owner; } - @Override - public UVirSchema getSchema() { - return virSchema; - } - - @Override - public void setSchema(final VirSchema virSchema) { - checkType(virSchema, JPAUVirSchema.class); - this.virSchema = (JPAUVirSchema) virSchema; - } } http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUVirSchema.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUVirSchema.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUVirSchema.java deleted file mode 100644 index 307dd46..0000000 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUVirSchema.java +++ /dev/null @@ -1,36 +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.persistence.jpa.entity.user; - -import javax.persistence.Cacheable; -import javax.persistence.Entity; -import javax.persistence.Table; -import org.apache.syncope.core.persistence.api.entity.user.UVirSchema; -import org.apache.syncope.core.persistence.jpa.entity.AbstractVirSchema; - -@Entity -@Table(name = JPAUVirSchema.TABLE) -@Cacheable -public class JPAUVirSchema extends AbstractVirSchema implements UVirSchema { - - private static final long serialVersionUID = 1089308700791426201L; - - public static final String TABLE = "UVirSchema"; - -} http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/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 029c96b..f9c0c81 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 @@ -20,11 +20,8 @@ package org.apache.syncope.core.persistence.jpa.entity.user; import java.util.ArrayList; import java.util.Calendar; -import java.util.Collection; import java.util.Date; -import java.util.HashSet; import java.util.List; -import java.util.Set; import javax.persistence.Basic; import javax.persistence.Cacheable; import javax.persistence.CascadeType; @@ -52,29 +49,34 @@ import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; -import org.apache.commons.collections4.Transformer; import org.apache.syncope.common.lib.types.CipherAlgorithm; -import org.apache.syncope.core.persistence.api.entity.membership.Membership; import org.apache.syncope.core.persistence.api.entity.user.SecurityQuestion; import org.apache.syncope.core.persistence.api.entity.user.UDerAttr; import org.apache.syncope.core.persistence.api.entity.user.UPlainAttr; import org.apache.syncope.core.persistence.api.entity.user.UVirAttr; import org.apache.syncope.core.persistence.api.entity.user.User; import org.apache.syncope.core.persistence.jpa.validation.entity.UserCheck; -import org.apache.syncope.core.persistence.jpa.entity.AbstractSubject; -import org.apache.syncope.core.persistence.jpa.entity.JPAExternalResource; +import org.apache.syncope.core.persistence.jpa.entity.resource.JPAExternalResource; import org.apache.syncope.core.persistence.jpa.entity.JPASecurityQuestion; -import org.apache.syncope.core.persistence.jpa.entity.membership.JPAMembership; import org.apache.syncope.core.misc.security.Encryptor; import org.apache.syncope.core.misc.security.SecureRandomUtils; +import org.apache.syncope.core.misc.spring.ApplicationContextProvider; +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.AnyTypeClass; import org.apache.syncope.core.persistence.api.entity.Role; +import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject; +import org.apache.syncope.core.persistence.api.entity.user.UMembership; +import org.apache.syncope.core.persistence.api.entity.user.URelationship; +import org.apache.syncope.core.persistence.jpa.entity.AbstractAny; +import org.apache.syncope.core.persistence.jpa.entity.JPAAnyTypeClass; import org.apache.syncope.core.persistence.jpa.entity.JPARole; @Entity @Table(name = JPAUser.TABLE) @Cacheable @UserCheck -public class JPAUser extends AbstractSubject<UPlainAttr, UDerAttr, UVirAttr> implements User { +public class JPAUser extends AbstractAny<UPlainAttr, UDerAttr, UVirAttr> implements User { private static final long serialVersionUID = -3905046855521446823L; @@ -96,21 +98,17 @@ public class JPAUser extends AbstractSubject<UPlainAttr, UDerAttr, UVirAttr> imp @JoinColumn(name = "role_id")) private List<JPARole> roles; - @OneToMany(cascade = CascadeType.MERGE, mappedBy = "user") - @Valid - private List<JPAMembership> memberships; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner") @Valid - private List<JPAUPlainAttr> plainAttrs; + private List<JPAUPlainAttr> plainAttrs = new ArrayList<>(); @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner") @Valid - private List<JPAUDerAttr> derAttrs; + private List<JPAUDerAttr> derAttrs = new ArrayList<>(); @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner") @Valid - private List<JPAUVirAttr> virAttrs; + private List<JPAUVirAttr> virAttrs = new ArrayList<>(); private String workflowId; @@ -130,7 +128,7 @@ public class JPAUser extends AbstractSubject<UPlainAttr, UDerAttr, UVirAttr> imp @ElementCollection @Column(name = "passwordHistoryValue") @CollectionTable(name = "SyncopeUser_passwordHistory", joinColumns = - @JoinColumn(name = "SyncopeUser_id", referencedColumnName = "id")) + @JoinColumn(name = "user_id", referencedColumnName = "id")) private List<String> passwordHistory; /** @@ -174,7 +172,22 @@ public class JPAUser extends AbstractSubject<UPlainAttr, UDerAttr, UVirAttr> imp inverseJoinColumns = @JoinColumn(name = "resource_name")) @Valid - private Set<JPAExternalResource> resources; + private List<JPAExternalResource> resources = new ArrayList<>(); + + @ManyToMany(fetch = FetchType.EAGER) + @JoinTable(joinColumns = + @JoinColumn(name = "user_id"), + inverseJoinColumns = + @JoinColumn(name = "anyTypeClass_name")) + private List<JPAAnyTypeClass> auxClasses = new ArrayList<>(); + + @OneToMany(cascade = CascadeType.ALL, mappedBy = "leftEnd") + @Valid + private List<JPAURelationship> relationships = new ArrayList<>(); + + @OneToMany(cascade = CascadeType.ALL, mappedBy = "leftEnd") + @Valid + private List<JPAUMembership> memberships = new ArrayList<>(); @ManyToOne(fetch = FetchType.EAGER) private JPASecurityQuestion securityQuestion; @@ -187,13 +200,9 @@ public class JPAUser extends AbstractSubject<UPlainAttr, UDerAttr, UVirAttr> imp roles = new ArrayList<>(); memberships = new ArrayList<>(); - plainAttrs = new ArrayList<>(); - derAttrs = new ArrayList<>(); - virAttrs = new ArrayList<>(); passwordHistory = new ArrayList<>(); failedLogins = 0; suspended = getBooleanAsInteger(Boolean.FALSE); - resources = new HashSet<>(); } @Override @@ -202,18 +211,28 @@ public class JPAUser extends AbstractSubject<UPlainAttr, UDerAttr, UVirAttr> imp } @Override - protected Set<JPAExternalResource> internalGetResources() { + public AnyType getType() { + return ApplicationContextProvider.getApplicationContext().getBean(AnyTypeDAO.class).findUser(); + } + + @Override + public void setType(final AnyType type) { + // nothing to do + } + + @Override + protected List<JPAExternalResource> internalGetResources() { return resources; } @Override - public boolean addRole(final Role role) { + public boolean add(final Role role) { checkType(role, JPARole.class); return roles.contains((JPARole) role) || roles.add((JPARole) role); } @Override - public boolean removeRole(final Role role) { + public boolean remove(final Role role) { checkType(role, JPARole.class); return roles.remove((JPARole) role); } @@ -224,45 +243,6 @@ public class JPAUser extends AbstractSubject<UPlainAttr, UDerAttr, UVirAttr> imp } @Override - public boolean addMembership(final Membership membership) { - checkType(membership, JPAMembership.class); - return memberships.contains((JPAMembership) membership) || memberships.add((JPAMembership) membership); - } - - @Override - public boolean removeMembership(final Membership membership) { - checkType(membership, JPAMembership.class); - return memberships.remove((JPAMembership) membership); - } - - @Override - public Membership getMembership(final Long groupKey) { - return CollectionUtils.find(getMemberships(), new Predicate<Membership>() { - - @Override - public boolean evaluate(final Membership membership) { - return membership.getGroup() != null && groupKey.equals(membership.getGroup().getKey()); - } - }); - } - - @Override - public List<? extends Membership> getMemberships() { - return memberships; - } - - @Override - public Collection<Long> getStaticGroupKeys() { - return CollectionUtils.collect(memberships, new Transformer<Membership, Long>() { - - @Override - public Long transform(final Membership membership) { - return membership.getGroup().getKey(); - } - }, new HashSet<Long>()); - } - - @Override public String getPassword() { return password; } @@ -309,13 +289,13 @@ public class JPAUser extends AbstractSubject<UPlainAttr, UDerAttr, UVirAttr> imp } @Override - public boolean addPlainAttr(final UPlainAttr attr) { + public boolean add(final UPlainAttr attr) { checkType(attr, JPAUPlainAttr.class); return plainAttrs.add((JPAUPlainAttr) attr); } @Override - public boolean removePlainAttr(final UPlainAttr attr) { + public boolean remove(final UPlainAttr attr) { checkType(attr, JPAUPlainAttr.class); return plainAttrs.remove((JPAUPlainAttr) attr); } @@ -326,13 +306,13 @@ public class JPAUser extends AbstractSubject<UPlainAttr, UDerAttr, UVirAttr> imp } @Override - public boolean addDerAttr(final UDerAttr attr) { + public boolean add(final UDerAttr attr) { checkType(attr, JPAUDerAttr.class); return derAttrs.add((JPAUDerAttr) attr); } @Override - public boolean removeDerAttr(final UDerAttr attr) { + public boolean remove(final UDerAttr attr) { checkType(attr, JPAUDerAttr.class); return derAttrs.remove((JPAUDerAttr) attr); } @@ -343,13 +323,13 @@ public class JPAUser extends AbstractSubject<UPlainAttr, UDerAttr, UVirAttr> imp } @Override - public boolean addVirAttr(final UVirAttr attr) { + public boolean add(final UVirAttr attr) { checkType(attr, JPAUVirAttr.class); return virAttrs.add((JPAUVirAttr) attr); } @Override - public boolean removeVirAttr(final UVirAttr attr) { + public boolean remove(final UVirAttr attr) { checkType(attr, JPAUVirAttr.class); return virAttrs.remove((JPAUVirAttr) attr); } @@ -528,4 +508,76 @@ public class JPAUser extends AbstractSubject<UPlainAttr, UDerAttr, UVirAttr> imp this.securityAnswer = securityAnswer; } + @Override + public boolean add(final AnyTypeClass auxClass) { + checkType(auxClass, JPAAnyTypeClass.class); + return this.auxClasses.add((JPAAnyTypeClass) auxClass); + } + + @Override + public boolean remove(final AnyTypeClass auxClass) { + checkType(auxClass, JPAAnyTypeClass.class); + return this.auxClasses.remove((JPAAnyTypeClass) auxClass); + } + + @Override + public List<? extends AnyTypeClass> getAuxClasses() { + return auxClasses; + } + + @Override + public boolean add(final URelationship relationship) { + checkType(relationship, JPAURelationship.class); + return this.relationships.add((JPAURelationship) relationship); + } + + @Override + public boolean remove(final URelationship relationship) { + checkType(relationship, JPAURelationship.class); + return this.relationships.remove((JPAURelationship) relationship); + } + + @Override + public URelationship getRelationship(final AnyObject rightEnd) { + return CollectionUtils.find(getRelationships(), new Predicate<URelationship>() { + + @Override + public boolean evaluate(final URelationship relationship) { + return rightEnd != null && rightEnd.equals(relationship.getRightEnd()); + } + }); + } + + @Override + public List<? extends URelationship> getRelationships() { + return relationships; + } + + @Override + public boolean add(final UMembership membership) { + checkType(membership, JPAUMembership.class); + return this.memberships.add((JPAUMembership) membership); + } + + @Override + public boolean remove(final UMembership membership) { + checkType(membership, JPAUMembership.class); + return this.memberships.remove((JPAUMembership) membership); + } + + @Override + public UMembership getMembership(final Long groupKey) { + return CollectionUtils.find(getMemberships(), new Predicate<UMembership>() { + + @Override + public boolean evaluate(final UMembership membership) { + return groupKey != null && groupKey.equals(membership.getRightEnd().getKey()); + } + }); + } + + @Override + public List<? extends UMembership> getMemberships() { + return memberships; + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java index a22359e..b7616c7 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/EntityValidationListener.java @@ -27,12 +27,11 @@ import org.apache.commons.lang3.ClassUtils; import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException; import org.apache.syncope.core.misc.spring.ApplicationContextProvider; import org.apache.syncope.core.persistence.api.entity.AnnotatedEntity; +import org.apache.syncope.core.persistence.api.entity.Any; import org.apache.syncope.core.persistence.api.entity.Attr; -import org.apache.syncope.core.persistence.api.entity.Attributable; import org.apache.syncope.core.persistence.api.entity.Entity; import org.apache.syncope.core.persistence.api.entity.Policy; import org.apache.syncope.core.persistence.api.entity.Schema; -import org.apache.syncope.core.persistence.api.entity.Subject; import org.apache.syncope.core.persistence.api.entity.task.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -63,8 +62,7 @@ public class EntityValidationListener { && !Attr.class.equals(interf) && !Task.class.equals(interf) && !Policy.class.equals(interf) - && !Attributable.class.equals(interf) - && !Subject.class.equals(interf) + && !Any.class.equals(interf) && Entity.class.isAssignableFrom(interf)) { entityInt = interf; http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/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 9fbbeab..77eea1c 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 @@ -22,13 +22,13 @@ import javax.validation.ConstraintValidatorContext; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.lang3.StringUtils; -import org.apache.syncope.common.lib.types.AttributableType; import org.apache.syncope.common.lib.types.EntityViolationType; -import org.apache.syncope.core.persistence.api.entity.ExternalResource; -import org.apache.syncope.core.persistence.api.entity.Mapping; -import org.apache.syncope.core.persistence.api.entity.MappingItem; +import org.apache.syncope.core.persistence.api.entity.AnyType; +import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource; +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.resource.Provision; import org.apache.syncope.core.provisioning.api.propagation.PropagationActions; -import org.apache.syncope.core.persistence.api.entity.user.UMapping; public class ExternalResourceValidator extends AbstractValidator<ExternalResourceCheck, ExternalResource> { @@ -60,32 +60,29 @@ public class ExternalResourceValidator extends AbstractValidator<ExternalResourc return true; } - private boolean isValid(final Mapping<?> mapping, final ConstraintValidatorContext context) { + private boolean isValid(final AnyType anyType, final Mapping mapping, final ConstraintValidatorContext context) { if (mapping == null) { return true; } - int accountIds = CollectionUtils.countMatches(mapping.getItems(), new Predicate<MappingItem>() { + int connObjectKeys = CollectionUtils.countMatches(mapping.getItems(), new Predicate<MappingItem>() { @Override public boolean evaluate(final MappingItem item) { - return item.isAccountid(); + return item.isConnObjectKey(); } }); - if (accountIds != 1) { + if (connObjectKeys != 1) { context.buildConstraintViolationWithTemplate( - getTemplate(EntityViolationType.InvalidMapping, "One and only one accountId mapping is needed")). - addPropertyNode("accountId.size").addConstraintViolation(); + getTemplate(EntityViolationType.InvalidMapping, "Single ConnObjectKey mapping is required")). + addPropertyNode("connObjectKey.size").addConstraintViolation(); return false; } - final MappingItem accountId = mapping.getAccountIdItem(); - if (mapping instanceof UMapping - && AttributableType.GROUP == accountId.getIntMappingType().getAttributableType()) { - + MappingItem connObjectKey = mapping.getConnObjectKeyItem(); + if (connObjectKey.getIntMappingType().getAnyTypeKind() != anyType.getKind()) { context.buildConstraintViolationWithTemplate( - getTemplate(EntityViolationType.InvalidMapping, - "Group attribute as accountId is not permitted")). + getTemplate(EntityViolationType.InvalidMapping, "ConnObjectKey must be from the same AnyType")). addPropertyNode("attributableType").addConstraintViolation(); return false; } @@ -102,7 +99,7 @@ public class ExternalResourceValidator extends AbstractValidator<ExternalResourc } if (passwords > 1) { context.buildConstraintViolationWithTemplate( - getTemplate(EntityViolationType.InvalidMapping, "One and only one password mapping is allowed")). + getTemplate(EntityViolationType.InvalidMapping, "One password mapping is allowed at most")). addPropertyNode("password.size").addConstraintViolation(); isValid = false; } @@ -141,6 +138,12 @@ public class ExternalResourceValidator extends AbstractValidator<ExternalResourc } } - return isValid(resource.getUmapping(), context) && isValid(resource.getGmapping(), context); + return CollectionUtils.matchesAll(resource.getProvisions(), new Predicate<Provision>() { + + @Override + public boolean evaluate(final Provision provision) { + return isValid(provision.getAnyType(), provision.getMapping(), context); + } + }); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PlainAttrValueValidator.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PlainAttrValueValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PlainAttrValueValidator.java index ae2e3ae..da00ebd 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PlainAttrValueValidator.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/PlainAttrValueValidator.java @@ -23,9 +23,6 @@ import org.apache.syncope.common.lib.types.EntityViolationType; import org.apache.syncope.core.persistence.api.entity.PlainAttrUniqueValue; import org.apache.syncope.core.persistence.api.entity.PlainAttrValue; import org.apache.syncope.core.persistence.api.entity.PlainSchema; -import org.apache.syncope.core.persistence.api.entity.membership.MPlainSchema; -import org.apache.syncope.core.persistence.api.entity.group.GPlainSchema; -import org.apache.syncope.core.persistence.api.entity.user.UPlainSchema; public class PlainAttrValueValidator extends AbstractValidator<PlainAttrValueCheck, PlainAttrValue> { @@ -76,16 +73,8 @@ public class PlainAttrValueValidator extends AbstractValidator<PlainAttrValueChe LOG.error("Unique value schema for " + object.getClass().getSimpleName() + "[" + object.getKey() + "]" + " is " + uniqueValueSchema + ", while owning attribute schema is " + attrSchema); - EntityViolationType violationType = attrSchema instanceof UPlainSchema - ? EntityViolationType.InvalidUPlainSchema - : attrSchema instanceof GPlainSchema - ? EntityViolationType.InvalidGPlainSchema - : attrSchema instanceof MPlainSchema - ? EntityViolationType.InvalidMPlainSchema - : EntityViolationType.InvalidCPlainSchema; - context.disableDefaultConstraintViolation(); - context.buildConstraintViolationWithTemplate(getTemplate(violationType, + context.buildConstraintViolationWithTemplate(getTemplate(EntityViolationType.InvalidPlainSchema, "Unique value schema is " + uniqueValueSchema + ", while owning attribute schema is " + attrSchema)).addPropertyNode("schema"). addConstraintViolation(); http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameValidator.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameValidator.java index 5084522..a9b622e 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameValidator.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/SchemaNameValidator.java @@ -28,36 +28,23 @@ import java.util.Set; import javax.validation.ConstraintValidatorContext; import org.apache.commons.lang3.ClassUtils; import org.apache.syncope.common.lib.types.EntityViolationType; -import org.apache.syncope.core.persistence.api.entity.conf.CPlainSchema; -import org.apache.syncope.core.persistence.api.entity.membership.MDerSchema; -import org.apache.syncope.core.persistence.api.entity.membership.MPlainSchema; -import org.apache.syncope.core.persistence.api.entity.membership.MVirSchema; -import org.apache.syncope.core.persistence.api.entity.group.GDerSchema; -import org.apache.syncope.core.persistence.api.entity.group.GPlainSchema; -import org.apache.syncope.core.persistence.api.entity.group.GVirSchema; -import org.apache.syncope.core.persistence.api.entity.user.UDerSchema; -import org.apache.syncope.core.persistence.api.entity.user.UPlainSchema; -import org.apache.syncope.core.persistence.api.entity.user.UVirSchema; +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.persistence.jpa.entity.anyobject.JPAAnyObject; import org.apache.syncope.core.persistence.jpa.entity.conf.JPAConf; -import org.apache.syncope.core.persistence.jpa.entity.membership.JPAMembership; import org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup; import org.apache.syncope.core.persistence.jpa.entity.user.JPAUser; public class SchemaNameValidator extends AbstractValidator<SchemaNameCheck, Object> { - private static final Set<String> UNALLOWED_USCHEMA_NAMES = new HashSet<>(); - - private static final Set<String> UNALLOWED_MSCHEMA_NAMES = new HashSet<>(); - - private static final Set<String> UNALLOWED_RSCHEMA_NAMES = new HashSet<>(); - - private static final Set<String> UNALLOWED_CSCHEMA_NAMES = new HashSet<>(); + private static final Set<String> UNALLOWED_SCHEMA_NAMES = new HashSet<>(); static { - initUnallowedSchemaNames(JPAUser.class, UNALLOWED_USCHEMA_NAMES); - initUnallowedSchemaNames(JPAMembership.class, UNALLOWED_MSCHEMA_NAMES); - initUnallowedSchemaNames(JPAGroup.class, UNALLOWED_RSCHEMA_NAMES); - initUnallowedSchemaNames(JPAConf.class, UNALLOWED_CSCHEMA_NAMES); + initUnallowedSchemaNames(JPAAnyObject.class, UNALLOWED_SCHEMA_NAMES); + initUnallowedSchemaNames(JPAGroup.class, UNALLOWED_SCHEMA_NAMES); + initUnallowedSchemaNames(JPAUser.class, UNALLOWED_SCHEMA_NAMES); + initUnallowedSchemaNames(JPAConf.class, UNALLOWED_SCHEMA_NAMES); } private static void initUnallowedSchemaNames(final Class<?> entityClass, final Set<String> names) { @@ -78,39 +65,14 @@ public class SchemaNameValidator extends AbstractValidator<SchemaNameCheck, Obje @Override public boolean isValid(final Object object, final ConstraintValidatorContext context) { - final String schemaName; - final Set<String> unallowedNames; - - if (object instanceof UPlainSchema) { - schemaName = ((UPlainSchema) object).getKey(); - unallowedNames = UNALLOWED_USCHEMA_NAMES; - } else if (object instanceof UDerSchema) { - schemaName = ((UDerSchema) object).getKey(); - unallowedNames = UNALLOWED_USCHEMA_NAMES; - } else if (object instanceof UVirSchema) { - schemaName = ((UVirSchema) object).getKey(); - unallowedNames = UNALLOWED_USCHEMA_NAMES; - } else if (object instanceof MPlainSchema) { - schemaName = ((MPlainSchema) object).getKey(); - unallowedNames = UNALLOWED_MSCHEMA_NAMES; - } else if (object instanceof MDerSchema) { - schemaName = ((MDerSchema) object).getKey(); - unallowedNames = UNALLOWED_MSCHEMA_NAMES; - } else if (object instanceof MVirSchema) { - schemaName = ((MVirSchema) object).getKey(); - unallowedNames = UNALLOWED_MSCHEMA_NAMES; - } else if (object instanceof GPlainSchema) { - schemaName = ((GPlainSchema) object).getKey(); - unallowedNames = UNALLOWED_RSCHEMA_NAMES; - } else if (object instanceof GDerSchema) { - schemaName = ((GDerSchema) object).getKey(); - unallowedNames = UNALLOWED_RSCHEMA_NAMES; - } else if (object instanceof GVirSchema) { - schemaName = ((GVirSchema) object).getKey(); - unallowedNames = UNALLOWED_RSCHEMA_NAMES; - } else if (object instanceof CPlainSchema) { - schemaName = ((CPlainSchema) object).getKey(); - unallowedNames = UNALLOWED_CSCHEMA_NAMES; + String schemaName; + Set<String> unallowedNames = UNALLOWED_SCHEMA_NAMES; + if (object instanceof PlainSchema) { + schemaName = ((PlainSchema) object).getKey(); + } else if (object instanceof DerSchema) { + schemaName = ((DerSchema) object).getKey(); + } else if (object instanceof VirSchema) { + schemaName = ((VirSchema) object).getKey(); } else { schemaName = null; unallowedNames = Collections.emptySet(); http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/UserValidator.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/UserValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/UserValidator.java index 19fc7cf..e142de3 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/UserValidator.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/UserValidator.java @@ -26,7 +26,7 @@ import org.apache.syncope.common.lib.types.AccountPolicySpec; import org.apache.syncope.common.lib.types.EntityViolationType; import org.apache.syncope.common.lib.types.PasswordPolicySpec; import org.apache.syncope.core.persistence.api.entity.AccountPolicy; -import org.apache.syncope.core.persistence.api.entity.ExternalResource; +import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource; import org.apache.syncope.core.persistence.api.entity.PasswordPolicy; import org.apache.syncope.core.persistence.api.entity.Policy; import org.apache.syncope.core.persistence.api.entity.user.User; http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/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 5562674..9d300d0 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 @@ -36,8 +36,8 @@ under the License. <table-generator name="SEQ_UPlainAttrValue" pk-column-value="SEQ_UPlainAttrValue" initial-value="100"/> <table-generator name="SEQ_GPlainAttrValue" pk-column-value="SEQ_GPlainAttrValue" initial-value="100"/> - <table-generator name="SEQ_MAttrPlainValue" pk-column-value="SEQ_MAttrPlainValue" initial-value="100"/> - <table-generator name="SEQ_CAttrPlainValue" pk-column-value="SEQ_CAttrPlainValue" initial-value="100"/> + <table-generator name="SEQ_APlainAttrValue" pk-column-value="SEQ_APlainAttrValue" initial-value="100"/> + <table-generator name="SEQ_CPlainAttrValue" pk-column-value="SEQ_CPlainAttrValue" initial-value="100"/> <entity class="org.apache.syncope.core.persistence.jpa.entity.JPARealm"> <attributes> @@ -47,7 +47,25 @@ under the License. </id> </attributes> </entity> - + + <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAnyObject"> + <attributes> + <id name="id"> + <generated-value generator="SEQ_AnyObject" strategy="TABLE"/> + <table-generator name="SEQ_AnyObject" pk-column-value="SEQ_AnyObject" initial-value="100"/> + </id> + </attributes> + </entity> + + <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAARelationship"> + <attributes> + <id name="id"> + <generated-value generator="SEQ_ARelationship" strategy="TABLE"/> + <table-generator name="SEQ_ARelationship" pk-column-value="SEQ_ARelationship" initial-value="100"/> + </id> + </attributes> + </entity> + <entity class="org.apache.syncope.core.persistence.jpa.entity.JPARole"> <attributes> <id name="id"> @@ -57,7 +75,7 @@ under the License. </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.JPADynRoleMembership"> + <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership"> <attributes> <id name="id"> <generated-value generator="SEQ_DynRoleMembership" strategy="TABLE"/> @@ -74,63 +92,65 @@ under the License. </id> </attributes> </entity> - - <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup"> + + <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAURelationship"> <attributes> <id name="id"> - <generated-value generator="SEQ_Group" strategy="TABLE"/> - <table-generator name="SEQ_Group" pk-column-value="SEQ_Group" initial-value="100"/> + <generated-value generator="SEQ_URelationship" strategy="TABLE"/> + <table-generator name="SEQ_URelationship" pk-column-value="SEQ_URelationship" initial-value="100"/> </id> </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.JPADynGroupMembership"> + <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup"> <attributes> <id name="id"> - <generated-value generator="SEQ_DynGroupMembership" strategy="TABLE"/> - <table-generator name="SEQ_DynGroupMembership" pk-column-value="SEQ_DynGroupMembership" initial-value="100"/> + <generated-value generator="SEQ_Group" strategy="TABLE"/> + <table-generator name="SEQ_Group" pk-column-value="SEQ_Group" initial-value="100"/> </id> </attributes> </entity> - - <entity class="org.apache.syncope.core.persistence.jpa.entity.membership.JPAMembership"> + + <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAADynGroupMembership"> <attributes> <id name="id"> - <generated-value generator="SEQ_Membership" strategy="TABLE"/> - <table-generator name="SEQ_Membership" pk-column-value="SEQ_Membership" initial-value="100"/> + <generated-value generator="SEQ_ADynGroupMembership" strategy="TABLE"/> + <table-generator name="SEQ_ADynGroupMembership" pk-column-value="SEQ_ADynGroupMembership" initial-value="100"/> </id> </attributes> </entity> - - <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUMapping"> + + <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUDynGroupMembership"> <attributes> <id name="id"> - <generated-value generator="SEQ_UMapping" strategy="TABLE"/> - <table-generator name="SEQ_UMapping" pk-column-value="SEQ_UMapping" initial-value="100"/> + <generated-value generator="SEQ_UDynGroupMembership" strategy="TABLE"/> + <table-generator name="SEQ_UDynGroupMembership" pk-column-value="SEQ_UDynGroupMembership" initial-value="100"/> </id> </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGMapping"> + + <entity class="org.apache.syncope.core.persistence.jpa.entity.resource.JPAProvision"> <attributes> <id name="id"> - <generated-value generator="SEQ_GMapping" strategy="TABLE"/> - <table-generator name="SEQ_GMapping" pk-column-value="SEQ_GMapping" initial-value="100"/> + <generated-value generator="SEQ_Provision" strategy="TABLE"/> + <table-generator name="SEQ_Provision" pk-column-value="SEQ_Provision" initial-value="100"/> </id> </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUMappingItem"> + + <entity class="org.apache.syncope.core.persistence.jpa.entity.resource.JPAMapping"> <attributes> <id name="id"> - <generated-value generator="SEQ_UMappingItem" strategy="TABLE"/> - <table-generator name="SEQ_UMappingItem" pk-column-value="SEQ_UMappingItem" initial-value="1000"/> + <generated-value generator="SEQ_Mapping" strategy="TABLE"/> + <table-generator name="SEQ_Mapping" pk-column-value="SEQ_Mapping" initial-value="100"/> </id> </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGMappingItem"> + <entity class="org.apache.syncope.core.persistence.jpa.entity.resource.JPAMappingItem"> <attributes> <id name="id"> - <generated-value generator="SEQ_GMappingItem" strategy="TABLE"/> - <table-generator name="SEQ_GMappingItem" pk-column-value="SEQ_GMappingItem" initial-value="1000"/> + <generated-value generator="SEQ_MappingItem" strategy="TABLE"/> + <table-generator name="SEQ_MappingItem" pk-column-value="SEQ_MappingItem" initial-value="1000"/> </id> </attributes> </entity> @@ -144,6 +164,14 @@ under the License. </attributes> </entity> + <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttr"> + <attributes> + <id name="id"> + <generated-value generator="SEQ_APlainAttr" strategy="TABLE"/> + <table-generator name="SEQ_APlainAttr" pk-column-value="SEQ_APlainAttr" initial-value="1000"/> + </id> + </attributes> + </entity> <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttr"> <attributes> <id name="id"> @@ -160,30 +188,6 @@ under the License. </id> </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttrTemplate"> - <attributes> - <id name="id"> - <generated-value generator="SEQ_GPlainAttrTemplate" strategy="TABLE"/> - <table-generator name="SEQ_GPlainAttrTemplate" pk-column-value="SEQ_GPlainAttrTemplate" initial-value="1000"/> - </id> - </attributes> - </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.membership.JPAMPlainAttr"> - <attributes> - <id name="id"> - <generated-value generator="SEQ_MPlainAttr" strategy="TABLE"/> - <table-generator name="SEQ_MPlainAttr" pk-column-value="SEQ_MPlainAttr" initial-value="1000"/> - </id> - </attributes> - </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.membership.JPAMPlainAttrTemplate"> - <attributes> - <id name="id"> - <generated-value generator="SEQ_MPlainAttrTemplate" strategy="TABLE"/> - <table-generator name="SEQ_MPlainAttrTemplate" pk-column-value="SEQ_MPlainAttrTemplate" initial-value="1000"/> - </id> - </attributes> - </entity> <entity class="org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttr"> <attributes> <id name="id"> @@ -192,15 +196,15 @@ under the License. </id> </attributes> </entity> - - <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrValue"> + + <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttrValue"> <attributes> <id name="id"> - <generated-value generator="SEQ_UPlainAttrValue" strategy="TABLE"/> + <generated-value generator="SEQ_APlainAttrValue" strategy="TABLE"/> </id> </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrUniqueValue"> + <entity class="org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttrUniqueValue"> <table> <unique-constraint> <column-name>booleanValue</column-name> @@ -225,18 +229,18 @@ under the License. </table> <attributes> <id name="id"> - <generated-value generator="SEQ_UPlainAttrValue" strategy="TABLE"/> + <generated-value generator="SEQ_APlainAttrValue" strategy="TABLE"/> </id> </attributes> - </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttrValue"> + </entity> + <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrValue"> <attributes> <id name="id"> - <generated-value generator="SEQ_GPlainAttrValue" strategy="TABLE"/> + <generated-value generator="SEQ_UPlainAttrValue" strategy="TABLE"/> </id> </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttrUniqueValue"> + <entity class="org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrUniqueValue"> <table> <unique-constraint> <column-name>booleanValue</column-name> @@ -261,18 +265,18 @@ under the License. </table> <attributes> <id name="id"> - <generated-value generator="SEQ_GPlainAttrValue" strategy="TABLE"/> + <generated-value generator="SEQ_UPlainAttrValue" strategy="TABLE"/> </id> </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.membership.JPAMPlainAttrValue"> + <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttrValue"> <attributes> <id name="id"> - <generated-value generator="SEQ_MAttrPlainValue" strategy="TABLE"/> + <generated-value generator="SEQ_GPlainAttrValue" strategy="TABLE"/> </id> </attributes> </entity> - <entity class="org.apache.syncope.core.persistence.jpa.entity.membership.JPAMPlainAttrUniqueValue"> + <entity class="org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttrUniqueValue"> <table> <unique-constraint> <column-name>booleanValue</column-name> @@ -297,14 +301,14 @@ under the License. </table> <attributes> <id name="id"> - <generated-value generator="SEQ_MAttrPlainValue" strategy="TABLE"/> + <generated-value generator="SEQ_GPlainAttrValue" strategy="TABLE"/> </id> </attributes> </entity> <entity class="org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttrValue"> <attributes> <id name="id"> - <generated-value generator="SEQ_CAttrPlainValue" strategy="TABLE"/> + <generated-value generator="SEQ_CPlainAttrValue" strategy="TABLE"/> </id> </attributes> </entity> @@ -333,7 +337,25 @@ under the License. </table> <attributes> <id name="id"> - <generated-value generator="SEQ_CAttrPlainValue" strategy="TABLE"/> + <generated-value generator="SEQ_CPlainAttrValue" strategy="TABLE"/> + </id> + </attributes> + </entity> + + <entity class="org.apache.syncope.core.persistence.jpa.entity.task.JPAAnyTemplate"> + <attributes> + <id name="id"> + <generated-value generator="SEQ_AnyTemplate" strategy="TABLE"/> + <table-generator name="SEQ_AnyTemplate" pk-column-value="SEQ_AnyTemplate" initial-value="1000"/> + </id> + </attributes> + </entity> + + <entity class="org.apache.syncope.core.persistence.jpa.entity.task.JPAAnyFilter"> + <attributes> + <id name="id"> + <generated-value generator="SEQ_AnyFilter" strategy="TABLE"/> + <table-generator name="SEQ_AnyFilter" pk-column-value="SEQ_AnyFilter" initial-value="1000"/> </id> </attributes> </entity> @@ -388,6 +410,15 @@ under the License. </id> </attributes> </entity> + + <entity class="org.apache.syncope.core.persistence.jpa.entity.JPAAnyAbout"> + <attributes> + <id name="id"> + <generated-value generator="SEQ_AnyAbout" strategy="TABLE"/> + <table-generator name="SEQ_AnyAbout" pk-column-value="SEQ_AnyAbout" initial-value="100"/> + </id> + </attributes> + </entity> <entity class="org.apache.syncope.core.persistence.jpa.entity.JPANotification"> <attributes> <id name="id"> @@ -396,6 +427,7 @@ under the License. </id> </attributes> </entity> + <entity class="org.apache.syncope.core.persistence.jpa.entity.JPASecurityQuestion"> <attributes> <id name="id"> http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/main/resources/content.xml ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/resources/content.xml b/core/persistence-jpa/src/main/resources/content.xml index 0f4ab83..20b2ebc 100644 --- a/core/persistence-jpa/src/main/resources/content.xml +++ b/core/persistence-jpa/src/main/resources/content.xml @@ -24,8 +24,8 @@ under the License. creator="admin" lastModifier="admin" creationDate="2014-06-20 11:00:00" lastChangeDate="2014-06-20 11:00:00"/> - <CPlainSchema name="password.cipher.algorithm" type="String" - mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="password.cipher.algorithm" type="String" + mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> <CPlainAttr id="1" owner_id="1" schema_name="password.cipher.algorithm"/> <CPlainAttrValue id="1" attribute_id="1" stringValue="SHA1"/> @@ -33,71 +33,70 @@ under the License. + not existing: NotificationJob runs according to Notification.DEFAULT_CRON_EXP + provided as empty string: NotificationJob disabled + provided as non-empty string: NotificationJob runs according to the given value --> - <CPlainSchema name="notificationjob.cronExpression" type="String" - mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="notificationjob.cronExpression" type="String" + mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/> <CPlainAttr id="2" owner_id="1" schema_name="notificationjob.cronExpression"/> <CPlainAttrValue id="2" attribute_id="2" stringValue=""/> - <CPlainSchema name="notification.maxRetries" type="Long" - mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="notification.maxRetries" type="Long" + mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> <CPlainAttr id="3" owner_id="1" schema_name="notification.maxRetries"/> <CPlainAttrValue id="3" attribute_id="3" longValue="3"/> - <CPlainSchema name="token.length" type="Long" - mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="token.length" type="Long" + mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> <CPlainAttr id="4" owner_id="1" schema_name="token.length"/> <CPlainAttrValue id="4" attribute_id="4" longValue="256"/> - <CPlainSchema name="token.expireTime" type="Long" - mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="token.expireTime" type="Long" + mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> <CPlainAttr id="5" owner_id="1" schema_name="token.expireTime"/> <CPlainAttrValue id="5" attribute_id="5" longValue="60"/> - <CPlainSchema name="selfRegistration.allowed" type="Boolean" - mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="selfRegistration.allowed" type="Boolean" + mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> <CPlainAttr id="6" owner_id="1" schema_name="selfRegistration.allowed"/> <CPlainAttrValue id="6" attribute_id="6" booleanValue="1"/> - <CPlainSchema name="passwordReset.allowed" type="Boolean" - mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="passwordReset.allowed" type="Boolean" + mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> <CPlainAttr id="7" owner_id="1" schema_name="passwordReset.allowed"/> <CPlainAttrValue id="7" attribute_id="7" booleanValue="1"/> - <CPlainSchema name="passwordReset.securityQuestion" type="Boolean" - mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="passwordReset.securityQuestion" type="Boolean" + mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> <CPlainAttr id="8" owner_id="1" schema_name="passwordReset.securityQuestion"/> <CPlainAttrValue id="8" attribute_id="8" booleanValue="1"/> - <CPlainSchema name="authentication.statuses" type="String" - mandatoryCondition="true" multivalue="1" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="authentication.statuses" type="String" + mandatoryCondition="true" multivalue="1" uniqueConstraint="0" readonly="0"/> <CPlainAttr id="9" owner_id="1" schema_name="authentication.statuses"/> <CPlainAttrValue id="9" attribute_id="9" stringValue="created"/> <CPlainAttrValue id="10" attribute_id="9" stringValue="active"/> <!-- Save user login date upon successful authentication --> - <CPlainSchema name="log.lastlogindate" type="Boolean" - mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="log.lastlogindate" type="Boolean" + mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> <CPlainAttr id="11" owner_id="1" schema_name="log.lastlogindate"/> <CPlainAttrValue id="11" attribute_id="11" booleanValue="1"/> <!-- For usage with admin console --> - <CPlainSchema name="admin.user.layout" type="String" - mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/> - <CPlainSchema name="self.user.layout" type="String" - mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/> - <CPlainSchema name="admin.group.layout" type="String" - mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/> - <CPlainSchema name="self.group.layout" type="String" - mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/> - <CPlainSchema name="admin.membership.layout" type="String" - mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/> - <CPlainSchema name="self.membership.layout" type="String" - mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="admin.user.layout" type="String" + mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="self.user.layout" type="String" + mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="admin.group.layout" type="String" + mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="self.group.layout" type="String" + mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="admin.membership.layout" type="String" + mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/> + <PlainSchema name="self.membership.layout" type="String" + mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/> - <!-- User pre-defined schemas --> - <UPlainSchema name="email" type="String" - mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0" - validatorClass="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/> + <PlainSchema name="email" type="String" + mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0" + validatorClass="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/> <!-- Password reset notifications --> <Notification id="1" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/main/resources/indexes.xml ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/resources/indexes.xml b/core/persistence-jpa/src/main/resources/indexes.xml index abd3a76..ae57529 100644 --- a/core/persistence-jpa/src/main/resources/indexes.xml +++ b/core/persistence-jpa/src/main/resources/indexes.xml @@ -26,15 +26,20 @@ under the License. <entry key="UPlainAttrValue_longvalueIndex">CREATE INDEX UAttrValue_longvalueIndex ON UPlainAttrValue(longvalue)</entry> <entry key="UPlainAttrValue_doublevalueIndex">CREATE INDEX UAttrValue_doublevalueIndex ON UPlainAttrValue(doublevalue)</entry> <entry key="UPlainAttrValue_booleanvalueIndex">CREATE INDEX UAttrValue_booleanvalueIndex ON UPlainAttrValue(booleanvalue)</entry> - <entry key="MPlainAttrValue_stringvalueIndex">CREATE INDEX MAttrValue_stringvalueIndex ON MPlainAttrValue(stringvalue)</entry> - <entry key="MPlainAttrValue_datevalueIndex">CREATE INDEX MAttrValue_datevalueIndex ON MPlainAttrValue(datevalue)</entry> - <entry key="MPlainAttrValue_longvalueIndex">CREATE INDEX MAttrValue_longvalueIndex ON MPlainAttrValue(longvalue)</entry> - <entry key="MPlainAttrValue_doublevalueIndex">CREATE INDEX MAttrValue_doublevalueIndex ON MPlainAttrValue(doublevalue)</entry> - <entry key="MPlainAttrValue_booleanvalueIndex">CREATE INDEX MAttrValue_booleanvalueIndex ON MPlainAttrValue(booleanvalue)</entry> + <entry key="APlainAttrValue_stringvalueIndex">CREATE INDEX AAttrValue_stringvalueIndex ON APlainAttrValue(stringvalue)</entry> + <entry key="APlainAttrValue_datevalueIndex">CREATE INDEX AAttrValue_datevalueIndex ON APlainAttrValue(datevalue)</entry> + <entry key="APlainAttrValue_longvalueIndex">CREATE INDEX AAttrValue_longvalueIndex ON APlainAttrValue(longvalue)</entry> + <entry key="APlainAttrValue_doublevalueIndex">CREATE INDEX AAttrValue_doublevalueIndex ON APlainAttrValue(doublevalue)</entry> + <entry key="APlainAttrValue_booleanvalueIndex">CREATE INDEX AAttrValue_booleanvalueIndex ON APlainAttrValue(booleanvalue)</entry> <entry key="GPlainAttrValue_stringvalueIndex">CREATE INDEX GAttrValue_stringvalueIndex ON GPlainAttrValue(stringvalue)</entry> <entry key="GPlainAttrValue_datevalueIndex">CREATE INDEX GAttrValue_datevalueIndex ON GPlainAttrValue(datevalue)</entry> <entry key="GPlainAttrValue_longvalueIndex">CREATE INDEX GAttrValue_longvalueIndex ON GPlainAttrValue(longvalue)</entry> <entry key="GPlainAttrValue_doublevalueIndex">CREATE INDEX GAttrValue_doublevalueIndex ON GPlainAttrValue(doublevalue)</entry> <entry key="GPlainAttrValue_booleanvalueIndex">CREATE INDEX GAttrValue_booleanvalueIndex ON GPlainAttrValue(booleanvalue)</entry> + <entry key="CPlainAttrValue_stringvalueIndex">CREATE INDEX CAttrValue_stringvalueIndex ON CPlainAttrValue(stringvalue)</entry> + <entry key="CPlainAttrValue_datevalueIndex">CREATE INDEX CAttrValue_datevalueIndex ON CPlainAttrValue(datevalue)</entry> + <entry key="CPlainAttrValue_longvalueIndex">CREATE INDEX CAttrValue_longvalueIndex ON CPlainAttrValue(longvalue)</entry> + <entry key="CPlainAttrValue_doublevalueIndex">CREATE INDEX CAttrValue_doublevalueIndex ON CPlainAttrValue(doublevalue)</entry> + <entry key="CPlainAttrValue_booleanvalueIndex">CREATE INDEX CAttrValue_booleanvalueIndex ON CPlainAttrValue(booleanvalue)</entry> <entry key="Task_executedIndex">CREATE INDEX Task_executedIndex ON Task(executed)</entry> </properties> http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/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 f7bce20..a00b786 100644 --- a/core/persistence-jpa/src/main/resources/views.xml +++ b/core/persistence-jpa/src/main/resources/views.xml @@ -20,15 +20,17 @@ under the License. <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>Views</comment> + + <!-- user --> <entry key="user_search"> CREATE VIEW user_search AS - SELECT u.id as subject_id, u.* FROM SyncopeUser u + SELECT u.id as any_id, u.* FROM SyncopeUser u </entry> <entry key="user_search_unique_attr"> CREATE VIEW user_search_unique_attr AS - SELECT ua.owner_id AS subject_id, + SELECT ua.owner_id AS any_id, ua.schema_name AS schema_name, uav.booleanvalue AS booleanvalue, uav.datevalue AS datevalue, @@ -41,7 +43,7 @@ under the License. <entry key="user_search_attr"> CREATE VIEW user_search_attr AS - SELECT ua.owner_id AS subject_id, + SELECT ua.owner_id AS any_id, ua.schema_name AS schema_name, uav.booleanvalue AS booleanvalue, uav.datevalue AS datevalue, @@ -54,109 +56,194 @@ under the License. <entry key="user_search_null_attr"> CREATE VIEW user_search_null_attr AS - SELECT u.id AS subject_id, - UPlainSchema.name AS schema_name, + SELECT u.id AS any_id, + PlainSchema.name AS schema_name, NULL AS booleanvalue, NULL AS datevalue, NULL AS doublevalue, NULL AS longvalue, NULL AS stringvalue - FROM SyncopeUser u CROSS JOIN UPlainSchema - LEFT OUTER JOIN UPlainAttr ua ON (UPlainSchema.name = ua.schema_name AND ua.owner_id = u.id) + FROM SyncopeUser u CROSS JOIN PlainSchema + LEFT OUTER JOIN UPlainAttr ua ON (PlainSchema.name = ua.schema_name AND ua.owner_id = u.id) WHERE ua.id IS NULL </entry> - <entry key="user_search_membership"> - CREATE VIEW user_search_membership AS + <entry key="user_search_urelationship"> + CREATE VIEW user_search_urelationship AS - SELECT m.user_id AS subject_id, g.id AS group_id, g.name AS group_name - FROM Membership m, SyncopeGroup g + SELECT m.user_id AS any_id, m.anyObject_id AS anyObject_id + FROM URelationship m + </entry> + <entry key="user_search_umembership"> + CREATE VIEW user_search_umembership AS + + SELECT m.user_id AS any_id, g.id AS group_id, g.name AS group_name + FROM UMembership m, SyncopeGroup g WHERE m.group_id = g.id </entry> - <entry key="user_search_dyngroupmembership"> - CREATE VIEW user_search_dyngroupmembership AS + <entry key="user_search_udyngroupmembership"> + CREATE VIEW user_search_udyngroupmembership AS - SELECT ds.user_id AS subject_id, d.group_id AS group_id - FROM DynGroupMembership d, DynGroupMembership_SyncopeUser ds - WHERE d.id = ds.dynGroupMembership_id + SELECT ds.user_id AS any_id, d.group_id AS group_id + FROM UDynGroupMembership d, UDynGroupMembership_SyncopeUser ds + WHERE d.id = ds.uDynGroupMembership_id </entry> <entry key="user_search_role"> CREATE VIEW user_search_role AS - SELECT ss.user_id AS subject_id, ss.role_id AS role_id + SELECT ss.user_id AS any_id, ss.role_id AS role_id FROM SyncopeUser_SyncopeRole ss </entry> <entry key="user_search_dynrolemembership"> CREATE VIEW user_search_dynrolemembership AS - SELECT ds.user_id AS subject_id, d.role_id AS role_id + SELECT ds.user_id AS any_id, d.role_id AS role_id FROM DynRoleMembership d, DynRoleMembership_SyncopeUser ds WHERE d.id = ds.dynRoleMembership_id </entry> <entry key="user_search_resource"> CREATE VIEW user_search_resource AS - SELECT st.user_id AS subject_id, st.resource_name AS resource_name + SELECT st.user_id AS any_id, st.resource_name AS resource_name FROM SyncopeUser_ExternalResource st </entry> <entry key="user_search_group_resource"> CREATE VIEW user_search_group_resource AS - SELECT m.user_id AS subject_id, st.resource_name AS resource_name - FROM Membership m, SyncopeGroup r, SyncopeGroup_ExternalResource st + SELECT m.user_id AS any_id, st.resource_name AS resource_name + FROM UMembership m, SyncopeGroup r, SyncopeGroup_ExternalResource st WHERE m.group_id = r.id AND st.group_id = r.id </entry> + + <!-- anyObject --> + <entry key="anyObject_search"> + CREATE VIEW anyObject_search AS + + SELECT a.id as any_id, a.* FROM AnyObject a + </entry> + <entry key="anyObject_search_unique_attr"> + CREATE VIEW anyObject_search_unique_attr AS + + SELECT ua.owner_id AS any_id, + ua.schema_name AS schema_name, + uav.booleanvalue AS booleanvalue, + uav.datevalue AS datevalue, + uav.doublevalue AS doublevalue, + uav.longvalue AS longvalue, + uav.stringvalue AS stringvalue + FROM APlainAttrUniqueValue uav, APlainAttr ua + WHERE uav.attribute_id = ua.id + </entry> + <entry key="anyObject_search_attr"> + CREATE VIEW anyObject_search_attr AS + + SELECT ua.owner_id AS any_id, + ua.schema_name AS schema_name, + uav.booleanvalue AS booleanvalue, + uav.datevalue AS datevalue, + uav.doublevalue AS doublevalue, + uav.longvalue AS longvalue, + uav.stringvalue AS stringvalue + FROM APlainAttrValue uav, APlainAttr ua + WHERE uav.attribute_id = ua.id + </entry> + <entry key="anyObject_search_null_attr"> + CREATE VIEW anyObject_search_null_attr AS + + SELECT u.id AS any_id, + PlainSchema.name AS schema_name, + NULL AS booleanvalue, + NULL AS datevalue, + NULL AS doublevalue, + NULL AS longvalue, + NULL AS stringvalue + FROM AnyObject u CROSS JOIN PlainSchema + LEFT OUTER JOIN APlainAttr ua ON (PlainSchema.name = ua.schema_name AND ua.owner_id = u.id) + WHERE ua.id IS NULL + </entry> + <entry key="anyObject_search_arelationship"> + CREATE VIEW anyObject_search_arelationship AS + + SELECT m.left_anyObject_id AS any_id, m.right_anyObject_id AS right_anyObject_id + FROM ARelationship m + </entry> + <entry key="anyObject_search_amembership"> + CREATE VIEW anyObject_search_amembership AS + + SELECT m.anyObject_id AS any_id, g.id AS group_id, g.name AS group_name + FROM AMembership m, SyncopeGroup g + WHERE m.group_id = g.id + </entry> + <entry key="anyObject_search_adyngroupmembership"> + CREATE VIEW anyObject_search_adyngroupmembership AS + + SELECT ds.anyObject_id AS any_id, d.group_id AS group_id + FROM ADynGroupMembership d, ADynGroupMembership_AnyObject ds + WHERE d.id = ds.aDynGroupMembership_id + </entry> + <entry key="anyObject_search_resource"> + CREATE VIEW anyObject_search_resource AS + + SELECT st.anyObject_id AS any_id, st.resource_name AS resource_name + FROM AnyObject_ExternalResource st + </entry> + <entry key="anyObject_search_group_resource"> + CREATE VIEW anyObject_search_group_resource AS + + SELECT m.anyObject_id AS any_id, st.resource_name AS resource_name + FROM AMembership m, SyncopeGroup r, SyncopeGroup_ExternalResource st + WHERE m.group_id = r.id AND st.group_id = r.id + </entry> + + <!-- group --> <entry key="group_search"> CREATE VIEW group_search AS - SELECT r.id as subject_id, r.* FROM SyncopeGroup r + SELECT r.id as any_id, r.* FROM SyncopeGroup r </entry> <entry key="group_search_unique_attr"> CREATE VIEW group_search_unique_attr AS - SELECT ra.owner_id AS subject_id, - rat.schema_name AS schema_name, - rav.booleanvalue AS booleanvalue, - rav.datevalue AS datevalue, - rav.doublevalue AS doublevalue, - rav.longvalue AS longvalue, - rav.stringvalue AS stringvalue - FROM GPlainAttrUniqueValue rav, GPlainAttr ra, GPlainAttrTemplate rat - WHERE rav.attribute_id = ra.id - AND ra.template_id = rat.id + SELECT ua.owner_id AS any_id, + ua.schema_name AS schema_name, + uav.booleanvalue AS booleanvalue, + uav.datevalue AS datevalue, + uav.doublevalue AS doublevalue, + uav.longvalue AS longvalue, + uav.stringvalue AS stringvalue + FROM GPlainAttrUniqueValue uav, GPlainAttr ua + WHERE uav.attribute_id = ua.id </entry> <entry key="group_search_attr"> CREATE VIEW group_search_attr AS - SELECT ra.owner_id AS subject_id, - rat.schema_name AS schema_name, - rav.booleanvalue AS booleanvalue, - rav.datevalue AS datevalue, - rav.doublevalue AS doublevalue, - rav.longvalue AS longvalue, - rav.stringvalue AS stringvalue - FROM GPlainAttrValue rav, GPlainAttr ra, GPlainAttrTemplate rat - WHERE rav.attribute_id = ra.id - AND ra.template_id = rat.id + SELECT ua.owner_id AS any_id, + ua.schema_name AS schema_name, + uav.booleanvalue AS booleanvalue, + uav.datevalue AS datevalue, + uav.doublevalue AS doublevalue, + uav.longvalue AS longvalue, + uav.stringvalue AS stringvalue + FROM GPlainAttrValue uav, GPlainAttr ua + WHERE uav.attribute_id = ua.id </entry> <entry key="group_search_null_attr"> CREATE VIEW group_search_null_attr AS - SELECT r.id AS subject_id, - GPlainSchema.name AS schema_name, + SELECT u.id AS any_id, + PlainSchema.name AS schema_name, NULL AS booleanvalue, NULL AS datevalue, NULL AS doublevalue, NULL AS longvalue, NULL AS stringvalue - FROM SyncopeGroup r CROSS JOIN GPlainSchema - LEFT OUTER JOIN GPlainAttr ra ON (ra.owner_id = r.id) - LEFT OUTER JOIN GPlainAttrTemplate rat ON (GPlainSchema.name = rat.schema_name AND ra.template_id = rat.id) - WHERE ra.id IS NULL + FROM SyncopeGroup u CROSS JOIN PlainSchema + LEFT OUTER JOIN GPlainAttr ua ON (PlainSchema.name = ua.schema_name AND ua.owner_id = u.id) + WHERE ua.id IS NULL </entry> <entry key="group_search_resource"> CREATE VIEW group_search_resource AS - SELECT st.group_id AS subject_id, st.resource_name AS resource_name + SELECT st.group_id AS any_id, st.resource_name AS resource_name FROM SyncopeGroup_ExternalResource st </entry> http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/AbstractTest.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/AbstractTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/AbstractTest.java index 668c868..a3b6701 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/AbstractTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/AbstractTest.java @@ -18,7 +18,7 @@ */ package org.apache.syncope.core.persistence.jpa; -import org.apache.syncope.core.persistence.api.entity.AttributableUtilsFactory; +import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory; import org.apache.syncope.core.persistence.api.entity.EntityFactory; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -33,6 +33,6 @@ public abstract class AbstractTest { protected EntityFactory entityFactory; @Autowired - protected AttributableUtilsFactory attrUtilsFactory; + protected AnyUtilsFactory anyUtilsFactory; } http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConnectorRegistry.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConnectorRegistry.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConnectorRegistry.java index fad038e..91618d2 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConnectorRegistry.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConnectorRegistry.java @@ -22,7 +22,7 @@ import java.util.Set; import org.apache.syncope.common.lib.types.ConnConfProperty; import org.apache.syncope.core.persistence.api.dao.NotFoundException; import org.apache.syncope.core.persistence.api.entity.ConnInstance; -import org.apache.syncope.core.persistence.api.entity.ExternalResource; +import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource; import org.apache.syncope.core.provisioning.api.ConnectorRegistry; import org.springframework.stereotype.Component;
