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 * 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 final public class RoleResponsibility extends AbstractDataTransferObject implements RoleResponsibilityContract {
054 private static final long serialVersionUID = 1L;
055
056 @XmlElement(name = RoleResponsibility.Elements.ROLE_RESPONSIBILITY_ID, required = true)
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 roleResponsibilityId, String roleId, String responsibilityId) {
137 Builder b = create();
138 b.setRoleResponsibilityId(roleResponsibilityId);
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 if (versionNumber == null || roleResponsibilityId == null) {
157 throw new IllegalStateException(
158 "versionNumber and roleResponsibilityId must be non-null for a RoleResponsibility object");
159 }
160 return new RoleResponsibility(this);
161 }
162
163 @Override
164 public String getRoleResponsibilityId() {
165 return roleResponsibilityId;
166 }
167
168 public void setRoleResponsibilityId(String roleResponsibilityId) {
169 if (StringUtils.isBlank(roleResponsibilityId)) {
170 throw new IllegalArgumentException("roleResponsibilityId cannot be blank or null");
171 }
172 this.roleResponsibilityId = roleResponsibilityId;
173 }
174
175 @Override
176 public String getRoleId() {
177 return roleId;
178 }
179
180 public void setRoleId(String roleId) {
181 this.roleId = roleId;
182 }
183
184 @Override
185 public String getResponsibilityId() {
186 return responsibilityId;
187 }
188
189 public void setResponsibilityId(String responsibilityId) {
190 this.responsibilityId = responsibilityId;
191 }
192
193
194 @Override
195 public boolean isActive() {
196 return active;
197 }
198
199 public void setActive(boolean active) {
200 this.active = active;
201 }
202
203 @Override
204 public Long getVersionNumber() {
205 return versionNumber;
206 }
207
208 public void setVersionNumber(Long versionNumber) {
209 if (versionNumber == null) {
210 throw new IllegalArgumentException("versionNumber must be non-null");
211 }
212 this.versionNumber = versionNumber;
213 }
214
215 @Override
216 public int hashCode() {
217 return HashCodeBuilder.reflectionHashCode(this);
218 }
219
220 @Override
221 public boolean equals(Object obj) {
222 return EqualsBuilder.reflectionEquals(obj, this);
223 }
224
225 @Override
226 public String toString() {
227 return ToStringBuilder.reflectionToString(this);
228 }
229 }
230
231 /**
232 * A private class which exposes constants which define the XML element names to use
233 * when this object is marshalled to XML.
234 */
235 static class Elements {
236 final static String ROLE_RESPONSIBILITY_ID = "roleResponsibilityId";
237 final static String ROLE_ID = "roleId";
238 final static String RESPONSIBILITY_ID = "responsibilityId";
239 }
240
241 /**
242 * Defines some internal constants used on this class.
243 */
244 static class Constants {
245 final static String ROOT_ELEMENT_NAME = "roleResponsibility";
246 final static String TYPE_NAME = "RoleResponsibilityType";
247 }
248
249 public static class Cache {
250 public static final String NAME = KimConstants.Namespaces.KIM_NAMESPACE_2_0 + "/" + RoleResponsibility.Constants.TYPE_NAME;
251 }
252 }