001 /*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License"). You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 * Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 * Copyright 2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.admin;
028 import org.opends.messages.Message;
029
030
031
032 import java.util.Locale;
033 import java.util.MissingResourceException;
034
035
036
037 /**
038 * Defines an optional action which administators must perform after
039 * they have modified a property. By default modifications to
040 * properties are assumed to take effect immediately and require no
041 * additional administrative action. Developers should be aware that,
042 * where feasible, they should implement components such that property
043 * modifications require no additional administrative action. This is
044 * required in order to minimize server downtime during administration
045 * and provide a more user-friendly experience.
046 */
047 public final class AdministratorAction {
048
049 /**
050 * Specifies the type of administrator action which must be
051 * performed in order for pending changes to take effect.
052 */
053 public static enum Type {
054 /**
055 * Used when modifications to a property require a component
056 * restart in order to take effect (usually by disabling and
057 * re-enabling the component). May have a description describing
058 * any additional administrator action that is required when the
059 * component is restarted.
060 */
061 COMPONENT_RESTART("component-restart"),
062
063 /**
064 * Used when modifications to a property take effect immediately,
065 * and no additional administrator action is required. May have a
066 * description describing how changes to the modified property
067 * will take effect.
068 */
069 NONE("none"),
070
071 /**
072 * Used when modifications to a property require an additional
073 * administrative action in order to take effect. This should be
074 * used when neither a server restart nor a component restart are
075 * applicable. Always has a description which describes the
076 * additional administrator action which is required when the
077 * property is modified.
078 */
079 OTHER("other"),
080
081 /**
082 * Used when modifications to a property require a server restart
083 * in order to take effect. May have a description describing any
084 * additional administrator action that is required when the
085 * component is restarted.
086 */
087 SERVER_RESTART("server-restart");
088
089 // The user-friendly name of the type.
090 private final String name;
091
092
093
094 // Private constructor.
095 private Type(String name) {
096 this.name = name;
097 }
098
099
100
101 /**
102 * {@inheritDoc}
103 */
104 @Override
105 public String toString() {
106 return name;
107 }
108
109 }
110
111 // The managed object definition associated with this administrator
112 // action.
113 private final AbstractManagedObjectDefinition<?, ?> definition;
114
115 // The name of the property definition associated with this
116 // administrator action.
117 private final String propertyName;
118
119 // The type of administration action.
120 private final Type type;
121
122
123
124 /**
125 * Create a new administrator action.
126 *
127 * @param type
128 * The type of this administration action.
129 * @param d
130 * The managed object definition associated with this
131 * administrator action.
132 * @param propertyName
133 * The name of the property definition associated with this
134 * administrator action.
135 */
136 public AdministratorAction(Type type,
137 AbstractManagedObjectDefinition<?, ?> d, String propertyName) {
138 this.type = type;
139 this.definition = d;
140 this.propertyName = propertyName;
141 }
142
143
144
145 /**
146 * Gets the synopsis of this administrator action in the default
147 * locale.
148 *
149 * @return Returns the synopsis of this administrator action in the
150 * default locale, or <code>null</code> if there is no
151 * synopsis defined.
152 */
153 public final Message getSynopsis() {
154 return getSynopsis(Locale.getDefault());
155 }
156
157
158
159 /**
160 * Gets the synopsis of this administrator action in the specified
161 * locale.
162 *
163 * @param locale
164 * The locale.
165 * @return Returns the synopsis of this administrator action in the
166 * specified locale, or <code>null</code> if there is no
167 * synopsis defined.
168 */
169 public final Message getSynopsis(Locale locale) {
170 ManagedObjectDefinitionI18NResource resource =
171 ManagedObjectDefinitionI18NResource.getInstance();
172 String property = "property." + propertyName
173 + ".requires-admin-action.synopsis";
174 try {
175 return resource.getMessage(definition, property, locale);
176 } catch (MissingResourceException e) {
177 return null;
178 }
179 }
180
181
182
183 /**
184 * Gets the type of this administrator action.
185 *
186 * @return Returns the type of this administrator action.
187 */
188 public final Type getType() {
189 return type;
190 }
191 }