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.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 }