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 * The User's manager. A complex type that optionally allows Service Providers
030 * to represent organizational hierarchy by referencing the "id" attribute of
031 * another User
032 */
033 public class Manager
034 {
035 /**
036 * The <code>AttributeValueResolver</code> that resolves SCIM attribute values
037 * to/from <code>Manager</code> instances.
038 */
039 public static final AttributeValueResolver<Manager> MANAGER_RESOLVER =
040 new AttributeValueResolver<Manager>() {
041 /**
042 * {@inheritDoc}
043 */
044 public Manager toInstance(final SCIMAttributeValue value) {
045 return new Manager(
046 value.getSubAttributeValue("managerId",
047 STRING_RESOLVER),
048 value.getSubAttributeValue("displayName",
049 STRING_RESOLVER));
050 }
051
052 /**
053 * {@inheritDoc}
054 */
055 public SCIMAttributeValue fromInstance(
056 final AttributeDescriptor attributeDescriptor,
057 final Manager value) throws InvalidResourceException {
058 final List<SCIMAttribute> subAttributes =
059 new ArrayList<SCIMAttribute>(2);
060
061 if (value.managerId != null)
062 {
063 subAttributes.add(
064 SCIMAttribute.create(
065 attributeDescriptor.getSubAttribute("managerId"),
066 SCIMAttributeValue.createStringValue(value.managerId)));
067 }
068
069 if (value.displayName != null)
070 {
071 subAttributes.add(
072 SCIMAttribute.create(
073 attributeDescriptor.getSubAttribute("displayName"),
074 SCIMAttributeValue.createStringValue(value.displayName)));
075 }
076 return SCIMAttributeValue.createComplexValue(subAttributes);
077 }
078 };
079
080 private String managerId;
081
082 private String displayName;
083
084 /**
085 * Creates a SCIM enterprise user extension 'manager' attribute. Any of the
086 * arguments may be {@code null} if they are not to be included.
087 *
088 * @param managerId The id of the SCIM resource representing the User's
089 * manager.
090 * @param displayName The displayName of the User's manager.
091 */
092 public Manager(final String managerId, final String displayName) {
093 this.displayName = displayName;
094 this.managerId = managerId;
095 }
096
097 /**
098 * Retrieves the displayName of the User's manager.
099 *
100 * @return The displayName of the User's manager.
101 */
102 public String getDisplayName() {
103 return displayName;
104 }
105
106 /**
107 * Sets the displayName of the User's manager.
108 *
109 * @param displayName The displayName of the User's manager.
110 */
111 public void setDisplayName(final String displayName) {
112 this.displayName = displayName;
113 }
114
115 /**
116 * Retrieves the id of the SCIM resource representing the User's manager.
117 *
118 * @return The id of the SCIM resource representing the User's manager.
119 */
120 public String getManagerId() {
121 return managerId;
122 }
123
124 /**
125 * Sets the id of the SCIM resource representing the User's manager.
126 *
127 * @param managerId The id of the SCIM resource representing the User's
128 * manager.
129 */
130 public void setManagerId(final String managerId) {
131 this.managerId = managerId;
132 }
133
134 /**
135 * {@inheritDoc}
136 */
137 @Override
138 public boolean equals(final Object o) {
139 if (this == o) {
140 return true;
141 }
142 if (o == null || getClass() != o.getClass()) {
143 return false;
144 }
145
146 Manager manager = (Manager) o;
147
148 if (displayName != null ? !displayName.equals(manager.displayName) :
149 manager.displayName != null) {
150 return false;
151 }
152 if (managerId != null ? !managerId.equals(manager.managerId) :
153 manager.managerId != null) {
154 return false;
155 }
156
157 return true;
158 }
159
160 /**
161 * {@inheritDoc}
162 */
163 @Override
164 public int hashCode() {
165 int result = managerId != null ? managerId.hashCode() : 0;
166 result = 31 * result + (displayName != null ? displayName.hashCode() : 0);
167 return result;
168 }
169
170 /**
171 * {@inheritDoc}
172 */
173 @Override
174 public String toString() {
175 return "Manager{" +
176 "displayName='" + displayName + '\'' +
177 ", managerId='" + managerId + '\'' +
178 '}';
179 }
180 }