1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.client.console.commons;
20
21 import java.util.ArrayList;
22 import java.util.List;
23 import org.apache.syncope.client.console.panels.AnyObjectDirectoryPanel;
24 import org.apache.syncope.client.console.panels.GroupDirectoryPanel;
25 import org.apache.syncope.client.console.panels.LinkedAccountModalPanel;
26 import org.apache.syncope.client.console.panels.UserDirectoryPanel;
27 import org.apache.syncope.client.console.rest.ResourceRestClient;
28 import org.apache.syncope.client.console.rest.UserRestClient;
29 import org.apache.syncope.client.console.status.AnyStatusModal;
30 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
31 import org.apache.syncope.client.console.wicket.markup.html.form.Action;
32 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
33 import org.apache.syncope.client.console.wizards.any.AnyObjectWrapper;
34 import org.apache.syncope.client.console.wizards.any.GroupWrapper;
35 import org.apache.syncope.client.console.wizards.any.MergeLinkedAccountsWizardBuilder;
36 import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
37 import org.apache.syncope.client.ui.commons.wizards.any.AnyWrapper;
38 import org.apache.syncope.client.ui.commons.wizards.any.UserWrapper;
39 import org.apache.syncope.common.lib.to.AnyObjectTO;
40 import org.apache.syncope.common.lib.to.GroupTO;
41 import org.apache.syncope.common.lib.to.UserTO;
42 import org.apache.syncope.common.lib.types.AnyEntitlement;
43 import org.apache.syncope.common.lib.types.IdMEntitlement;
44 import org.apache.syncope.common.lib.types.IdRepoEntitlement;
45 import org.apache.wicket.PageReference;
46 import org.apache.wicket.ajax.AjaxRequestTarget;
47 import org.apache.wicket.model.CompoundPropertyModel;
48 import org.apache.wicket.model.IModel;
49 import org.apache.wicket.model.Model;
50 import org.apache.wicket.model.StringResourceModel;
51
52 public class IdMAnyDirectoryPanelAdditionalActionLinksProvider
53 implements AnyDirectoryPanelAdditionalActionLinksProvider {
54
55 private static final long serialVersionUID = -1698293704237878993L;
56
57 protected final ResourceRestClient resourceRestClient;
58
59 protected final UserRestClient userRestClient;
60
61 public IdMAnyDirectoryPanelAdditionalActionLinksProvider(
62 final ResourceRestClient resourceRestClient,
63 final UserRestClient userRestClient) {
64
65 this.resourceRestClient = resourceRestClient;
66 this.userRestClient = userRestClient;
67 }
68
69 @Override
70 public List<Action<UserTO>> get(
71 final IModel<UserTO> model,
72 final String realm,
73 final BaseModal<AnyWrapper<UserTO>> modal,
74 final String header,
75 final UserDirectoryPanel parentPanel,
76 final PageReference pageRef) {
77
78 List<Action<UserTO>> actions = new ArrayList<>();
79
80 Action<UserTO> enable = new Action<>(new ActionLink<>() {
81
82 private static final long serialVersionUID = -7978723352517770644L;
83
84 @Override
85 public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
86 IModel<AnyWrapper<UserTO>> formModel = new CompoundPropertyModel<>(
87 new UserWrapper(model.getObject()));
88 modal.setFormModel(formModel);
89
90 target.add(modal.setContent(new AnyStatusModal<>(
91 pageRef,
92 formModel.getObject().getInnerObject(),
93 "resource",
94 true)));
95
96 modal.header(new Model<>(header));
97
98 modal.show(true);
99 }
100 }, ActionLink.ActionType.ENABLE);
101 enable.setEntitlements(IdRepoEntitlement.USER_UPDATE);
102 enable.setOnConfirm(false);
103 enable.setRealms(realm, model.getObject().getDynRealms());
104 actions.add(enable);
105
106 Action<UserTO> manageResources = new Action<>(new ActionLink<>() {
107
108 private static final long serialVersionUID = -7978723352517770644L;
109
110 @Override
111 public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
112 model.setObject(userRestClient.read(model.getObject().getKey()));
113 IModel<AnyWrapper<UserTO>> formModel = new CompoundPropertyModel<>(
114 new UserWrapper(model.getObject()));
115 modal.setFormModel(formModel);
116
117 target.add(modal.setContent(new AnyStatusModal<>(
118 pageRef,
119 formModel.getObject().getInnerObject(),
120 "resource",
121 false)));
122
123 modal.header(new Model<>(header));
124
125 modal.show(true);
126 }
127 }, ActionLink.ActionType.MANAGE_RESOURCES);
128 manageResources.setEntitlements(
129 String.format("%s,%s", IdRepoEntitlement.USER_READ, IdRepoEntitlement.USER_UPDATE));
130 manageResources.setOnConfirm(false);
131 manageResources.setRealms(realm, model.getObject().getDynRealms());
132 actions.add(manageResources);
133
134 Action<UserTO> manageAccounts = new Action<>(new ActionLink<>() {
135
136 private static final long serialVersionUID = 8011039414597736111L;
137
138 @Override
139 public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
140 model.setObject(userRestClient.read(model.getObject().getKey()));
141 modal.setFooterVisible(false);
142 target.add(modal.setContent(new LinkedAccountModalPanel(model, pageRef, false)));
143
144 modal.header(new Model<>(header));
145
146 modal.show(true);
147 }
148 }, ActionLink.ActionType.MANAGE_ACCOUNTS);
149 manageAccounts.setEntitlements(String.format("%s,%s,%s",
150 IdRepoEntitlement.USER_READ, IdRepoEntitlement.USER_UPDATE, IdMEntitlement.RESOURCE_GET_CONNOBJECT));
151 manageAccounts.setOnConfirm(false);
152 manageAccounts.setRealms(realm, model.getObject().getDynRealms());
153 actions.add(manageAccounts);
154
155 Action<UserTO> mergeAccounts = new Action<>(new ActionLink<>() {
156
157 private static final long serialVersionUID = 8011039414597736111L;
158
159 @Override
160 public void onClick(final AjaxRequestTarget target, final UserTO ignore) {
161 model.setObject(userRestClient.read(model.getObject().getKey()));
162 MergeLinkedAccountsWizardBuilder builder = new MergeLinkedAccountsWizardBuilder(
163 model, parentPanel, modal, resourceRestClient, userRestClient, pageRef);
164 builder.setEventSink(builder);
165 target.add(modal.setContent(builder.build(BaseModal.CONTENT_ID, AjaxWizard.Mode.CREATE)));
166 modal.header(new StringResourceModel("mergeLinkedAccounts.title", model));
167 modal.show(true);
168 }
169 }, ActionLink.ActionType.MERGE_ACCOUNTS);
170 mergeAccounts.setEntitlements(String.format("%s,%s,%s,%s",
171 IdRepoEntitlement.USER_READ, IdRepoEntitlement.USER_UPDATE, IdRepoEntitlement.USER_DELETE,
172 IdMEntitlement.RESOURCE_GET_CONNOBJECT));
173 actions.add(mergeAccounts);
174
175 return actions;
176 }
177
178 @Override
179 public List<Action<GroupTO>> get(
180 final GroupTO modelObject,
181 final String realm,
182 final BaseModal<AnyWrapper<GroupTO>> modal,
183 final String header,
184 final GroupDirectoryPanel parentPanel,
185 final PageReference pageRef) {
186
187 List<Action<GroupTO>> actions = new ArrayList<>();
188
189 Action<GroupTO> manageResources = new Action<>(new ActionLink<>() {
190
191 private static final long serialVersionUID = -7978723352517770645L;
192
193 @Override
194 public void onClick(final AjaxRequestTarget target, final GroupTO ignore) {
195 IModel<AnyWrapper<GroupTO>> formModel = new CompoundPropertyModel<>(
196 new GroupWrapper(modelObject));
197 modal.setFormModel(formModel);
198
199 target.add(modal.setContent(new AnyStatusModal<>(
200 pageRef,
201 formModel.getObject().getInnerObject(),
202 "resource",
203 false)));
204
205 modal.header(new Model<>(header));
206
207 modal.show(true);
208 }
209 }, ActionLink.ActionType.MANAGE_RESOURCES);
210 manageResources.setEntitlements(
211 String.format("%s,%s", IdRepoEntitlement.GROUP_READ, IdRepoEntitlement.GROUP_UPDATE));
212 manageResources.setOnConfirm(false);
213 manageResources.setRealms(realm, modelObject.getDynRealms());
214 actions.add(manageResources);
215
216 return actions;
217 }
218
219 @Override
220 public List<Action<AnyObjectTO>> get(
221 final String type,
222 final AnyObjectTO modelObject,
223 final String realm,
224 final BaseModal<AnyWrapper<AnyObjectTO>> modal,
225 final String header,
226 final AnyObjectDirectoryPanel parentPanel,
227 final PageReference pageRef) {
228
229 List<Action<AnyObjectTO>> actions = new ArrayList<>();
230
231 Action<AnyObjectTO> manageResources = new Action<>(new ActionLink<>() {
232
233 private static final long serialVersionUID = -7978723352517770645L;
234
235 @Override
236 public void onClick(final AjaxRequestTarget target, final AnyObjectTO ignore) {
237 IModel<AnyWrapper<AnyObjectTO>> formModel = new CompoundPropertyModel<>(
238 new AnyObjectWrapper(modelObject));
239 modal.setFormModel(formModel);
240
241 target.add(modal.setContent(new AnyStatusModal<>(
242 pageRef,
243 formModel.getObject().getInnerObject(),
244 "resource",
245 false)));
246
247 modal.header(new Model<>(header));
248
249 modal.show(true);
250 }
251 }, ActionLink.ActionType.MANAGE_RESOURCES);
252 manageResources.setEntitlements(
253 String.format("%s,%s", AnyEntitlement.READ.getFor(type), AnyEntitlement.UPDATE.getFor(type)));
254 manageResources.setRealms(realm, modelObject.getDynRealms());
255 actions.add(manageResources);
256 return actions;
257 }
258 }