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.ExtendedOperationHandlerCfgClient;
047 import org.opends.server.admin.std.server.ExtendedOperationHandlerCfg;
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 Extended Operation Handler managed
057 * object definition meta information.
058 * <p>
059 * Extended Operation Handlers processes the different types of
060 * extended operations in the server.
061 */
062 public final class ExtendedOperationHandlerCfgDefn extends ManagedObjectDefinition<ExtendedOperationHandlerCfgClient, ExtendedOperationHandlerCfg> {
063
064 // The singleton configuration definition instance.
065 private static final ExtendedOperationHandlerCfgDefn INSTANCE = new ExtendedOperationHandlerCfgDefn();
066
067
068
069 // The "enabled" property definition.
070 private static final BooleanPropertyDefinition PD_ENABLED;
071
072
073
074 // The "java-class" property definition.
075 private static final ClassPropertyDefinition PD_JAVA_CLASS;
076
077
078
079 // Build the "enabled" property definition.
080 static {
081 BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "enabled");
082 builder.setOption(PropertyOption.MANDATORY);
083 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "enabled"));
084 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<Boolean>());
085 PD_ENABLED = builder.getInstance();
086 INSTANCE.registerPropertyDefinition(PD_ENABLED);
087 }
088
089
090
091 // Build the "java-class" property definition.
092 static {
093 ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class");
094 builder.setOption(PropertyOption.MANDATORY);
095 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.COMPONENT_RESTART, INSTANCE, "java-class"));
096 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
097 builder.addInstanceOf("org.opends.server.api.ExtendedOperationHandler");
098 PD_JAVA_CLASS = builder.getInstance();
099 INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
100 }
101
102
103
104 // Register the tags associated with this managed object definition.
105 static {
106 INSTANCE.registerTag(Tag.valueOf("core-server"));
107 }
108
109
110
111 /**
112 * Get the Extended Operation Handler configuration definition
113 * singleton.
114 *
115 * @return Returns the Extended Operation Handler configuration
116 * definition singleton.
117 */
118 public static ExtendedOperationHandlerCfgDefn getInstance() {
119 return INSTANCE;
120 }
121
122
123
124 /**
125 * Private constructor.
126 */
127 private ExtendedOperationHandlerCfgDefn() {
128 super("extended-operation-handler", TopCfgDefn.getInstance());
129 }
130
131
132
133 /**
134 * {@inheritDoc}
135 */
136 public ExtendedOperationHandlerCfgClient createClientConfiguration(
137 ManagedObject<? extends ExtendedOperationHandlerCfgClient> impl) {
138 return new ExtendedOperationHandlerCfgClientImpl(impl);
139 }
140
141
142
143 /**
144 * {@inheritDoc}
145 */
146 public ExtendedOperationHandlerCfg createServerConfiguration(
147 ServerManagedObject<? extends ExtendedOperationHandlerCfg> impl) {
148 return new ExtendedOperationHandlerCfgServerImpl(impl);
149 }
150
151
152
153 /**
154 * {@inheritDoc}
155 */
156 public Class<ExtendedOperationHandlerCfg> getServerConfigurationClass() {
157 return ExtendedOperationHandlerCfg.class;
158 }
159
160
161
162 /**
163 * Get the "enabled" property definition.
164 * <p>
165 * Indicates whether the Extended Operation Handler is enabled (that
166 * is, whether the types of extended operations are allowed in the
167 * server).
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 Extended Operation Handler 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 ExtendedOperationHandlerCfgClientImpl implements
195 ExtendedOperationHandlerCfgClient {
196
197 // Private implementation.
198 private ManagedObject<? extends ExtendedOperationHandlerCfgClient> impl;
199
200
201
202 // Private constructor.
203 private ExtendedOperationHandlerCfgClientImpl(
204 ManagedObject<? extends ExtendedOperationHandlerCfgClient> 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 ExtendedOperationHandlerCfgClient, ? extends ExtendedOperationHandlerCfg> 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 ExtendedOperationHandlerCfgServerImpl implements
282 ExtendedOperationHandlerCfg {
283
284 // Private implementation.
285 private ServerManagedObject<? extends ExtendedOperationHandlerCfg> 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 ExtendedOperationHandlerCfgServerImpl(ServerManagedObject<? extends ExtendedOperationHandlerCfg> 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<ExtendedOperationHandlerCfg> listener) {
309 impl.registerChangeListener(listener);
310 }
311
312
313
314 /**
315 * {@inheritDoc}
316 */
317 public void removeChangeListener(
318 ConfigurationChangeListener<ExtendedOperationHandlerCfg> 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 ExtendedOperationHandlerCfg> configurationClass() {
346 return ExtendedOperationHandlerCfg.class;
347 }
348
349
350
351 /**
352 * {@inheritDoc}
353 */
354 public DN dn() {
355 return impl.getDN();
356 }
357
358 }
359 }