001 /*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License"). You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 * Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 * Copyright 2008 Sun Microsystems, Inc.
026 */
027
028 package org.opends.server.admin;
029
030 import org.opends.server.authorization.dseecompat.Aci;
031 import org.opends.server.authorization.dseecompat.AciException;
032 import org.opends.server.types.DN;
033 import static org.opends.server.util.Validator.ensureNotNull;
034 import org.opends.server.protocols.asn1.ASN1OctetString;
035
036 import java.util.EnumSet;
037
038 /**
039 * ACI property definition.
040 */
041 public class ACIPropertyDefinition extends PropertyDefinition<Aci> {
042
043
044 /**
045 * An interface for incrementally constructing ACI property
046 * definitions.
047 */
048 public static class Builder extends
049 AbstractBuilder<Aci, ACIPropertyDefinition> {
050
051 // Private constructor
052 private Builder(
053 AbstractManagedObjectDefinition<?, ?> d, String propertyName) {
054 super(d, propertyName);
055 }
056
057 /**
058 * {@inheritDoc}
059 */
060 @Override
061 protected ACIPropertyDefinition buildInstance(
062 AbstractManagedObjectDefinition<?, ?> d,
063 String propertyName, EnumSet<PropertyOption> options,
064 AdministratorAction adminAction,
065 DefaultBehaviorProvider<Aci> defaultBehavior) {
066 return new ACIPropertyDefinition(d, propertyName, options,
067 adminAction, defaultBehavior);
068 }
069 }
070
071
072 /**
073 * Create a ACI property definition builder.
074 *
075 * @param d
076 * The managed object definition associated with this
077 * property definition.
078 * @param propertyName
079 * The property name.
080 * @return Returns the new ACI property definition builder.
081 */
082 public static Builder createBuilder(
083 AbstractManagedObjectDefinition<?, ?> d, String propertyName) {
084 return new Builder(d, propertyName);
085 }
086
087
088 // Private constructor.
089 private ACIPropertyDefinition(
090 AbstractManagedObjectDefinition<?, ?> d, String propertyName,
091 EnumSet<PropertyOption> options,
092 AdministratorAction adminAction,
093 DefaultBehaviorProvider<Aci> defaultBehavior) {
094 super(d, Aci.class, propertyName, options, adminAction,
095 defaultBehavior);
096 }
097
098
099 /**
100 * {@inheritDoc}
101 */
102 @Override
103 public void validateValue(Aci value)
104 throws IllegalPropertyValueException {
105 ensureNotNull(value);
106
107 // No additional validation required.
108 }
109
110 /**
111 * {@inheritDoc}
112 */
113 @Override
114 public Aci decodeValue(String value)
115 throws IllegalPropertyValueStringException {
116 ensureNotNull(value);
117
118 try {
119 return Aci.decode(new ASN1OctetString(value), DN.NULL_DN);
120 } catch (AciException e) {
121 // TODO: it would be nice to throw the cause.
122 throw new IllegalPropertyValueStringException(this, value);
123 }
124 }
125
126
127 /**
128 * {@inheritDoc}
129 */
130 @Override
131 public <R, P> R accept(PropertyDefinitionVisitor<R, P> v, P p) {
132 return v.visitACI(this, p);
133 }
134
135 /**
136 * {@inheritDoc}
137 */
138 @Override
139 public <R, P> R accept(PropertyValueVisitor<R, P> v, Aci value, P p) {
140 return v.visitACI(this, value, p);
141 }
142
143
144 /**
145 * {@inheritDoc}
146 */
147 @Override
148 public int compare(Aci o1, Aci o2) {
149 return o1.toString().compareTo(o2.toString());
150 }
151 }