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    }