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.ArrayList;
22  import java.util.LinkedHashMap;
23  import java.util.Map;
24  import java.util.stream.Collectors;
25  import org.apache.syncope.client.console.rest.PolicyRestClient;
26  import org.apache.syncope.client.console.wicket.markup.html.form.PolicyRenderer;
27  import org.apache.syncope.client.ui.commons.markup.html.form.AjaxDropDownChoicePanel;
28  import org.apache.syncope.common.lib.policy.PolicyTO;
29  import org.apache.syncope.common.lib.to.ResourceTO;
30  import org.apache.syncope.common.lib.types.PolicyType;
31  import org.apache.wicket.extensions.wizard.WizardStep;
32  import org.apache.wicket.markup.html.WebMarkupContainer;
33  import org.apache.wicket.markup.html.form.DropDownChoice;
34  import org.apache.wicket.model.IModel;
35  import org.apache.wicket.model.LoadableDetachableModel;
36  import org.apache.wicket.model.PropertyModel;
37  import org.apache.wicket.model.ResourceModel;
38  import org.apache.wicket.spring.injection.annot.SpringBean;
39  
40  public class ResourceSecurityPanel extends WizardStep {
41  
42      private static final long serialVersionUID = -7982691107029848579L;
43  
44      @SpringBean
45      protected PolicyRestClient policyRestClient;
46  
47      protected final IModel<Map<String, String>> passwordPolicies = new LoadableDetachableModel<>() {
48  
49          private static final long serialVersionUID = 5275935387613157437L;
50  
51          @Override
52          protected Map<String, String> load() {
53              return policyRestClient.list(PolicyType.PASSWORD).stream().
54                      collect(Collectors.toMap(PolicyTO::getKey, PolicyTO::getName, (v1, v2) -> v1, LinkedHashMap::new));
55          }
56      };
57  
58      protected final IModel<Map<String, String>> accountPolicies = new LoadableDetachableModel<>() {
59  
60          private static final long serialVersionUID = -2012833443695917883L;
61  
62          @Override
63          protected Map<String, String> load() {
64              return policyRestClient.list(PolicyType.ACCOUNT).stream().
65                      collect(Collectors.toMap(PolicyTO::getKey, PolicyTO::getName, (v1, v2) -> v1, LinkedHashMap::new));
66          }
67      };
68  
69      protected final IModel<Map<String, String>> propagationPolicies = new LoadableDetachableModel<>() {
70  
71          private static final long serialVersionUID = -2012833443695917883L;
72  
73          @Override
74          protected Map<String, String> load() {
75              return policyRestClient.list(PolicyType.PROPAGATION).stream().
76                      collect(Collectors.toMap(PolicyTO::getKey, PolicyTO::getName, (v1, v2) -> v1, LinkedHashMap::new));
77          }
78      };
79  
80      protected final IModel<Map<String, String>> pullPolicies = new LoadableDetachableModel<>() {
81  
82          private static final long serialVersionUID = -2012833443695917883L;
83  
84          @Override
85          protected Map<String, String> load() {
86              return policyRestClient.list(PolicyType.PULL).stream().
87                      collect(Collectors.toMap(PolicyTO::getKey, PolicyTO::getName, (v1, v2) -> v1, LinkedHashMap::new));
88          }
89      };
90  
91      protected final IModel<Map<String, String>> pushPolicies = new LoadableDetachableModel<>() {
92  
93          private static final long serialVersionUID = 9089911876466472133L;
94  
95          @Override
96          protected Map<String, String> load() {
97              return policyRestClient.list(PolicyType.PUSH).stream().
98                      collect(Collectors.toMap(PolicyTO::getKey, PolicyTO::getName));
99          }
100     };
101 
102     public ResourceSecurityPanel(final ResourceTO resourceTO) {
103         super();
104         setOutputMarkupId(true);
105 
106         final WebMarkupContainer container = new WebMarkupContainer("container");
107         container.setOutputMarkupId(true);
108         container.setRenderBodyOnly(true);
109         add(container);
110 
111         // -------------------------------
112         // Password policy selection
113         // -------------------------------
114         AjaxDropDownChoicePanel<String> passwordPolicy = new AjaxDropDownChoicePanel<>(
115                 "passwordPolicy",
116                 new ResourceModel("passwordPolicy", "passwordPolicy").getObject(),
117                 new PropertyModel<>(resourceTO, "passwordPolicy"),
118                 false);
119         passwordPolicy.setChoiceRenderer(new PolicyRenderer(passwordPolicies.getObject()));
120         passwordPolicy.setChoices(new ArrayList<>(passwordPolicies.getObject().keySet()));
121         ((DropDownChoice<?>) passwordPolicy.getField()).setNullValid(true);
122         container.add(passwordPolicy);
123         // -------------------------------
124 
125         // -------------------------------
126         // Account policy selection
127         // -------------------------------
128         AjaxDropDownChoicePanel<String> accountPolicy = new AjaxDropDownChoicePanel<>(
129                 "accountPolicy",
130                 new ResourceModel("accountPolicy", "accountPolicy").getObject(),
131                 new PropertyModel<>(resourceTO, "accountPolicy"),
132                 false);
133         accountPolicy.setChoiceRenderer(new PolicyRenderer(accountPolicies.getObject()));
134         accountPolicy.setChoices(new ArrayList<>(accountPolicies.getObject().keySet()));
135         ((DropDownChoice<?>) accountPolicy.getField()).setNullValid(true);
136         container.add(accountPolicy);
137         // -------------------------------
138 
139         // -------------------------------
140         // Propagation policy selection
141         // -------------------------------
142         AjaxDropDownChoicePanel<String> propagationPolicy = new AjaxDropDownChoicePanel<>(
143                 "propagationPolicy",
144                 new ResourceModel("propagationPolicy", "propagationPolicy").getObject(),
145                 new PropertyModel<>(resourceTO, "propagationPolicy"),
146                 false);
147         propagationPolicy.setChoiceRenderer(new PolicyRenderer(propagationPolicies.getObject()));
148         propagationPolicy.setChoices(new ArrayList<>(propagationPolicies.getObject().keySet()));
149         ((DropDownChoice<?>) propagationPolicy.getField()).setNullValid(true);
150         container.add(propagationPolicy);
151         // -------------------------------
152 
153         // -------------------------------
154         // Pull policy selection
155         // -------------------------------
156         AjaxDropDownChoicePanel<String> pullPolicy = new AjaxDropDownChoicePanel<>(
157                 "pullPolicy",
158                 new ResourceModel("pullPolicy", "pullPolicy").getObject(),
159                 new PropertyModel<>(resourceTO, "pullPolicy"),
160                 false);
161         pullPolicy.setChoiceRenderer(new PolicyRenderer(pullPolicies.getObject()));
162         pullPolicy.setChoices(new ArrayList<>(pullPolicies.getObject().keySet()));
163         ((DropDownChoice<?>) pullPolicy.getField()).setNullValid(true);
164         container.add(pullPolicy);
165         // -------------------------------
166 
167         // -------------------------------
168         // Push policy selection
169         // -------------------------------
170         AjaxDropDownChoicePanel<String> pushPolicy = new AjaxDropDownChoicePanel<>(
171                 "pushPolicy",
172                 new ResourceModel("pushPolicy", "pushPolicy").getObject(),
173                 new PropertyModel<>(resourceTO, "pushPolicy"),
174                 false);
175         pushPolicy.setChoiceRenderer(new PolicyRenderer(pushPolicies.getObject()));
176         pushPolicy.setChoices(new ArrayList<>(pushPolicies.getObject().keySet()));
177         ((DropDownChoice<?>) pushPolicy.getField()).setNullValid(true);
178         container.add(pushPolicy);
179         // -------------------------------
180     }
181 }