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.BooleanPropertyDefinition; 022import org.forgerock.opendj.config.ClassPropertyDefinition; 023import org.forgerock.opendj.config.client.ConcurrentModificationException; 024import org.forgerock.opendj.config.client.ManagedObject; 025import org.forgerock.opendj.config.client.MissingMandatoryPropertiesException; 026import org.forgerock.opendj.config.client.OperationRejectedException; 027import org.forgerock.opendj.config.ManagedObjectAlreadyExistsException; 028import org.forgerock.opendj.config.ManagedObjectDefinition; 029import org.forgerock.opendj.config.PropertyOption; 030import org.forgerock.opendj.config.PropertyProvider; 031import org.forgerock.opendj.config.server.ConfigurationChangeListener; 032import org.forgerock.opendj.config.server.ServerManagedObject; 033import org.forgerock.opendj.config.TopCfgDefn; 034import org.forgerock.opendj.config.UndefinedDefaultBehaviorProvider; 035import org.forgerock.opendj.ldap.DN; 036import org.forgerock.opendj.ldap.LdapException; 037import org.forgerock.opendj.server.config.client.SchemaProviderCfgClient; 038import org.forgerock.opendj.server.config.server.SchemaProviderCfg; 039 040 041 042/** 043 * An interface for querying the Schema Provider managed object 044 * definition meta information. 045 * <p> 046 * Schema Providers define the schema elements to load. 047 */ 048public final class SchemaProviderCfgDefn extends ManagedObjectDefinition<SchemaProviderCfgClient, SchemaProviderCfg> { 049 050 /** The singleton configuration definition instance. */ 051 private static final SchemaProviderCfgDefn INSTANCE = new SchemaProviderCfgDefn(); 052 053 054 055 /** The "enabled" property definition. */ 056 private static final BooleanPropertyDefinition PD_ENABLED; 057 058 059 060 /** The "java-class" property definition. */ 061 private static final ClassPropertyDefinition PD_JAVA_CLASS; 062 063 064 065 /** Build the "enabled" property definition. */ 066 static { 067 BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "enabled"); 068 builder.setOption(PropertyOption.MANDATORY); 069 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "enabled")); 070 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<Boolean>()); 071 PD_ENABLED = builder.getInstance(); 072 INSTANCE.registerPropertyDefinition(PD_ENABLED); 073 } 074 075 076 077 /** Build the "java-class" property definition. */ 078 static { 079 ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class"); 080 builder.setOption(PropertyOption.MANDATORY); 081 builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "java-class")); 082 builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>()); 083 builder.addInstanceOf("org.opends.server.schema.SchemaProvider"); 084 PD_JAVA_CLASS = builder.getInstance(); 085 INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS); 086 } 087 088 089 090 /** 091 * Get the Schema Provider configuration definition singleton. 092 * 093 * @return Returns the Schema Provider configuration definition 094 * singleton. 095 */ 096 public static SchemaProviderCfgDefn getInstance() { 097 return INSTANCE; 098 } 099 100 101 102 /** 103 * Private constructor. 104 */ 105 private SchemaProviderCfgDefn() { 106 super("schema-provider", TopCfgDefn.getInstance()); 107 } 108 109 110 111 /** {@inheritDoc} */ 112 public SchemaProviderCfgClient createClientConfiguration( 113 ManagedObject<? extends SchemaProviderCfgClient> impl) { 114 return new SchemaProviderCfgClientImpl(impl); 115 } 116 117 118 119 /** {@inheritDoc} */ 120 public SchemaProviderCfg createServerConfiguration( 121 ServerManagedObject<? extends SchemaProviderCfg> impl) { 122 return new SchemaProviderCfgServerImpl(impl); 123 } 124 125 126 127 /** {@inheritDoc} */ 128 public Class<SchemaProviderCfg> getServerConfigurationClass() { 129 return SchemaProviderCfg.class; 130 } 131 132 133 134 /** 135 * Get the "enabled" property definition. 136 * <p> 137 * Indicates whether the Schema Provider is enabled for use. 138 * 139 * @return Returns the "enabled" property definition. 140 */ 141 public BooleanPropertyDefinition getEnabledPropertyDefinition() { 142 return PD_ENABLED; 143 } 144 145 146 147 /** 148 * Get the "java-class" property definition. 149 * <p> 150 * Specifies the fully-qualified name of the Java class that 151 * provides the Schema Provider implementation. 152 * 153 * @return Returns the "java-class" property definition. 154 */ 155 public ClassPropertyDefinition getJavaClassPropertyDefinition() { 156 return PD_JAVA_CLASS; 157 } 158 159 160 161 /** 162 * Managed object client implementation. 163 */ 164 private static class SchemaProviderCfgClientImpl implements 165 SchemaProviderCfgClient { 166 167 /** Private implementation. */ 168 private ManagedObject<? extends SchemaProviderCfgClient> impl; 169 170 171 172 /** Private constructor. */ 173 private SchemaProviderCfgClientImpl( 174 ManagedObject<? extends SchemaProviderCfgClient> impl) { 175 this.impl = impl; 176 } 177 178 179 180 /** {@inheritDoc} */ 181 public Boolean isEnabled() { 182 return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition()); 183 } 184 185 186 187 /** {@inheritDoc} */ 188 public void setEnabled(boolean value) { 189 impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value); 190 } 191 192 193 194 /** {@inheritDoc} */ 195 public String getJavaClass() { 196 return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition()); 197 } 198 199 200 201 /** {@inheritDoc} */ 202 public void setJavaClass(String value) { 203 impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value); 204 } 205 206 207 208 /** {@inheritDoc} */ 209 public ManagedObjectDefinition<? extends SchemaProviderCfgClient, ? extends SchemaProviderCfg> definition() { 210 return INSTANCE; 211 } 212 213 214 215 /** {@inheritDoc} */ 216 public PropertyProvider properties() { 217 return impl; 218 } 219 220 221 222 /** {@inheritDoc} */ 223 public void commit() throws ManagedObjectAlreadyExistsException, 224 MissingMandatoryPropertiesException, ConcurrentModificationException, 225 OperationRejectedException, LdapException { 226 impl.commit(); 227 } 228 229 230 231 /** {@inheritDoc} */ 232 public String toString() { 233 return impl.toString(); 234 } 235 } 236 237 238 239 /** 240 * Managed object server implementation. 241 */ 242 private static class SchemaProviderCfgServerImpl implements 243 SchemaProviderCfg { 244 245 /** Private implementation. */ 246 private ServerManagedObject<? extends SchemaProviderCfg> impl; 247 248 /** The value of the "enabled" property. */ 249 private final boolean pEnabled; 250 251 /** The value of the "java-class" property. */ 252 private final String pJavaClass; 253 254 255 256 /** Private constructor. */ 257 private SchemaProviderCfgServerImpl(ServerManagedObject<? extends SchemaProviderCfg> impl) { 258 this.impl = impl; 259 this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition()); 260 this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition()); 261 } 262 263 264 265 /** {@inheritDoc} */ 266 public void addChangeListener( 267 ConfigurationChangeListener<SchemaProviderCfg> listener) { 268 impl.registerChangeListener(listener); 269 } 270 271 272 273 /** {@inheritDoc} */ 274 public void removeChangeListener( 275 ConfigurationChangeListener<SchemaProviderCfg> listener) { 276 impl.deregisterChangeListener(listener); 277 } 278 279 280 281 /** {@inheritDoc} */ 282 public boolean isEnabled() { 283 return pEnabled; 284 } 285 286 287 288 /** {@inheritDoc} */ 289 public String getJavaClass() { 290 return pJavaClass; 291 } 292 293 294 295 /** {@inheritDoc} */ 296 public Class<? extends SchemaProviderCfg> configurationClass() { 297 return SchemaProviderCfg.class; 298 } 299 300 301 302 /** {@inheritDoc} */ 303 public DN dn() { 304 return impl.getDN(); 305 } 306 307 308 309 /** {@inheritDoc} */ 310 public String toString() { 311 return impl.toString(); 312 } 313 } 314}