You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2016/07/13 15:46:53 UTC

syncope git commit: [SYNCOPE-885] leverage on ICondition wizard mechanism

Repository: syncope
Updated Branches:
  refs/heads/master 2526c4564 -> 0414964f0


[SYNCOPE-885] leverage on ICondition wizard mechanism


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/0414964f
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/0414964f
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/0414964f

Branch: refs/heads/master
Commit: 0414964f00c29befa5dd347254707fc65c119fb7
Parents: 2526c45
Author: fmartelli <fa...@gmail.com>
Authored: Wed Jul 13 17:46:33 2016 +0200
Committer: fmartelli <fa...@gmail.com>
Committed: Wed Jul 13 17:46:33 2016 +0200

----------------------------------------------------------------------
 .../console/wizards/any/AbstractAttrs.java      | 102 ++++++++++---------
 .../client/console/wizards/any/Groups.java      |  12 ++-
 .../client/console/wizards/any/Resources.java   |  18 +++-
 .../client/console/wizards/any/Roles.java       |  12 ++-
 .../client/console/wizards/any/VirAttrs.java    |   2 +-
 .../resources/AbstractConnConfPanel.java        |  14 ++-
 .../wizards/resources/ConnectorConfPanel.java   |   2 +-
 .../resources/ResourceConnConfPanel.java        |   2 +-
 .../syncope/fit/console/TopologyITCase.java     |   3 -
 9 files changed, 102 insertions(+), 65 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/0414964f/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
index 5d3453b..47a3dca 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
@@ -41,13 +41,15 @@ import org.apache.syncope.common.lib.to.MembershipTO;
 import org.apache.syncope.common.lib.types.SchemaType;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.core.util.lang.PropertyResolver;
+import org.apache.wicket.extensions.wizard.WizardModel.ICondition;
 import org.apache.wicket.extensions.wizard.WizardStep;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.util.ListModel;
 
