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 legal-notices/CDDLv1_0.txt
010 * or http://forgerock.org/license/CDDLv1.0.html.
011 * See the License for the specific language governing permissions
012 * and limitations under the License.
013 *
014 * When distributing Covered Code, include this CDDL HEADER in each
015 * file and include the License file at legal-notices/CDDLv1_0.txt.
016 * If applicable, add the following below this CDDL HEADER, with the
017 * fields enclosed by brackets "[]" replaced with your own identifying
018 * information:
019 *      Portions Copyright [yyyy] [name of copyright owner]
020 *
021 * CDDL HEADER END
022 *
023 *
024 *      Copyright 2008 Sun Microsystems, Inc.
025 */
026package org.forgerock.opendj.server.config.meta;
027
028
029
030import java.util.Collection;
031import java.util.SortedSet;
032import org.forgerock.opendj.config.AdministratorAction;
033import org.forgerock.opendj.config.ClassPropertyDefinition;
034import org.forgerock.opendj.config.client.ConcurrentModificationException;
035import org.forgerock.opendj.config.client.ManagedObject;
036import org.forgerock.opendj.config.client.MissingMandatoryPropertiesException;
037import org.forgerock.opendj.config.client.OperationRejectedException;
038import org.forgerock.opendj.config.DefaultBehaviorProvider;
039import org.forgerock.opendj.config.DefinedDefaultBehaviorProvider;
040import org.forgerock.opendj.config.ManagedObjectAlreadyExistsException;
041import org.forgerock.opendj.config.ManagedObjectDefinition;
042import org.forgerock.opendj.config.PropertyOption;
043import org.forgerock.opendj.config.PropertyProvider;
044import org.forgerock.opendj.config.server.ConfigurationChangeListener;
045import org.forgerock.opendj.config.server.ServerManagedObject;
046import org.forgerock.opendj.config.StringPropertyDefinition;
047import org.forgerock.opendj.config.Tag;
048import org.forgerock.opendj.config.UndefinedDefaultBehaviorProvider;
049import org.forgerock.opendj.ldap.DN;
050import org.forgerock.opendj.ldap.LdapException;
051import org.forgerock.opendj.server.config.client.FixedTimeLogRotationPolicyCfgClient;
052import org.forgerock.opendj.server.config.server.FixedTimeLogRotationPolicyCfg;
053import org.forgerock.opendj.server.config.server.LogRotationPolicyCfg;
054
055
056
057/**
058 * An interface for querying the Fixed Time Log Rotation Policy
059 * managed object definition meta information.
060 * <p>
061 * Rotation policy based on a fixed time of day.
062 */
063public final class FixedTimeLogRotationPolicyCfgDefn extends ManagedObjectDefinition<FixedTimeLogRotationPolicyCfgClient, FixedTimeLogRotationPolicyCfg> {
064
065  // The singleton configuration definition instance.
066  private static final FixedTimeLogRotationPolicyCfgDefn INSTANCE = new FixedTimeLogRotationPolicyCfgDefn();
067
068
069
070  // The "java-class" property definition.
071  private static final ClassPropertyDefinition PD_JAVA_CLASS;
072
073
074
075  // The "time-of-day" property definition.
076  private static final StringPropertyDefinition PD_TIME_OF_DAY;
077
078
079
080  // Build the "java-class" property definition.
081  static {
082      ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class");
083      builder.setOption(PropertyOption.MANDATORY);
084      builder.setOption(PropertyOption.ADVANCED);
085      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "java-class"));
086      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("org.opends.server.loggers.FixedTimeRotationPolicy");
087      builder.setDefaultBehaviorProvider(provider);
088      builder.addInstanceOf("org.opends.server.loggers.RotationPolicy");
089      PD_JAVA_CLASS = builder.getInstance();
090      INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
091  }
092
093
094
095  // Build the "time-of-day" property definition.
096  static {
097      StringPropertyDefinition.Builder builder = StringPropertyDefinition.createBuilder(INSTANCE, "time-of-day");
098      builder.setOption(PropertyOption.MULTI_VALUED);
099      builder.setOption(PropertyOption.MANDATORY);
100      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "time-of-day"));
101      builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
102      builder.setPattern("^(([0-1][0-9])|([2][0-3]))([0-5][0-9])$", "HHmm");
103      PD_TIME_OF_DAY = builder.getInstance();
104      INSTANCE.registerPropertyDefinition(PD_TIME_OF_DAY);
105  }
106
107
108
109  // Register the tags associated with this managed object definition.
110  static {
111    INSTANCE.registerTag(Tag.valueOf("logging"));
112  }
113
114
115
116  /**
117   * Get the Fixed Time Log Rotation Policy configuration definition
118   * singleton.
119   *
120   * @return Returns the Fixed Time Log Rotation Policy configuration
121   *         definition singleton.
122   */
123  public static FixedTimeLogRotationPolicyCfgDefn getInstance() {
124    return INSTANCE;
125  }
126
127
128
129  /**
130   * Private constructor.
131   */
132  private FixedTimeLogRotationPolicyCfgDefn() {
133    super("fixed-time-log-rotation-policy", LogRotationPolicyCfgDefn.getInstance());
134  }
135
136
137
138  /**
139   * {@inheritDoc}
140   */
141  public FixedTimeLogRotationPolicyCfgClient createClientConfiguration(
142      ManagedObject<? extends FixedTimeLogRotationPolicyCfgClient> impl) {
143    return new FixedTimeLogRotationPolicyCfgClientImpl(impl);
144  }
145
146
147
148  /**
149   * {@inheritDoc}
150   */
151  public FixedTimeLogRotationPolicyCfg createServerConfiguration(
152      ServerManagedObject<? extends FixedTimeLogRotationPolicyCfg> impl) {
153    return new FixedTimeLogRotationPolicyCfgServerImpl(impl);
154  }
155
156
157
158  /**
159   * {@inheritDoc}
160   */
161  public Class<FixedTimeLogRotationPolicyCfg> getServerConfigurationClass() {
162    return FixedTimeLogRotationPolicyCfg.class;
163  }
164
165
166
167  /**
168   * Get the "java-class" property definition.
169   * <p>
170   * Specifies the fully-qualified name of the Java class that
171   * provides the Fixed Time Log Rotation Policy implementation.
172   *
173   * @return Returns the "java-class" property definition.
174   */
175  public ClassPropertyDefinition getJavaClassPropertyDefinition() {
176    return PD_JAVA_CLASS;
177  }
178
179
180
181  /**
182   * Get the "time-of-day" property definition.
183   * <p>
184   * Specifies the time of day at which log rotation should occur.
185   *
186   * @return Returns the "time-of-day" property definition.
187   */
188  public StringPropertyDefinition getTimeOfDayPropertyDefinition() {
189    return PD_TIME_OF_DAY;
190  }
191
192
193
194  /**
195   * Managed object client implementation.
196   */
197  private static class FixedTimeLogRotationPolicyCfgClientImpl implements
198    FixedTimeLogRotationPolicyCfgClient {
199
200    // Private implementation.
201    private ManagedObject<? extends FixedTimeLogRotationPolicyCfgClient> impl;
202
203
204
205    // Private constructor.
206    private FixedTimeLogRotationPolicyCfgClientImpl(
207        ManagedObject<? extends FixedTimeLogRotationPolicyCfgClient> impl) {
208      this.impl = impl;
209    }
210
211
212
213    /**
214     * {@inheritDoc}
215     */
216    public String getJavaClass() {
217      return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
218    }
219
220
221
222    /**
223     * {@inheritDoc}
224     */
225    public void setJavaClass(String value) {
226      impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
227    }
228
229
230
231    /**
232     * {@inheritDoc}
233     */
234    public SortedSet<String> getTimeOfDay() {
235      return impl.getPropertyValues(INSTANCE.getTimeOfDayPropertyDefinition());
236    }
237
238
239
240    /**
241     * {@inheritDoc}
242     */
243    public void setTimeOfDay(Collection<String> values) {
244      impl.setPropertyValues(INSTANCE.getTimeOfDayPropertyDefinition(), values);
245    }
246
247
248
249    /**
250     * {@inheritDoc}
251     */
252    public ManagedObjectDefinition<? extends FixedTimeLogRotationPolicyCfgClient, ? extends FixedTimeLogRotationPolicyCfg> definition() {
253      return INSTANCE;
254    }
255
256
257
258    /**
259     * {@inheritDoc}
260     */
261    public PropertyProvider properties() {
262      return impl;
263    }
264
265
266
267    /**
268     * {@inheritDoc}
269     */
270    public void commit() throws ManagedObjectAlreadyExistsException,
271        MissingMandatoryPropertiesException, ConcurrentModificationException,
272        OperationRejectedException, LdapException {
273      impl.commit();
274    }
275
276  }
277
278
279
280  /**
281   * Managed object server implementation.
282   */
283  private static class FixedTimeLogRotationPolicyCfgServerImpl implements
284    FixedTimeLogRotationPolicyCfg {
285
286    // Private implementation.
287    private ServerManagedObject<? extends FixedTimeLogRotationPolicyCfg> impl;
288
289    // The value of the "java-class" property.
290    private final String pJavaClass;
291
292    // The value of the "time-of-day" property.
293    private final SortedSet<String> pTimeOfDay;
294
295
296
297    // Private constructor.
298    private FixedTimeLogRotationPolicyCfgServerImpl(ServerManagedObject<? extends FixedTimeLogRotationPolicyCfg> impl) {
299      this.impl = impl;
300      this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
301      this.pTimeOfDay = impl.getPropertyValues(INSTANCE.getTimeOfDayPropertyDefinition());
302    }
303
304
305
306    /**
307     * {@inheritDoc}
308     */
309    public void addFixedTimeChangeListener(
310        ConfigurationChangeListener<FixedTimeLogRotationPolicyCfg> listener) {
311      impl.registerChangeListener(listener);
312    }
313
314
315
316    /**
317     * {@inheritDoc}
318     */
319    public void removeFixedTimeChangeListener(
320        ConfigurationChangeListener<FixedTimeLogRotationPolicyCfg> listener) {
321      impl.deregisterChangeListener(listener);
322    }
323    /**
324     * {@inheritDoc}
325     */
326    public void addChangeListener(
327        ConfigurationChangeListener<LogRotationPolicyCfg> listener) {
328      impl.registerChangeListener(listener);
329    }
330
331
332
333    /**
334     * {@inheritDoc}
335     */
336    public void removeChangeListener(
337        ConfigurationChangeListener<LogRotationPolicyCfg> listener) {
338      impl.deregisterChangeListener(listener);
339    }
340
341
342
343    /**
344     * {@inheritDoc}
345     */
346    public String getJavaClass() {
347      return pJavaClass;
348    }
349
350
351
352    /**
353     * {@inheritDoc}
354     */
355    public SortedSet<String> getTimeOfDay() {
356      return pTimeOfDay;
357    }
358
359
360
361    /**
362     * {@inheritDoc}
363     */
364    public Class<? extends FixedTimeLogRotationPolicyCfg> configurationClass() {
365      return FixedTimeLogRotationPolicyCfg.class;
366    }
367
368
369
370    /**
371     * {@inheritDoc}
372     */
373    public DN dn() {
374      return impl.getDN();
375    }
376
377  }
378}