1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.kuali.rice.kim.impl.jaxb;
20
21 import java.io.Serializable;
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import javax.xml.bind.Marshaller;
26 import javax.xml.bind.UnmarshalException;
27 import javax.xml.bind.Unmarshaller;
28 import javax.xml.bind.annotation.XmlAccessType;
29 import javax.xml.bind.annotation.XmlAccessorType;
30 import javax.xml.bind.annotation.XmlElement;
31 import javax.xml.bind.annotation.XmlTransient;
32 import javax.xml.bind.annotation.XmlType;
33
34 import org.kuali.rice.core.util.jaxb.RiceXmlExportList;
35 import org.kuali.rice.core.util.jaxb.RiceXmlImportList;
36 import org.kuali.rice.core.util.jaxb.RiceXmlListAdditionListener;
37 import org.kuali.rice.core.util.jaxb.RiceXmlListGetterListener;
38 import org.kuali.rice.kim.api.permission.PermissionContract;
39 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
40
41
42
43
44
45
46
47
48
49
50 @XmlTransient
51 public abstract class RolePermissionsXmlDTO<T extends RolePermissionXmlDTO> implements RiceXmlListAdditionListener<T>, Serializable {
52
53 private static final long serialVersionUID = 1L;
54
55 public abstract List<T> getRolePermissions();
56
57 public abstract void setRolePermissions(List<T> rolePermissions);
58
59 void beforeUnmarshal(Unmarshaller unmarshaller, Object parent) throws UnmarshalException {
60 setRolePermissions(new RiceXmlImportList<T>(this));
61 }
62
63 void afterUnmarshal(Unmarshaller unmarshaller, Object parent) throws UnmarshalException {
64 setRolePermissions(null);
65 }
66
67
68
69
70
71
72
73
74 @XmlAccessorType(XmlAccessType.FIELD)
75 @XmlType(name="StandaloneRolePermissionsType", propOrder={"rolePermissions"})
76 public static class OutsideOfRole extends RolePermissionsXmlDTO<RolePermissionXmlDTO.OutsideOfRole> {
77
78 private static final long serialVersionUID = 1L;
79
80 @XmlElement(name="rolePermission")
81 private List<RolePermissionXmlDTO.OutsideOfRole> rolePermissions;
82
83 public List<RolePermissionXmlDTO.OutsideOfRole> getRolePermissions() {
84 return rolePermissions;
85 }
86
87 public void setRolePermissions(List<RolePermissionXmlDTO.OutsideOfRole> rolePermissions) {
88 this.rolePermissions = rolePermissions;
89 }
90
91 public void newItemAdded(RolePermissionXmlDTO.OutsideOfRole item) {
92 try {
93 RoleXmlUtil.validateAndPersistNewRolePermission(item);
94 } catch (UnmarshalException e) {
95 throw new RuntimeException(e);
96 }
97 }
98
99 }
100
101
102
103
104
105
106
107
108 @XmlAccessorType(XmlAccessType.FIELD)
109 @XmlType(name="RolePermissionsType", propOrder={"rolePermissions"})
110 public static class WithinRole extends RolePermissionsXmlDTO<RolePermissionXmlDTO.WithinRole>
111 implements RiceXmlListGetterListener<RolePermissionXmlDTO.WithinRole,String> {
112
113 private static final long serialVersionUID = 1L;
114
115 @XmlElement(name="rolePermission")
116 private List<RolePermissionXmlDTO.WithinRole> rolePermissions;
117
118 @XmlTransient
119 private String roleId;
120
121 public WithinRole() {}
122
123 public WithinRole(String roleId) {
124 this.roleId = roleId;
125 }
126
127 public List<RolePermissionXmlDTO.WithinRole> getRolePermissions() {
128 return rolePermissions;
129 }
130
131 public void setRolePermissions(List<RolePermissionXmlDTO.WithinRole> rolePermissions) {
132 this.rolePermissions = rolePermissions;
133 }
134
135 public String getRoleId() {
136 return roleId;
137 }
138
139 @Override
140 void beforeUnmarshal(Unmarshaller unmarshaller, Object parent) throws UnmarshalException {
141 if (parent instanceof RoleXmlDTO) {
142
143 RoleXmlDTO parentRole = (RoleXmlDTO) parent;
144 if (!parentRole.isAlreadyPersisted()) {
145 RoleXmlUtil.validateAndPersistNewRole(parentRole);
146 }
147 roleId = parentRole.getRoleId();
148 }
149 super.beforeUnmarshal(unmarshaller, parent);
150 }
151
152 public void newItemAdded(RolePermissionXmlDTO.WithinRole item) {
153 try {
154 RoleXmlUtil.validateAndPersistNewRolePermission(item);
155 } catch (UnmarshalException e) {
156 throw new RuntimeException(e);
157 }
158 }
159
160 void beforeMarshal(Marshaller marshaller) {
161
162 List<String> permissionIds = new ArrayList<String>();
163 if (permissionIds != null && !permissionIds.isEmpty()) {
164 setRolePermissions(new RiceXmlExportList<RolePermissionXmlDTO.WithinRole,String>(permissionIds, this));
165 }
166 }
167
168 void afterMarshal(Marshaller marshaller) {
169 setRolePermissions(null);
170 }
171
172 public RolePermissionXmlDTO.WithinRole gettingNextItem(String nextItem, int index) {
173 PermissionContract permission = KimApiServiceLocator.getPermissionService().getPermission(nextItem);
174 if (permission == null) {
175 throw new RuntimeException("Cannot find permission with ID \"" + nextItem + "\"");
176 }
177 return new RolePermissionXmlDTO.WithinRole(permission, false);
178 }
179 }
180 }