/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt * or http://forgerock.org/license/CDDLv1.0.html. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at legal-notices/CDDLv1_0.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2008-2009 Sun Microsystems, Inc. * Portions Copyright 2014-2015 ForgeRock AS */ package org.opends.server.admin; import org.forgerock.i18n.LocalizableMessage; import static org.forgerock.util.Reject.*; import java.util.EnumSet; import java.util.Locale; import java.util.MissingResourceException; import java.util.Set; /** * Relation definitions define relationships between types of managed * objects. In addition they define the ownership model: *
* Within the server, listeners can choose to request notification of * managed objects being added or removed from relations. *
* In LDAP, compositions are represented as follows: *
* The type of the additional parameters to the visitor's
* methods.
* @param v
* The relation definition visitor.
* @param p
* Optional additional visitor parameter.
* @return Returns a result as specified by the visitor.
*/
public abstract null
if there is no
* description.
*/
public final LocalizableMessage getDescription() {
return getDescription(Locale.getDefault());
}
/**
* Gets the optional description of this relation definition in the
* specified locale.
*
* @param locale
* The locale.
* @return Returns the description of this relation definition in
* the specified locale, or null
if there is
* no description.
*/
public final LocalizableMessage getDescription(Locale locale) {
try {
String property = "relation." + common.name + ".description";
return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
getParentDefinition(), property, locale);
} catch (MissingResourceException e) {
return null;
}
}
/**
* Get the name of the relation.
*
* @return Returns the name of the relation.
*/
public final String getName() {
return common.name;
}
/**
* Get the definition of the parent managed object.
*
* @return Returns the definition of the parent managed object.
*/
public final AbstractManagedObjectDefinition, ?> getParentDefinition() {
return common.pd;
}
/**
* Gets the synopsis of this relation definition in the default
* locale.
*
* @return Returns the synopsis of this relation definition in the
* default locale.
*/
public final LocalizableMessage getSynopsis() {
return getSynopsis(Locale.getDefault());
}
/**
* Gets the synopsis of this relation definition in the specified
* locale.
*
* @param locale
* The locale.
* @return Returns the synopsis of this relation definition in the
* specified locale.
*/
public final LocalizableMessage getSynopsis(Locale locale) {
String property = "relation." + common.name + ".synopsis";
return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
getParentDefinition(), property, locale);
}
/**
* Gets the user friendly name of this relation definition in the
* default locale.
*
* @return Returns the user friendly name of this relation
* definition in the default locale.
*/
public final LocalizableMessage getUserFriendlyName() {
return getUserFriendlyName(Locale.getDefault());
}
/**
* Gets the user friendly name of this relation definition in the
* specified locale.
*
* @param locale
* The locale.
* @return Returns the user friendly name of this relation
* definition in the specified locale.
*/
public final LocalizableMessage getUserFriendlyName(Locale locale) {
String property = "relation." + common.name + ".user-friendly-name";
return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
getParentDefinition(), property, locale);
}
/**
* Check if the specified option is set for this relation
* definition.
*
* @param option
* The option to test.
* @return Returns true
if the option is set, or
* false
otherwise.
*/
public final boolean hasOption(RelationOption option) {
return common.options.contains(option);
}
/** {@inheritDoc} */
@Override
public final String toString() {
StringBuilder builder = new StringBuilder();
toString(builder);
return builder.toString();
}
/**
* Append a string representation of the managed object relation to
* the provided string builder.
*
* @param builder
* The string builder where the string representation
* should be appended.
*/
public abstract void toString(StringBuilder builder);
/**
* Performs any run-time initialization required by this relation
* definition. This may include resolving managed object paths and
* property names.
*
* @throws Exception
* If this relation definition could not be initialized.
*/
protected void initialize() throws Exception {
// No implementation required.
}
}