View Javadoc
1   /*
2    * The Kuali Financial System, a comprehensive financial management system for higher education.
3    * 
4    * Copyright 2005-2014 The Kuali Foundation
5    * 
6    * This program is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Affero General Public License as
8    * published by the Free Software Foundation, either version 3 of the
9    * License, or (at your option) any later version.
10   * 
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Affero General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Affero General Public License
17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package org.kuali.rice.kim.impl.jaxb;
20  
21  import java.io.Serializable;
22  
23  import javax.xml.bind.annotation.XmlAccessType;
24  import javax.xml.bind.annotation.XmlAccessorType;
25  import javax.xml.bind.annotation.XmlElement;
26  import javax.xml.bind.annotation.XmlType;
27  
28  /**
29   * This class represents a &lt;roleData&gt; element.
30   * 
31   * <p>The expected XML structure is as follows:
32   * 
33   * <br>
34   * <br>&lt;roleData&gt;
35   * <br>&nbsp;&nbsp;&lt;roles&gt;
36   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;role&gt;
37   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;roleName namespaceCode=""&gt;&lt;/roleName&gt;
38   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;kimTypeName namespaceCode=""&gt;&lt;/kimTypeName&gt;
39   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;&lt;/description&gt;
40   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;active&gt;&lt;/active&gt;
41   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;roleMembers&gt;
42   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;roleMember&gt;
43   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;principalId&gt;&lt;/principalId&gt;
44   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;principalName&gt;&lt;/principalName&gt;
45   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;&lt;/groupId&gt;
46   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupName namespaceCode=""&gt;&lt;/groupName&gt;
47   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;roleIdAsMember&gt;&lt;/roleIdAsMember&gt;
48   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;roleNameAsMember namespaceCode=""&gt;&lt;/roleNameAsMember&gt;
49   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;activeFromDate&gt;&lt;/activeFromDate&gt;
50   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;activeToDate&gt;&lt;/activeToDate&gt;
51   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;qualifications&gt;
52   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;qualification key=""&gt;&lt;/qualification&gt;
53   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/qualifications&gt;
54   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/roleMember&gt;
55   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/roleMembers&gt;
56   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;rolePermissions&gt;
57   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;rolePermission&gt;
58   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;permissionId&gt;&lt;/permissionId&gt;
59   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;permissionName namespaceCode=""&gt;&lt;/permissionName&gt;
60   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/rolePermission&gt;
61   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/rolePermissions&gt;
62   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/role&gt;
63   * <br>&nbsp;&nbsp;&lt;/roles&gt;
64   * <br>&nbsp;&nbsp;&lt;roleMembers&gt;
65   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;roleMember&gt;
66   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;roleId&gt;&lt;/roleId&gt;
67   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;roleName namespaceCode=""&gt;&lt;/roleName&gt;
68   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;principalId&gt;&lt;/principalId&gt;
69   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;principalName&gt;&lt;/principalName&gt;
70   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;&lt;/groupId&gt;
71   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupName namespaceCode=""&gt;&lt;/groupName&gt;
72   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;roleIdAsMember&gt;&lt;/roleIdAsMember&gt;
73   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;roleNameAsMember namespaceCode=""&gt;&lt;/roleNameAsMember&gt;
74   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;activeFromDate&gt;&lt;/activeFromDate&gt;
75   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;activeToDate&gt;&lt;/activeToDate&gt;
76   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;qualifications&gt;
77   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;qualification key=""&gt;&lt;/qualification&gt;
78   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/qualifications&gt;
79   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/roleMember&gt;
80   * <br>&nbsp;&nbsp;&lt;/roleMembers&gt;
81   * <br>&nbsp;&nbsp;&lt;rolePermissions&gt;
82   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;rolePermission&gt;
83   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;roleId&gt;&lt;/roleId&gt;
84   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;roleName namespaceCode=""&gt;&lt;/roleName&gt;
85   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;permissionId&gt;&lt;/permissionId&gt;
86   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;permissionName namespaceCode=""&gt;&lt;/permissionName&gt;
87   * <br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/rolePermission&gt;
88   * <br>&nbsp;&nbsp;&lt;/rolePermissions&gt;
89   * <br>&lt;/roleData&gt;
90   * 
91   * <p>Note the following:
92   * <ul>
93   *   <li>The &lt;roles&gt; element is optional, and can contain zero or more &lt;role&gt; elements.
94   *   <li>The &lt;roleName&gt; element on the &lt;role&gt; element and its "namespaceCode" attribute
95   *   are required, and must be non-blank. The namespace code must map to a valid namespace.
96   *   If the name and namespace combo matches an existing role, then the role in the XML will
97   *   overwrite the existing role.
98   *   <li>The &lt;kimTypeName&gt; and its "namespaceCode" attribute are both required, and the
99   *   name and namespace combo must match an existing KIM type.
100  *   <li>The &lt;description&gt; element is required, and must be non-blank.
101  *   <li>The &lt;active&gt; element is optional, and will be set to true if not specified.
102  *   <li>Both &lt;roleMembers&gt; elements are optional, and can contain zero or more
103  *   &lt;roleMember&gt; elements. If the &lt;roleMembers&gt; element within the &lt;role&gt;
104  *   element is specified, then any role members that are not within that element will be removed
105  *   from the role if the XML is overwriting an existing one. (The &lt;roleMembers&gt; element
106  *   outside of the &lt;role&gt; element can still add or re-add members that are not located
107  *   within the other &lt;roleMembers&gt; element.)
108  *   <li>For both &lt;roleMember&gt; elements:
109  *     <ul>
110  *       <li>Exactly one of these sets of member identification must be specified:
111  *         <ol>
112  *           <li>A &lt;principalId&gt; and/or &lt;principalName&gt; element, where the former
113  *           must contain a valid principal ID and the latter must contain a valid principal name.
114  *           <li>A &lt;groupId&gt; and/or &lt;groupName&gt; element, where the former must contain
115  *           a valid group ID and the latter must contain a valid group name and namespace.
116  *           <li>A &lt;roleIdAsMember&gt; and/or &lt;roleNameAsMember&gt; element, where the former
117  *           must contain a valid role ID and the latter must contain a valid role name and namespace.
118  *         </ol>
119  *       <li>The &lt;activeFromDate&gt; element is optional, and its content must be a date String
120  *       that can be parsed by the DateTimeService.
121  *       <li>The &lt;activeToDate&gt; element is optional, and its content must be a date String
122  *       that can be parsed by the DateTimeService.
123  *       <li>The &lt;qualifications&gt; element is optional, and can contain zero or more
124  *       &lt;qualification&gt; elements.
125  *       <li>The &lt;qualification&gt; element's "key" attribute is required, and must be non-blank.
126  *       Duplicate keys within a &lt;qualifications&gt; element are not permitted.
127  *     </ul>
128  *   <li>For both &lt;rolePermission&gt; elements:
129  *     <ul>
130  *       <li>A &lt;permissionId&gt; and/or &lt;permissionName&gt; element must be specified, where the
131  *       former must contain a valid permission ID and the latter must contain a valid permission
132  *       name and namespace.
133  *     </ul>
134  *   <li>For the &lt;roleMember&gt; and &lt;rolePermission&gt; elements not inside a &lt;role&gt; element:
135  *     <ul>
136  *       <li>A &lt;roleId&gt; and/or &lt;roleName&gt; element must be specified, where the former must
137  *       contain a valid role ID and the latter must contain a valid role name and namespace.
138  *     </ul>
139  *   <li>The ingestion process is currently order-dependent, which should be kept in mind when adding
140  *   roles as members of another role or assigning permissions to roles. (The permission XML always
141  *   gets ingested prior to the role XML.)
142  *   <li>The assignments of permissions to roles can only be added, not removed or deactivated.
143  *   (TODO: Improve the role/permission-updating API to allow for updates and removals.)
144  *   <li>The same roles, role members, and role permissions can be ingested within the same file,
145  *   where subsequent ones will overwrite previous ones. (TODO: Is this acceptable?)
146  *   <li>The IDs of principals, groups, roles, and permissions are not included when exporting the XML.
147  *   <li>Delegations and responsibility actions are currently not supported by the ingestion process.
148  * </ul>
149  * 
150  * TODO: Verify that the above behavior is correct.
151  * 
152  * @author Kuali Rice Team (rice.collab@kuali.org)
153  */
154 @XmlAccessorType(XmlAccessType.FIELD)
155 @XmlType(name="RoleDataType", propOrder={"roles", "roleMembers", "rolePermissions"})
156 public class RoleDataXmlDTO implements Serializable {
157 
158     private static final long serialVersionUID = 1L;
159 
160     @XmlElement(name="roles")
161     private RolesXmlDTO roles;
162     
163     @XmlElement(name="roleMembers")
164     private RoleMembersXmlDTO.OutsideOfRole roleMembers;
165 
166     @XmlElement(name="rolePermissions")
167     private RolePermissionsXmlDTO.OutsideOfRole rolePermissions;
168     
169     public RoleDataXmlDTO() {}
170     
171     public RoleDataXmlDTO(RolesXmlDTO roles) {
172         this.roles = roles;
173     }
174 
175     /**
176      * @return the roles
177      */
178     public RolesXmlDTO getRoles() {
179         return this.roles;
180     }
181 
182     /**
183      * @param roles the roles to set
184      */
185     public void setRoles(RolesXmlDTO roles) {
186         this.roles = roles;
187     }
188 
189     /**
190      * @return the roleMembers
191      */
192     public RoleMembersXmlDTO.OutsideOfRole getRoleMembers() {
193         return this.roleMembers;
194     }
195 
196     /**
197      * @param roleMembers the roleMembers to set
198      */
199     public void setRoleMembers(RoleMembersXmlDTO.OutsideOfRole roleMembers) {
200         this.roleMembers = roleMembers;
201     }
202 
203     /**
204      * @return the rolePermissions
205      */
206     public RolePermissionsXmlDTO.OutsideOfRole getRolePermissions() {
207         return this.rolePermissions;
208     }
209 
210     /**
211      * @param rolePermissions the rolePermissions to set
212      */
213     public void setRolePermissions(RolePermissionsXmlDTO.OutsideOfRole rolePermissions) {
214         this.rolePermissions = rolePermissions;
215     }
216         
217 }