001/**
002 * Copyright 2005-2017 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 */
016package org.kuali.rice.kim.api.role;
017
018import java.util.Collection;
019import java.util.Collections;
020
021import javax.xml.bind.annotation.XmlAccessType;
022import javax.xml.bind.annotation.XmlAccessorType;
023import javax.xml.bind.annotation.XmlAnyElement;
024import javax.xml.bind.annotation.XmlElement;
025import javax.xml.bind.annotation.XmlRootElement;
026import javax.xml.bind.annotation.XmlType;
027
028import org.apache.commons.collections.CollectionUtils;
029import org.apache.commons.lang.StringUtils;
030import org.apache.commons.lang.builder.EqualsBuilder;
031import org.apache.commons.lang.builder.HashCodeBuilder;
032import org.apache.commons.lang.builder.ToStringBuilder;
033import org.kuali.rice.core.api.CoreConstants;
034import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
035import org.kuali.rice.core.api.mo.ModelBuilder;
036import org.kuali.rice.core.api.mo.ModelObjectComplete;
037import org.kuali.rice.kim.api.KimConstants;
038import org.w3c.dom.Element;
039
040/**
041 * @author Kuali Rice Team (rice.collab@kuali.org)
042 */
043@XmlRootElement(name = RoleResponsibilityAction.Constants.ROOT_ELEMENT_NAME)
044@XmlAccessorType(XmlAccessType.NONE)
045@XmlType(name = RoleResponsibilityAction.Constants.TYPE_NAME, propOrder = {
046        RoleResponsibilityAction.Elements.ID,
047        RoleResponsibilityAction.Elements.ROLE_RESPONSIBILITY_ID,
048        RoleResponsibilityAction.Elements.ROLE_MEMBER_ID,
049        RoleResponsibilityAction.Elements.ACTION_TYPE_CODE,
050        RoleResponsibilityAction.Elements.ACTION_POLICY_CODE,
051        RoleResponsibilityAction.Elements.FORCE_ACTION,
052        RoleResponsibilityAction.Elements.PRIORITY_NUMBER,
053        RoleResponsibilityAction.Elements.ROLE_RESPONSIBILITY,
054        CoreConstants.CommonElements.VERSION_NUMBER,
055        CoreConstants.CommonElements.FUTURE_ELEMENTS
056})
057public class RoleResponsibilityAction extends AbstractDataTransferObject implements RoleResponsibilityActionContract {
058    private static final long serialVersionUID = 1L;
059
060    @XmlElement(name = RoleResponsibilityAction.Elements.ID, required = false)
061    private final String id;
062
063    @XmlElement(name = RoleResponsibilityAction.Elements.ROLE_RESPONSIBILITY_ID)
064    private final String roleResponsibilityId;
065
066    @XmlElement(name = RoleResponsibilityAction.Elements.ROLE_MEMBER_ID)
067    private final String roleMemberId;
068
069    @XmlElement(name = RoleResponsibilityAction.Elements.ACTION_TYPE_CODE)
070    private final String actionTypeCode;
071
072    @XmlElement(name = RoleResponsibilityAction.Elements.ACTION_POLICY_CODE)
073    private final String actionPolicyCode;
074
075    @XmlElement(name = RoleResponsibilityAction.Elements.FORCE_ACTION)
076    private final boolean forceAction;
077
078    @XmlElement(name = RoleResponsibilityAction.Elements.PRIORITY_NUMBER)
079    private final Integer priorityNumber;
080
081    @XmlElement(name = RoleResponsibilityAction.Elements.ROLE_RESPONSIBILITY)
082    private final RoleResponsibility roleResponsibility;
083
084    @XmlElement(name = CoreConstants.CommonElements.VERSION_NUMBER)
085    private final Long versionNumber;
086
087    @SuppressWarnings("unused")
088    @XmlAnyElement
089    private final Collection<Element> _futureElements = null;
090
091    /**
092     * Private default constructor should only be called by JAXB
093     */
094    @SuppressWarnings("unused")
095    private RoleResponsibilityAction() {
096        id = null;
097        roleResponsibilityId = null;
098        roleMemberId = null;
099        actionTypeCode = null;
100        actionPolicyCode = null;
101        forceAction = false;
102        priorityNumber = null;
103        roleResponsibility = null;
104        versionNumber = null;
105    }
106
107    private RoleResponsibilityAction(Builder b) {
108        id = b.getId();
109        roleResponsibilityId = b.getRoleResponsibilityId();
110        roleMemberId = b.getRoleMemberId();
111        actionTypeCode = b.getActionTypeCode();
112        actionPolicyCode = b.getActionPolicyCode();
113        forceAction = b.isForceAction();
114        priorityNumber = b.getPriorityNumber();
115        roleResponsibility = b.getRoleResponsibility();
116        versionNumber = b.getVersionNumber();
117    }
118
119    @Override
120    public String getId() {
121        return this.id;
122    }
123
124    @Override
125    public String getRoleResponsibilityId() {
126        return this.roleResponsibilityId;
127    }
128
129    @Override
130    public String getActionTypeCode() {
131        return this.actionTypeCode;
132    }
133
134    @Override
135    public Integer getPriorityNumber() {
136        return this.priorityNumber;
137    }
138
139    @Override
140    public String getActionPolicyCode() {
141        return this.actionPolicyCode;
142    }
143
144    @Override
145    public String getRoleMemberId() {
146        return this.roleMemberId;
147    }
148
149    @Override
150    public RoleResponsibility getRoleResponsibility() {
151        return this.roleResponsibility;
152    }
153
154    @Override
155    public boolean isForceAction() {
156        return this.forceAction;
157    }
158
159    @Override
160    public Long getVersionNumber() {
161        return this.versionNumber;
162    }
163
164    public static class Builder implements RoleResponsibilityActionContract, ModelBuilder, ModelObjectComplete {
165
166        private String id;
167        private String roleResponsibilityId;
168        private String roleMemberId;
169        private String actionTypeCode;
170        private String actionPolicyCode;
171        private boolean forceAction;
172        private Integer priorityNumber;
173        private RoleResponsibility roleResponsibility;
174        private Long versionNumber;
175
176        private Builder() {
177        }
178
179        public static Builder create() {
180            return new Builder();
181        }
182
183        public static Builder create(RoleResponsibilityActionContract rra) {
184            Builder b = new Builder();
185            b.setForceAction(rra.isForceAction());
186            b.setActionPolicyCode(rra.getActionPolicyCode());
187            b.setActionTypeCode(rra.getActionTypeCode());
188            b.setPriorityNumber(rra.getPriorityNumber());
189            b.setRoleMemberId(rra.getRoleMemberId());
190            if (rra.getRoleResponsibility() != null) {
191                b.setRoleResponsibility(RoleResponsibility.Builder.create(rra.getRoleResponsibility()).build());
192            }
193            b.setId(rra.getId());
194            b.setRoleResponsibilityId(rra.getRoleResponsibilityId());
195            b.setVersionNumber(rra.getVersionNumber());
196            return b;
197        }
198
199        @Override
200        public RoleResponsibilityAction build() {
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.isWhitespace(id)) {
211                throw new IllegalArgumentException("id must be not be whitespace");
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            this.versionNumber = versionNumber;
286        }
287
288        @Override
289        public int hashCode() {
290            return HashCodeBuilder.reflectionHashCode(this);
291        }
292
293        @Override
294        public boolean equals(Object obj) {
295            return EqualsBuilder.reflectionEquals(obj, this);
296        }
297
298        @Override
299        public String toString() {
300            return ToStringBuilder.reflectionToString(this);
301        }
302    }
303
304    @Override
305    public boolean equals(Object obj) {
306        return equalsExcludeFields(obj, Constants.excludeFields);
307    }
308
309    @Override
310    public int hashCode() {
311        return hashCodeExcludeFields(Constants.excludeFields);
312    }
313
314    /**
315     * A private class which exposes constants which define the XML element names to use
316     * when this object is marshalled to XML.
317     */
318    static class Elements {
319        final static String ID = "id";
320        final static String ROLE_RESPONSIBILITY_ID = "roleResponsibilityId";
321        final static String ROLE_MEMBER_ID = "roleMemberId";
322        final static String ACTION_TYPE_CODE = "actionTypeCode";
323        final static String ACTION_POLICY_CODE = "actionPolicyCode";
324        final static String FORCE_ACTION = "forceAction";
325        final static String PRIORITY_NUMBER = "priorityNumber";
326        final static String ROLE_RESPONSIBILITY = "roleResponsibility";
327    }
328
329
330    /**
331     * Defines some internal constants used on this class.
332     */
333    @SuppressWarnings("unchecked")
334    static class Constants {
335        final static String ROOT_ELEMENT_NAME = "roleResponsibilityAction";
336        final static String TYPE_NAME = "RoleResponsibilityActionType";
337
338        final static Collection<String> excludeFields;
339
340        static {
341            excludeFields = Collections.unmodifiableCollection( (Collection<String>)
342                    CollectionUtils.union(
343                            Collections.singletonList("versionNumber"),
344                            getDefaultHashCodeEqualsExcludeFields()
345                    )
346            );
347        }
348    }
349
350    public static class Cache {
351        public static final String NAME = KimConstants.Namespaces.KIM_NAMESPACE_2_0 + "/" + RoleResponsibilityAction.Constants.TYPE_NAME;
352    }
353}