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