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}