001 /**
002 * Copyright 2005-2013 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 * An lightweight association of a Responsibility and a Role represented by references to the identifiers of a
039 * Role and a Responsibility that are related to each other.
040 *
041 * @author Kuali Rice Team (rice.collab@kuali.org)
042 */
043 @XmlRootElement(name = RoleResponsibility.Constants.ROOT_ELEMENT_NAME)
044 @XmlAccessorType(XmlAccessType.NONE)
045 @XmlType(name = RoleResponsibility.Constants.TYPE_NAME, propOrder = {
046 RoleResponsibility.Elements.ROLE_RESPONSIBILITY_ID,
047 RoleResponsibility.Elements.ROLE_ID,
048 RoleResponsibility.Elements.RESPONSIBILITY_ID,
049 CoreConstants.CommonElements.ACTIVE,
050 CoreConstants.CommonElements.VERSION_NUMBER,
051 CoreConstants.CommonElements.FUTURE_ELEMENTS
052 })
053 public final class RoleResponsibility extends AbstractDataTransferObject implements RoleResponsibilityContract {
054 private static final long serialVersionUID = 1L;
055
056 @XmlElement(name = RoleResponsibility.Elements.ROLE_RESPONSIBILITY_ID, required = false)
057 private final String roleResponsibilityId;
058
059 @XmlElement(name = RoleResponsibility.Elements.ROLE_ID)
060 private final String roleId;
061
062 @XmlElement(name = RoleResponsibility.Elements.RESPONSIBILITY_ID)
063 private final String responsibilityId;
064
065 @XmlElement(name = CoreConstants.CommonElements.ACTIVE)
066 private final boolean active;
067
068 @XmlElement(name = CoreConstants.CommonElements.VERSION_NUMBER)
069 private final Long versionNumber;
070
071 @SuppressWarnings("unused")
072 @XmlAnyElement
073 private final Collection<Element> _futureElements = null;
074
075
076 /**
077 * This constructor should never be called except during JAXB unmarshalling.
078 */
079 @SuppressWarnings("unused")
080 private RoleResponsibility() {
081 this.roleResponsibilityId = null;
082 this.roleId = null;
083 this.responsibilityId = null;
084 this.versionNumber = null;
085 this.active = false;
086 }
087
088 private RoleResponsibility(Builder b) {
089 this.roleResponsibilityId = b.getRoleResponsibilityId();
090 this.responsibilityId = b.getResponsibilityId();
091 this.roleId = b.getRoleId();
092 this.active = b.isActive();
093 this.versionNumber = b.getVersionNumber();
094 }
095
096 @Override
097 public String getResponsibilityId() {
098 return this.responsibilityId;
099 }
100
101 @Override
102 public String getRoleId() {
103 return this.roleId;
104 }
105
106 @Override
107 public String getRoleResponsibilityId() {
108 return this.roleResponsibilityId;
109 }
110
111 @Override
112 public boolean isActive() {
113 return this.active;
114 }
115
116 @Override
117 public Long getVersionNumber() {
118 return this.versionNumber;
119 }
120
121 public static class Builder implements RoleResponsibilityContract, ModelBuilder, ModelObjectComplete {
122 private String roleResponsibilityId;
123 private String roleId;
124 private String responsibilityId;
125 private boolean active = true;
126 private Long versionNumber;
127
128
129 private Builder() {
130 }
131
132 public static Builder create() {
133 return new Builder();
134 }
135
136 public static Builder create(String roleId, String responsibilityId) {
137 Builder b = create();
138
139 b.setRoleId(roleId);
140 b.setResponsibilityId(responsibilityId);
141 return b;
142 }
143
144 public static Builder create(RoleResponsibilityContract rrContract) {
145 Builder b = create();
146 b.setRoleResponsibilityId(rrContract.getRoleResponsibilityId());
147 b.setResponsibilityId(rrContract.getResponsibilityId());
148 b.setRoleId(rrContract.getRoleId());
149 b.setActive(rrContract.isActive());
150 b.setVersionNumber(rrContract.getVersionNumber());
151 return b;
152 }
153
154 @Override
155 public RoleResponsibility build() {
156 return new RoleResponsibility(this);
157 }
158
159 @Override
160 public String getRoleResponsibilityId() {
161 return roleResponsibilityId;
162 }
163
164 public void setRoleResponsibilityId(String roleResponsibilityId) {
165 if (StringUtils.isWhitespace(roleResponsibilityId)) {
166 throw new IllegalArgumentException("roleResponsibilityId cannot be whitespace");
167 }
168 this.roleResponsibilityId = roleResponsibilityId;
169 }
170
171 @Override
172 public String getRoleId() {
173 return roleId;
174 }
175
176 public void setRoleId(String roleId) {
177 this.roleId = roleId;
178 }
179
180 @Override
181 public String getResponsibilityId() {
182 return responsibilityId;
183 }
184
185 public void setResponsibilityId(String responsibilityId) {
186 this.responsibilityId = responsibilityId;
187 }
188
189
190 @Override
191 public boolean isActive() {
192 return active;
193 }
194
195 public void setActive(boolean active) {
196 this.active = active;
197 }
198
199 @Override
200 public Long getVersionNumber() {
201 return versionNumber;
202 }
203
204 public void setVersionNumber(Long versionNumber) {
205 this.versionNumber = versionNumber;
206 }
207
208 @Override
209 public int hashCode() {
210 return HashCodeBuilder.reflectionHashCode(this);
211 }
212
213 @Override
214 public boolean equals(Object obj) {
215 return EqualsBuilder.reflectionEquals(obj, this);
216 }
217
218 @Override
219 public String toString() {
220 return ToStringBuilder.reflectionToString(this);
221 }
222 }
223
224 /**
225 * A private class which exposes constants which define the XML element names to use
226 * when this object is marshalled to XML.
227 */
228 static class Elements {
229 final static String ROLE_RESPONSIBILITY_ID = "roleResponsibilityId";
230 final static String ROLE_ID = "roleId";
231 final static String RESPONSIBILITY_ID = "responsibilityId";
232 }
233
234 /**
235 * Defines some internal constants used on this class.
236 */
237 static class Constants {
238 final static String ROOT_ELEMENT_NAME = "roleResponsibility";
239 final static String TYPE_NAME = "RoleResponsibilityType";
240 }
241
242 public static class Cache {
243 public static final String NAME = KimConstants.Namespaces.KIM_NAMESPACE_2_0 + "/" + RoleResponsibility.Constants.TYPE_NAME;
244 }
245 }