-public abstract class AbstractAttrs<S extends AbstractSchemaTO> extends WizardStep {
+public abstract class AbstractAttrs<S extends AbstractSchemaTO> extends WizardStep implements ICondition {
 
     private static final long serialVersionUID = -5387344116983102292L;
 
@@ -65,64 +67,58 @@ public abstract class AbstractAttrs<S extends AbstractSchemaTO> extends WizardSt
 
     protected final Map<String, Map<String, S>> membershipSchemas = new LinkedHashMap<>();
 
-    protected final LoadableDetachableModel<List<AttrTO>> attrTOs;
+    protected final IModel<List<AttrTO>> attrTOs;
 
-    protected final LoadableDetachableModel<List<MembershipTO>> membershipTOs;
+    protected final IModel<List<MembershipTO>> membershipTOs;
+
+    private final List<String> anyTypeClasses;
 
     public AbstractAttrs(final AnyTO anyTO, final List<String> anyTypeClasses, final List<String> whichAttrs) {
         super();
+        this.anyTypeClasses = anyTypeClasses;
+        this.attrTOs = new ListModel<>(Collections.<AttrTO>emptyList());
+        this.membershipTOs = new ListModel<>(Collections.<MembershipTO>emptyList());
+
         this.setOutputMarkupId(true);
 
         this.anyTO = anyTO;
         this.whichAttrs = whichAttrs;
+    }
 
-        this.attrTOs = new LoadableDetachableModel<List<AttrTO>>() {
-
-            private static final long serialVersionUID = 5275935387613157437L;
+    private List<AttrTO> loadAttrTOs() {
+        setSchemas(CollectionUtils.collect(anyTypeClassRestClient.list(anyTO.getAuxClasses()),
+                EntityTOUtils.<AnyTypeClassTO>keyTransformer(), new ArrayList<>(anyTypeClasses)));
+        setAttrs();
+        return AbstractAttrs.this.getAttrsFromTO();
+    }
 
-            @Override
-            protected List<AttrTO> load() {
-                setSchemas(CollectionUtils.collect(anyTypeClassRestClient.list(anyTO.getAuxClasses()),
-                        EntityTOUtils.<AnyTypeClassTO>keyTransformer(), new ArrayList<>(anyTypeClasses)));
-                setAttrs();
-                return AbstractAttrs.this.getAttrsFromTO();
-            }
-        };
-
-        this.membershipTOs = new LoadableDetachableModel<List<MembershipTO>>() {
-
-            private static final long serialVersionUID = 5275935387613157437L;
-
-            @Override
-            @SuppressWarnings("unchecked")
-            protected List<MembershipTO> load() {
-                List<MembershipTO> memberships = new ArrayList<>();
-                try {
-                    membershipSchemas.clear();
-
-                    for (MembershipTO membership : (List<MembershipTO>) PropertyResolver.getPropertyField(
-                            "memberships", anyTO).get(anyTO)) {
-                        setSchemas(membership.getGroupKey(), CollectionUtils.collect(
-                                anyTypeClassRestClient.list(getMembershipAuxClasses(membership, anyTO.getType())),
-                                EntityTOUtils.<AnyTypeClassTO>keyTransformer(),
-                                new ArrayList<String>()));
-                        setAttrs(membership);
-
-                        if (AbstractAttrs.this instanceof PlainAttrs && !membership.getPlainAttrs().isEmpty()) {
-                            memberships.add(membership);
-                        } else if (AbstractAttrs.this instanceof DerAttrs && !membership.getDerAttrs().isEmpty()) {
-                            memberships.add(membership);
-                        } else if (AbstractAttrs.this instanceof VirAttrs && !membership.getVirAttrs().isEmpty()) {
-                            memberships.add(membership);
-                        }
-                    }
-                } catch (WicketRuntimeException | IllegalArgumentException | IllegalAccessException ex) {
-                    // ignore
+    @SuppressWarnings("unchecked")
+    private List<MembershipTO> loadMembershipAttrTOs() {
+        List<MembershipTO> memberships = new ArrayList<>();
+        try {
+            membershipSchemas.clear();
+
+            for (MembershipTO membership : (List<MembershipTO>) PropertyResolver.getPropertyField(
+                    "memberships", anyTO).get(anyTO)) {
+                setSchemas(membership.getGroupKey(), CollectionUtils.collect(
+                        anyTypeClassRestClient.list(getMembershipAuxClasses(membership, anyTO.getType())),
+                        EntityTOUtils.<AnyTypeClassTO>keyTransformer(),
+                        new ArrayList<String>()));
+                setAttrs(membership);
+
+                if (AbstractAttrs.this instanceof PlainAttrs && !membership.getPlainAttrs().isEmpty()) {
+                    memberships.add(membership);
+                } else if (AbstractAttrs.this instanceof DerAttrs && !membership.getDerAttrs().isEmpty()) {
+                    memberships.add(membership);
+                } else if (AbstractAttrs.this instanceof VirAttrs && !membership.getVirAttrs().isEmpty()) {
+                    memberships.add(membership);
                 }
-
-                return memberships;
             }
-        };
+        } catch (WicketRuntimeException | IllegalArgumentException | IllegalAccessException ex) {
+            // ignore
+        }
+
+        return memberships;
     }
 
     protected boolean reoderSchemas() {
@@ -200,7 +196,7 @@ public abstract class AbstractAttrs<S extends AbstractSchemaTO> extends WizardSt
                 && org.apache.cxf.common.util.CollectionUtils.isEmpty(membershipTOs.getObject())) {
             response.render(OnDomReadyHeaderItem.forScript(
                     String.format("$('#emptyPlaceholder').append(\"%s\"); $('#attributes').hide();",
-                            getString("attribute.empty.list"))));
+                    getString("attribute.empty.list"))));
         }
     }
 
@@ -221,6 +217,13 @@ public abstract class AbstractAttrs<S extends AbstractSchemaTO> extends WizardSt
         }
     }
 
