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 2017/08/17 13:31:34 UTC

syncope git commit: [SYNCOPE-1176] provides action toggle panel for the list view panel

Repository: syncope
Updated Branches:
  refs/heads/2_0_X 36f2537e7 -> 31e884a9f


[SYNCOPE-1176] provides action toggle panel for the list view panel


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

Branch: refs/heads/2_0_X
Commit: 31e884a9fda21702fb04b5ecfa711b50de6d7452
Parents: 36f2537
Author: fmartelli <fa...@gmail.com>
Authored: Thu Aug 17 15:30:42 2017 +0200
Committer: fmartelli <fa...@gmail.com>
Committed: Thu Aug 17 15:30:42 2017 +0200

----------------------------------------------------------------------
 .../client/console/panels/ListViewPanel.java    | 49 +++++++++++++++++++-
 .../console/wicket/markup/html/form/Action.java |  5 ++
 .../html/form/ActionLinksTogglePanel.java       |  3 ++
 .../wicket/markup/html/form/ActionPanel.java    |  3 ++
 .../wicket/markup/html/form/ActionsPanel.java   | 14 ++++++
 .../resources/ResourceProvisionPanel.java       | 15 +++++-
 .../resources/ResourceProvisionPanel.html       |  3 +-
 .../syncope/fit/console/TopologyITCase.java     | 18 ++++---
 8 files changed, 99 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/31e884a9/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
index e028cc3..6dce4eb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
@@ -29,13 +29,17 @@ import java.util.List;
 import org.apache.commons.collections4.IteratorUtils;
 import org.apache.commons.collections4.Predicate;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormChoiceComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksTogglePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
+import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.util.lang.PropertyResolver;
 import org.apache.wicket.event.IEvent;
@@ -58,6 +62,8 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
 
     private static final Logger LOG = LoggerFactory.getLogger(ListViewPanel.class);
 
