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.AggregationPropertyDefinition;
033 import org.opends.server.admin.BooleanPropertyDefinition;
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.DNPropertyDefinition;
041 import org.opends.server.admin.ManagedObjectAlreadyExistsException;
042 import org.opends.server.admin.ManagedObjectDefinition;
043 import org.opends.server.admin.PropertyIsReadOnlyException;
044 import org.opends.server.admin.PropertyOption;
045 import org.opends.server.admin.PropertyProvider;
046 import org.opends.server.admin.server.ConfigurationChangeListener;
047 import org.opends.server.admin.server.ServerManagedObject;
048 import org.opends.server.admin.std.client.WorkflowCfgClient;
049 import org.opends.server.admin.std.client.WorkflowElementCfgClient;
050 import org.opends.server.admin.std.server.WorkflowCfg;
051 import org.opends.server.admin.std.server.WorkflowElementCfg;
052 import org.opends.server.admin.StringPropertyDefinition;
053 import org.opends.server.admin.Tag;
054 import org.opends.server.admin.TopCfgDefn;
055 import org.opends.server.admin.UndefinedDefaultBehaviorProvider;
056 import org.opends.server.types.DN;
057
058
059
060 /**
061 * An interface for querying the Workflow managed object definition
062 * meta information.
063 * <p>
064 * The Workflow is a list of processing steps (Work Flow Elements)
065 * that are applied to data as it is retrieved from the Directory
066 * Server.
067 */
068 public final class WorkflowCfgDefn extends ManagedObjectDefinition<WorkflowCfgClient, WorkflowCfg> {
069
070 // The singleton configuration definition instance.
071 private static final WorkflowCfgDefn INSTANCE = new WorkflowCfgDefn();
072
073
074
075 // The "base-dn" property definition.
076 private static final DNPropertyDefinition PD_BASE_DN;
077
078
079
080 // The "enabled" property definition.
081 private static final BooleanPropertyDefinition PD_ENABLED;
082
083
084
085 // The "workflow-element" property definition.
086 private static final AggregationPropertyDefinition<WorkflowElementCfgClient, WorkflowElementCfg> PD_WORKFLOW_ELEMENT;
087
088
089
090 // The "workflow-id" property definition.
091 private static final StringPropertyDefinition PD_WORKFLOW_ID;
092
093
094
095 // Build the "base-dn" property definition.
096 static {
097 DNPropertyDefinition.Builder builder = DNPropertyDefinition.createBuilder(INSTANCE, "base-dn");
098 builder.setOption(PropertyOption.MANDATORY);
099 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "base-dn"));
100 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<DN>());
101 PD_BASE_DN = builder.getInstance();
102 INSTANCE.registerPropertyDefinition(PD_BASE_DN);
103 }
104
105
106
107 // Build the "enabled" property definition.
108 static {
109 BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "enabled");
110 builder.setOption(PropertyOption.MANDATORY);
111 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "enabled"));
112 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<Boolean>());
113 PD_ENABLED = builder.getInstance();
114 INSTANCE.registerPropertyDefinition(PD_ENABLED);
115 }
116
117
118
119 // Build the "workflow-element" property definition.
120 static {
121 AggregationPropertyDefinition.Builder<WorkflowElementCfgClient, WorkflowElementCfg> builder = AggregationPropertyDefinition.createBuilder(INSTANCE, "workflow-element");
122 builder.setOption(PropertyOption.MANDATORY);
123 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "workflow-element"));
124 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
125 builder.setParentPath("/");
126 builder.setRelationDefinition("workflow-element");
127 PD_WORKFLOW_ELEMENT = builder.getInstance();
128 INSTANCE.registerPropertyDefinition(PD_WORKFLOW_ELEMENT);
129 INSTANCE.registerConstraint(PD_WORKFLOW_ELEMENT.getSourceConstraint());
130 }
131
132
133
134 // Build the "workflow-id" property definition.
135 static {
136 StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "workflow-id");
137 builder.setOption(PropertyOption.READ_ONLY);
138 builder.setOption(PropertyOption.MANDATORY);
139 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "workflow-id"));
140 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
141 PD_WORKFLOW_ID = builder.getInstance();
142 INSTANCE.registerPropertyDefinition(PD_WORKFLOW_ID);
143 }
144
145
146
147 // Register the tags associated with this managed object definition.
148 static {
149 INSTANCE.registerTag(Tag.valueOf("core-server"));
150 }
151
152
153
154 /**
155 * Get the Workflow configuration definition singleton.
156 *
157 * @return Returns the Workflow configuration definition singleton.
158 */
159 public static WorkflowCfgDefn getInstance() {
160 return INSTANCE;
161 }
162
163
164
165 /**
166 * Private constructor.
167 */
168 private WorkflowCfgDefn() {
169 super("workflow", TopCfgDefn.getInstance());
170 }
171
172
173
174 /**
175 * {@inheritDoc}
176 */
177 public WorkflowCfgClient createClientConfiguration(
178 ManagedObject<? extends WorkflowCfgClient> impl) {
179 return new WorkflowCfgClientImpl(impl);
180 }
181
182
183
184 /**
185 * {@inheritDoc}
186 */
187 public WorkflowCfg createServerConfiguration(
188 ServerManagedObject<? extends WorkflowCfg> impl) {
189 return new WorkflowCfgServerImpl(impl);
190 }
191
192
193
194 /**
195 * {@inheritDoc}
196 */
197 public Class<WorkflowCfg> getServerConfigurationClass() {
198 return WorkflowCfg.class;
199 }
200
201
202
203 /**
204 * Get the "base-dn" property definition.
205 * <p>
206 * Specifies the base DN of the data targeted by the Workflow .
207 *
208 * @return Returns the "base-dn" property definition.
209 */
210 public DNPropertyDefinition getBaseDNPropertyDefinition() {
211 return PD_BASE_DN;
212 }
213
214
215
216 /**
217 * Get the "enabled" property definition.
218 * <p>
219 * Indicates whether the Workflow is enabled for use in the server.
220 * <p>
221 * If a Workflow is not enabled, then its contents are not
222 * accessible when processing operations.
223 *
224 * @return Returns the "enabled" property definition.
225 */
226 public BooleanPropertyDefinition getEnabledPropertyDefinition() {
227 return PD_ENABLED;
228 }
229
230
231
232 /**
233 * Get the "workflow-element" property definition.
234 * <p>
235 * Specifies the root Work Flow Element in the Workflow .
236 *
237 * @return Returns the "workflow-element" property definition.
238 */
239 public AggregationPropertyDefinition<WorkflowElementCfgClient, WorkflowElementCfg> getWorkflowElementPropertyDefinition() {
240 return PD_WORKFLOW_ELEMENT;
241 }
242
243
244
245 /**
246 * Get the "workflow-id" property definition.
247 * <p>
248 * Provides a name that identifies the Workflow.
249 * <p>
250 * The name must be unique among all Workflows in the server.
251 *
252 * @return Returns the "workflow-id" property definition.
253 */
254 public StringPropertyDefinition getWorkflowIdPropertyDefinition() {
255 return PD_WORKFLOW_ID;
256 }
257
258
259
260 /**
261 * Managed object client implementation.
262 */
263 private static class WorkflowCfgClientImpl implements
264 WorkflowCfgClient {
265
266 // Private implementation.
267 private ManagedObject<? extends WorkflowCfgClient> impl;
268
269
270
271 // Private constructor.
272 private WorkflowCfgClientImpl(
273 ManagedObject<? extends WorkflowCfgClient> impl) {
274 this.impl = impl;
275 }
276
277
278
279 /**
280 * {@inheritDoc}
281 */
282 public DN getBaseDN() {
283 return impl.getPropertyValue(INSTANCE.getBaseDNPropertyDefinition());
284 }
285
286
287
288 /**
289 * {@inheritDoc}
290 */
291 public void setBaseDN(DN value) {
292 impl.setPropertyValue(INSTANCE.getBaseDNPropertyDefinition(), value);
293 }
294
295
296
297 /**
298 * {@inheritDoc}
299 */
300 public Boolean isEnabled() {
301 return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
302 }
303
304
305
306 /**
307 * {@inheritDoc}
308 */
309 public void setEnabled(boolean value) {
310 impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value);
311 }
312
313
314
315 /**
316 * {@inheritDoc}
317 */
318 public String getWorkflowElement() {
319 return impl.getPropertyValue(INSTANCE.getWorkflowElementPropertyDefinition());
320 }
321
322
323
324 /**
325 * {@inheritDoc}
326 */
327 public void setWorkflowElement(String value) {
328 impl.setPropertyValue(INSTANCE.getWorkflowElementPropertyDefinition(), value);
329 }
330
331
332
333 /**
334 * {@inheritDoc}
335 */
336 public String getWorkflowId() {
337 return impl.getPropertyValue(INSTANCE.getWorkflowIdPropertyDefinition());
338 }
339
340
341
342 /**
343 * {@inheritDoc}
344 */
345 public void setWorkflowId(String value) throws PropertyIsReadOnlyException {
346 impl.setPropertyValue(INSTANCE.getWorkflowIdPropertyDefinition(), value);
347 }
348
349
350
351 /**
352 * {@inheritDoc}
353 */
354 public ManagedObjectDefinition<? extends WorkflowCfgClient, ? extends WorkflowCfg> definition() {
355 return INSTANCE;
356 }
357
358
359
360 /**
361 * {@inheritDoc}
362 */
363 public PropertyProvider properties() {
364 return impl;
365 }
366
367
368
369 /**
370 * {@inheritDoc}
371 */
372 public void commit() throws ManagedObjectAlreadyExistsException,
373 MissingMandatoryPropertiesException, ConcurrentModificationException,
374 OperationRejectedException, AuthorizationException,
375 CommunicationException {
376 impl.commit();
377 }
378
379 }
380
381
382
383 /**
384 * Managed object server implementation.
385 */
386 private static class WorkflowCfgServerImpl implements
387 WorkflowCfg {
388
389 // Private implementation.
390 private ServerManagedObject<? extends WorkflowCfg> impl;
391
392 // The value of the "base-dn" property.
393 private final DN pBaseDN;
394
395 // The value of the "enabled" property.
396 private final boolean pEnabled;
397
398 // The value of the "workflow-element" property.
399 private final String pWorkflowElement;
400
401 // The value of the "workflow-id" property.
402 private final String pWorkflowId;
403
404
405
406 // Private constructor.
407 private WorkflowCfgServerImpl(ServerManagedObject<? extends WorkflowCfg> impl) {
408 this.impl = impl;
409 this.pBaseDN = impl.getPropertyValue(INSTANCE.getBaseDNPropertyDefinition());
410 this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
411 this.pWorkflowElement = impl.getPropertyValue(INSTANCE.getWorkflowElementPropertyDefinition());
412 this.pWorkflowId = impl.getPropertyValue(INSTANCE.getWorkflowIdPropertyDefinition());
413 }
414
415
416
417 /**
418 * {@inheritDoc}
419 */
420 public void addChangeListener(
421 ConfigurationChangeListener<WorkflowCfg> listener) {
422 impl.registerChangeListener(listener);
423 }
424
425
426
427 /**
428 * {@inheritDoc}
429 */
430 public void removeChangeListener(
431 ConfigurationChangeListener<WorkflowCfg> listener) {
432 impl.deregisterChangeListener(listener);
433 }
434
435
436
437 /**
438 * {@inheritDoc}
439 */
440 public DN getBaseDN() {
441 return pBaseDN;
442 }
443
444
445
446 /**
447 * {@inheritDoc}
448 */
449 public boolean isEnabled() {
450 return pEnabled;
451 }
452
453
454
455 /**
456 * {@inheritDoc}
457 */
458 public String getWorkflowElement() {
459 return pWorkflowElement;
460 }
461
462
463
464 /**
465 * {@inheritDoc}
466 */
467 public DN getWorkflowElementDN() {
468 String value = getWorkflowElement();
469 if (value == null) return null;
470 return INSTANCE.getWorkflowElementPropertyDefinition().getChildDN(value);
471 }
472
473
474
475 /**
476 * {@inheritDoc}
477 */
478 public String getWorkflowId() {
479 return pWorkflowId;
480 }
481
482
483
484 /**
485 * {@inheritDoc}
486 */
487 public Class<? extends WorkflowCfg> configurationClass() {
488 return WorkflowCfg.class;
489 }
490
491
492
493 /**
494 * {@inheritDoc}
495 */
496 public DN dn() {
497 return impl.getDN();
498 }
499
500 }
501 }