@Override public void updateCredential(Account account, Object credential, Date effectiveDate, Date expiryDate) { checkIfExists(account); if (credential == null) { throw MESSAGES.nullArgument("Credential"); } try { IdentityContext identityContext = getIdentityContext(); getStoreSelector().getStoreForCredentialOperation(identityContext, credential.getClass()).updateCredential(identityContext, account, credential, effectiveDate, expiryDate); fireEvent(new CredentialUpdatedEvent(account, credential, effectiveDate, expiryDate, this.partitionManager)); } catch (Exception e) { throw MESSAGES.credentialUpdateFailed(account, credential, e); } }
@SuppressWarnings({"rawtypes", "unchecked"}) @Override public <T extends IdentityType> IdentityQuery<T> createIdentityQuery(Class<T> identityType) { if (identityType == null) { throw MESSAGES.nullArgument("IdentityType class"); } return new DefaultIdentityQuery(getQueryBuilder(), getIdentityContext(), identityType, this.partitionManager, getStoreSelector()); }
@Override public <T extends IdentityType> T lookupIdentityById(Class<T> identityType, String id) { return lookupById(identityType, id); }
@Override public IdentityQueryBuilder getQueryBuilder() { return new DefaultQueryBuilder(getIdentityContext(), this.partitionManager, getStoreSelector()); }
@Override public void removeCredential(Account account, Class<? extends CredentialStorage> storageClass) { checkIfExists(account); if (storageClass == null) { throw MESSAGES.nullArgument("CredentialStorage type"); } try { IdentityContext identityContext = getIdentityContext(); for (CredentialStore credentialStore : getStoreSelector().getStoresForCredentialStorage(identityContext, storageClass)) { credentialStore.removeCredential(identityContext, account, storageClass); } } catch (Exception e) { throw MESSAGES.credentialRetrievalFailed(account, storageClass, e); } }
@Override protected void fireAttributedTypeRemovedEvent(IdentityType attributedType) { fireEvent(new IdentityTypeDeletedEvent(attributedType, this.partitionManager)); }
@Override public <C extends IdentityType> C lookupById(Class<C> attributedType, String id) throws IdentityManagementException { if (attributedType == null) { throw MESSAGES.nullArgument("IdentityType class"); } if (id == null) { throw MESSAGES.nullArgument("Identifier"); } IdentityQueryBuilder queryBuilder = getQueryBuilder(); IdentityQuery<C> query = queryBuilder.createIdentityQuery(attributedType); query.where(queryBuilder.equal(IdentityType.ID, id)); List<C> result = query.getResultList(); C identity = null; if (!result.isEmpty()) { if (result.size() > 1) { throw MESSAGES.attributedTypeAmbiguosFoundWithId(id); } else { identity = result.get(0); } } return identity; }
@Override protected void checkIfExists(IdentityType identityType) throws IdentityManagementException { if (identityType == null) { throw MESSAGES.nullArgument("IdentityType"); } if (lookupIdentityById(identityType.getClass(), identityType.getId()) == null) { throw MESSAGES.attributedTypeNotFoundWithId(identityType.getClass(), identityType.getId(), identityType.getPartition()); } }
@Override public void updateCredential(Account account, Object credential) { updateCredential(account, credential, null, null); }
@Override public IdentityManager createIdentityManager(Partition partition) throws IdentityManagementException { if (partition == null) { if (!getConfiguration().supportsPartition()) { return createIdentityManager(); } throw MESSAGES.nullArgument("Partition"); } Partition storedPartition = getStoredPartition(partition); try { return new ContextualIdentityManager(storedPartition, this); } catch (Exception e) { throw MESSAGES.partitionCouldNotCreateIdentityManager(storedPartition, e); } }
@Override public void removeCredential(Account account, Class<? extends CredentialStorage> storageClass) { checkIfExists(account); if (storageClass == null) { throw MESSAGES.nullArgument("CredentialStorage type"); } try { IdentityContext identityContext = getIdentityContext(); for (CredentialStore credentialStore : getStoreSelector().getStoresForCredentialStorage(identityContext, storageClass)) { credentialStore.removeCredential(identityContext, account, storageClass); } } catch (Exception e) { throw MESSAGES.credentialRetrievalFailed(account, storageClass, e); } }
@Override public IdentityQueryBuilder getQueryBuilder() { return new DefaultQueryBuilder(getIdentityContext(), this.partitionManager, getStoreSelector()); }
@Override protected void fireAttributedTypeUpdatedEvent(IdentityType attributedType) { fireEvent(new IdentityTypeUpdatedEvent(attributedType, this.partitionManager)); }
@Override public <C extends IdentityType> C lookupById(Class<C> attributedType, String id) throws IdentityManagementException { if (attributedType == null) { throw MESSAGES.nullArgument("IdentityType class"); } if (id == null) { throw MESSAGES.nullArgument("Identifier"); } IdentityQueryBuilder queryBuilder = getQueryBuilder(); IdentityQuery<C> query = queryBuilder.createIdentityQuery(attributedType); query.where(queryBuilder.equal(IdentityType.ID, id)); List<C> result = query.getResultList(); C identity = null; if (!result.isEmpty()) { if (result.size() > 1) { throw MESSAGES.attributedTypeAmbiguosFoundWithId(id); } else { identity = result.get(0); } } return identity; }
@Override protected void checkIfExists(IdentityType identityType) throws IdentityManagementException { if (identityType == null) { throw MESSAGES.nullArgument("IdentityType"); } if (lookupIdentityById(identityType.getClass(), identityType.getId()) == null) { throw MESSAGES.attributedTypeNotFoundWithId(identityType.getClass(), identityType.getId(), identityType.getPartition()); } }
@Override public void updateCredential(Account account, Object credential) { updateCredential(account, credential, null, null); }
@Override public IdentityManager createIdentityManager(Partition partition) throws IdentityManagementException { if (partition == null) { if (!getConfiguration().supportsPartition()) { return createIdentityManager(); } throw MESSAGES.nullArgument("Partition"); } Partition storedPartition = getStoredPartition(partition); try { return new ContextualIdentityManager(storedPartition, this); } catch (Exception e) { throw MESSAGES.partitionCouldNotCreateIdentityManager(storedPartition, e); } }
@Override public <T extends CredentialStorage> List<T> retrieveCredentials(Account account, Class<T> storageClass) { checkIfExists(account); if (storageClass == null) { throw MESSAGES.nullArgument("CredentialStorage type"); } List<T> storages = new ArrayList<T>(); try { IdentityContext identityContext = getIdentityContext(); for (CredentialStore credentialStore : getStoreSelector().getStoresForCredentialStorage(identityContext, storageClass)) { storages.addAll(credentialStore.retrieveCredentials(identityContext, account, storageClass)); } } catch (Exception e) { throw MESSAGES.credentialRetrievalFailed(account, storageClass, e); } return storages; }
@Override protected void doAdd(IdentityType attributedType) { IdentityContext identityContext = getIdentityContext(); IdentityStore identityStore = getStoreSelector().getStoreForIdentityOperation(identityContext, IdentityStore.class, attributedType.getClass(), IdentityOperation.create); identityStore.add(identityContext, attributedType); configureDefaultPartition(identityContext, attributedType, identityStore, this.partitionManager); }
@Override public void updateCredential(Account account, Object credential, Date effectiveDate, Date expiryDate) { checkIfExists(account); if (credential == null) { throw MESSAGES.nullArgument("Credential"); } try { IdentityContext identityContext = getIdentityContext(); getStoreSelector().getStoreForCredentialOperation(identityContext, credential.getClass()).updateCredential(identityContext, account, credential, effectiveDate, expiryDate); fireEvent(new CredentialUpdatedEvent(account, credential, effectiveDate, expiryDate, this.partitionManager)); } catch (Exception e) { throw MESSAGES.credentialUpdateFailed(account, credential, e); } }