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 }