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 2006-2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.types;
028 import org.opends.messages.Message;
029
030
031
032
033
034 import java.util.ArrayList;
035 import java.util.Iterator;
036 import java.util.List;
037
038
039
040
041 /**
042 * This class defines a data structure that can be used to hold
043 * information about the result of processing a configuration change.
044 */
045 @org.opends.server.types.PublicAPI(
046 stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
047 mayInstantiate=true,
048 mayExtend=false,
049 mayInvoke=true)
050 public final class ConfigChangeResult
051 {
052 // A set of messages describing the changes that were made, any
053 // action that may be required, or any problems that were
054 // encountered.
055 private List<Message> messages;
056
057 // Indicates whether one or more of the changes requires
058 // administrative action in order to take effect.
059 private boolean adminActionRequired;
060
061 // The result code to return to the client from this configuration
062 // change.
063 private ResultCode resultCode;
064
065
066
067 /**
068 * Creates a new config change result object with the provided
069 * information.
070 *
071 * @param resultCode The result code for this config
072 * change result.
073 * @param adminActionRequired Indicates whether administrative
074 * action is required for one or more
075 * of the changes to take effect.
076 */
077 public ConfigChangeResult(ResultCode resultCode,
078 boolean adminActionRequired)
079 {
080 this.resultCode = resultCode;
081 this.adminActionRequired = adminActionRequired;
082 this.messages = new ArrayList<Message>();
083 }
084
085
086
087 /**
088 * Creates a new config change result object with the provided
089 * information.
090 *
091 * @param resultCode The result code for this config
092 * change result.
093 * @param adminActionRequired Indicates whether administrative
094 * action is required for one or more
095 * of the changes to take effect.
096 * @param messages A set of messages that provide
097 * additional information about the
098 * change processing.
099 */
100 public ConfigChangeResult(ResultCode resultCode,
101 boolean adminActionRequired,
102 List<Message> messages)
103 {
104 this.resultCode = resultCode;
105 this.adminActionRequired = adminActionRequired;
106 this.messages = messages;
107 }
108
109
110
111 /**
112 * Retrieves the result code for this config change result.
113 *
114 * @return The result code for this config change result.
115 */
116 public ResultCode getResultCode()
117 {
118 return resultCode;
119 }
120
121
122
123 /**
124 * Specifies the result code for this config change result.
125 *
126 * @param resultCode The result code for this config change
127 * result.
128 */
129 public void setResultCode(ResultCode resultCode)
130 {
131 this.resultCode = resultCode;
132 }
133
134
135
136 /**
137 * Indicates whether administrative action is required before one or
138 * more of the changes will take effect.
139 *
140 * @return <CODE>true</CODE> if one or more of the configuration
141 * changes require administrative action to take effect, or
142 * <CODE>false</CODE> if not.
143 */
144 public boolean adminActionRequired()
145 {
146 return adminActionRequired;
147 }
148
149
150
151 /**
152 * Specifies whether administrative action is required before one or
153 * more of the changes will take effect.
154 *
155 * @param adminActionRequired Specifies whether administrative
156 * action is required before one or
157 * more of the changes will take
158 * effect.
159 */
160 public void setAdminActionRequired(boolean adminActionRequired)
161 {
162 this.adminActionRequired = adminActionRequired;
163 }
164
165
166
167 /**
168 * Retrieves the set of messages that provide explanation for the
169 * processing of the configuration changes. This list may be
170 * modified by the caller.
171 *
172 * @return The set of messages that provide explanation for the
173 * processing of the configuration changes.
174 */
175 public List<Message> getMessages()
176 {
177 return messages;
178 }
179
180
181
182 /**
183 * Adds the provided message to the set of messages for this config
184 * change result.
185 *
186 * @param message The message to add to the set of messages for
187 * this config change result.
188 */
189 public void addMessage(Message message)
190 {
191 messages.add(message);
192 }
193
194
195
196 /**
197 * Retrieves a string representation of this config change result.
198 *
199 * @return A string representation of this config change result.
200 */
201 public String toString()
202 {
203 StringBuilder buffer = new StringBuilder();
204 toString(buffer);
205 return buffer.toString();
206 }
207
208
209
210 /**
211 * Appends a string representation of this config change result to
212 * the provided buffer.
213 *
214 * @param buffer The buffer to which the information should be
215 * appended.
216 */
217 public void toString(StringBuilder buffer)
218 {
219 buffer.append("ConfigChangeResult(result=");
220 buffer.append(resultCode.toString());
221 buffer.append(", adminActionRequired=");
222 buffer.append(adminActionRequired);
223 buffer.append(", messages={");
224
225 if (! messages.isEmpty())
226 {
227 Iterator<Message> iterator = messages.iterator();
228
229 Message firstMessage = iterator.next();
230 buffer.append(firstMessage);
231
232 while (iterator.hasNext())
233 {
234 buffer.append(",");
235 buffer.append(iterator.next());
236 }
237 }
238
239
240 buffer.append("})");
241 }
242 }
243