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 java.util.stream.Collectors;
27 import org.apache.syncope.client.console.SyncopeConsoleSession;
28 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
29 import org.apache.syncope.client.console.commons.IdRepoConstants;
30 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
31 import org.apache.syncope.client.console.panels.ParametersDirectoryPanel.ParametersProvider;
32 import org.apache.syncope.client.console.rest.SyncopeRestClient;
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.console.wizards.WizardMgtPanel;
36 import org.apache.syncope.client.ui.commons.Constants;
37 import org.apache.syncope.client.ui.commons.pages.BaseWebPage;
38 import org.apache.syncope.client.ui.commons.panels.WizardModalPanel;
39 import org.apache.syncope.client.ui.commons.wizards.AbstractModalPanelBuilder;
40 import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
41 import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
42 import org.apache.wicket.AttributeModifier;
43 import org.apache.wicket.PageReference;
44 import org.apache.wicket.ajax.AjaxRequestTarget;
45 import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
46 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
47 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
48 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
49 import org.apache.wicket.markup.html.basic.Label;
50 import org.apache.wicket.markup.repeater.Item;
51 import org.apache.wicket.model.CompoundPropertyModel;
52 import org.apache.wicket.model.IModel;
53 import org.apache.wicket.model.ResourceModel;
54 import org.apache.wicket.model.StringResourceModel;
55 import org.apache.wicket.spring.injection.annot.SpringBean;
56
57 public class ParametersDirectoryPanel
58 extends DirectoryPanel<ConfParam, ConfParam, ParametersProvider, SyncopeRestClient> {
59
60 private static final long serialVersionUID = 2765863608539154422L;
61
62 @SpringBean
63 protected ConfParamOps confParamOps;
64
65 public ParametersDirectoryPanel(final String id, final SyncopeRestClient restClient, final PageReference pageRef) {
66 super(id, new Builder<>(restClient, pageRef) {
67
68 private static final long serialVersionUID = 8769126634538601689L;
69
70 @Override
71 protected WizardMgtPanel<ConfParam> newInstance(final String id, final boolean wizardInModal) {
72 throw new UnsupportedOperationException();
73 }
74 });
75
76 itemKeyFieldName = "schema";
77 disableCheckBoxes();
78
79 this.addNewItemPanelBuilder(new AbstractModalPanelBuilder<ConfParam>(new ConfParam(), pageRef) {
80
81 private static final long serialVersionUID = 1995192603527154740L;
82
83 @Override
84 public WizardModalPanel<ConfParam> build(final String id, final int index, final AjaxWizard.Mode mode) {
85 return new ParametersModalPanel(modal, newModelObject(), confParamOps, mode, pageRef);
86 }
87 }, true);
88 modal.size(Modal.Size.Default);
89 initResultTable();
90 }
91
92 public ParametersDirectoryPanel(final String id, final Builder<ConfParam, ConfParam, SyncopeRestClient> builder) {
93 super(id, builder);
94 }
95
96 @Override
97 protected ParametersProvider dataProvider() {
98 return new ParametersProvider(rows);
99 }
100
101 @Override
102 protected String paginatorRowsKey() {
103 return IdRepoConstants.PREF_PARAMETERS_PAGINATOR_ROWS;
104 }
105
106 @Override
107 protected Collection<ActionLink.ActionType> getBatches() {
108 return List.of();
109 }
110
111 @Override
112 protected List<IColumn<ConfParam, String>> getColumns() {
113 final List<IColumn<ConfParam, String>> columns = new ArrayList<>();
114 columns.add(new PropertyColumn<>(new ResourceModel("schema"), "schema"));
115 columns.add(new PropertyColumn<>(new ResourceModel("values"), "values") {
116
117 private static final long serialVersionUID = -1822504503325964706L;
118
119 @Override
120 public void populateItem(
121 final Item<ICellPopulator<ConfParam>> item,
122 final String componentId,
123 final IModel<ConfParam> rowModel) {
124
125 if (rowModel.getObject().getValues().toString().length() > 96) {
126 item.add(new Label(componentId, getString("tooLong")).
127 add(new AttributeModifier("style", "font-style:italic")));
128 } else {
129 super.populateItem(item, componentId, rowModel);
130 }
131 }
132 });
133 return columns;
134 }
135
136 @Override
137 public ActionsPanel<ConfParam> getActions(final IModel<ConfParam> model) {
138 final ActionsPanel<ConfParam> panel = super.getActions(model);
139
140 panel.add(new ActionLink<>() {
141
142 private static final long serialVersionUID = -3722207913631435501L;
143
144 @Override
145 public void onClick(final AjaxRequestTarget target, final ConfParam ignore) {
146 target.add(modal);
147 modal.header(new StringResourceModel("any.edit"));
148 modal.setContent(new ParametersModalPanel(
149 modal, model.getObject(), confParamOps, AjaxWizard.Mode.EDIT, pageRef));
150 modal.show(true);
151 }
152 }, ActionLink.ActionType.EDIT, null);
153
154 panel.add(new ActionLink<>() {
155
156 private static final long serialVersionUID = -3722207913631435501L;
157
158 @Override
159 public void onClick(final AjaxRequestTarget target, final ConfParam ignore) {
160 try {
161 confParamOps.remove(SyncopeConsoleSession.get().getDomain(), model.getObject().getSchema());
162
163 SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
164 target.add(container);
165 } catch (Exception e) {
166 LOG.error("While deleting {}", model.getObject(), e);
167 SyncopeConsoleSession.get().onException(e);
168 }
169 ((BaseWebPage) pageRef.getPage()).getNotificationPanel().refresh(target);
170 }
171 }, ActionLink.ActionType.DELETE, null, true);
172
173 return panel;
174 }
175
176 protected final class ParametersProvider extends DirectoryDataProvider<ConfParam> {
177
178 private static final long serialVersionUID = -185944053385660794L;
179
180 private final SortableDataProviderComparator<ConfParam> comparator;
181
182 private ParametersProvider(final int paginatorRows) {
183 super(paginatorRows);
184 setSort("schema", SortOrder.ASCENDING);
185 comparator = new SortableDataProviderComparator<>(this);
186 }
187
188 @Override
189 public Iterator<ConfParam> iterator(final long first, final long count) {
190 List<ConfParam> list = confParamOps.list(SyncopeConsoleSession.get().getDomain()).entrySet().stream().
191 skip(first).limit(count).
192 map(entry -> {
193 ConfParam param = new ConfParam();
194 param.setSchema(entry.getKey());
195 param.setValues(entry.getValue());
196 return param;
197 }).collect(Collectors.toList());
198
199 list.sort(comparator);
200 return list.iterator();
201 }
202
203 @Override
204 public long size() {
205 return confParamOps.list(SyncopeConsoleSession.get().getDomain()).size();
206 }
207
208 @Override
209 public IModel<ConfParam> model(final ConfParam object) {
210 return new CompoundPropertyModel<>(object);
211 }
212 }
213 }