public Property<Object> getAttributeNameProperty() { return getModelProperty(PROPERTY_ATTRIBUTE_NAME); }
public Property<Object> getAttributeIdentityProperty() { return getModelProperty(PROPERTY_ATTRIBUTE_IDENTITY); }
public Property<Object> getAttributeValueProperty() { return getModelProperty(PROPERTY_ATTRIBUTE_VALUE); }
public Property<Object> getDiscriminatorProperty() { return getModelProperty(PROPERTY_IDENTITY_DISCRIMINATOR); } }
public Property<Object> getIdentityIdProperty() { return getModelProperty(PROPERTY_IDENTITY_ID); }
public Property<Object> getIdentityNameProperty() { return getModelProperty(PROPERTY_IDENTITY_NAME); }
<P> P getModelProperty(Class<P> propertyType, Object instance, String propertyName) { @SuppressWarnings("unchecked") Property<P> property = (Property<P>) getConfig().getModelProperty(propertyName); return property == null ? null : property.getValue(instance); }
public List<Predicate> getPredicates() { List<Predicate> predicates = new ArrayList<Predicate>(); this.builder = this.entityManager.getCriteriaBuilder(); String discriminator = this.config.getIdentityTypeDiscriminator(identityQuery.getIdentityType()); predicates.add(builder.equal(root.get(this.config.getModelProperty(PROPERTY_IDENTITY_DISCRIMINATOR).getName()), discriminator)); IdentityTypeHandler identityTypeManager = this.config.getIdentityTypeManager(this.identityQuery.getIdentityType()); for (Entry<QueryParameter, Object[]> entry : this.identityQuery.getParameters().entrySet()) { QueryParameter queryParameter = entry.getKey(); Object[] parameterValues = entry.getValue(); predicates.addAll(identityTypeManager.getPredicate(queryParameter, parameterValues, this, identityStore)); } return predicates; }
@Override protected Agent doCreateIdentityType(Object identity, JPAIdentityStore store) { String idValue = store.getConfig().getModelProperty(PROPERTY_IDENTITY_ID).getValue(identity).toString(); Agent agent = new SimpleAgent(idValue); return agent; }
@Override public <T extends CredentialStorage> List<T> retrieveCredentials(Agent agent, Class<T> storageClass) { Property<Object> identityTypeProperty = getConfig().getModelProperty(PROPERTY_CREDENTIAL_IDENTITY); Property<Object> typeProperty = getConfig().getModelProperty(PROPERTY_CREDENTIAL_TYPE); EntityManager em = getEntityManager(); CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<?> criteria = builder.createQuery(getConfig().getCredentialClass()); Root<?> root = criteria.from(getConfig().getCredentialClass()); List<Predicate> predicates = new ArrayList<Predicate>(); Object agentInstance = lookupIdentityObjectById(agent); predicates.add(builder.equal(root.get(identityTypeProperty.getName()), agentInstance)); predicates.add(builder.equal(root.get(typeProperty.getName()), storageClass.getName())); criteria.where(predicates.toArray(new Predicate[predicates.size()])); List<?> result = em.createQuery(criteria).getResultList(); List<T> storages = new ArrayList<T>(); for (Object object : result) { storages.add((T) convertToCredentialStorage(object, storageClass)); } return storages; }
@Override public List<Predicate> getPredicate(QueryParameter queryParameter, Object[] parameterValues, JPACriteriaQueryBuilder criteria, JPAIdentityStore store) { List<Predicate> predicates = super.getPredicate(queryParameter, parameterValues, criteria, store); CriteriaBuilder builder = criteria.getBuilder(); if (queryParameter.equals(Relationship.NAME)) { predicates.add(builder.equal( criteria.getRoot().get(store.getConfig().getModelProperty(PROPERTY_IDENTITY_NAME).getName()), parameterValues[0])); } if (queryParameter.equals(Relationship.TO)) { Object relatesFromIdentity = store.lookupIdentityObjectById((IdentityType) parameterValues[0]); predicates.add(builder.equal(criteria.getRoot().get(store.getConfig().getModelProperty(PROPERTY_IDENTITY_RELATES_TO).getName()), relatesFromIdentity)); } if (queryParameter.equals(Relationship.FROM)) { Object relatedFromIdentity = store.lookupIdentityObjectById((IdentityType) parameterValues[0]); predicates.add(builder.equal(criteria.getRoot().get(store.getConfig().getModelProperty(PROPERTY_IDENTITY_RELATED_TO).getName()), relatedFromIdentity)); } return predicates; }
private void removeCredentials(Object object) { EntityManager em = getEntityManager(); if (getConfig().getCredentialClass() != null) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<?> criteria = builder.createQuery(getConfig().getCredentialClass()); Root<?> root = criteria.from(getConfig().getCredentialClass()); List<Predicate> predicates = new ArrayList<Predicate>(); predicates .add(builder.equal(root.get(getConfig().getModelProperty(PROPERTY_CREDENTIAL_IDENTITY).getName()), object)); criteria.where(predicates.toArray(new Predicate[predicates.size()])); List<?> results = em.createQuery(criteria).getResultList(); for (Object credential : results) { CriteriaQuery<?> attributeCriteria = builder.createQuery(getConfig().getCredentialAttributeClass()); Root<?> attributeRoot = attributeCriteria.from(getConfig().getCredentialAttributeClass()); List<Predicate> attributePredicates = new ArrayList<Predicate>(); Property<Object> attributeCredential = getConfig().getModelProperty( JPAIdentityStoreConfiguration.PROPERTY_CREDENTIAL_ATTRIBUTE); attributePredicates.add(builder.equal(attributeRoot.get(attributeCredential.getName()), credential)); List<?> attributes = em.createQuery(attributeCriteria).getResultList(); for (Object attribute : attributes) { em.remove(attribute); } em.remove(credential); } } }
/** * <p> * Disassociates the given {@link Group} from its childs. * </p> * * @param group */ private void disassociateChilds(Group group, JPAIdentityStore store) { EntityManager em = store.getEntityManager(); CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<?> criteria = builder.createQuery(store.getConfig().getIdentityClass()); Root<?> root = criteria.from(store.getConfig().getIdentityClass()); List<Predicate> predicates = new ArrayList<Predicate>(); Join<?, ?> join = root .join(store.getConfig().getModelProperty(JPAIdentityStoreConfiguration.PROPERTY_PARENT_GROUP).getName()); predicates.add(builder.equal( join.get(store.getConfig().getModelProperty(JPAIdentityStoreConfiguration.PROPERTY_IDENTITY_NAME).getName()), group.getName())); criteria.where(predicates.toArray(new Predicate[predicates.size()])); List<?> resultList = em.createQuery(criteria).getResultList(); for (Object object : resultList) { store.getConfig().getModelProperty(JPAIdentityStoreConfiguration.PROPERTY_PARENT_GROUP).setValue(object, null); em.merge(object); } }
private <T> Object retrieveCurrentCredentialEntity(Agent agent, Class<T> storageClass) { Property<Object> identityTypeProperty = getConfig().getModelProperty(PROPERTY_CREDENTIAL_IDENTITY); Property<Object> typeProperty = getConfig().getModelProperty(PROPERTY_CREDENTIAL_TYPE); Property<Object> effectiveProperty = getConfig().getModelProperty(PROPERTY_CREDENTIAL_EFFECTIVE_DATE); Property<Object> expiryProperty = getConfig().getModelProperty(PROPERTY_CREDENTIAL_EXPIRY_DATE);
private List<?> findAttributes(IdentityType identityType, String idValue, Attribute<? extends Serializable> userAttribute) { Property<Object> attributeIdentityProperty = getConfig().getAttributeIdentityProperty(); EntityManager em = getEntityManager(); CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<?> criteria = builder.createQuery(getConfig().getAttributeClass()); Root<?> root = criteria.from(getConfig().getAttributeClass()); List<Predicate> predicates = new ArrayList<Predicate>(); Join<?, ?> join = root.join(attributeIdentityProperty.getName()); if (IDMUtil.isAgentType(identityType.getClass())) { predicates.add(builder.equal(join.get(getConfig().getIdentityIdProperty().getName()), idValue)); } else { predicates.add(builder.equal(join.get(getConfig().getModelProperty(PROPERTY_IDENTITY_NAME).getName()), idValue)); } predicates.add(builder.equal(root.get(getConfig().getAttributeNameProperty().getName()), userAttribute.getName())); criteria.where(predicates.toArray(new Predicate[predicates.size()])); return em.createQuery(criteria).getResultList(); }
void setModelProperty(Object instance, String propertyName, Object value, boolean required) { if (getConfig().isModelPropertySet(propertyName)) { getConfig().getModelProperty(propertyName).setValue(instance, value); } else if (required) { throw new IdentityManagementException("Model property [" + propertyName + "] has not been configured."); } }
@Override public <T extends IdentityType> List<T> fetchQueryResults(IdentityQuery<T> identityQuery) { List<T> result = new ArrayList<T>(); try { EntityManager em = getEntityManager(); JPACriteriaQueryBuilder criteriaBuilder = new JPACriteriaQueryBuilder(this, identityQuery); List<Predicate> predicates = criteriaBuilder.getPredicates(); CriteriaQuery<?> criteria = criteriaBuilder.getCriteria(); criteria.where(predicates.toArray(new Predicate[predicates.size()])); List<?> queryResult = em.createQuery(criteria).getResultList(); for (Object identity : queryResult) { String discriminator = getConfig().getModelProperty(PROPERTY_IDENTITY_DISCRIMINATOR).getValue(identity) .toString(); IdentityTypeHandler<? extends IdentityType> identityTypeManager = getConfig().getIdentityTypeStores().get( discriminator); T identityType = (T) identityTypeManager.createIdentityType(getContext().getRealm(), identity, this); configurePartition(getContext().getRealm(), identity, identityType); populateAttributes(identityType, identity); result.add(identityType); } } catch (Exception e) { throw new IdentityManagementException("Error executing query.", e); } return result; }
criteria.getRoot().get(store.getConfig().getModelProperty(PROPERTY_IDENTITY_NAME).getName()), parameterValues[0])); Property<Object> memberModelProperty = store.getConfig().getModelProperty(JPAIdentityStoreConfiguration.PROPERTY_MEMBERSHIP_MEMBER); Property<Object> roleModelProperty = store.getConfig().getModelProperty(JPAIdentityStoreConfiguration.PROPERTY_MEMBERSHIP_ROLE);
@Override protected User doCreateIdentityType(Object identity, JPAIdentityStore store) { JPAIdentityStoreConfiguration storeConfig = store.getConfig(); String idValue = storeConfig.getModelProperty(PROPERTY_IDENTITY_ID).getValue(identity).toString(); User user = new SimpleUser(idValue); user.setFirstName(store.getModelProperty(String.class, identity, PROPERTY_USER_FIRST_NAME)); user.setLastName(store.getModelProperty(String.class, identity, PROPERTY_USER_LAST_NAME)); user.setEmail(store.getModelProperty(String.class, identity, PROPERTY_USER_EMAIL)); return user; }
@Override protected Relationship doCreateIdentityType(Object identity, JPAIdentityStore store) { String name = store.getModelProperty(String.class, identity, PROPERTY_IDENTITY_NAME); Object relatesToInstance = store.getModelProperty(Object.class, identity, PROPERTY_IDENTITY_RELATES_TO); String relatesToDiscriminator = store.getConfig().getModelProperty(PROPERTY_IDENTITY_DISCRIMINATOR).getValue(relatesToInstance) .toString(); IdentityTypeHandler<? extends IdentityType> relatesToIdentityTypeManager = store.getConfig().getIdentityTypeManager(relatesToDiscriminator); IdentityType relatesToType = relatesToIdentityTypeManager.createIdentityType(null, relatesToInstance, store); Object relatedToInstance = store.getModelProperty(Object.class, identity, PROPERTY_IDENTITY_RELATED_TO); String relatedToDiscriminator = store.getConfig().getModelProperty(PROPERTY_IDENTITY_DISCRIMINATOR).getValue(relatesToInstance) .toString(); IdentityTypeHandler<? extends IdentityType> relatedToTypeManager = store.getConfig().getIdentityTypeManager(relatedToDiscriminator); IdentityType relatedToType = relatedToTypeManager.createIdentityType(null, relatedToInstance, store); SimpleRelationship relationship = new SimpleRelationship(name); relationship.setFrom(relatedToType); relationship.setTo(relatesToType); return relationship; }