/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2008-2009 Sun Microsystems, Inc. * Portions Copyright 2015 ForgeRock AS. */ package org.forgerock.opendj.config; import org.forgerock.util.Reject; import java.util.EnumSet; import java.util.Locale; import java.util.MissingResourceException; import java.util.Set; import org.forgerock.i18n.LocalizableMessage; /** * 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.
}
}