| | |
| | | |
| | | package org.opends.server.admin; |
| | | |
| | | |
| | | |
| | | import static org.opends.server.util.Validator.ensureNotNull; |
| | | import static com.forgerock.opendj.util.Validator.*; |
| | | |
| | | import java.util.EnumSet; |
| | | |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.opends.server.types.DirectoryException; |
| | | |
| | | |
| | | |
| | | /** |
| | | * DN property definition. |
| | | */ |
| | | public final class DNPropertyDefinition extends PropertyDefinition<DN> { |
| | | |
| | | // Optional base DN which all valid values must be immediately |
| | | // subordinate to. |
| | | private final DN baseDN; |
| | | |
| | | |
| | | |
| | | /** |
| | | * An interface for incrementally constructing DN property |
| | | * definitions. |
| | | */ |
| | | public static class Builder extends |
| | | AbstractBuilder<DN, DNPropertyDefinition> { |
| | | |
| | | // Optional base DN which all valid values must be immediately |
| | | // subordinate to. |
| | | private DN baseDN = null; |
| | | |
| | | |
| | | |
| | | // Private constructor |
| | | private Builder( |
| | | AbstractManagedObjectDefinition<?, ?> d, String propertyName) { |
| | | super(d, propertyName); |
| | | } |
| | | |
| | | |
| | | private final DN baseDN; |
| | | |
| | | /** |
| | | * Set the base DN which all valid values must be immediately |
| | | * subordinate to. By default there is no based DN. |
| | | * |
| | | * @param baseDN |
| | | * The string representation of the base DN. |
| | | * @throws IllegalArgumentException |
| | | * If the provided string is not a valid DN string |
| | | * representation. |
| | | * An interface for incrementally constructing DN property definitions. |
| | | */ |
| | | public void setBaseDN(String baseDN) |
| | | throws IllegalArgumentException { |
| | | if (baseDN == null) { |
| | | setBaseDN((DN) null); |
| | | } else { |
| | | try { |
| | | setBaseDN(DN.decode(baseDN)); |
| | | } catch (DirectoryException e) { |
| | | throw new IllegalArgumentException(e); |
| | | public static class Builder extends AbstractBuilder<DN, DNPropertyDefinition> { |
| | | |
| | | // Optional base DN which all valid values must be immediately |
| | | // subordinate to. |
| | | private DN baseDN = null; |
| | | |
| | | // Private constructor |
| | | private Builder(AbstractManagedObjectDefinition<?, ?> d, String propertyName) { |
| | | super(d, propertyName); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Set the base DN which all valid values must be immediately |
| | | * subordinate to. By default there is no based DN. |
| | | * |
| | | * @param baseDN |
| | | * The string representation of the base DN. |
| | | * @throws IllegalArgumentException |
| | | * If the provided string is not a valid DN string |
| | | * representation. |
| | | */ |
| | | public void setBaseDN(String baseDN) throws IllegalArgumentException { |
| | | if (baseDN == null) { |
| | | setBaseDN((DN) null); |
| | | } else { |
| | | // TODO: is it correct to replace server DN.decode by SDK |
| | | // valueOf ? |
| | | setBaseDN(DN.valueOf(baseDN)); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Set the base DN which all valid values must be immediately |
| | | * subordinate to. By default there is no based DN. |
| | | * |
| | | * @param baseDN |
| | | * The base DN. |
| | | */ |
| | | public void setBaseDN(DN baseDN) { |
| | | this.baseDN = baseDN; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | protected DNPropertyDefinition buildInstance(AbstractManagedObjectDefinition<?, ?> d, String propertyName, |
| | | EnumSet<PropertyOption> options, AdministratorAction adminAction, |
| | | DefaultBehaviorProvider<DN> defaultBehavior) { |
| | | return new DNPropertyDefinition(d, propertyName, options, adminAction, defaultBehavior, baseDN); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Set the base DN which all valid values must be immediately |
| | | * subordinate to. By default there is no based DN. |
| | | * Create a DN property definition builder. |
| | | * |
| | | * @param baseDN |
| | | * The base DN. |
| | | * @param d |
| | | * The managed object definition associated with this property |
| | | * definition. |
| | | * @param propertyName |
| | | * The property name. |
| | | * @return Returns the new boolean property definition builder. |
| | | */ |
| | | public void setBaseDN(DN baseDN) { |
| | | this.baseDN = baseDN; |
| | | public static Builder createBuilder(AbstractManagedObjectDefinition<?, ?> d, String propertyName) { |
| | | return new Builder(d, propertyName); |
| | | } |
| | | |
| | | // Private constructor. |
| | | private DNPropertyDefinition(AbstractManagedObjectDefinition<?, ?> d, String propertyName, |
| | | EnumSet<PropertyOption> options, AdministratorAction adminAction, |
| | | DefaultBehaviorProvider<DN> defaultBehavior, DN baseDN) { |
| | | super(d, DN.class, propertyName, options, adminAction, defaultBehavior); |
| | | this.baseDN = baseDN; |
| | | } |
| | | |
| | | /** |
| | | * Get the base DN which all valid values must be immediately subordinate |
| | | * to, or <code>null</code> if there is no based DN. |
| | | * |
| | | * @return Returns the base DN which all valid values must be immediately |
| | | * subordinate to. |
| | | */ |
| | | public DN getBaseDN() { |
| | | return baseDN; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | protected DNPropertyDefinition buildInstance( |
| | | AbstractManagedObjectDefinition<?, ?> d, String propertyName, |
| | | EnumSet<PropertyOption> options, |
| | | AdministratorAction adminAction, |
| | | DefaultBehaviorProvider<DN> defaultBehavior) { |
| | | return new DNPropertyDefinition(d, propertyName, options, |
| | | adminAction, defaultBehavior, baseDN); |
| | | public void validateValue(DN value) throws IllegalPropertyValueException { |
| | | ensureNotNull(value); |
| | | |
| | | if (baseDN != null) { |
| | | DN parent = value.parent(); |
| | | |
| | | if (parent == null) { |
| | | parent = DN.rootDN(); |
| | | } |
| | | |
| | | if (!parent.equals(baseDN)) { |
| | | throw new IllegalPropertyValueException(this, value); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public DN decodeValue(String value) throws IllegalPropertyValueStringException { |
| | | ensureNotNull(value); |
| | | |
| | | |
| | | /** |
| | | * Create a DN property definition builder. |
| | | * |
| | | * @param d |
| | | * The managed object definition associated with this |
| | | * property definition. |
| | | * @param propertyName |
| | | * The property name. |
| | | * @return Returns the new boolean property definition builder. |
| | | */ |
| | | public static Builder createBuilder( |
| | | AbstractManagedObjectDefinition<?, ?> d, String propertyName) { |
| | | return new Builder(d, propertyName); |
| | | } |
| | | |
| | | |
| | | |
| | | // Private constructor. |
| | | private DNPropertyDefinition( |
| | | AbstractManagedObjectDefinition<?, ?> d, String propertyName, |
| | | EnumSet<PropertyOption> options, |
| | | AdministratorAction adminAction, |
| | | DefaultBehaviorProvider<DN> defaultBehavior, DN baseDN) { |
| | | super(d, DN.class, propertyName, options, adminAction, defaultBehavior); |
| | | this.baseDN = baseDN; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Get the base DN which all valid values must be immediately |
| | | * subordinate to, or <code>null</code> if there is no based DN. |
| | | * |
| | | * @return Returns the base DN which all valid values must be |
| | | * immediately subordinate to. |
| | | */ |
| | | public DN getBaseDN() { |
| | | return baseDN; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public void validateValue(DN value) |
| | | throws IllegalPropertyValueException { |
| | | ensureNotNull(value); |
| | | |
| | | if (baseDN != null) { |
| | | DN parent = value.getParent(); |
| | | |
| | | if (parent == null) { |
| | | parent = DN.nullDN(); |
| | | } |
| | | |
| | | if (!parent.equals(baseDN)) { |
| | | throw new IllegalPropertyValueException(this, value); |
| | | } |
| | | try { |
| | | // TODO: is it correct to replace server DN.decode by SDK valueOf ? |
| | | DN dn = DN.valueOf(value); |
| | | validateValue(dn); |
| | | return dn; |
| | | } catch (IllegalPropertyValueException e) { |
| | | throw new IllegalPropertyValueStringException(this, value); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public DN decodeValue(String value) |
| | | throws IllegalPropertyValueStringException { |
| | | ensureNotNull(value); |
| | | |
| | | try { |
| | | DN dn = DN.decode(value); |
| | | validateValue(dn); |
| | | return dn; |
| | | } catch (DirectoryException e) { |
| | | throw new IllegalPropertyValueStringException(this, value); |
| | | } catch (IllegalPropertyValueException e) { |
| | | throw new IllegalPropertyValueStringException(this, value); |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public <R, P> R accept(PropertyDefinitionVisitor<R, P> v, P p) { |
| | | return v.visitDN(this, p); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public <R, P> R accept(PropertyValueVisitor<R, P> v, DN value, P p) { |
| | | return v.visitDN(this, value, p); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public <R, P> R accept(PropertyDefinitionVisitor<R, P> v, P p) { |
| | | return v.visitDN(this, p); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public <R, P> R accept(PropertyValueVisitor<R, P> v, DN value, P p) { |
| | | return v.visitDN(this, value, p); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public int compare(DN o1, DN o2) { |
| | | return o1.compareTo(o2); |
| | | } |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public int compare(DN o1, DN o2) { |
| | | return o1.compareTo(o2); |
| | | } |
| | | } |