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.panels;
20
21 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import java.util.Iterator;
25 import java.util.List;
26 import org.apache.syncope.client.console.SyncopeConsoleSession;
27 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
28 import org.apache.syncope.client.console.commons.IdRepoConstants;
29 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
30 import org.apache.syncope.client.console.panels.DomainDirectoryPanel.DomainProvider;
31 import org.apache.syncope.client.console.rest.SyncopeRestClient;
32 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
33 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
34 import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
35 import org.apache.syncope.client.ui.commons.Constants;
36 import org.apache.syncope.client.ui.commons.pages.BaseWebPage;
37 import org.apache.syncope.common.keymaster.client.api.DomainOps;
38 import org.apache.syncope.common.keymaster.client.api.KeymasterException;
39 import org.apache.syncope.common.keymaster.client.api.model.Domain;
40 import org.apache.syncope.common.lib.types.IdRepoEntitlement;
41 import org.apache.wicket.PageReference;
42 import org.apache.wicket.ajax.AjaxRequestTarget;
43 import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
44 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
45 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
46 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
47 import org.apache.wicket.model.IModel;
48 import org.apache.wicket.model.ResourceModel;
49 import org.apache.wicket.model.StringResourceModel;
50 import org.apache.wicket.spring.injection.annot.SpringBean;
51
52 public class DomainDirectoryPanel extends DirectoryPanel<Domain, Domain, DomainProvider, SyncopeRestClient> {
53
54 private static final long serialVersionUID = -1039907608594680220L;
55
56 @SpringBean
57 private DomainOps domainOps;
58
59 private final BaseModal<Domain> utilityModal = new BaseModal<>(Constants.OUTER);
60
61 public DomainDirectoryPanel(final String id, final PageReference pageRef) {
62 super(id, null, pageRef);
63 disableCheckBoxes();
64
65 modal.size(Modal.Size.Large);
66
67 modal.setWindowClosedCallback(target -> {
68 updateResultTable(target);
69 modal.show(false);
70 });
71
72 addOuterObject(utilityModal);
73 utilityModal.setWindowClosedCallback(target -> {
74 updateResultTable(target);
75 modal.show(false);
76 });
77 utilityModal.size(Modal.Size.Small);
78 utilityModal.addSubmitButton();
79
80 addNewItemPanelBuilder(new DomainWizardBuilder(domainOps, new Domain(), pageRef), true);
81
82 initResultTable();
83
84 MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, RENDER, IdRepoEntitlement.KEYMASTER);
85 }
86
87 @Override
88 protected List<IColumn<Domain, String>> getColumns() {
89 List<IColumn<Domain, String>> columns = new ArrayList<>();
90 columns.add(new PropertyColumn<>(new StringResourceModel("key", this), "key", "key"));
91 columns.add(new PropertyColumn<>(
92 new StringResourceModel("jdbcURL", this), "jdbcURL", "jdbcURL"));
93 columns.add(new PropertyColumn<>(
94 new StringResourceModel("poolMaxActive", this), "poolMaxActive", "poolMaxActive"));
95 columns.add(new PropertyColumn<>(
96 new StringResourceModel("poolMinIdle", this), "poolMinIdle", "poolMinIdle"));
97 return columns;
98 }
99
100 @Override
101 protected ActionsPanel<Domain> getActions(final IModel<Domain> model) {
102 ActionsPanel<Domain> panel = super.getActions(model);
103
104 panel.add(new ActionLink<>() {
105
106 private static final long serialVersionUID = 7610801302168867641L;
107
108 @Override
109 public void onClick(final AjaxRequestTarget target, final Domain ignore) {
110 utilityModal.header(new ResourceModel("adjust.pool.size"));
111 utilityModal.setContent(new DomainPoolModalPanel(model.getObject(), utilityModal, pageRef));
112 utilityModal.show(true);
113 target.add(utilityModal);
114 }
115 }, ActionLink.ActionType.EDIT, IdRepoEntitlement.KEYMASTER);
116
117 panel.add(new ActionLink<>() {
118
119 private static final long serialVersionUID = 7610801302168867641L;
120
121 @Override
122 public void onClick(final AjaxRequestTarget target, final Domain ignore) {
123 utilityModal.header(new ResourceModel("set.admin.credentials"));
124 utilityModal.setContent(new DomainAdminCredentialsPanel(model.getObject(), utilityModal, pageRef));
125 utilityModal.show(true);
126 target.add(utilityModal);
127 }
128 }, ActionLink.ActionType.PASSWORD_MANAGEMENT, IdRepoEntitlement.KEYMASTER);
129
130 panel.add(new ActionLink<>() {
131
132 private static final long serialVersionUID = -3722207913631435501L;
133
134 @Override
135 public void onClick(final AjaxRequestTarget target, final Domain ignore) {
136 final Domain domain = model.getObject();
137 try {
138 domainOps.delete(domain.getKey());
139 SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
140 target.add(container);
141 } catch (KeymasterException e) {
142 LOG.error("While deleting {}", domain.getKey(), e);
143 SyncopeConsoleSession.get().onException(e);
144 }
145 ((BaseWebPage) pageRef.getPage()).getNotificationPanel().refresh(target);
146 }
147 }, ActionLink.ActionType.DELETE, IdRepoEntitlement.KEYMASTER, true);
148
149 return panel;
150 }
151
152 @Override
153 protected DomainProvider dataProvider() {
154 return new DomainProvider(rows);
155 }
156
157 @Override
158 protected String paginatorRowsKey() {
159 return IdRepoConstants.PREF_DOMAIN_PAGINATOR_ROWS;
160 }
161
162 @Override
163 protected Collection<ActionLink.ActionType> getBatches() {
164 return List.of();
165
166 }
167
168 protected final class DomainProvider extends DirectoryDataProvider<Domain> {
169
170 private static final long serialVersionUID = 8668261951640646188L;
171
172 private final SortableDataProviderComparator<Domain> comparator;
173
174 public DomainProvider(final int paginatorRows) {
175 super(paginatorRows);
176 setSort("key", SortOrder.ASCENDING);
177 comparator = new SortableDataProviderComparator<>(this);
178 }
179
180 @Override
181 public Iterator<? extends Domain> iterator(final long first, final long count) {
182 List<Domain> list = domainOps.list();
183 list.sort(comparator);
184 return list.subList((int) first, (int) first + (int) count).iterator();
185 }
186
187 @Override
188 public long size() {
189 return domainOps.list().size();
190 }
191
192 @Override
193 public IModel<Domain> model(final Domain object) {
194 return new IModel<>() {
195
196 private static final long serialVersionUID = 8093553921710742624L;
197
198 @Override
199 public Domain getObject() {
200 return object;
201 }
202 };
203 }
204 }
205 }