View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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 }