View Javadoc
1   /*
2    * The Kuali Financial System, a comprehensive financial management system for higher education.
3    * 
4    * Copyright 2005-2014 The Kuali Foundation
5    * 
6    * This program is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Affero General Public License as
8    * published by the Free Software Foundation, either version 3 of the
9    * License, or (at your option) any later version.
10   * 
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Affero General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Affero General Public License
17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package org.kuali.rice.kim.api.common.delegate;
20  
21  import java.io.Serializable;
22  import java.util.Collection;
23  import java.util.Map;
24  
25  import javax.xml.bind.annotation.XmlAccessType;
26  import javax.xml.bind.annotation.XmlAccessorType;
27  import javax.xml.bind.annotation.XmlAnyElement;
28  import javax.xml.bind.annotation.XmlElement;
29  import javax.xml.bind.annotation.XmlRootElement;
30  import javax.xml.bind.annotation.XmlType;
31  import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
32  
33  import org.apache.commons.lang.StringUtils;
34  import org.joda.time.DateTime;
35  import org.kuali.rice.core.api.CoreConstants;
36  import org.kuali.rice.core.api.membership.MemberType;
37  import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
38  import org.kuali.rice.core.api.mo.ModelBuilder;
39  import org.kuali.rice.core.api.mo.common.active.InactivatableFromToUtils;
40  import org.kuali.rice.core.api.util.jaxb.DateTimeAdapter;
41  import org.kuali.rice.core.api.util.jaxb.MapStringStringAdapter;
42  import org.kuali.rice.kim.api.KimConstants;
43  import org.w3c.dom.Element;
44  
45  @XmlRootElement(name = DelegateMember.Constants.ROOT_ELEMENT_NAME)
46  @XmlAccessorType(XmlAccessType.NONE)
47  @XmlType(name = DelegateMember.Constants.TYPE_NAME, propOrder = {
48          DelegateMember.Elements.DELEGATION_MEMBER_ID,
49          DelegateMember.Elements.DELEGATION_ID,
50          DelegateMember.Elements.MEMBER_ID,
51          DelegateMember.Elements.ROLE_MEMBER_ID,
52          DelegateMember.Elements.TYPE_CODE,
53          DelegateMember.Elements.ATTRIBUTES,
54          CoreConstants.CommonElements.ACTIVE_FROM_DATE,
55          CoreConstants.CommonElements.ACTIVE_TO_DATE,
56          CoreConstants.CommonElements.VERSION_NUMBER,
57          CoreConstants.CommonElements.FUTURE_ELEMENTS
58  })
59  public final class DelegateMember extends AbstractDataTransferObject
60          implements DelegateMemberContract {
61  
62      @XmlElement(name = Elements.DELEGATION_MEMBER_ID, required = false)
63      private final String delegationMemberId;
64  
65      @XmlElement(name = Elements.DELEGATION_ID, required = false)
66      private final String delegationId;
67  
68      @XmlElement(name = Elements.MEMBER_ID, required = false)
69      private final String memberId;
70  
71      @XmlElement(name = Elements.ROLE_MEMBER_ID, required = false)
72      private final String roleMemberId;
73  
74      @XmlElement(name = Elements.TYPE_CODE, required = false)
75      private final String typeCode;
76  
77      @XmlElement(name = Elements.ATTRIBUTES, required = false)
78      @XmlJavaTypeAdapter(value = MapStringStringAdapter.class)
79      private final Map<String, String> attributes;
80  
81      @XmlJavaTypeAdapter(DateTimeAdapter.class)
82      @XmlElement(name = CoreConstants.CommonElements.ACTIVE_FROM_DATE)
83      private final DateTime activeFromDate;
84  
85      @XmlJavaTypeAdapter(DateTimeAdapter.class)
86      @XmlElement(name = CoreConstants.CommonElements.ACTIVE_TO_DATE)
87      private final DateTime activeToDate;
88  
89      @XmlElement(name = CoreConstants.CommonElements.VERSION_NUMBER)
90      private final Long versionNumber;
91  
92      @SuppressWarnings("unused")
93      @XmlAnyElement
94      private final Collection<Element> _futureElements = null;
95  
96      /**
97       * Private constructor used only by JAXB.
98       */
99      @SuppressWarnings("unused")
100     private DelegateMember() {
101         this.delegationMemberId = null;
102         this.delegationId = null;
103         this.memberId = null;
104         this.roleMemberId = null;
105         this.typeCode = null;
106         this.versionNumber = null;
107         this.activeFromDate = null;
108         this.activeToDate = null;
109         this.attributes = null;
110     }
111 
112     private DelegateMember(Builder builder) {
113         this.delegationMemberId = builder.getDelegationMemberId();
114         this.delegationId = builder.getDelegationId();
115         this.memberId = builder.getMemberId();
116         this.roleMemberId = builder.getRoleMemberId();
117         if (builder.getType() == null) {
118             this.typeCode = null;
119         } else {
120             this.typeCode = builder.getType().getCode();
121         }
122         this.versionNumber = builder.getVersionNumber();
123         this.activeFromDate = builder.getActiveFromDate();
124         this.activeToDate = builder.getActiveToDate();
125         this.attributes = builder.getAttributes();
126     }
127 
128 
129     @Override
130     public String getDelegationMemberId() {
131         return this.delegationMemberId;
132     }
133 
134     @Override
135     public String getDelegationId() {
136         return this.delegationId;
137     }
138 
139     @Override
140     public MemberType getType() {
141         return MemberType.fromCode(this.typeCode);
142     }
143 
144     @Override
145     public String getRoleMemberId() {
146         return this.roleMemberId;
147     }
148 
149     @Override
150     public String getMemberId() {
151         return this.memberId;
152     }
153 
154     @Override
155     public Long getVersionNumber() {
156         return this.versionNumber;
157     }
158 
159     @Override
160     public DateTime getActiveFromDate() {
161         return activeFromDate;
162     }
163 
164     @Override
165     public DateTime getActiveToDate() {
166         return activeToDate;
167     }
168 
169     /**
170      * @return the attributes
171      */
172     @Override
173     public Map<String, String> getAttributes() {
174         return this.attributes;
175     }
176 
177     @Override
178     public boolean isActive(DateTime activeAsOfDate) {
179         return InactivatableFromToUtils.isActive(activeFromDate, activeToDate, activeAsOfDate);
180     }
181 
182     @Override
183     public boolean isActive() {
184         return InactivatableFromToUtils.isActive(activeFromDate, activeToDate, null);
185     }
186 
187     /**
188      * A builder which can be used to construct {@link DelegateMember} instances.  Enforces the constraints of the {@link DelegateMemberContract}.
189      */
190     public static final class Builder implements Serializable, ModelBuilder, DelegateMemberContract {
191 
192         private String delegationMemberId;
193         private String delegationId;
194         private String memberId;
195         private String roleMemberId;
196         private MemberType type;
197         private Map<String, String> attributes;
198         private DateTime activeFromDate;
199         private DateTime activeToDate;
200         private Long versionNumber;
201 
202         private Builder() {
203 
204         }
205 
206         public static Builder create() {
207             return new Builder();
208         }
209 
210         public static Builder create(DelegateMemberContract contract) {
211             if (contract == null) {
212                 throw new IllegalArgumentException("contract was null");
213             }
214             Builder builder = create();
215             builder.setDelegationMemberId(contract.getDelegationMemberId());
216             builder.setDelegationId(contract.getDelegationId());
217             builder.setMemberId(contract.getMemberId());
218             builder.setRoleMemberId(contract.getRoleMemberId());
219             builder.setAttributes(contract.getAttributes());
220             builder.setType(contract.getType());
221             builder.setActiveFromDate(contract.getActiveFromDate());
222             builder.setActiveToDate(contract.getActiveToDate());
223             builder.setVersionNumber(contract.getVersionNumber());
224             return builder;
225         }
226 
227         @Override
228         public DelegateMember build() {
229             return new DelegateMember(this);
230         }
231 
232         @Override
233         public String getDelegationMemberId() {
234             return this.delegationMemberId;
235         }
236 
237         public void setDelegationMemberId(String delegationMemberId) {
238             if (StringUtils.isWhitespace(delegationMemberId)) {
239                 throw new IllegalArgumentException("delegationMemberId cannot be whitespace");
240             }
241             this.delegationMemberId = delegationMemberId;
242         }
243 
244         @Override
245         public String getDelegationId() {
246             return delegationId;
247         }
248 
249         public void setDelegationId(String delegationId) {
250             this.delegationId = delegationId;
251         }
252 
253         @Override
254         public String getMemberId() {
255             return memberId;
256         }
257 
258         public void setMemberId(String memberId) {
259             this.memberId = memberId;
260         }
261 
262         @Override
263         public String getRoleMemberId() {
264             return roleMemberId;
265         }
266 
267         public void setRoleMemberId(String roleMemberId) {
268             this.roleMemberId = roleMemberId;
269         }
270 
271         @Override
272         public MemberType getType() {
273             return type;
274         }
275 
276         public void setType(MemberType type) {
277             this.type = type;
278         }
279 
280         @Override
281         public Map<String, String> getAttributes() {
282             return this.attributes;
283         }
284 
285         public void setAttributes(Map<String, String> attributes) {
286             this.attributes = attributes;
287         }
288 
289         @Override
290         public Long getVersionNumber() {
291             return versionNumber;
292         }
293 
294         public void setVersionNumber(Long versionNumber) {
295             this.versionNumber = versionNumber;
296         }
297 
298         @Override
299         public DateTime getActiveFromDate() {
300             return activeFromDate;
301         }
302 
303         public void setActiveFromDate(DateTime activeFromDate) {
304             this.activeFromDate = activeFromDate;
305         }
306 
307         @Override
308         public DateTime getActiveToDate() {
309             return activeToDate;
310         }
311 
312         public void setActiveToDate(DateTime activeToDate) {
313             this.activeToDate = activeToDate;
314         }
315 
316         @Override
317         public boolean isActive(DateTime activeAsOfDate) {
318             return InactivatableFromToUtils.isActive(activeFromDate, activeToDate, activeAsOfDate);
319         }
320 
321         @Override
322         public boolean isActive() {
323             return InactivatableFromToUtils.isActive(activeFromDate, activeToDate, null);
324         }
325     }
326 
327     /**
328      * Defines some internal constants used on this class.
329      */
330     static class Constants {
331 
332         final static String ROOT_ELEMENT_NAME = "delegateMember";
333         final static String TYPE_NAME = "DelegateMemberType";
334 
335     }
336 
337     /**
338      * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
339      */
340     static class Elements {
341         final static String DELEGATION_MEMBER_ID = "delegationMemberId";
342         final static String ROLE_ID = "roleId";
343         final static String DELEGATION_ID = "delegationId";
344         final static String MEMBER_ID = "memberId";
345         final static String ATTRIBUTES = "attributes";
346         final static String ROLE_MEMBER_ID = "roleMemberId";
347         final static String TYPE_CODE = "typeCode";
348     }
349 
350     public static class Cache {
351         public static final String NAME = KimConstants.Namespaces.KIM_NAMESPACE_2_0 + "/" + DelegateMember.Constants.TYPE_NAME;
352     }
353 }