+    @Override
+    public boolean evaluate() {
+        this.attrTOs.setObject(loadAttrTOs());
+        this.membershipTOs.setObject(loadMembershipAttrTOs());
+        return CollectionUtils.isNotEmpty(attrTOs.getObject()) || CollectionUtils.isNotEmpty(membershipTOs.getObject());
+    }
+
     protected static class AttrComparator implements Comparator<AttrTO> {
 
         @Override
@@ -243,6 +246,5 @@ public abstract class AbstractAttrs<S extends AbstractSchemaTO> extends WizardSt
         public Schemas(final String id) {
             super(id);
         }
-
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0414964f/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
index 2e17763..fcc5da0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
@@ -41,13 +41,16 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.util.ListModel;
 import org.apache.wicket.util.lang.Args;
 import org.apache.syncope.common.lib.to.GroupableRelatableTO;
+import org.apache.wicket.extensions.wizard.WizardModel.ICondition;
 
-public class Groups extends WizardStep {
+public class Groups extends WizardStep implements ICondition {
 
     private static final long serialVersionUID = 552437609667518888L;
 
     private final GroupRestClient groupRestClient = new GroupRestClient();
 
+    private final List<GroupTO> allGroups;
+
     public <T extends AnyTO> Groups(final T anyTO, final boolean templateMode) {
         super();
         setOutputMarkupId(true);
@@ -111,7 +114,7 @@ public class Groups extends WizardStep {
             }
         }).hideLabel().setOutputMarkupId(true));
 
-        List<GroupTO> allGroups = groupRestClient.search(
+        allGroups = groupRestClient.search(
                 templateMode ? "/" : anyTO.getRealm(), null, -1, -1, new SortParam<>("name", true), null);
 
         final Map<String, GroupTO> allGroupsByKey = new LinkedHashMap<>(allGroups.size());
@@ -136,4 +139,9 @@ public class Groups extends WizardStep {
         }, new ArrayList<String>()))).
                 hideLabel().setEnabled(false).setOutputMarkupId(true));
     }
