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 org.forgerock.opendj.config.AdministratorAction;
031import org.forgerock.opendj.config.ClassPropertyDefinition;
032import org.forgerock.opendj.config.client.ConcurrentModificationException;
033import org.forgerock.opendj.config.client.ManagedObject;
034import org.forgerock.opendj.config.client.MissingMandatoryPropertiesException;
035import org.forgerock.opendj.config.client.OperationRejectedException;
036import org.forgerock.opendj.config.DefaultBehaviorProvider;
037import org.forgerock.opendj.config.DefinedDefaultBehaviorProvider;
038import org.forgerock.opendj.config.ManagedObjectAlreadyExistsException;
039import org.forgerock.opendj.config.ManagedObjectDefinition;
040import org.forgerock.opendj.config.PropertyOption;
041import org.forgerock.opendj.config.PropertyProvider;
042import org.forgerock.opendj.config.server.ConfigurationChangeListener;
043import org.forgerock.opendj.config.server.ServerManagedObject;
044import org.forgerock.opendj.config.SizePropertyDefinition;
045import org.forgerock.opendj.config.Tag;
046import org.forgerock.opendj.config.UndefinedDefaultBehaviorProvider;
047import org.forgerock.opendj.ldap.DN;
048import org.forgerock.opendj.ldap.LdapException;
049import org.forgerock.opendj.server.config.client.FreeDiskSpaceLogRetentionPolicyCfgClient;
050import org.forgerock.opendj.server.config.server.FreeDiskSpaceLogRetentionPolicyCfg;
051import org.forgerock.opendj.server.config.server.LogRetentionPolicyCfg;
052
053
054
055/**
056 * An interface for querying the Free Disk Space Log Retention Policy
057 * managed object definition meta information.
058 * <p>
059 * Retention policy based on the free disk space available.
060 */
061public final class FreeDiskSpaceLogRetentionPolicyCfgDefn extends ManagedObjectDefinition<FreeDiskSpaceLogRetentionPolicyCfgClient, FreeDiskSpaceLogRetentionPolicyCfg> {
062
063  /** The singleton configuration definition instance. */
064  private static final FreeDiskSpaceLogRetentionPolicyCfgDefn INSTANCE = new FreeDiskSpaceLogRetentionPolicyCfgDefn();
065
066
067
068  /** The "free-disk-space" property definition. */
069  private static final SizePropertyDefinition PD_FREE_DISK_SPACE;
070
071
072
073  /** The "java-class" property definition. */
074  private static final ClassPropertyDefinition PD_JAVA_CLASS;
075
076
077
078  /** Build the "free-disk-space" property definition. */
079  static {
080      SizePropertyDefinition.Builder builder = SizePropertyDefinition.createBuilder(INSTANCE, "free-disk-space");
081      builder.setOption(PropertyOption.MANDATORY);
082      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "free-disk-space"));
083      builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<Long>());
084      builder.setLowerLimit("1");
085      PD_FREE_DISK_SPACE = builder.getInstance();
086      INSTANCE.registerPropertyDefinition(PD_FREE_DISK_SPACE);
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.setOption(PropertyOption.ADVANCED);
096      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "java-class"));
097      DefaultBehaviorProvider<String> provider = new DefinedDefaultBehaviorProvider<String>("org.opends.server.loggers.FreeDiskSpaceRetentionPolicy");
098      builder.setDefaultBehaviorProvider(provider);
099      builder.addInstanceOf("org.opends.server.loggers.RetentionPolicy");
100      PD_JAVA_CLASS = builder.getInstance();
101      INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
102  }
103
104
105
106  // Register the tags associated with this managed object definition.
107  static {
108    INSTANCE.registerTag(Tag.valueOf("logging"));
109  }
110
111
112
113  /**
114   * Get the Free Disk Space Log Retention Policy configuration
115   * definition singleton.
116   *
117   * @return Returns the Free Disk Space Log Retention Policy
118   *         configuration definition singleton.
119   */
120  public static FreeDiskSpaceLogRetentionPolicyCfgDefn getInstance() {
121    return INSTANCE;
122  }
123
124
125
126  /**
127   * Private constructor.
128   */
129  private FreeDiskSpaceLogRetentionPolicyCfgDefn() {
130    super("free-disk-space-log-retention-policy", LogRetentionPolicyCfgDefn.getInstance());
131  }
132
133
134
135  /** {@inheritDoc} */
136  public FreeDiskSpaceLogRetentionPolicyCfgClient createClientConfiguration(
137      ManagedObject<? extends FreeDiskSpaceLogRetentionPolicyCfgClient> impl) {
138    return new FreeDiskSpaceLogRetentionPolicyCfgClientImpl(impl);
139  }
140
141
142
143  /** {@inheritDoc} */
144  public FreeDiskSpaceLogRetentionPolicyCfg createServerConfiguration(
145      ServerManagedObject<? extends FreeDiskSpaceLogRetentionPolicyCfg> impl) {
146    return new FreeDiskSpaceLogRetentionPolicyCfgServerImpl(impl);
147  }
148
149
150
151  /** {@inheritDoc} */
152  public Class<FreeDiskSpaceLogRetentionPolicyCfg> getServerConfigurationClass() {
153    return FreeDiskSpaceLogRetentionPolicyCfg.class;
154  }
155
156
157
158  /**
159   * Get the "free-disk-space" property definition.
160   * <p>
161   * Specifies the minimum amount of free disk space that should be
162   * available on the file system on which the archived log files are
163   * stored.
164   *
165   * @return Returns the "free-disk-space" property definition.
166   */
167  public SizePropertyDefinition getFreeDiskSpacePropertyDefinition() {
168    return PD_FREE_DISK_SPACE;
169  }
170
171
172
173  /**
174   * Get the "java-class" property definition.
175   * <p>
176   * Specifies the fully-qualified name of the Java class that
177   * provides the Free Disk Space Log Retention Policy implementation.
178   *
179   * @return Returns the "java-class" property definition.
180   */
181  public ClassPropertyDefinition getJavaClassPropertyDefinition() {
182    return PD_JAVA_CLASS;
183  }
184
185
186
187  /**
188   * Managed object client implementation.
189   */
190  private static class FreeDiskSpaceLogRetentionPolicyCfgClientImpl implements
191    FreeDiskSpaceLogRetentionPolicyCfgClient {
192
193    /** Private implementation. */
194    private ManagedObject<? extends FreeDiskSpaceLogRetentionPolicyCfgClient> impl;
195
196
197
198    /** Private constructor. */
199    private FreeDiskSpaceLogRetentionPolicyCfgClientImpl(
200        ManagedObject<? extends FreeDiskSpaceLogRetentionPolicyCfgClient> impl) {
201      this.impl = impl;
202    }
203
204
205
206    /** {@inheritDoc} */
207    public Long getFreeDiskSpace() {
208      return impl.getPropertyValue(INSTANCE.getFreeDiskSpacePropertyDefinition());
209    }
210
211
212
213    /** {@inheritDoc} */
214    public void setFreeDiskSpace(long value) {
215      impl.setPropertyValue(INSTANCE.getFreeDiskSpacePropertyDefinition(), value);
216    }
217
218
219
220    /** {@inheritDoc} */
221    public String getJavaClass() {
222      return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
223    }
224
225
226
227    /** {@inheritDoc} */
228    public void setJavaClass(String value) {
229      impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
230    }
231
232
233
234    /** {@inheritDoc} */
235    public ManagedObjectDefinition<? extends FreeDiskSpaceLogRetentionPolicyCfgClient, ? extends FreeDiskSpaceLogRetentionPolicyCfg> definition() {
236      return INSTANCE;
237    }
238
239
240
241    /** {@inheritDoc} */
242    public PropertyProvider properties() {
243      return impl;
244    }
245
246
247
248    /** {@inheritDoc} */
249    public void commit() throws ManagedObjectAlreadyExistsException,
250        MissingMandatoryPropertiesException, ConcurrentModificationException,
251        OperationRejectedException, LdapException {
252      impl.commit();
253    }
254
255
256
257    /** {@inheritDoc} */
258    public String toString() {
259      return impl.toString();
260    }
261  }
262
263
264
265  /**
266   * Managed object server implementation.
267   */
268  private static class FreeDiskSpaceLogRetentionPolicyCfgServerImpl implements
269    FreeDiskSpaceLogRetentionPolicyCfg {
270
271    /** Private implementation. */
272    private ServerManagedObject<? extends FreeDiskSpaceLogRetentionPolicyCfg> impl;
273
274    /** The value of the "free-disk-space" property. */
275    private final long pFreeDiskSpace;
276
277    /** The value of the "java-class" property. */
278    private final String pJavaClass;
279
280
281
282    /** Private constructor. */
283    private FreeDiskSpaceLogRetentionPolicyCfgServerImpl(ServerManagedObject<? extends FreeDiskSpaceLogRetentionPolicyCfg> impl) {
284      this.impl = impl;
285      this.pFreeDiskSpace = impl.getPropertyValue(INSTANCE.getFreeDiskSpacePropertyDefinition());
286      this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
287    }
288
289
290
291    /** {@inheritDoc} */
292    public void addFreeDiskSpaceChangeListener(
293        ConfigurationChangeListener<FreeDiskSpaceLogRetentionPolicyCfg> listener) {
294      impl.registerChangeListener(listener);
295    }
296
297
298
299    /** {@inheritDoc} */
300    public void removeFreeDiskSpaceChangeListener(
301        ConfigurationChangeListener<FreeDiskSpaceLogRetentionPolicyCfg> listener) {
302      impl.deregisterChangeListener(listener);
303    }
304    /** {@inheritDoc} */
305    public void addChangeListener(
306        ConfigurationChangeListener<LogRetentionPolicyCfg> listener) {
307      impl.registerChangeListener(listener);
308    }
309
310
311
312    /** {@inheritDoc} */
313    public void removeChangeListener(
314        ConfigurationChangeListener<LogRetentionPolicyCfg> listener) {
315      impl.deregisterChangeListener(listener);
316    }
317
318
319
320    /** {@inheritDoc} */
321    public long getFreeDiskSpace() {
322      return pFreeDiskSpace;
323    }
324
325
326
327    /** {@inheritDoc} */
328    public String getJavaClass() {
329      return pJavaClass;
330    }
331
332
333
334    /** {@inheritDoc} */
335    public Class<? extends FreeDiskSpaceLogRetentionPolicyCfg> configurationClass() {
336      return FreeDiskSpaceLogRetentionPolicyCfg.class;
337    }
338
339
340
341    /** {@inheritDoc} */
342    public DN dn() {
343      return impl.getDN();
344    }
345
346
347
348    /** {@inheritDoc} */
349    public String toString() {
350      return impl.toString();
351    }
352  }
353}