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.wizards.resources;
20
21 import java.util.Arrays;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Optional;
25 import java.util.stream.Collectors;
26 import org.apache.syncope.client.console.rest.ConnectorRestClient;
27 import org.apache.syncope.client.console.rest.ImplementationRestClient;
28 import org.apache.syncope.client.ui.commons.Constants;
29 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxCheckBoxPanel;
30 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxDropDownChoicePanel;
31 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxPalettePanel;
32 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxSpinnerFieldPanel;
33 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxTextFieldPanel;
34 import org.apache.syncope.common.lib.to.ConnInstanceTO;
35 import org.apache.syncope.common.lib.to.ImplementationTO;
36 import org.apache.syncope.common.lib.to.ResourceTO;
37 import org.apache.syncope.common.lib.types.IdMImplementationType;
38 import org.apache.syncope.common.lib.types.TraceLevel;
39 import org.apache.wicket.extensions.wizard.WizardStep;
40 import org.apache.wicket.markup.html.WebMarkupContainer;
41 import org.apache.wicket.markup.html.form.IChoiceRenderer;
42 import org.apache.wicket.model.IModel;
43 import org.apache.wicket.model.LoadableDetachableModel;
44 import org.apache.wicket.model.Model;
45 import org.apache.wicket.model.PropertyModel;
46 import org.apache.wicket.model.ResourceModel;
47 import org.apache.wicket.model.util.ListModel;
48 import org.apache.wicket.spring.injection.annot.SpringBean;
49
50 public class ResourceDetailsPanel extends WizardStep {
51
52 private static final long serialVersionUID = -7982691107029848579L;
53
54 @SpringBean
55 protected ImplementationRestClient implementationRestClient;
56
57 @SpringBean
58 protected ConnectorRestClient connectorRestClient;
59
60 protected AjaxDropDownChoicePanel<String> connector;
61
62 protected final IModel<List<String>> propagationActions = new LoadableDetachableModel<>() {
63
64 private static final long serialVersionUID = 5275935387613157437L;
65
66 @Override
67 protected List<String> load() {
68 return implementationRestClient.list(IdMImplementationType.PROPAGATION_ACTIONS).stream().
69 map(ImplementationTO::getKey).sorted().collect(Collectors.toList());
70 }
71 };
72
73 protected final IModel<List<String>> provisionSorters = new LoadableDetachableModel<>() {
74
75 private static final long serialVersionUID = 4659376149825914247L;
76
77 @Override
78 protected List<String> load() {
79 return implementationRestClient.list(IdMImplementationType.PROVISION_SORTER).stream().
80 map(ImplementationTO::getKey).sorted().collect(Collectors.toList());
81 }
82 };
83
84 public ResourceDetailsPanel(final ResourceTO resourceTO, final boolean createFlag) {
85 super();
86 setOutputMarkupId(true);
87
88 final WebMarkupContainer container = new WebMarkupContainer("container");
89 container.setOutputMarkupId(true);
90 container.setRenderBodyOnly(true);
91 add(container);
92
93 container.add(new AjaxTextFieldPanel(
94 Constants.KEY_FIELD_NAME,
95 new ResourceModel(Constants.KEY_FIELD_NAME, Constants.KEY_FIELD_NAME).getObject(),
96 new PropertyModel<>(resourceTO, Constants.KEY_FIELD_NAME),
97 false).addRequiredLabel().setEnabled(createFlag));
98
99 container.add(new AjaxCheckBoxPanel(
100 "enforceMandatoryCondition",
101 new ResourceModel("enforceMandatoryCondition", "enforceMandatoryCondition").getObject(),
102 new PropertyModel<>(resourceTO, "enforceMandatoryCondition"),
103 false));
104
105 container.add(new AjaxSpinnerFieldPanel.Builder<Integer>().build(
106 "propagationPriority",
107 "propagationPriority",
108 Integer.class,
109 new PropertyModel<>(resourceTO, "propagationPriority")));
110
111 container.add(new AjaxPalettePanel.Builder<String>().
112 setAllowMoveAll(true).setAllowOrder(true).
113 build("propagationActions",
114 new PropertyModel<>(resourceTO, "propagationActions"),
115 new ListModel<>(propagationActions.getObject())).
116 setOutputMarkupId(true));
117
118 container.add(new AjaxDropDownChoicePanel<>(
119 "createTraceLevel",
120 new ResourceModel("createTraceLevel", "createTraceLevel").getObject(),
121 new PropertyModel<>(resourceTO, "createTraceLevel"),
122 false).
123 setChoices(Arrays.stream(TraceLevel.values()).collect(Collectors.toList())).setNullValid(false));
124
125 container.add(new AjaxDropDownChoicePanel<>(
126 "provisionSorter", "provisionSorter",
127 new PropertyModel<>(resourceTO, "provisionSorter"), false).
128 setChoices(provisionSorters));
129
130 container.add(new AjaxDropDownChoicePanel<>(
131 "updateTraceLevel",
132 new ResourceModel("updateTraceLevel", "updateTraceLevel").getObject(),
133 new PropertyModel<>(resourceTO, "updateTraceLevel"),
134 false).
135 setChoices(Arrays.stream(TraceLevel.values()).collect(Collectors.toList())).setNullValid(false));
136
137 container.add(new AjaxDropDownChoicePanel<>(
138 "deleteTraceLevel",
139 new ResourceModel("deleteTraceLevel", "deleteTraceLevel").getObject(),
140 new PropertyModel<>(resourceTO, "deleteTraceLevel"),
141 false).
142 setChoices(Arrays.stream(TraceLevel.values()).collect(Collectors.toList())).setNullValid(false));
143
144 container.add(new AjaxDropDownChoicePanel<>(
145 "provisioningTraceLevel",
146 new ResourceModel("provisioningTraceLevel", "provisioningTraceLevel").getObject(),
147 new PropertyModel<>(resourceTO, "provisioningTraceLevel"),
148 false).
149 setChoices(Arrays.stream(TraceLevel.values()).collect(Collectors.toList())).setNullValid(false));
150
151 if (resourceTO.getConnector() != null) {
152 container.add(new AjaxTextFieldPanel(
153 "connector",
154 new ResourceModel("connector", "connector").getObject(),
155 new Model<>(resourceTO.getConnectorDisplayName()),
156 false).addRequiredLabel().setEnabled(false));
157 } else {
158 connector = new AjaxDropDownChoicePanel<>(
159 "connector",
160 new ResourceModel("connector", "connector").getObject(),
161 new PropertyModel<>(resourceTO, "connector"), false);
162 Map<String, String> connectorsMap = connectorRestClient.getAllConnectors().stream().
163 collect(Collectors.toMap(ConnInstanceTO::getKey, ConnInstanceTO::getDisplayName));
164 connector.setChoices(connectorsMap.keySet().stream().sorted().collect(Collectors.toList()));
165 connector.setChoiceRenderer(new IChoiceRenderer<>() {
166
167 private static final long serialVersionUID = 91313845533448846L;
168
169 private final Map<String, String> valueMap = connectorsMap;
170
171 @Override
172 public String getDisplayValue(final String value) {
173 return Optional.ofNullable(valueMap.get(value)).orElse(null);
174 }
175
176 @Override
177 public String getIdValue(final String value, final int i) {
178 return value;
179 }
180
181 @Override
182 public String getObject(final String id, final IModel<? extends List<? extends String>> choices) {
183 return id;
184 }
185 });
186 connector.addRequiredLabel();
187 connector.setOutputMarkupId(true);
188 connector.getField().setOutputMarkupId(true);
189 container.add(connector);
190 }
191 }
192
193 public AjaxDropDownChoicePanel<String> getConnector() {
194 return connector;
195 }
196 }