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.ClassPropertyDefinition;
033 import org.opends.server.admin.client.AuthorizationException;
034 import org.opends.server.admin.client.CommunicationException;
035 import org.opends.server.admin.client.ConcurrentModificationException;
036 import org.opends.server.admin.client.ManagedObject;
037 import org.opends.server.admin.client.MissingMandatoryPropertiesException;
038 import org.opends.server.admin.client.OperationRejectedException;
039 import org.opends.server.admin.ManagedObjectAlreadyExistsException;
040 import org.opends.server.admin.ManagedObjectDefinition;
041 import org.opends.server.admin.PropertyOption;
042 import org.opends.server.admin.PropertyProvider;
043 import org.opends.server.admin.server.ConfigurationChangeListener;
044 import org.opends.server.admin.server.ServerManagedObject;
045 import org.opends.server.admin.std.client.WorkQueueCfgClient;
046 import org.opends.server.admin.std.server.WorkQueueCfg;
047 import org.opends.server.admin.Tag;
048 import org.opends.server.admin.TopCfgDefn;
049 import org.opends.server.admin.UndefinedDefaultBehaviorProvider;
050 import org.opends.server.types.DN;
051
052
053
054 /**
055 * An interface for querying the Work Queue managed object definition
056 * meta information.
057 * <p>
058 * The Work Queue provides the configuration for the server work queue
059 * and is responsible for ensuring that requests received from clients
060 * are processed in a timely manner.
061 */
062 public final class WorkQueueCfgDefn extends ManagedObjectDefinition<WorkQueueCfgClient, WorkQueueCfg> {
063
064 // The singleton configuration definition instance.
065 private static final WorkQueueCfgDefn INSTANCE = new WorkQueueCfgDefn();
066
067
068
069 // The "java-class" property definition.
070 private static final ClassPropertyDefinition PD_JAVA_CLASS;
071
072
073
074 // Build the "java-class" property definition.
075 static {
076 ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class");
077 builder.setOption(PropertyOption.MANDATORY);
078 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.SERVER_RESTART, INSTANCE, "java-class"));
079 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
080 builder.addInstanceOf("org.opends.server.api.WorkQueue");
081 PD_JAVA_CLASS = builder.getInstance();
082 INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
083 }
084
085
086
087 // Register the tags associated with this managed object definition.
088 static {
089 INSTANCE.registerTag(Tag.valueOf("core-server"));
090 }
091
092
093
094 /**
095 * Get the Work Queue configuration definition singleton.
096 *
097 * @return Returns the Work Queue configuration definition
098 * singleton.
099 */
100 public static WorkQueueCfgDefn getInstance() {
101 return INSTANCE;
102 }
103
104
105
106 /**
107 * Private constructor.
108 */
109 private WorkQueueCfgDefn() {
110 super("work-queue", TopCfgDefn.getInstance());
111 }
112
113
114
115 /**
116 * {@inheritDoc}
117 */
118 public WorkQueueCfgClient createClientConfiguration(
119 ManagedObject<? extends WorkQueueCfgClient> impl) {
120 return new WorkQueueCfgClientImpl(impl);
121 }
122
123
124
125 /**
126 * {@inheritDoc}
127 */
128 public WorkQueueCfg createServerConfiguration(
129 ServerManagedObject<? extends WorkQueueCfg> impl) {
130 return new WorkQueueCfgServerImpl(impl);
131 }
132
133
134
135 /**
136 * {@inheritDoc}
137 */
138 public Class<WorkQueueCfg> getServerConfigurationClass() {
139 return WorkQueueCfg.class;
140 }
141
142
143
144 /**
145 * Get the "java-class" property definition.
146 * <p>
147 * Specifies the fully-qualified name of the Java class that
148 * provides the Work Queue implementation.
149 *
150 * @return Returns the "java-class" property definition.
151 */
152 public ClassPropertyDefinition getJavaClassPropertyDefinition() {
153 return PD_JAVA_CLASS;
154 }
155
156
157
158 /**
159 * Managed object client implementation.
160 */
161 private static class WorkQueueCfgClientImpl implements
162 WorkQueueCfgClient {
163
164 // Private implementation.
165 private ManagedObject<? extends WorkQueueCfgClient> impl;
166
167
168
169 // Private constructor.
170 private WorkQueueCfgClientImpl(
171 ManagedObject<? extends WorkQueueCfgClient> impl) {
172 this.impl = impl;
173 }
174
175
176
177 /**
178 * {@inheritDoc}
179 */
180 public String getJavaClass() {
181 return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
182 }
183
184
185
186 /**
187 * {@inheritDoc}
188 */
189 public void setJavaClass(String value) {
190 impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
191 }
192
193
194
195 /**
196 * {@inheritDoc}
197 */
198 public ManagedObjectDefinition<? extends WorkQueueCfgClient, ? extends WorkQueueCfg> definition() {
199 return INSTANCE;
200 }
201
202
203
204 /**
205 * {@inheritDoc}
206 */
207 public PropertyProvider properties() {
208 return impl;
209 }
210
211
212
213 /**
214 * {@inheritDoc}
215 */
216 public void commit() throws ManagedObjectAlreadyExistsException,
217 MissingMandatoryPropertiesException, ConcurrentModificationException,
218 OperationRejectedException, AuthorizationException,
219 CommunicationException {
220 impl.commit();
221 }
222
223 }
224
225
226
227 /**
228 * Managed object server implementation.
229 */
230 private static class WorkQueueCfgServerImpl implements
231 WorkQueueCfg {
232
233 // Private implementation.
234 private ServerManagedObject<? extends WorkQueueCfg> impl;
235
236 // The value of the "java-class" property.
237 private final String pJavaClass;
238
239
240
241 // Private constructor.
242 private WorkQueueCfgServerImpl(ServerManagedObject<? extends WorkQueueCfg> impl) {
243 this.impl = impl;
244 this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
245 }
246
247
248
249 /**
250 * {@inheritDoc}
251 */
252 public void addChangeListener(
253 ConfigurationChangeListener<WorkQueueCfg> listener) {
254 impl.registerChangeListener(listener);
255 }
256
257
258
259 /**
260 * {@inheritDoc}
261 */
262 public void removeChangeListener(
263 ConfigurationChangeListener<WorkQueueCfg> listener) {
264 impl.deregisterChangeListener(listener);
265 }
266
267
268
269 /**
270 * {@inheritDoc}
271 */
272 public String getJavaClass() {
273 return pJavaClass;
274 }
275
276
277
278 /**
279 * {@inheritDoc}
280 */
281 public Class<? extends WorkQueueCfg> configurationClass() {
282 return WorkQueueCfg.class;
283 }
284
285
286
287 /**
288 * {@inheritDoc}
289 */
290 public DN dn() {
291 return impl.getDN();
292 }
293
294 }
295 }