001/*
002 * Copyright 2011 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/ecl1.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.impl.jaxb;
017
018import java.io.Serializable;
019import java.util.Set;
020
021import javax.xml.bind.annotation.XmlAccessType;
022import javax.xml.bind.annotation.XmlAccessorType;
023import javax.xml.bind.annotation.XmlElement;
024import javax.xml.bind.annotation.XmlTransient;
025import javax.xml.bind.annotation.XmlType;
026import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
027
028import org.kuali.rice.core.util.jaxb.NameAndNamespacePair;
029import org.kuali.rice.core.util.jaxb.NameAndNamespacePairValidatingAdapter;
030import org.kuali.rice.core.util.jaxb.StringTrimmingAdapter;
031import org.kuali.rice.kim.api.jaxb.NameAndNamespacePairToKimTypeIdAdapter;
032import org.kuali.rice.kim.api.role.RoleContract;
033
034/**
035 * This class represents a <role> XML element.
036 * 
037 * @author Kuali Rice Team (rice.collab@kuali.org)
038 */
039@XmlAccessorType(XmlAccessType.FIELD)
040@XmlType(name="RoleType", propOrder={
041        "roleNameAndNamespace", "kimTypeId", "roleDescription", "active", "roleMembers", "rolePermissions"
042})
043public class RoleXmlDTO implements Serializable {
044    
045    private static final long serialVersionUID = 1L;
046
047    @XmlTransient
048    private String roleId;
049    
050    @XmlElement(name="roleName")
051    @XmlJavaTypeAdapter(NameAndNamespacePairValidatingAdapter.class)
052    private NameAndNamespacePair roleNameAndNamespace;
053    
054    @XmlElement(name="kimTypeName")
055    @XmlJavaTypeAdapter(NameAndNamespacePairToKimTypeIdAdapter.class)
056    private String kimTypeId;
057    
058    @XmlElement(name="description")
059    @XmlJavaTypeAdapter(StringTrimmingAdapter.class)
060    private String roleDescription;
061    
062    @XmlElement(name="active")
063    private Boolean active;
064    
065    @XmlElement(name="roleMembers")
066    private RoleMembersXmlDTO.WithinRole roleMembers;
067    
068    @XmlElement(name="rolePermissions")
069    private RolePermissionsXmlDTO.WithinRole rolePermissions;
070
071    @XmlTransient
072    private boolean alreadyPersisted = false;
073    
074    @XmlTransient
075    private Set<String> existingRoleMemberIds;
076    
077    public RoleXmlDTO() {
078        this.active = Boolean.TRUE;
079    }
080    
081    public RoleXmlDTO(RoleContract role, RoleMembersXmlDTO.WithinRole roleMembers, RolePermissionsXmlDTO.WithinRole rolePermissions) {
082        if (role == null) {
083            throw new IllegalArgumentException("role cannot be null");
084        }
085        
086        this.roleNameAndNamespace = new NameAndNamespacePair(role.getNamespaceCode(), role.getName());
087        this.kimTypeId = role.getKimTypeId();
088        this.roleDescription = role.getDescription();
089        this.active = Boolean.valueOf(role.isActive());
090        this.roleMembers = roleMembers;
091        this.rolePermissions = rolePermissions;
092    }
093
094    /**
095     * @return the roleId
096     */
097    public String getRoleId() {
098        return this.roleId;
099    }
100
101    /**
102     * @param roleId the roleId to set
103     */
104    public void setRoleId(String roleId) {
105        this.roleId = roleId;
106    }
107
108    /**
109     * @return the roleNameAndNamespace
110     */
111    public NameAndNamespacePair getRoleNameAndNamespace() {
112        return this.roleNameAndNamespace;
113    }
114
115    /**
116     * @param roleNameAndNamespace the roleNameAndNamespace to set
117     */
118    public void setRoleNameAndNamespace(NameAndNamespacePair roleNameAndNamespace) {
119        this.roleNameAndNamespace = roleNameAndNamespace;
120    }
121
122    /**
123     * @return the kimTypeId
124     */
125    public String getKimTypeId() {
126        return this.kimTypeId;
127    }
128
129    /**
130     * @param kimTypeId the kimTypeId to set
131     */
132    public void setKimTypeId(String kimTypeId) {
133        this.kimTypeId = kimTypeId;
134    }
135
136    /**
137     * @return the roleDescription
138     */
139    public String getRoleDescription() {
140        return this.roleDescription;
141    }
142
143    /**
144     * @param roleDescription the roleDescription to set
145     */
146    public void setRoleDescription(String roleDescription) {
147        this.roleDescription = roleDescription;
148    }
149
150    /**
151     * @return the active
152     */
153    public Boolean getActive() {
154        return this.active;
155    }
156
157    /**
158     * @param active the active to set
159     */
160    public void setActive(Boolean active) {
161        this.active = active;
162    }
163
164    /**
165     * @return the roleMembers
166     */
167    public RoleMembersXmlDTO.WithinRole getRoleMembers() {
168        return this.roleMembers;
169    }
170
171    /**
172     * @param roleMembers the roleMembers to set
173     */
174    public void setRoleMembers(RoleMembersXmlDTO.WithinRole roleMembers) {
175        this.roleMembers = roleMembers;
176    }
177
178    /**
179     * @return the rolePermissions
180     */
181    public RolePermissionsXmlDTO.WithinRole getRolePermissions() {
182        return this.rolePermissions;
183    }
184
185    /**
186     * @param rolePermissions the rolePermissions to set
187     */
188    public void setRolePermissions(RolePermissionsXmlDTO.WithinRole rolePermissions) {
189        this.rolePermissions = rolePermissions;
190    }
191
192    /**
193     * @return the alreadyPersisted
194     */
195    public boolean isAlreadyPersisted() {
196        return this.alreadyPersisted;
197    }
198
199    /**
200     * @param alreadyPersisted the alreadyPersisted to set
201     */
202    public void setAlreadyPersisted(boolean alreadyPersisted) {
203        this.alreadyPersisted = alreadyPersisted;
204    }
205    
206    /**
207     * @return the existingRoleMemberIds
208     */
209    public Set<String> getExistingRoleMemberIds() {
210        return this.existingRoleMemberIds;
211    }
212
213    /**
214     * @param existingRoleMemberIds the existingRoleMemberIds to set
215     */
216    public void setExistingRoleMemberIds(Set<String> existingRoleMemberIds) {
217        this.existingRoleMemberIds = existingRoleMemberIds;
218    }
219
220    /**
221     * Retrieves the role's name from the role-name-and-namespace combo.
222     * 
223     * @return The name of the role, or null if the role-name-and-namespace combo is null.
224     */
225    public String getRoleName() {
226        return (roleNameAndNamespace != null) ? roleNameAndNamespace.getName() : null;
227    }
228
229    /**
230     * Retrieves the role's namespace code from the role-name-and-namespace combo.
231     * 
232     * @return The namespace code of the role, or null if the role-name-and-namespace combo is null.
233     */
234    public String getNamespaceCode() {
235        return (roleNameAndNamespace != null) ? roleNameAndNamespace.getNamespaceCode() : null;
236    }
237}