001 /*
002 * Copyright 2011-2012 UnboundID Corp.
003 *
004 * This program is free software; you can redistribute it and/or modify
005 * it under the terms of the GNU General Public License (GPLv2 only)
006 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
007 * as published by the Free Software Foundation.
008 *
009 * This program is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012 * GNU General Public License for more details.
013 *
014 * You should have received a copy of the GNU General Public License
015 * along with this program; if not, see <http://www.gnu.org/licenses>.
016 */
017
018 package com.unboundid.scim.data;
019
020 import com.unboundid.scim.schema.AttributeDescriptor;
021 import com.unboundid.scim.sdk.InvalidResourceException;
022 import com.unboundid.scim.sdk.SCIMAttribute;
023 import com.unboundid.scim.sdk.SCIMAttributeValue;
024
025 import java.util.ArrayList;
026 import java.util.List;
027
028 /**
029 * This class represents the AuthenticationSchemes complex attribute in the
030 * Service Provider Config.
031 */
032 public class AuthenticationScheme
033 {
034 /**
035 * The <code>AttributeValueResolver</code> that resolves SCIM attribute values
036 * to/from <code>AuthenticationScheme</code> instances.
037 */
038 public static final AttributeValueResolver<AuthenticationScheme>
039 AUTHENTICATION_SCHEME_RESOLVER =
040 new AttributeValueResolver<AuthenticationScheme>()
041 {
042 public AuthenticationScheme toInstance(final SCIMAttributeValue value) {
043 Boolean p = value.getSubAttributeValue("primary",
044 BOOLEAN_RESOLVER);
045 return new AuthenticationScheme(
046 value.getSubAttributeValue("name",
047 STRING_RESOLVER),
048 value.getSubAttributeValue("description",
049 STRING_RESOLVER),
050 value.getSubAttributeValue("specUrl",
051 STRING_RESOLVER),
052 value.getSubAttributeValue("documentationUrl",
053 STRING_RESOLVER),
054 value.getSubAttributeValue("type",
055 STRING_RESOLVER),
056 p == null ? false : p);
057 }
058
059 @Override
060 public SCIMAttributeValue fromInstance(
061 final AttributeDescriptor addressDescriptor,
062 final AuthenticationScheme value)
063 throws InvalidResourceException {
064 final List<SCIMAttribute> subAttributes =
065 new ArrayList<SCIMAttribute>(8);
066
067 if (value.type != null)
068 {
069 subAttributes.add(
070 SCIMAttribute.create(
071 addressDescriptor.getSubAttribute("type"),
072 SCIMAttributeValue.createStringValue(value.type)));
073 }
074
075 if (value.name != null)
076 {
077 subAttributes.add(
078 SCIMAttribute.create(
079 addressDescriptor.getSubAttribute("name"),
080 SCIMAttributeValue.createStringValue(value.name)));
081 }
082
083 if (value.description != null)
084 {
085 subAttributes.add(
086 SCIMAttribute.create(
087 addressDescriptor.getSubAttribute("description"),
088 SCIMAttributeValue.createStringValue(value.description)));
089 }
090
091 if (value.specUrl != null)
092 {
093 subAttributes.add(
094 SCIMAttribute.create(
095 addressDescriptor.getSubAttribute("specUrl"),
096 SCIMAttributeValue.createStringValue(value.specUrl)));
097 }
098
099 if (value.documentationUrl != null)
100 {
101 subAttributes.add(
102 SCIMAttribute.create(
103 addressDescriptor.getSubAttribute("documentationUrl"),
104 SCIMAttributeValue.createStringValue(
105 value.documentationUrl)));
106 }
107
108 if (value.primary)
109 {
110 subAttributes.add(
111 SCIMAttribute.create(
112 addressDescriptor.getSubAttribute("primary"),
113 SCIMAttributeValue.createBooleanValue(value.primary)));
114 }
115
116 return SCIMAttributeValue.createComplexValue(subAttributes);
117 }
118 };
119
120
121
122 private String name;
123 private String description;
124 private String specUrl;
125 private String documentationUrl;
126 private String type;
127 private boolean primary;
128
129 /**
130 * Create a value of the SCIM AuthenticationSchemes attribute.
131 *
132 * @param name The name of the Authentication Scheme.
133 * @param description The description of the Authentication Scheme.
134 * @param specUrl A HTTP addressable URL pointing to the
135 * Authentication Scheme's specification.
136 * @param documentationUrl A HTTP addressable URL pointing to the
137 * Authentication Scheme's usage documentation.
138 * @param type The type of Authentication Scheme.
139 * @param primary Specifies whether this value is the primary value.
140 */
141 public AuthenticationScheme(final String name,
142 final String description,
143 final String specUrl,
144 final String documentationUrl,
145 final String type,
146 final boolean primary) {
147 this.name = name;
148 this.description = description;
149 this.specUrl = specUrl;
150 this.documentationUrl = documentationUrl;
151 this.primary = primary;
152 this.type = type;
153 }
154
155 /**
156 * Retrieves the name of the Authentication Scheme.
157 *
158 * @return The name of the Authentication Scheme.
159 */
160 public String getName() {
161 return name;
162 }
163
164 /**
165 * Sets the name of the Authentication Scheme.
166 *
167 * @param name The name of the Authentication Scheme.
168 */
169 public void setName(final String name) {
170 this.name = name;
171 }
172
173 /**
174 * Retrieves the description of the Authentication Scheme.
175 *
176 * @return The description of the Authentication Scheme.
177 */
178 public String getDescription() {
179 return description;
180 }
181
182 /**
183 * Sets the description of the Authentication Scheme.
184 *
185 * @param description The description of the Authentication Scheme.
186 */
187 public void setDescription(final String description) {
188 this.description = description;
189 }
190
191 /**
192 * Retrieves the HTTP addressable URL pointing to the Authentication Scheme's
193 * specification.
194 *
195 * @return The the HTTP addressable URL pointing to the Authentication
196 * Scheme's specification, or {@code null} if there is none.
197 */
198 public String getSpecUrl() {
199 return specUrl;
200 }
201
202 /**
203 * Sets the HTTP addressable URL pointing to the Authentication Scheme's
204 * specification.
205 * @param specUrl The HTTP addressable URL pointing to the Authentication
206 * Scheme's specification.
207 */
208 public void setSpecUrl(final String specUrl) {
209 this.specUrl = specUrl;
210 }
211
212 /**
213 * Retrieves the HTTP addressable URL pointing to the Authentication Scheme's
214 * usage documentation.
215 * @return The HTTP addressable URL pointing to the Authentication Scheme's
216 * usage documentation.
217 */
218 public String getDocumentationUrl() {
219 return documentationUrl;
220 }
221
222 /**
223 * Sets the HTTP addressable URL pointing to the Authentication Scheme's
224 * usage documentation.
225 * @param documentationUrl The HTTP addressable URL pointing to the
226 * Authentication Scheme's usage documentation.
227 */
228 public void setDocumentationUrl(final String documentationUrl) {
229 this.documentationUrl = documentationUrl;
230 }
231
232 /**
233 * Indicates whether this value is the primary value.
234 *
235 * @return <code>true</code> if this value is the primary value or
236 * <code>false</code> otherwise.
237 */
238 public boolean isPrimary() {
239 return primary;
240 }
241
242 /**
243 * Specifies whether this value is the primary value.
244 *
245 * @param primary Whether this value is the primary value.
246 */
247 public void setPrimary(final boolean primary) {
248 this.primary = primary;
249 }
250
251 /**
252 * Retrieves the type of Authentication Scheme.
253 *
254 * @return The type of Authentication Scheme.
255 */
256 public String getType() {
257 return type;
258 }
259
260 /**
261 * Sets the type of Authentication Scheme.
262 *
263 * @param type The type of Authentication Scheme.
264 */
265 public void setType(final String type) {
266 this.type = type;
267 }
268
269
270
271 @Override
272 public boolean equals(final Object o)
273 {
274 if (this == o)
275 {
276 return true;
277 }
278 if (o == null || getClass() != o.getClass())
279 {
280 return false;
281 }
282
283 final AuthenticationScheme that = (AuthenticationScheme) o;
284
285 if (primary != that.primary)
286 {
287 return false;
288 }
289 if (description != null ? !description.equals(that.description) :
290 that.description != null)
291 {
292 return false;
293 }
294 if (documentationUrl != null ?
295 !documentationUrl.equals(that.documentationUrl) :
296 that.documentationUrl != null)
297 {
298 return false;
299 }
300 if (name != null ? !name.equals(that.name) : that.name != null)
301 {
302 return false;
303 }
304 if (specUrl != null ? !specUrl.equals(that.specUrl) : that.specUrl != null)
305 {
306 return false;
307 }
308 if (type != null ? !type.equals(that.type) : that.type != null)
309 {
310 return false;
311 }
312
313 return true;
314 }
315
316
317
318 @Override
319 public int hashCode()
320 {
321 int result = name != null ? name.hashCode() : 0;
322 result = 31 * result + (description != null ? description.hashCode() : 0);
323 result = 31 * result + (specUrl != null ? specUrl.hashCode() : 0);
324 result = 31 * result + (documentationUrl != null ?
325 documentationUrl.hashCode() : 0);
326 result = 31 * result + (type != null ? type.hashCode() : 0);
327 result = 31 * result + (primary ? 1 : 0);
328 return result;
329 }
330
331
332
333 @Override
334 public String toString()
335 {
336 final StringBuilder sb = new StringBuilder();
337 sb.append("AuthenticationScheme");
338 sb.append("{name='").append(name).append('\'');
339 sb.append(", description='").append(description).append('\'');
340 sb.append(", specUrl='").append(specUrl).append('\'');
341 sb.append(", documentationUrl='").append(documentationUrl).append('\'');
342 sb.append(", type='").append(type).append('\'');
343 sb.append(", primary=").append(primary);
344 sb.append('}');
345 return sb.toString();
346 }
347 }