1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
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
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
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
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
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 }