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 java.util.Collection;
032 import java.util.SortedSet;
033 import java.util.TreeSet;
034 import org.opends.server.admin.AdministratorAction;
035 import org.opends.server.admin.AggregationPropertyDefinition;
036 import org.opends.server.admin.BooleanPropertyDefinition;
037 import org.opends.server.admin.client.AuthorizationException;
038 import org.opends.server.admin.client.CommunicationException;
039 import org.opends.server.admin.client.ConcurrentModificationException;
040 import org.opends.server.admin.client.ManagedObject;
041 import org.opends.server.admin.client.MissingMandatoryPropertiesException;
042 import org.opends.server.admin.client.OperationRejectedException;
043 import org.opends.server.admin.ManagedObjectAlreadyExistsException;
044 import org.opends.server.admin.ManagedObjectDefinition;
045 import org.opends.server.admin.PropertyIsReadOnlyException;
046 import org.opends.server.admin.PropertyOption;
047 import org.opends.server.admin.PropertyProvider;
048 import org.opends.server.admin.server.ConfigurationChangeListener;
049 import org.opends.server.admin.server.ServerManagedObject;
050 import org.opends.server.admin.std.client.NetworkGroupCfgClient;
051 import org.opends.server.admin.std.client.WorkflowCfgClient;
052 import org.opends.server.admin.std.server.NetworkGroupCfg;
053 import org.opends.server.admin.std.server.WorkflowCfg;
054 import org.opends.server.admin.StringPropertyDefinition;
055 import org.opends.server.admin.Tag;
056 import org.opends.server.admin.TopCfgDefn;
057 import org.opends.server.admin.UndefinedDefaultBehaviorProvider;
058 import org.opends.server.types.DN;
059
060
061
062 /**
063 * An interface for querying the Network Group managed object
064 * definition meta information.
065 * <p>
066 * The Network Group is used to classify incoming connections and
067 * route requests to workflows.
068 */
069 public final class NetworkGroupCfgDefn extends ManagedObjectDefinition<NetworkGroupCfgClient, NetworkGroupCfg> {
070
071 // The singleton configuration definition instance.
072 private static final NetworkGroupCfgDefn INSTANCE = new NetworkGroupCfgDefn();
073
074
075
076 // The "enabled" property definition.
077 private static final BooleanPropertyDefinition PD_ENABLED;
078
079
080
081 // The "network-group-id" property definition.
082 private static final StringPropertyDefinition PD_NETWORK_GROUP_ID;
083
084
085
086 // The "workflow" property definition.
087 private static final AggregationPropertyDefinition<WorkflowCfgClient, WorkflowCfg> PD_WORKFLOW;
088
089
090
091 // Build the "enabled" property definition.
092 static {
093 BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "enabled");
094 builder.setOption(PropertyOption.MANDATORY);
095 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "enabled"));
096 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<Boolean>());
097 PD_ENABLED = builder.getInstance();
098 INSTANCE.registerPropertyDefinition(PD_ENABLED);
099 }
100
101
102
103 // Build the "network-group-id" property definition.
104 static {
105 StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "network-group-id");
106 builder.setOption(PropertyOption.READ_ONLY);
107 builder.setOption(PropertyOption.MANDATORY);
108 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "network-group-id"));
109 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
110 PD_NETWORK_GROUP_ID = builder.getInstance();
111 INSTANCE.registerPropertyDefinition(PD_NETWORK_GROUP_ID);
112 }
113
114
115
116 // Build the "workflow" property definition.
117 static {
118 AggregationPropertyDefinition.Builder<WorkflowCfgClient, WorkflowCfg> builder = AggregationPropertyDefinition.createBuilder(INSTANCE, "workflow");
119 builder.setOption(PropertyOption.MULTI_VALUED);
120 builder.setOption(PropertyOption.READ_ONLY);
121 builder.setOption(PropertyOption.MANDATORY);
122 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "workflow"));
123 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
124 builder.setParentPath("/");
125 builder.setRelationDefinition("workflow");
126 PD_WORKFLOW = builder.getInstance();
127 INSTANCE.registerPropertyDefinition(PD_WORKFLOW);
128 INSTANCE.registerConstraint(PD_WORKFLOW.getSourceConstraint());
129 }
130
131
132
133 // Register the tags associated with this managed object definition.
134 static {
135 INSTANCE.registerTag(Tag.valueOf("core-server"));
136 }
137
138
139
140 /**
141 * Get the Network Group configuration definition singleton.
142 *
143 * @return Returns the Network Group configuration definition
144 * singleton.
145 */
146 public static NetworkGroupCfgDefn getInstance() {
147 return INSTANCE;
148 }
149
150
151
152 /**
153 * Private constructor.
154 */
155 private NetworkGroupCfgDefn() {
156 super("network-group", TopCfgDefn.getInstance());
157 }
158
159
160
161 /**
162 * {@inheritDoc}
163 */
164 public NetworkGroupCfgClient createClientConfiguration(
165 ManagedObject<? extends NetworkGroupCfgClient> impl) {
166 return new NetworkGroupCfgClientImpl(impl);
167 }
168
169
170
171 /**
172 * {@inheritDoc}
173 */
174 public NetworkGroupCfg createServerConfiguration(
175 ServerManagedObject<? extends NetworkGroupCfg> impl) {
176 return new NetworkGroupCfgServerImpl(impl);
177 }
178
179
180
181 /**
182 * {@inheritDoc}
183 */
184 public Class<NetworkGroupCfg> getServerConfigurationClass() {
185 return NetworkGroupCfg.class;
186 }
187
188
189
190 /**
191 * Get the "enabled" property definition.
192 * <p>
193 * Indicates whether the Network Group is enabled for use in the
194 * server.
195 * <p>
196 * If a network group is not enabled, its workflows will not be
197 * accessible when processing operations.
198 *
199 * @return Returns the "enabled" property definition.
200 */
201 public BooleanPropertyDefinition getEnabledPropertyDefinition() {
202 return PD_ENABLED;
203 }
204
205
206
207 /**
208 * Get the "network-group-id" property definition.
209 * <p>
210 * Specifies the name that is used to identify the associated
211 * Network Group .
212 * <p>
213 * The name must be unique among all the Network Groups in the
214 * server.
215 *
216 * @return Returns the "network-group-id" property definition.
217 */
218 public StringPropertyDefinition getNetworkGroupIdPropertyDefinition() {
219 return PD_NETWORK_GROUP_ID;
220 }
221
222
223
224 /**
225 * Get the "workflow" property definition.
226 * <p>
227 * Identifies the workflows in the network group.
228 *
229 * @return Returns the "workflow" property definition.
230 */
231 public AggregationPropertyDefinition<WorkflowCfgClient, WorkflowCfg> getWorkflowPropertyDefinition() {
232 return PD_WORKFLOW;
233 }
234
235
236
237 /**
238 * Managed object client implementation.
239 */
240 private static class NetworkGroupCfgClientImpl implements
241 NetworkGroupCfgClient {
242
243 // Private implementation.
244 private ManagedObject<? extends NetworkGroupCfgClient> impl;
245
246
247
248 // Private constructor.
249 private NetworkGroupCfgClientImpl(
250 ManagedObject<? extends NetworkGroupCfgClient> impl) {
251 this.impl = impl;
252 }
253
254
255
256 /**
257 * {@inheritDoc}
258 */
259 public Boolean isEnabled() {
260 return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
261 }
262
263
264
265 /**
266 * {@inheritDoc}
267 */
268 public void setEnabled(boolean value) {
269 impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value);
270 }
271
272
273
274 /**
275 * {@inheritDoc}
276 */
277 public String getNetworkGroupId() {
278 return impl.getPropertyValue(INSTANCE.getNetworkGroupIdPropertyDefinition());
279 }
280
281
282
283 /**
284 * {@inheritDoc}
285 */
286 public void setNetworkGroupId(String value) throws PropertyIsReadOnlyException {
287 impl.setPropertyValue(INSTANCE.getNetworkGroupIdPropertyDefinition(), value);
288 }
289
290
291
292 /**
293 * {@inheritDoc}
294 */
295 public SortedSet<String> getWorkflow() {
296 return impl.getPropertyValues(INSTANCE.getWorkflowPropertyDefinition());
297 }
298
299
300
301 /**
302 * {@inheritDoc}
303 */
304 public void setWorkflow(Collection<String> values) {
305 impl.setPropertyValues(INSTANCE.getWorkflowPropertyDefinition(), values);
306 }
307
308
309
310 /**
311 * {@inheritDoc}
312 */
313 public ManagedObjectDefinition<? extends NetworkGroupCfgClient, ? extends NetworkGroupCfg> definition() {
314 return INSTANCE;
315 }
316
317
318
319 /**
320 * {@inheritDoc}
321 */
322 public PropertyProvider properties() {
323 return impl;
324 }
325
326
327
328 /**
329 * {@inheritDoc}
330 */
331 public void commit() throws ManagedObjectAlreadyExistsException,
332 MissingMandatoryPropertiesException, ConcurrentModificationException,
333 OperationRejectedException, AuthorizationException,
334 CommunicationException {
335 impl.commit();
336 }
337
338 }
339
340
341
342 /**
343 * Managed object server implementation.
344 */
345 private static class NetworkGroupCfgServerImpl implements
346 NetworkGroupCfg {
347
348 // Private implementation.
349 private ServerManagedObject<? extends NetworkGroupCfg> impl;
350
351 // The value of the "enabled" property.
352 private final boolean pEnabled;
353
354 // The value of the "network-group-id" property.
355 private final String pNetworkGroupId;
356
357 // The value of the "workflow" property.
358 private final SortedSet<String> pWorkflow;
359
360
361
362 // Private constructor.
363 private NetworkGroupCfgServerImpl(ServerManagedObject<? extends NetworkGroupCfg> impl) {
364 this.impl = impl;
365 this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
366 this.pNetworkGroupId = impl.getPropertyValue(INSTANCE.getNetworkGroupIdPropertyDefinition());
367 this.pWorkflow = impl.getPropertyValues(INSTANCE.getWorkflowPropertyDefinition());
368 }
369
370
371
372 /**
373 * {@inheritDoc}
374 */
375 public void addChangeListener(
376 ConfigurationChangeListener<NetworkGroupCfg> listener) {
377 impl.registerChangeListener(listener);
378 }
379
380
381
382 /**
383 * {@inheritDoc}
384 */
385 public void removeChangeListener(
386 ConfigurationChangeListener<NetworkGroupCfg> listener) {
387 impl.deregisterChangeListener(listener);
388 }
389
390
391
392 /**
393 * {@inheritDoc}
394 */
395 public boolean isEnabled() {
396 return pEnabled;
397 }
398
399
400
401 /**
402 * {@inheritDoc}
403 */
404 public String getNetworkGroupId() {
405 return pNetworkGroupId;
406 }
407
408
409
410 /**
411 * {@inheritDoc}
412 */
413 public SortedSet<String> getWorkflow() {
414 return pWorkflow;
415 }
416
417
418
419 /**
420 * {@inheritDoc}
421 */
422 public SortedSet<DN> getWorkflowDNs() {
423 SortedSet<String> values = getWorkflow();
424 SortedSet<DN> dnValues = new TreeSet<DN>();
425 for (String value : values) {
426 DN dn = INSTANCE.getWorkflowPropertyDefinition().getChildDN(value);
427 dnValues.add(dn);
428 }
429 return dnValues;
430 }
431
432
433
434 /**
435 * {@inheritDoc}
436 */
437 public Class<? extends NetworkGroupCfg> configurationClass() {
438 return NetworkGroupCfg.class;
439 }
440
441
442
443 /**
444 * {@inheritDoc}
445 */
446 public DN dn() {
447 return impl.getDN();
448 }
449
450 }
451 }