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 package org.opends.server.admin.std.meta;
028
029
030
031 import org.opends.server.admin.AdministratorAction;
032 import org.opends.server.admin.BooleanPropertyDefinition;
033 import org.opends.server.admin.ClassPropertyDefinition;
034 import org.opends.server.admin.client.AuthorizationException;
035 import org.opends.server.admin.client.CommunicationException;
036 import org.opends.server.admin.client.ConcurrentModificationException;
037 import org.opends.server.admin.client.ManagedObject;
038 import org.opends.server.admin.client.MissingMandatoryPropertiesException;
039 import org.opends.server.admin.client.OperationRejectedException;
040 import org.opends.server.admin.ManagedObjectAlreadyExistsException;
041 import org.opends.server.admin.ManagedObjectDefinition;
042 import org.opends.server.admin.PropertyOption;
043 import org.opends.server.admin.PropertyProvider;
044 import org.opends.server.admin.server.ConfigurationChangeListener;
045 import org.opends.server.admin.server.ServerManagedObject;
046 import org.opends.server.admin.std.client.PasswordStorageSchemeCfgClient;
047 import org.opends.server.admin.std.server.PasswordStorageSchemeCfg;
048 import org.opends.server.admin.Tag;
049 import org.opends.server.admin.TopCfgDefn;
050 import org.opends.server.admin.UndefinedDefaultBehaviorProvider;
051 import org.opends.server.types.DN;
052
053
054
055 /**
056 * An interface for querying the Password Storage Scheme managed
057 * object definition meta information.
058 * <p>
059 * Password Storage Schemes encode new passwords provided by users so
060 * that they are stored in an encoded manner. This makes it difficult
061 * or impossible for someone to determine the clear-text passwords from
062 * the encoded values.
063 */
064 public final class PasswordStorageSchemeCfgDefn extends ManagedObjectDefinition<PasswordStorageSchemeCfgClient, PasswordStorageSchemeCfg> {
065
066 // The singleton configuration definition instance.
067 private static final PasswordStorageSchemeCfgDefn INSTANCE = new PasswordStorageSchemeCfgDefn();
068
069
070
071 // The "enabled" property definition.
072 private static final BooleanPropertyDefinition PD_ENABLED;
073
074
075
076 // The "java-class" property definition.
077 private static final ClassPropertyDefinition PD_JAVA_CLASS;
078
079
080
081 // Build the "enabled" property definition.
082 static {
083 BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "enabled");
084 builder.setOption(PropertyOption.MANDATORY);
085 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "enabled"));
086 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<Boolean>());
087 PD_ENABLED = builder.getInstance();
088 INSTANCE.registerPropertyDefinition(PD_ENABLED);
089 }
090
091
092
093 // Build the "java-class" property definition.
094 static {
095 ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class");
096 builder.setOption(PropertyOption.MANDATORY);
097 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "java-class"));
098 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
099 builder.addInstanceOf("org.opends.server.api.PasswordStorageScheme");
100 PD_JAVA_CLASS = builder.getInstance();
101 INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
102 }
103
104
105
106 // Register the tags associated with this managed object definition.
107 static {
108 INSTANCE.registerTag(Tag.valueOf("user-management"));
109 }
110
111
112
113 /**
114 * Get the Password Storage Scheme configuration definition
115 * singleton.
116 *
117 * @return Returns the Password Storage Scheme configuration
118 * definition singleton.
119 */
120 public static PasswordStorageSchemeCfgDefn getInstance() {
121 return INSTANCE;
122 }
123
124
125
126 /**
127 * Private constructor.
128 */
129 private PasswordStorageSchemeCfgDefn() {
130 super("password-storage-scheme", TopCfgDefn.getInstance());
131 }
132
133
134
135 /**
136 * {@inheritDoc}
137 */
138 public PasswordStorageSchemeCfgClient createClientConfiguration(
139 ManagedObject<? extends PasswordStorageSchemeCfgClient> impl) {
140 return new PasswordStorageSchemeCfgClientImpl(impl);
141 }
142
143
144
145 /**
146 * {@inheritDoc}
147 */
148 public PasswordStorageSchemeCfg createServerConfiguration(
149 ServerManagedObject<? extends PasswordStorageSchemeCfg> impl) {
150 return new PasswordStorageSchemeCfgServerImpl(impl);
151 }
152
153
154
155 /**
156 * {@inheritDoc}
157 */
158 public Class<PasswordStorageSchemeCfg> getServerConfigurationClass() {
159 return PasswordStorageSchemeCfg.class;
160 }
161
162
163
164 /**
165 * Get the "enabled" property definition.
166 * <p>
167 * Indicates whether the Password Storage Scheme is enabled for use.
168 *
169 * @return Returns the "enabled" property definition.
170 */
171 public BooleanPropertyDefinition getEnabledPropertyDefinition() {
172 return PD_ENABLED;
173 }
174
175
176
177 /**
178 * Get the "java-class" property definition.
179 * <p>
180 * Specifies the fully-qualified name of the Java class that
181 * provides the Password Storage Scheme implementation.
182 *
183 * @return Returns the "java-class" property definition.
184 */
185 public ClassPropertyDefinition getJavaClassPropertyDefinition() {
186 return PD_JAVA_CLASS;
187 }
188
189
190
191 /**
192 * Managed object client implementation.
193 */
194 private static class PasswordStorageSchemeCfgClientImpl implements
195 PasswordStorageSchemeCfgClient {
196
197 // Private implementation.
198 private ManagedObject<? extends PasswordStorageSchemeCfgClient> impl;
199
200
201
202 // Private constructor.
203 private PasswordStorageSchemeCfgClientImpl(
204 ManagedObject<? extends PasswordStorageSchemeCfgClient> impl) {
205 this.impl = impl;
206 }
207
208
209
210 /**
211 * {@inheritDoc}
212 */
213 public Boolean isEnabled() {
214 return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
215 }
216
217
218
219 /**
220 * {@inheritDoc}
221 */
222 public void setEnabled(boolean value) {
223 impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value);
224 }
225
226
227
228 /**
229 * {@inheritDoc}
230 */
231 public String getJavaClass() {
232 return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
233 }
234
235
236
237 /**
238 * {@inheritDoc}
239 */
240 public void setJavaClass(String value) {
241 impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
242 }
243
244
245
246 /**
247 * {@inheritDoc}
248 */
249 public ManagedObjectDefinition<? extends PasswordStorageSchemeCfgClient, ? extends PasswordStorageSchemeCfg> definition() {
250 return INSTANCE;
251 }
252
253
254
255 /**
256 * {@inheritDoc}
257 */
258 public PropertyProvider properties() {
259 return impl;
260 }
261
262
263
264 /**
265 * {@inheritDoc}
266 */
267 public void commit() throws ManagedObjectAlreadyExistsException,
268 MissingMandatoryPropertiesException, ConcurrentModificationException,
269 OperationRejectedException, AuthorizationException,
270 CommunicationException {
271 impl.commit();
272 }
273
274 }
275
276
277
278 /**
279 * Managed object server implementation.
280 */
281 private static class PasswordStorageSchemeCfgServerImpl implements
282 PasswordStorageSchemeCfg {
283
284 // Private implementation.
285 private ServerManagedObject<? extends PasswordStorageSchemeCfg> impl;
286
287 // The value of the "enabled" property.
288 private final boolean pEnabled;
289
290 // The value of the "java-class" property.
291 private final String pJavaClass;
292
293
294
295 // Private constructor.
296 private PasswordStorageSchemeCfgServerImpl(ServerManagedObject<? extends PasswordStorageSchemeCfg> impl) {
297 this.impl = impl;
298 this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
299 this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
300 }
301
302
303
304 /**
305 * {@inheritDoc}
306 */
307 public void addChangeListener(
308 ConfigurationChangeListener<PasswordStorageSchemeCfg> listener) {
309 impl.registerChangeListener(listener);
310 }
311
312
313
314 /**
315 * {@inheritDoc}
316 */
317 public void removeChangeListener(
318 ConfigurationChangeListener<PasswordStorageSchemeCfg> listener) {
319 impl.deregisterChangeListener(listener);
320 }
321
322
323
324 /**
325 * {@inheritDoc}
326 */
327 public boolean isEnabled() {
328 return pEnabled;
329 }
330
331
332
333 /**
334 * {@inheritDoc}
335 */
336 public String getJavaClass() {
337 return pJavaClass;
338 }
339
340
341
342 /**
343 * {@inheritDoc}
344 */
345 public Class<? extends PasswordStorageSchemeCfg> configurationClass() {
346 return PasswordStorageSchemeCfg.class;
347 }
348
349
350
351 /**
352 * {@inheritDoc}
353 */
354 public DN dn() {
355 return impl.getDN();
356 }
357
358 }
359 }