View Javadoc

1   /*
2    * Copyright 2006-2011 The Kuali Foundation
3    * Licensed under the Educational Community License, Version 2.0 (the "License");
4    * you may not use this file except in compliance with the License.
5    * You may obtain a copy of the License at
6    *
7    * http://www.opensource.org/licenses/ecl2.php
8    *
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  
16  package org.kuali.rice.kim.api.role;
17  
18  import org.apache.commons.collections.CollectionUtils;
19  import org.apache.commons.lang.StringUtils;
20  import org.apache.commons.lang.builder.EqualsBuilder;
21  import org.apache.commons.lang.builder.HashCodeBuilder;
22  import org.apache.commons.lang.builder.ToStringBuilder;
23  import org.joda.time.DateTime;
24  import org.kuali.rice.core.api.CoreConstants;
25  import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
26  import org.kuali.rice.core.api.mo.ModelBuilder;
27  import org.kuali.rice.core.api.mo.ModelObjectComplete;
28  import org.kuali.rice.core.api.mo.common.active.InactivatableFromToUtils;
29  import org.kuali.rice.core.api.util.jaxb.DateTimeAdapter;
30  import org.kuali.rice.core.api.util.jaxb.MapStringStringAdapter;
31  import org.w3c.dom.Element;
32  
33  import javax.xml.bind.annotation.XmlAccessType;
34  import javax.xml.bind.annotation.XmlAccessorType;
35  import javax.xml.bind.annotation.XmlAnyElement;
36  import javax.xml.bind.annotation.XmlElement;
37  import javax.xml.bind.annotation.XmlRootElement;
38  import javax.xml.bind.annotation.XmlType;
39  import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
40  import java.util.ArrayList;
41  import java.util.Collection;
42  import java.util.List;
43  import java.util.Map;
44  
45  @XmlRootElement(name = RoleMember.Constants.ROOT_ELEMENT_NAME)
46  @XmlAccessorType(XmlAccessType.NONE)
47  @XmlType(name = RoleMember.Constants.TYPE_NAME, propOrder = {
48          RoleMember.Elements.ROLE_MEMBER_ID,
49          RoleMember.Elements.ROLE_ID,
50          RoleMember.Elements.ATTRIBUTES,
51          RoleMember.Elements.ROLE_RESPONSIBILITY_ACTIONS,
52          RoleMember.Elements.MEMBER_ID,
53          RoleMember.Elements.MEMBER_TYPE_CODE,
54          CoreConstants.CommonElements.ACTIVE_FROM_DATE,
55          CoreConstants.CommonElements.ACTIVE_TO_DATE,
56          CoreConstants.CommonElements.FUTURE_ELEMENTS
57  })
58  public class RoleMember extends AbstractDataTransferObject implements RoleMemberContract {
59  
60      private static final long serialVersionUID = 1L;
61  
62      @XmlElement(name = Elements.ROLE_MEMBER_ID)
63      private final String roleMemberId;
64  
65      @XmlElement(name = Elements.ROLE_ID)
66      private final String roleId;
67  
68      @XmlElement(name = Elements.ATTRIBUTES, required = false)
69      @XmlJavaTypeAdapter(value = MapStringStringAdapter.class)
70      private final Map<String, String> attributes;
71  
72      @XmlElement(name = Elements.ROLE_RESPONSIBILITY_ACTIONS)
73      private final List<RoleResponsibilityAction> roleResponsibilityActions;
74  
75      @XmlElement(name = Elements.MEMBER_ID)
76      private final String memberId;
77  
78      @XmlElement(name = Elements.MEMBER_TYPE_CODE)
79      private final String memberTypeCode;
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      @SuppressWarnings("unused")
90      @XmlAnyElement
91      private final Collection<Element> _futureElements = null;
92  
93      /**
94       * Private constructor for JAXB
95       */
96      @SuppressWarnings("unused")
97      private RoleMember() {
98          roleMemberId = null;
99          roleId = null;
100         attributes = null;
101         roleResponsibilityActions = null;
102         memberId = null;
103         memberTypeCode = null;
104         activeFromDate = null;
105         activeToDate = null;
106     }
107 
108     private RoleMember(Builder b) {
109         roleMemberId = b.getRoleMemberId();
110         roleId = b.getRoleId();
111         attributes = b.getAttributes();
112 
113         List<RoleResponsibilityAction> roleResponsibilityActions = new ArrayList<RoleResponsibilityAction>();
114         if (!CollectionUtils.isEmpty(b.getRoleRspActions())) {
115             for (RoleResponsibilityAction.Builder rraBuilder : b.getRoleRspActions()) {
116                 roleResponsibilityActions.add(rraBuilder.build());
117             }
118         }
119         this.roleResponsibilityActions = roleResponsibilityActions;
120 
121         memberId = b.getMemberId();
122         memberTypeCode = b.getMemberTypeCode();
123         activeFromDate = b.getActiveFromDate();
124         activeToDate = b.getActiveToDate();
125     }
126 
127 
128     public String getMemberId() {
129         return this.memberId;
130     }
131 
132     public String getMemberTypeCode() {
133         return this.memberTypeCode;
134     }
135 
136 
137     public String getRoleMemberId() {
138         return this.roleMemberId;
139     }
140 
141     public String getRoleId() {
142         return this.roleId;
143     }
144 
145     /**
146      * @return the attributes
147      */
148     public Map<String, String> getAttributes() {
149         return this.attributes;
150     }
151 
152     /**
153      * @return the roleResponsibilityActions
154      */
155     public List<RoleResponsibilityAction> getRoleRspActions() {
156         return this.roleResponsibilityActions;
157     }
158 
159     public DateTime getActiveFromDate() {
160         return activeFromDate;
161     }
162 
163     public DateTime getActiveToDate() {
164         return activeToDate;
165     }
166 
167     @Override
168     public boolean isActive(DateTime activeAsOfDate) {
169         return InactivatableFromToUtils.isActive(activeFromDate, activeToDate, activeAsOfDate);
170     }
171 
172     public static final class Builder implements ModelBuilder, RoleMemberContract, ModelObjectComplete {
173 
174         private String roleMemberId;
175         private String roleId;
176         private Map<String, String> attributes;
177         private List<RoleResponsibilityAction.Builder> roleRspActions;
178         private String memberId;
179         private String memberTypeCode;
180         private DateTime activeFromDate;
181         private DateTime activeToDate;
182 
183         public static Builder create(String roleId, String roleMemberId, String memberId,
184                                      String memberTypeCode, DateTime activeFromDate, DateTime activeToDate, Map<String, String> attributes) {
185             Builder b = new Builder();
186             b.setRoleId(roleId);
187             b.setRoleMemberId(roleMemberId);
188             b.setMemberId(memberId);
189             b.setMemberTypeCode(memberTypeCode);
190             b.setActiveFromDate(activeFromDate);
191             b.setActiveToDate(activeToDate);
192             b.setAttributes(attributes);
193             return b;
194         }
195 
196         public static Builder create(RoleMemberContract contract) {
197             Builder b = new Builder();
198             b.setRoleMemberId(contract.getRoleMemberId());
199             b.setRoleId(contract.getRoleId());
200             b.setAttributes(contract.getAttributes());
201 
202             List<RoleResponsibilityAction.Builder> rraBuilders = new ArrayList<RoleResponsibilityAction.Builder>();
203             if (!CollectionUtils.isEmpty(contract.getRoleRspActions())) {
204                 for (RoleResponsibilityActionContract rrac : contract.getRoleRspActions()) {
205                     rraBuilders.add(RoleResponsibilityAction.Builder.create(rrac));
206                 }
207             }
208             b.setRoleRspActions(rraBuilders);
209 
210             b.setMemberId(contract.getMemberId());
211             b.setMemberTypeCode(contract.getMemberTypeCode());
212             b.setActiveFromDate(contract.getActiveFromDate());
213             b.setActiveToDate(contract.getActiveToDate());
214             return b;
215         }
216 
217         public RoleMember build() {
218             return new RoleMember(this);
219         }
220 
221         public String getRoleMemberId() {
222             return roleMemberId;
223         }
224 
225         public void setRoleMemberId(String roleMemberId) {
226             this.roleMemberId = roleMemberId;
227         }
228 
229         public String getRoleId() {
230             return roleId;
231         }
232 
233         public void setRoleId(String roleId) {
234             this.roleId = roleId;
235         }
236 
237         public Map<String, String> getAttributes() {
238             return attributes;
239         }
240 
241         public void setAttributes(Map<String, String> attributes) {
242             this.attributes = attributes;
243         }
244 
245         public List<RoleResponsibilityAction.Builder> getRoleRspActions() {
246             return roleRspActions;
247         }
248 
249         public void setRoleRspActions(List<RoleResponsibilityAction.Builder> roleRspActions) {
250             this.roleRspActions = roleRspActions;
251         }
252 
253         public String getMemberId() {
254             return memberId;
255         }
256 
257         public void setMemberId(String memberId) {
258             if (StringUtils.isBlank(memberId)) {
259                 throw new IllegalArgumentException("memberId may not be null");
260             }
261             this.memberId = memberId;
262         }
263 
264         public String getMemberTypeCode() {
265             return memberTypeCode;
266         }
267 
268         public void setMemberTypeCode(String memberTypeCode) {
269             if (StringUtils.isBlank(memberTypeCode)) {
270                 throw new IllegalArgumentException("memberTypeCode may not be null");
271             }
272             this.memberTypeCode = memberTypeCode;
273         }
274 
275         public DateTime getActiveFromDate() {
276             return activeFromDate;
277         }
278 
279         public void setActiveFromDate(DateTime activeFromDate) {
280             this.activeFromDate = activeFromDate;
281         }
282 
283         public DateTime getActiveToDate() {
284             return activeToDate;
285         }
286 
287         public void setActiveToDate(DateTime activeToDate) {
288             this.activeToDate = activeToDate;
289         }
290 
291         @Override
292         public boolean isActive(DateTime activeAsOfDate) {
293             return InactivatableFromToUtils.isActive(activeFromDate, activeToDate, activeAsOfDate);
294         }
295 
296         @Override
297         public int hashCode() {
298             return HashCodeBuilder.reflectionHashCode(this);
299         }
300 
301         @Override
302         public boolean equals(Object obj) {
303             return EqualsBuilder.reflectionEquals(obj, this);
304         }
305 
306         @Override
307         public String toString() {
308             return ToStringBuilder.reflectionToString(this);
309         }
310     }
311 
312     /**
313      * A private class which exposes constants which define the XML element names to use
314      * when this object is marshalled to XML.
315      */
316     static class Elements {
317         final static String ROLE_MEMBER_ID = "roleMemberId";
318         final static String ROLE_ID = "roleId";
319         final static String ATTRIBUTES = "attributes";
320         final static String ROLE_RESPONSIBILITY_ACTIONS = "roleResponsibilityActions";
321         final static String MEMBER_ID = "memberId";
322         final static String MEMBER_TYPE_CODE = "memberTypeCode";
323     }
324 
325     /**
326      * Defines some internal constants used on this class.
327      */
328     static class Constants {
329         final static String ROOT_ELEMENT_NAME = "roleMember";
330         final static String TYPE_NAME = "RoleMemberType";
331     }
332 }