001    /**
002     * Copyright 2005-2012 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.kim.api.role;
017    
018    import org.apache.commons.lang.StringUtils;
019    import org.apache.commons.lang.builder.EqualsBuilder;
020    import org.apache.commons.lang.builder.HashCodeBuilder;
021    import org.apache.commons.lang.builder.ToStringBuilder;
022    import org.kuali.rice.core.api.CoreConstants;
023    import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
024    import org.kuali.rice.core.api.mo.ModelBuilder;
025    import org.kuali.rice.core.api.mo.ModelObjectComplete;
026    import org.kuali.rice.kim.api.KimConstants;
027    import org.w3c.dom.Element;
028    
029    import javax.xml.bind.annotation.XmlAccessType;
030    import javax.xml.bind.annotation.XmlAccessorType;
031    import javax.xml.bind.annotation.XmlAnyElement;
032    import javax.xml.bind.annotation.XmlElement;
033    import javax.xml.bind.annotation.XmlRootElement;
034    import javax.xml.bind.annotation.XmlType;
035    import java.util.Collection;
036    
037    /**
038     * @author Kuali Rice Team (rice.collab@kuali.org)
039     */
040    @XmlRootElement(name = RoleResponsibilityAction.Constants.ROOT_ELEMENT_NAME)
041    @XmlAccessorType(XmlAccessType.NONE)
042    @XmlType(name = RoleResponsibilityAction.Constants.TYPE_NAME, propOrder = {
043            RoleResponsibilityAction.Elements.ID,
044            RoleResponsibilityAction.Elements.ROLE_RESPONSIBILITY_ID,
045            RoleResponsibilityAction.Elements.ROLE_MEMBER_ID,
046            RoleResponsibilityAction.Elements.ACTION_TYPE_CODE,
047            RoleResponsibilityAction.Elements.ACTION_POLICY_CODE,
048            RoleResponsibilityAction.Elements.FORCE_ACTION,
049            RoleResponsibilityAction.Elements.PRIORITY_NUMBER,
050            RoleResponsibilityAction.Elements.ROLE_RESPONSIBILITY,
051            CoreConstants.CommonElements.VERSION_NUMBER,
052            CoreConstants.CommonElements.FUTURE_ELEMENTS
053    })
054    public class RoleResponsibilityAction extends AbstractDataTransferObject implements RoleResponsibilityActionContract {
055    
056        @XmlElement(name = RoleResponsibilityAction.Elements.ID, required = true)
057        private final String id;
058    
059        @XmlElement(name = RoleResponsibilityAction.Elements.ROLE_RESPONSIBILITY_ID)
060        private final String roleResponsibilityId;
061    
062        @XmlElement(name = RoleResponsibilityAction.Elements.ROLE_MEMBER_ID)
063        private final String roleMemberId;
064    
065        @XmlElement(name = RoleResponsibilityAction.Elements.ACTION_TYPE_CODE)
066        private final String actionTypeCode;
067    
068        @XmlElement(name = RoleResponsibilityAction.Elements.ACTION_POLICY_CODE)
069        private final String actionPolicyCode;
070    
071        @XmlElement(name = RoleResponsibilityAction.Elements.FORCE_ACTION)
072        private final boolean forceAction;
073    
074        @XmlElement(name = RoleResponsibilityAction.Elements.PRIORITY_NUMBER)
075        private final Integer priorityNumber;
076    
077        @XmlElement(name = RoleResponsibilityAction.Elements.ROLE_RESPONSIBILITY)
078        private final RoleResponsibility roleResponsibility;
079    
080        @XmlElement(name = CoreConstants.CommonElements.VERSION_NUMBER)
081        private final Long versionNumber;
082    
083        @SuppressWarnings("unused")
084        @XmlAnyElement
085        private final Collection<Element> _futureElements = null;
086    
087        /**
088         * Private default constructor should only be called by JAXB
089         */
090        @SuppressWarnings("unused")
091        private RoleResponsibilityAction() {
092            id = null;
093            roleResponsibilityId = null;
094            roleMemberId = null;
095            actionTypeCode = null;
096            actionPolicyCode = null;
097            forceAction = false;
098            priorityNumber = null;
099            roleResponsibility = null;
100            versionNumber = null;
101        }
102    
103        private RoleResponsibilityAction(Builder b) {
104            id = b.getId();
105            roleResponsibilityId = b.getRoleResponsibilityId();
106            roleMemberId = b.getRoleMemberId();
107            actionTypeCode = b.getActionTypeCode();
108            actionPolicyCode = b.getActionPolicyCode();
109            forceAction = b.isForceAction();
110            priorityNumber = b.getPriorityNumber();
111            roleResponsibility = b.getRoleResponsibility();
112            versionNumber = b.getVersionNumber();
113        }
114    
115        @Override
116        public String getId() {
117            return this.id;
118        }
119    
120        @Override
121        public String getRoleResponsibilityId() {
122            return this.roleResponsibilityId;
123        }
124    
125        @Override
126        public String getActionTypeCode() {
127            return this.actionTypeCode;
128        }
129    
130        @Override
131        public Integer getPriorityNumber() {
132            return this.priorityNumber;
133        }
134    
135        @Override
136        public String getActionPolicyCode() {
137            return this.actionPolicyCode;
138        }
139    
140        @Override
141        public String getRoleMemberId() {
142            return this.roleMemberId;
143        }
144    
145        @Override
146        public RoleResponsibility getRoleResponsibility() {
147            return this.roleResponsibility;
148        }
149    
150        @Override
151        public boolean isForceAction() {
152            return this.forceAction;
153        }
154    
155        @Override
156        public Long getVersionNumber() {
157            return this.versionNumber;
158        }
159    
160        public static class Builder implements RoleResponsibilityActionContract, ModelBuilder, ModelObjectComplete {
161    
162            private String Id;
163            private String roleResponsibilityId;
164            private String roleMemberId;
165            private String actionTypeCode;
166            private String actionPolicyCode;
167            private boolean forceAction;
168            private Integer priorityNumber;
169            private RoleResponsibility roleResponsibility;
170            private Long versionNumber;
171    
172            private Builder() {
173            }
174    
175            public static Builder create() {
176                return new Builder();
177            }
178    
179            public static Builder create(RoleResponsibilityActionContract rra) {
180                Builder b = new Builder();
181                b.setForceAction(rra.isForceAction());
182                b.setActionPolicyCode(rra.getActionPolicyCode());
183                b.setActionTypeCode(rra.getActionTypeCode());
184                b.setPriorityNumber(rra.getPriorityNumber());
185                b.setRoleMemberId(rra.getRoleMemberId());
186                if (rra.getRoleResponsibility() != null) {
187                    b.setRoleResponsibility(RoleResponsibility.Builder.create(rra.getRoleResponsibility()).build());
188                }
189                b.setId(rra.getId());
190                b.setRoleResponsibilityId(rra.getRoleResponsibilityId());
191                b.setVersionNumber(rra.getVersionNumber());
192                return b;
193            }
194    
195            @Override
196            public RoleResponsibilityAction build() {
197                if (versionNumber == null || Id == null) {
198                    throw new IllegalStateException("versionNumber and id must be non-null and " +
199                            "not empty for RoleResponsibilityAction");
200                }
201                return new RoleResponsibilityAction(this);
202            }
203    
204            @Override
205            public String getId() {
206                return Id;
207            }
208    
209            public void setId(String id) {
210                if (StringUtils.isBlank(id)) {
211                    throw new IllegalArgumentException("id must be non-null and not empty");
212                }
213                this.Id = id;
214            }
215    
216            @Override
217            public String getRoleResponsibilityId() {
218                return roleResponsibilityId;
219            }
220    
221            public void setRoleResponsibilityId(String roleResponsibilityId) {
222                this.roleResponsibilityId = roleResponsibilityId;
223            }
224    
225            @Override
226            public String getActionTypeCode() {
227                return actionTypeCode;
228            }
229    
230            public void setActionTypeCode(String actionTypeCode) {
231                this.actionTypeCode = actionTypeCode;
232            }
233    
234            @Override
235            public Integer getPriorityNumber() {
236                return priorityNumber;
237            }
238    
239            public void setPriorityNumber(Integer priorityNumber) {
240                this.priorityNumber = priorityNumber;
241            }
242    
243            @Override
244            public String getActionPolicyCode() {
245                return actionPolicyCode;
246            }
247    
248            public void setActionPolicyCode(String actionPolicyCode) {
249                this.actionPolicyCode = actionPolicyCode;
250            }
251    
252            @Override
253            public String getRoleMemberId() {
254                return roleMemberId;
255            }
256    
257            public void setRoleMemberId(String roleMemberId) {
258                this.roleMemberId = roleMemberId;
259            }
260    
261            @Override
262            public RoleResponsibility getRoleResponsibility() {
263                return roleResponsibility;
264            }
265    
266            public void setRoleResponsibility(RoleResponsibility roleResponsibility) {
267                this.roleResponsibility = roleResponsibility;
268            }
269    
270            @Override
271            public boolean isForceAction() {
272                return forceAction;
273            }
274    
275            public void setForceAction(boolean forceAction) {
276                this.forceAction = forceAction;
277            }
278    
279            @Override
280            public Long getVersionNumber() {
281                return versionNumber;
282            }
283    
284            public void setVersionNumber(Long versionNumber) {
285                if (versionNumber == null) {
286                    throw new IllegalArgumentException("versionNumber must be non-null");
287                }
288                this.versionNumber = versionNumber;
289            }
290    
291            @Override
292            public int hashCode() {
293                return HashCodeBuilder.reflectionHashCode(this);
294            }
295    
296            @Override
297            public boolean equals(Object obj) {
298                return EqualsBuilder.reflectionEquals(obj, this);
299            }
300    
301            @Override
302            public String toString() {
303                return ToStringBuilder.reflectionToString(this);
304            }
305        }
306    
307    
308        /**
309         * A private class which exposes constants which define the XML element names to use
310         * when this object is marshalled to XML.
311         */
312        static class Elements {
313            final static String ID = "id";
314            final static String ROLE_RESPONSIBILITY_ID = "roleResponsibilityId";
315            final static String ROLE_MEMBER_ID = "roleMemberId";
316            final static String ACTION_TYPE_CODE = "actionTypeCode";
317            final static String ACTION_POLICY_CODE = "actionPolicyCode";
318            final static String FORCE_ACTION = "forceAction";
319            final static String PRIORITY_NUMBER = "priorityNumber";
320            final static String ROLE_RESPONSIBILITY = "roleResponsibility";
321        }
322    
323        /**
324         * Defines some internal constants used on this class.
325         */
326        static class Constants {
327            final static String ROOT_ELEMENT_NAME = "roleResponsibilityAction";
328            final static String TYPE_NAME = "RoleResponsibilityActionType";
329        }
330    
331        public static class Cache {
332            public static final String NAME = KimConstants.Namespaces.KIM_NAMESPACE_2_0 + "/" + RoleResponsibilityAction.Constants.TYPE_NAME;
333        }
334    }