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