| | |
| | | * |
| | | * |
| | | * Copyright 2008-2009 Sun Microsystems, Inc. |
| | | * Portions Copyright 2013-2014 ForgeRock, AS. |
| | | * Portions Copyright 2013-2014 ForgeRock AS. |
| | | */ |
| | | package org.forgerock.opendj.config.client.ldap; |
| | | |
| | |
| | | import org.forgerock.opendj.ldap.Connection; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.forgerock.opendj.ldap.EntryNotFoundException; |
| | | import org.forgerock.opendj.ldap.ErrorResultException; |
| | | import org.forgerock.opendj.ldap.ErrorResultIOException; |
| | | import org.forgerock.opendj.ldap.LdapException; |
| | | import org.forgerock.opendj.ldap.Filter; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.forgerock.opendj.ldap.SearchResultReferenceIOException; |
| | |
| | | @Override |
| | | public <C extends ConfigurationClient, S extends Configuration> ManagedObject<? extends C> getManagedObject( |
| | | ManagedObjectPath<C, S> path) throws DefinitionDecodingException, ManagedObjectDecodingException, |
| | | ManagedObjectNotFoundException, ErrorResultException { |
| | | ManagedObjectNotFoundException, LdapException { |
| | | if (!managedObjectExists(path)) { |
| | | throw new ManagedObjectNotFoundException(); |
| | | } |
| | |
| | | } else { |
| | | throw new ManagedObjectDecodingException(mo, exceptions); |
| | | } |
| | | } catch (ErrorResultException e) { |
| | | } catch (LdapException e) { |
| | | if (e.getResult().getResultCode() == ResultCode.NO_SUCH_OBJECT) { |
| | | throw new ManagedObjectNotFoundException(); |
| | | } |
| | |
| | | @Override |
| | | public <C extends ConfigurationClient, S extends Configuration, P> SortedSet<P> getPropertyValues( |
| | | ManagedObjectPath<C, S> path, PropertyDefinition<P> propertyDef) throws DefinitionDecodingException, |
| | | ManagedObjectNotFoundException, ErrorResultException { |
| | | ManagedObjectNotFoundException, LdapException { |
| | | // Check that the requested property is from the definition |
| | | // associated with the path. |
| | | AbstractManagedObjectDefinition<C, S> d = path.getManagedObjectDefinition(); |
| | |
| | | } |
| | | |
| | | return values; |
| | | } catch (ErrorResultException e) { |
| | | } catch (LdapException e) { |
| | | if (e.getResult().getResultCode() == ResultCode.NO_SUCH_OBJECT) { |
| | | throw new ManagedObjectNotFoundException(); |
| | | } |
| | |
| | | public <C extends ConfigurationClient, S extends Configuration> String[] listManagedObjects( |
| | | ManagedObjectPath<?, ?> parent, InstantiableRelationDefinition<C, S> rd, |
| | | AbstractManagedObjectDefinition<? extends C, ? extends S> d) throws ManagedObjectNotFoundException, |
| | | ErrorResultException { |
| | | LdapException { |
| | | validateRelationDefinition(parent, rd); |
| | | |
| | | if (!managedObjectExists(parent)) { |
| | |
| | | for (DN child : listEntries(dn, filter)) { |
| | | children.add(child.rdn().getFirstAVA().getAttributeValue().toString()); |
| | | } |
| | | } catch (ErrorResultException e) { |
| | | } catch (LdapException e) { |
| | | if (e.getResult().getResultCode() == ResultCode.NO_SUCH_OBJECT) { |
| | | // Ignore this |
| | | // It means that the base entry does not exist |
| | |
| | | public <C extends ConfigurationClient, S extends Configuration> String[] listManagedObjects( |
| | | ManagedObjectPath<?, ?> parent, SetRelationDefinition<C, S> rd, |
| | | AbstractManagedObjectDefinition<? extends C, ? extends S> d) throws ManagedObjectNotFoundException, |
| | | ErrorResultException { |
| | | LdapException { |
| | | validateRelationDefinition(parent, rd); |
| | | |
| | | if (!managedObjectExists(parent)) { |
| | |
| | | for (DN child : listEntries(dn, filter)) { |
| | | children.add(child.rdn().getFirstAVA().getAttributeValue().toString()); |
| | | } |
| | | } catch (ErrorResultException e) { |
| | | } catch (LdapException e) { |
| | | if (e.getResult().getResultCode() == ResultCode.NO_SUCH_OBJECT) { |
| | | // Ignore this |
| | | // It means that the base entry does not exist |
| | |
| | | */ |
| | | @Override |
| | | public boolean managedObjectExists(ManagedObjectPath<?, ?> path) throws ManagedObjectNotFoundException, |
| | | ErrorResultException { |
| | | LdapException { |
| | | if (path.isEmpty()) { |
| | | return true; |
| | | } |
| | |
| | | */ |
| | | @Override |
| | | protected <C extends ConfigurationClient, S extends Configuration> void deleteManagedObject( |
| | | ManagedObjectPath<C, S> path) throws OperationRejectedException, ErrorResultException { |
| | | ManagedObjectPath<C, S> path) throws OperationRejectedException, LdapException { |
| | | // Delete the entry and any subordinate entries. |
| | | DN dn = DNBuilder.create(path, profile); |
| | | try { |
| | | deleteSubtree(dn); |
| | | } catch (ErrorResultException e) { |
| | | } catch (LdapException e) { |
| | | if (e.getResult().getResultCode() == ResultCode.UNWILLING_TO_PERFORM) { |
| | | AbstractManagedObjectDefinition<?, ?> d = path.getManagedObjectDefinition(); |
| | | LocalizableMessage m = LocalizableMessage.raw("%s", e.getMessage()); |
| | |
| | | * @param dn |
| | | * The LDAP entry name. |
| | | * @return Returns <code>true</code> if the named LDAP entry exists. |
| | | * @throws ErrorResultException |
| | | * @throws LdapException |
| | | * if a problem occurs. |
| | | */ |
| | | boolean entryExists(DN dn) throws ErrorResultException { |
| | | boolean entryExists(DN dn) throws LdapException { |
| | | try { |
| | | connection.readEntry(dn, "1.1"); |
| | | return true; |
| | |
| | | // entry. |
| | | // @Checkstyle:off |
| | | private <C extends ConfigurationClient, S extends Configuration> ManagedObjectDefinition<? extends C, ? extends S> |
| | | getEntryDefinition(AbstractManagedObjectDefinition<C, S> d, DN dn) throws ErrorResultException, |
| | | getEntryDefinition(AbstractManagedObjectDefinition<C, S> d, DN dn) throws LdapException, |
| | | DefinitionDecodingException { |
| | | // @Checkstyle:on |
| | | SearchResultEntry searchResultEntry = connection.readEntry(dn, "objectclass"); |
| | |
| | | * Delete a subtree of entries. We cannot use the subtree delete control because it is not supported by the config |
| | | * backend. |
| | | */ |
| | | private void deleteSubtree(DN dn) throws ErrorResultException { |
| | | private void deleteSubtree(DN dn) throws LdapException { |
| | | // Delete the children first. |
| | | for (DN child : listEntries(dn, Filter.objectClassPresent())) { |
| | | deleteSubtree(child); |
| | |
| | | connection.delete(dn.toString()); |
| | | } |
| | | |
| | | private Collection<DN> listEntries(DN dn, Filter filter) throws ErrorResultException { |
| | | private Collection<DN> listEntries(DN dn, Filter filter) throws LdapException { |
| | | List<DN> names = new LinkedList<DN>(); |
| | | ConnectionEntryReader reader = |
| | | connection.search(dn.toString(), SearchScope.SINGLE_LEVEL, filter.toString()); |
| | |
| | | while (reader.hasNext()) { |
| | | names.add(reader.readEntry().getName()); |
| | | } |
| | | } catch (ErrorResultIOException e) { |
| | | throw e.getCause(); |
| | | } catch (SearchResultReferenceIOException e) { |
| | | // Ignore. |
| | | } finally { |