+
+    @Override
+    public boolean evaluate() {
+        return CollectionUtils.isNotEmpty(allGroups);
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0414964f/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
index c22b094..bcbd629 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.wizards.any;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.syncope.client.console.rest.ResourceRestClient;
@@ -26,16 +27,20 @@ import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePane
 import org.apache.syncope.common.lib.EntityTOUtils;
 import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.wicket.extensions.wizard.WizardModel;
 import org.apache.wicket.extensions.wizard.WizardStep;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.model.util.ListModel;
 
-public class Resources extends WizardStep {
+public class Resources extends WizardStep implements WizardModel.ICondition {
 
     private static final long serialVersionUID = 552437609667518888L;
 
+    private final ListModel<String> available;
+
     public <T extends AnyTO> Resources(final T entityTO) {
         this.setOutputMarkupId(true);
+        this.available = new ListModel<>(Collections.<String>emptyList());
 
         add(new AjaxPalettePanel.Builder<String>().build("resources",
                 new PropertyModel<List<String>>(entityTO, "resources") {
@@ -52,8 +57,13 @@ public class Resources extends WizardStep {
                 entityTO.getResources().clear();
                 entityTO.getResources().addAll(object);
             }
-        }, new ListModel<>(CollectionUtils.collect(new ResourceRestClient().list(),
-                        EntityTOUtils.<ResourceTO>keyTransformer(), new ArrayList<String>()))).
-                hideLabel().setOutputMarkupId(true));
+        }, available).hideLabel().setOutputMarkupId(true));
+    }
+
+    @Override
+    public boolean evaluate() {
+        available.setObject(CollectionUtils.collect(new ResourceRestClient().list(),
+                EntityTOUtils.<ResourceTO>keyTransformer(), new ArrayList<String>()));
+        return CollectionUtils.isNotEmpty(available.getObject());
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0414964f/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
index 7133b16..9bee784 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
@@ -28,18 +28,21 @@ import org.apache.syncope.common.lib.EntityTOUtils;
 import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.RoleTO;
 import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.wicket.extensions.wizard.WizardModel.ICondition;
 import org.apache.wicket.extensions.wizard.WizardStep;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.model.util.ListModel;
 
-public class Roles extends WizardStep {
+public class Roles extends WizardStep implements ICondition {
 
     private static final long serialVersionUID = 552437609667518888L;
 
+    private final List<String> allRoles;
+
     public <T extends AnyTO> Roles(final UserTO entityTO) {
         this.setOutputMarkupId(true);
 
-        List<String> allRoles = CollectionUtils.collect(new RoleRestClient().list(),
+        allRoles = CollectionUtils.collect(new RoleRestClient().list(),
                 EntityTOUtils.<RoleTO>keyTransformer(), new ArrayList<String>());
         Collections.sort(allRoles);
 
@@ -51,4 +54,9 @@ public class Roles extends WizardStep {
                 new PropertyModel<List<String>>(entityTO, "dynRoles"),
                 new ListModel<>(allRoles)).hideLabel().setEnabled(false).setOutputMarkupId(true));
     }
+
+    @Override
+    public boolean evaluate() {
+        return CollectionUtils.isNotEmpty(allRoles);
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0414964f/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
index 5b43072..27bc7f3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
@@ -89,7 +89,7 @@ public class VirAttrs extends AbstractAttrs<VirSchemaTO> {
 
                     @Override
                     public WebMarkupContainer getPanel(final String panelId) {
-                        return new VirAttrs.VirSchemas(panelId, new ListModel<AttrTO>(getAttrsFromTO(membershipTO)));
+                        return new VirAttrs.VirSchemas(panelId, new ListModel<>(getAttrsFromTO(membershipTO)));
                     }
                 }), Model.of(-1)).setOutputMarkupId(true));
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0414964f/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
index 215c275..c1c73f4 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.wizards.resources;
 
 import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
@@ -29,16 +30,22 @@ import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
+import org.apache.wicket.extensions.wizard.WizardModel;
 import org.apache.wicket.extensions.wizard.WizardStep;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.ResourceModel;
 
-public abstract class AbstractConnConfPanel<T extends AbstractBaseBean> extends WizardStep {
+public abstract class AbstractConnConfPanel<T extends AbstractBaseBean>
+        extends WizardStep
+        implements WizardModel.ICondition {
 
     private static final long serialVersionUID = -2025535531121434050L;
 
+    protected LoadableDetachableModel<List<ConnConfProperty>> model;
+
     protected final WebMarkupContainer propertiesContainer;
 
     protected final AjaxButton check;
@@ -80,4 +87,9 @@ public abstract class AbstractConnConfPanel<T extends AbstractBaseBean> extends
     protected abstract Pair<Boolean, String> check(final AjaxRequestTarget taget);
 
     protected abstract List<ConnConfProperty> getConnProperties(final T instance);
+
+    @Override
+    public boolean evaluate() {
+        return model != null && CollectionUtils.isNotEmpty(model.getObject());
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0414964f/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java
index 56bfd7f..21d494d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java
@@ -40,7 +40,7 @@ public abstract class ConnectorConfPanel extends AbstractConnConfPanel<ConnInsta
         super(connInstanceTO);
         this.bundles = bundles;
 
-        LoadableDetachableModel<List<ConnConfProperty>> model = new LoadableDetachableModel<List<ConnConfProperty>>() {
+        model = new LoadableDetachableModel<List<ConnConfProperty>>() {
 
             private static final long serialVersionUID = -2965284931860212687L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0414964f/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
index ab200e0..0869da9 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
@@ -43,7 +43,7 @@ public abstract class ResourceConnConfPanel extends AbstractConnConfPanel<Resour
         super(resourceTO);
         this.createFlag = createFlag;
 
-        LoadableDetachableModel<List<ConnConfProperty>> model = new LoadableDetachableModel<List<ConnConfProperty>>() {
+        model = new LoadableDetachableModel<List<ConnConfProperty>>() {
 
             private static final long serialVersionUID = -2965284931860212687L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0414964f/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
index 45a7a6e..96af22e 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
@@ -183,9 +183,6 @@ public class TopologyITCase extends AbstractConsoleITCase {
         formTester = TESTER.newFormTester("body:toggle:outerObjectsRepeater:0:outer:form:content:form");
         formTester.submit("buttons:next");
 
-        formTester = TESTER.newFormTester("body:toggle:outerObjectsRepeater:0:outer:form:content:form");
-        formTester.submit("buttons:next");
-
         // click on finish to create the external resource 
         TESTER.cleanupFeedbackMessages();
         // ajax event required to retrieve AjaxRequestTarget (used into finish custom event)