+    private ActionLinksTogglePanel<T> togglePanel;
+
     public enum CheckAvailability {
 
         /**
@@ -105,6 +111,8 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
         super(id, wizardInModal);
         setOutputMarkupId(true);
 
+        togglePanel = getTogglePanel();
+
         this.check = Model.of(check);
 
         addInnerObject(new Label("caption", new ResourceModel("listview.caption", StringUtils.EMPTY)));
@@ -176,10 +184,36 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
                     @Override
                     protected void populateItem(final ListItem<String> fieldItem) {
                         fieldItem.add(getValueComponent(fieldItem.getModelObject(), bean));
+                        if (togglePanel != null) {
+                            fieldItem.add(new AttributeModifier("style", "cursor: pointer;"));
+                            fieldItem.add(new AjaxEventBehavior(Constants.ON_CLICK) {
+
+                                private static final long serialVersionUID = -9027652037484739586L;
+
+                                @Override
+                                protected String findIndicatorId() {
+                                    return StringUtils.EMPTY;
+                                }
+
+                                @Override
+                                protected void onEvent(final AjaxRequestTarget target) {
+                                    togglePanel.toggleWithContent(
+                                            target,
+                                            actions.cloneWithLabels("actions", new Model<>(bean)),
+                                            bean);
+                                }
+                            });
+                        }
                     }
                 };
+
                 beanItem.add(fields);
-                beanItem.add(actions.clone("actions", new Model<>(bean)));
+
+                if (togglePanel == null) {
+                    beanItem.add(actions.clone("actions", new Model<>(bean)));
+                } else {
+                    beanItem.add(new ActionsPanel<>("actions", new Model<>(bean)).setVisible(false).setEnabled(false));
+                }
             }
         };
         beans.setOutputMarkupId(true);
@@ -402,9 +436,18 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
                 protected void customActionOnCancelCallback(final AjaxRequestTarget target) {
                     Builder.this.customActionOnCancelCallback(target);
                 }
+
+                @Override
+                protected ActionLinksTogglePanel<T> getTogglePanel() {
+                    return Builder.this.getTogglePanel();
+                }
             };
         }
 
+        protected ActionLinksTogglePanel<T> getTogglePanel() {
+            return null;
+        }
+
         protected void customActionCallback(final AjaxRequestTarget target) {
         }
 
@@ -478,4 +521,8 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
             return items;
         }
     }
+
+    protected ActionLinksTogglePanel<T> getTogglePanel() {
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/31e884a9/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/Action.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/Action.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/Action.java
index 15d99dd..98d2556 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/Action.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/Action.java
@@ -104,6 +104,11 @@ public final class Action<T extends Serializable> implements Serializable {
         this.visibleLabel = false;
         return this;
     }
+    
+    public Action<T> showLabel() {
+        this.visibleLabel = true;
+        return this;
+    }
 
     public boolean isVisibleLabel() {
         return visibleLabel;

http://git-wip-us.apache.org/repos/asf/syncope/blob/31e884a9/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java
index fb8ab83..aac5942 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksTogglePanel.java
@@ -26,6 +26,7 @@ import org.apache.syncope.client.console.commons.status.StatusBean;
 import org.apache.syncope.client.console.panels.TogglePanel;
 import org.apache.syncope.client.console.policies.PolicyRuleDirectoryPanel.PolicyRuleWrapper;
 import org.apache.syncope.client.console.reports.ReportletDirectoryPanel.ReportletWrapper;
+import org.apache.syncope.client.console.wizards.resources.ResourceProvision;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.common.lib.to.GroupTO;
@@ -109,6 +110,8 @@ public class ActionLinksTogglePanel<T extends Serializable> extends TogglePanel<
         } else if (modelObject instanceof JobTO) {
             header = ((JobTO) modelObject).getRefKey() == null
                     ? ((JobTO) modelObject).getRefDesc() : ((JobTO) modelObject).getRefKey();
+        } else if (modelObject instanceof ResourceProvision) {
+            header = ((ResourceProvision) modelObject).getAnyType();
         } else {
             header = new ResourceModel("actions", StringUtils.EMPTY).getObject();
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/31e884a9/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.java
index 8eb3135..73fdbf3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.java
@@ -185,6 +185,9 @@ public final class ActionPanel<T extends Serializable> extends Panel {
             case DELETE:
             case CREATE:
             case MEMBERS:
+            case MAPPING:
+            case SET_LATEST_SYNC_TOKEN:
+            case REMOVE_SYNC_TOKEN:
             case CLAIM:
                 send(this, Broadcast.BUBBLE, new ActionLinksTogglePanel.ActionLinkToggleCloseEventPayload(target));
                 break;

http://git-wip-us.apache.org/repos/asf/syncope/blob/31e884a9/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.java
index 71d342c..c708624 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.java
@@ -82,6 +82,20 @@ public final class ActionsPanel<T extends Serializable> extends Panel {
         return panel;
     }
 
+    /**
+     * Use this with toggle panels.
+     * @param componentId Component Id.
+     * @param model Model.
+     * @return Actions panel.
+     */
+    public ActionsPanel<T> cloneWithLabels(final String componentId, final IModel<T> model) {
+        final ActionsPanel<T> panel = new ActionsPanel<>(componentId, model);
+        for (Action<T> action : actions) {
+            panel.actions.add(action.showLabel());
+        }
+        return panel;
+    }
+
     public boolean isEmpty() {
         return this.actions.isEmpty();
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/31e884a9/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
index be20666..f9fea37 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java
@@ -76,6 +76,8 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> {
 
     private final AjaxLink<ResourceProvision> addAjaxLink;
 
+    protected ActionLinksTogglePanel<ResourceProvision> actionTogglePanel;
+
     public ResourceProvisionPanel(
             final BaseModal<Serializable> modal,
             final ResourceTO resourceTO,
@@ -87,6 +89,9 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> {
 
         setOutputMarkupId(true);
 
+        actionTogglePanel = new ActionLinksTogglePanel<>("toggle", pageRef);
+        add(actionTogglePanel);
+
         wizard = new ProvisionWizardBuilder(resourceTO, pageRef);
 
         final ListViewPanel.Builder<ResourceProvision> builder = new ListViewPanel.Builder<ResourceProvision>(
@@ -134,6 +139,11 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> {
                 // change modal footer visibility
                 send(ResourceProvisionPanel.this, Broadcast.BUBBLE, new BaseModal.ChangeFooterVisibilityEvent(target));
             }
+
+            @Override
+            protected ActionLinksTogglePanel<ResourceProvision> getTogglePanel() {
+                return actionTogglePanel;
+            }
         };
 
         provisions = new ArrayList<>();
@@ -234,6 +244,8 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> {
 
             @Override
             public void onClick(final AjaxRequestTarget target) {
+                send(ResourceProvisionPanel.this, Broadcast.BREADTH,
+                        new ActionLinksTogglePanel.ActionLinkToggleCloseEventPayload(target));
                 objectTypeTogglePanel.setHeaderLabel(target);
                 objectTypeTogglePanel.toggle(target, true);
             }
@@ -348,8 +360,7 @@ public class ResourceProvisionPanel extends AbstractModalPanel<Serializable> {
     }
 
     private void checkAddButton(final String adminRealm) {
-        boolean enabled =
-                SyncopeConsoleSession.get().owns(StandardEntitlement.RESOURCE_UPDATE, adminRealm)
+        boolean enabled = SyncopeConsoleSession.get().owns(StandardEntitlement.RESOURCE_UPDATE, adminRealm)
                 && !getAnyTypes().getObject().isEmpty();
         addAjaxLink.setVisible(enabled);
         objectTypeTogglePanel.setEnabled(enabled);

http://git-wip-us.apache.org/repos/asf/syncope/blob/31e884a9/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.html
index 1998775..f82b16f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.html
@@ -17,8 +17,9 @@ specific language governing permissions and limitations
 under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-    <wicket:extend>
+  <wicket:extend>
     <span wicket:id="provision">[PROVISION]</span>
     <span wicket:id="objectTypeToggle"/>
+    <div wicket:id="toggle"/>
   </wicket:extend>
 </html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/31e884a9/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 67afad7..48963a2 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
@@ -112,8 +112,11 @@ public class TopologyITCase extends AbstractConsoleITCase {
         TESTER.executeAjaxEvent(component.getPageRelativePath() + ":res", Constants.ON_CLICK);
         TESTER.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:provision");
 
-        TESTER.clickLink("body:toggle:outerObjectsRepeater:3:outer:form:content:provision:container:"
-                + "content:group:beans:0:actions:actionRepeater:0:action:action");
+        TESTER.executeAjaxEvent("body:toggle:outerObjectsRepeater:3:outer:form:content:provision:container:"
+                + "content:group:beans:0:fields:0", Constants.ON_CLICK);
+        
+        TESTER.clickLink("body:toggle:outerObjectsRepeater:3:outer:form:content:toggle:container:content:"
+                + "togglePanelContainer:container:actions:actions:actionRepeater:0:action:action");
 
         FormTester formTester = TESTER.newFormTester(
                 "body:toggle:outerObjectsRepeater:3:outer:form:content:provision:container:content:wizard:form");
@@ -232,11 +235,12 @@ public class TopologyITCase extends AbstractConsoleITCase {
         TESTER.assertNoErrorMessage();
         TESTER.assertInfoMessages("Operation executed successfully");
 
-        TESTER.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:provision");
-
-        TESTER.clickLink("body:toggle:outerObjectsRepeater:3:outer:form:content:provision:container:"
-                + "content:group:beans:0:actions:actionRepeater:0:action:action");
-
+        TESTER.executeAjaxEvent("body:toggle:outerObjectsRepeater:3:outer:form:content:provision:container:"
+                + "content:group:beans:0:fields:0", Constants.ON_CLICK);
+        
+        TESTER.clickLink("body:toggle:outerObjectsRepeater:3:outer:form:content:toggle:container:content:"
+                + "togglePanelContainer:container:actions:actions:actionRepeater:0:action:action");
+        
         formTester = TESTER.newFormTester(
                 "body:toggle:outerObjectsRepeater:3:outer:form:content:provision:container:content:wizard:form");
         formTester.submit("buttons:next");