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.any;
20  
21  import java.util.List;
22  import java.util.stream.Collectors;
23  import org.apache.commons.lang3.StringUtils;
24  import org.apache.syncope.client.console.panels.search.AnyObjectSearchPanel;
25  import org.apache.syncope.client.console.panels.search.MapOfListModel;
26  import org.apache.syncope.client.console.panels.search.UserSearchPanel;
27  import org.apache.syncope.client.console.rest.AnyTypeRestClient;
28  import org.apache.syncope.client.ui.commons.wicket.markup.html.bootstrap.tabs.Accordion;
29  import org.apache.syncope.common.lib.to.AnyTypeTO;
30  import org.apache.syncope.common.lib.types.AnyTypeKind;
31  import org.apache.wicket.PageReference;
32  import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
33  import org.apache.wicket.extensions.wizard.WizardStep;
34  import org.apache.wicket.markup.html.list.ListItem;
35  import org.apache.wicket.markup.html.list.ListView;
36  import org.apache.wicket.markup.html.panel.Panel;
37  import org.apache.wicket.model.LoadableDetachableModel;
38  import org.apache.wicket.model.Model;
39  import org.apache.wicket.model.PropertyModel;
40  import org.apache.wicket.model.ResourceModel;
41  import org.apache.wicket.model.StringResourceModel;
42  import org.apache.wicket.spring.injection.annot.SpringBean;
43  
44  public class DynamicMemberships extends WizardStep {
45  
46      private static final long serialVersionUID = 855618618337931784L;
47  
48      @SpringBean
49      protected AnyTypeRestClient anyTypeRestClient;
50  
51      public DynamicMemberships(final GroupWrapper groupWrapper, final PageReference pageRef) {
52          super();
53  
54          final LoadableDetachableModel<List<AnyTypeTO>> types = new LoadableDetachableModel<>() {
55  
56              private static final long serialVersionUID = 5275935387613157437L;
57  
58              @Override
59              protected List<AnyTypeTO> load() {
60                  return anyTypeRestClient.listAnyTypes().stream().
61                          filter(type -> AnyTypeKind.USER != type.getKind() && AnyTypeKind.GROUP != type.getKind()).
62                          collect(Collectors.toList());
63              }
64          };
65  
66          // ------------------------
67          // uDynMembershipCond
68          // ------------------------
69          add(new Accordion("uDynMembershipCond", List.of(
70                  new AbstractTab(new ResourceModel("uDynMembershipCond", "Dynamic USER Membership Conditions")) {
71  
72              private static final long serialVersionUID = 1037272333056449378L;
73  
74              @Override
75              public Panel getPanel(final String panelId) {
76                  return new UserSearchPanel.Builder(new PropertyModel<>(groupWrapper, "uDynClauses"), pageRef).
77                          required(true).build(panelId);
78              }
79          }), Model.of(StringUtils.isBlank(groupWrapper.getUDynMembershipCond()) ? -1 : 0)).setOutputMarkupId(true));
80          // ------------------------ 
81  
82          // ------------------------
83          // aDynMembershipConds
84          // ------------------------
85          add(new ListView<>("aDynMembershipCond", types) {
86  
87              private static final long serialVersionUID = 9101744072914090143L;
88  
89              @Override
90              protected void populateItem(final ListItem<AnyTypeTO> item) {
91                  final String key = item.getModelObject().getKey();
92                  item.add(new Accordion("aDynMembershipCond", List.of(
93                          new AbstractTab(new StringResourceModel(
94                                  "aDynMembershipCond", this, new Model<>(item.getModelObject()))) {
95  
96                      private static final long serialVersionUID = 1037272333056449378L;
97  
98                      @Override
99                      public Panel getPanel(final String panelId) {
100                         return new AnyObjectSearchPanel.Builder(
101                                 key, new MapOfListModel<>(groupWrapper, "aDynClauses", key), pageRef).
102                                 required(false).build(panelId);
103                     }
104                 }), Model.of(StringUtils.isBlank(groupWrapper.getADynMembershipConds().get(key)) ? -1 : 0)).
105                         setOutputMarkupId(true));
106             }
107         });
108         // ------------------------
109     }
110 }