[SYNCOPE-1029] fix + improvement for wizard management into a modal window 
showing footer bar


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

Branch: refs/heads/master
Commit: 454af14234dda2dd64b67924322c20156df72afd
Parents: bbb05c5
Author: fmartelli <fabio.marte...@gmail.com>
Authored: Wed Mar 1 09:33:56 2017 +0100
Committer: fmartelli <fabio.marte...@gmail.com>
Committed: Wed Mar 1 09:34:25 2017 +0100

----------------------------------------------------------------------
 .../client/console/panels/ListViewPanel.java    |  8 +++++
 .../markup/html/bootstrap/dialog/BaseModal.java | 30 +++++++++++++---
 .../client/console/wizards/WizardMgtPanel.java  |  9 +++++
 .../resources/ResourceProvisionPanel.java       | 19 ++++++++--
 .../META-INF/resources/css/syncopeConsole.css   | 38 ++++++++++++++++++--
 .../client/console/panels/CoreLogPanel.html     |  2 +-
 .../client/console/wizards/AjaxWizard.html      |  1 +
 .../syncope/fit/console/TopologyITCase.java     |  8 ++---
 8 files changed, 101 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/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 94ed492..e015621 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
@@ -372,6 +372,11 @@ public abstract class ListViewPanel<T extends 
Serializable> extends WizardMgtPan
                 }
 
                 @Override
+                protected void customActionCallback(final AjaxRequestTarget 
target) {
+                    Builder.this.customActionCallback(target);
+                }
+
+                @Override
                 protected void customActionOnFinishCallback(final 
AjaxRequestTarget target) {
                     Builder.this.customActionOnFinishCallback(target);
                 }
@@ -383,6 +388,9 @@ public abstract class ListViewPanel<T extends Serializable> 
extends WizardMgtPan
             };
         }
 
+        protected void customActionCallback(final AjaxRequestTarget target) {
+        }
+
         protected void customActionOnCancelCallback(final AjaxRequestTarget 
target) {
         }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
index e63d69a..a5716e6 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java
@@ -21,7 +21,6 @@ package 
org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.behavior.Draggable;
 import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.behavior.DraggableConfig;
-import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.behavior.Resizable;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
@@ -47,6 +46,7 @@ import org.slf4j.LoggerFactory;
 import org.apache.syncope.client.console.panels.SubmitableModalPanel;
 import 
org.apache.syncope.client.console.wicket.ajax.form.IndicatorModalCloseBehavior;
 import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.event.IEvent;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 
@@ -79,6 +79,8 @@ public class BaseModal<T extends Serializable> extends 
Modal<T> {
 
     private AjaxEventBehavior closeBehavior;
 
+    private WebMarkupContainer footer;
+
     public BaseModal(final String id) {
         super(id);
 
@@ -101,8 +103,7 @@ public class BaseModal<T extends Serializable> extends 
Modal<T> {
         components = new ArrayList<>();
 
         // Note: not adding this would imply adding 
WebjarsJavaScriptResourceReference about JQuery resizable and mouse
-        add(new Resizable().withChildSelector(".modal-content"));
-
+        // add(new Resizable().withChildSelector(".modal-content"));
         // Note: not adding this would imply adding of 
WebjarsJavaScriptResourceReference about JQuery draggable
         add(new Draggable(new 
DraggableConfig().withHandle(".modal-header").withCursor("move")));
 
@@ -229,7 +230,7 @@ public class BaseModal<T extends Serializable> extends 
Modal<T> {
         final WebMarkupContainer dialog = (WebMarkupContainer) 
this.get("dialog");
         dialog.setMarkupId(this.getId());
 
-        final WebMarkupContainer footer = (WebMarkupContainer) 
this.get("dialog:footer");
+        footer = (WebMarkupContainer) this.get("dialog:footer");
         footer.addOrReplace(new ListView<Component>("inputs", components) {
 
             private static final long serialVersionUID = 4949588177564901031L;
@@ -238,7 +239,7 @@ public class BaseModal<T extends Serializable> extends 
Modal<T> {
             protected void populateItem(final ListItem<Component> item) {
                 item.add(item.getModelObject());
             }
-        }.setOutputMarkupId(true));
+        }.setOutputMarkupId(true)).setOutputMarkupId(true);
     }
 
     /**
@@ -272,6 +273,25 @@ public class BaseModal<T extends Serializable> extends 
Modal<T> {
         }
     }
 
+    public static class ChangeFooterVisibilityEvent extends ModalEvent {
+
+        private static final long serialVersionUID = -6157576856659866343L;
+
+        public ChangeFooterVisibilityEvent(final AjaxRequestTarget target) {
+            super(target);
+        }
+    }
+
+    @Override
+    public void onEvent(final IEvent<?> event) {
+        if (event.getPayload() instanceof ChangeFooterVisibilityEvent) {
+            if (BaseModal.this.footer != null) {
+                final AjaxRequestTarget target = 
ChangeFooterVisibilityEvent.class.cast(event.getPayload()).getTarget();
+                
target.add(BaseModal.this.footer.setEnabled(!BaseModal.this.footer.isEnabled()));
+            }
+        }
+    }
+
     //--------------------------------------------------------
     // Reqired for SYNCOPE-846
     //--------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
index 6c6cf0d..92bd5f9 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
@@ -211,6 +211,7 @@ public abstract class WizardMgtPanel<T extends 
Serializable> extends Panel imple
                     fragment.add(Component.class.cast(modalPanel));
                     container.addOrReplace(fragment);
                 }
+                customActionCallback(target);
             } else if (event.getPayload() instanceof 
AjaxWizard.NewItemCancelEvent) {
                 if (wizardInModal) {
                     modal.close(target);
@@ -357,6 +358,14 @@ public abstract class WizardMgtPanel<T extends 
Serializable> extends Panel imple
     }
 
     /**
+     * Custom action to perform on create/edit action callback.
+     *
+     * @param target Ajax request target.
+     */
+    protected void customActionCallback(final AjaxRequestTarget target) {
+    }
+    
+    /**
      * Custom action to perform on close callback on finish event.
      *
      * @param target Ajax request target.

http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/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 fbe4907..1264c7a 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
@@ -190,15 +190,27 @@ public class ResourceProvisionPanel extends 
AbstractModalPanel<Serializable> {
             }
 
             @Override
+            protected void customActionCallback(final AjaxRequestTarget 
target) {
+                // change modal foter visibility
+                send(ResourceProvisionPanel.this, Broadcast.BUBBLE, new 
BaseModal.ChangeFooterVisibilityEvent(target));
+            }
+
+            @Override
             protected void customActionOnCancelCallback(final 
AjaxRequestTarget target) {
                 
ResourceProvisionPanel.this.aboutRealmProvison.setVisible(true);
                 target.add(ResourceProvisionPanel.this.aboutRealmProvison);
+
+                // change modal foter visibility
+                send(ResourceProvisionPanel.this, Broadcast.BUBBLE, new 
BaseModal.ChangeFooterVisibilityEvent(target));
             }
 
             @Override
             protected void customActionOnFinishCallback(final 
AjaxRequestTarget target) {
                 
ResourceProvisionPanel.this.aboutRealmProvison.setVisible(true);
                 target.add(ResourceProvisionPanel.this.aboutRealmProvison);
+
+                // change modal foter visibility
+                send(ResourceProvisionPanel.this, Broadcast.BUBBLE, new 
BaseModal.ChangeFooterVisibilityEvent(target));
             }
         };
 
@@ -314,7 +326,7 @@ public class ResourceProvisionPanel extends 
AbstractModalPanel<Serializable> {
                         if (connObjectKeyCount != 1) {
                             throw new RuntimeException(provision.getAnyType() 
+ ": "
                                     + new 
StringResourceModel("connObjectKeyValidation", ResourceProvisionPanel.this).
-                                            getString());
+                                    getString());
                         }
                     }
                 }
@@ -335,7 +347,10 @@ public class ResourceProvisionPanel extends 
AbstractModalPanel<Serializable> {
     public void onEvent(final IEvent<?> event) {
         if (event.getPayload() instanceof AjaxWizard.NewItemActionEvent) {
             aboutRealmProvison.setVisible(false);
-            ((AjaxWizard.NewItemEvent) 
event.getPayload()).getTarget().add(aboutRealmProvison);
+            final AjaxRequestTarget target = ((AjaxWizard.NewItemEvent) 
event.getPayload()).getTarget();
+            target.add(aboutRealmProvison);
+            // change modal foter visibility
+            send(ResourceProvisionPanel.this, Broadcast.BUBBLE, new 
BaseModal.ChangeFooterVisibilityEvent(target));
         }
 
         super.onEvent(event);

http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css 
b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
index 958a06c..0ad7824 100644
--- 
a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
+++ 
b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
@@ -318,8 +318,9 @@ a.help span a {
 }
 
 .modal-body {
-  max-height: 500px;
+  max-height: 550px;
   overflow-y: auto;
+  overflow-x: hidden;
 }
 
 .modal {
@@ -387,10 +388,14 @@ div.wizard-view div.wizard-view{
   height: 360px !important;
 }
 
+div.modal-body div.box-body div.wizard-buttons {
+  bottom: 30px;
+}
+
 .wizard-buttons {
   padding: 10px 0px 5px 0px;
   position: absolute;
-  bottom: 30px;
+  bottom: 4px;
   width: 100%;
 }
 
@@ -1070,3 +1075,32 @@ END - EVENTS
 fieldset.input-group {
   width: 100%;
 }
+
+div.modal-content > div.modal-header {
+  background-color: #f0f0f0;
+  height: 64px;
+}
+
+div.modal-content > div.modal-footer {
+  background-color: #f0f0f0;
+  height: 64px;
+}
+
+.modal-body .box-body div.background-footer {
+  display: none !important;
+}
+
+div.background-footer {
+  background-color: #f0f0f0;
+  display: block;
+  height: 64px;
+  margin-bottom: -15px;
+  margin-left: -30px;
+  margin-top: -25px;
+  width: 1300px;
+}
+
+.logviewer-btn {
+  padding: 0px 16px 20px 0px;
+  float: right;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html
index ccf729f..076f4c7 100644
--- 
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html
@@ -20,7 +20,7 @@ under the License.
   <wicket:panel>
     <span wicket:id="loggerContainer">
       <div class="logs">
-        <div class="pull-right">
+        <div class="logviewer-btn">
           <button class="btn btn-primary" wicket:id="viewer">
             <span class="glyphicon glyphicon-list-alt"></span> Log Viewer
           </button>

http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AjaxWizard.html
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AjaxWizard.html
 
b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AjaxWizard.html
index 96f296e..7bd13e6 100644
--- 
a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AjaxWizard.html
+++ 
b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AjaxWizard.html
@@ -38,6 +38,7 @@ under the License.
           </div>
         </form>
       </div>
+      <div class="background-footer"></div>
       <span wicket:id="outerObjectsRepeater">
         <div wicket:id="outer"/>
       </span>

http://git-wip-us.apache.org/repos/asf/syncope/blob/454af142/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 96af22e..97dc6eb 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
@@ -260,10 +260,10 @@ public class TopologyITCase extends AbstractConsoleITCase 
{
         
TESTER.assertComponent("body:toggle:outerObjectsRepeater:3:outer:form:content:provision:"
                 + 
"container:content:wizard:form:view:mapping:mappingContainer:mappings:0", 
WebMarkupContainer.class);
 
-        TESTER.executeAjaxEvent(
-                
"body:toggle:outerObjectsRepeater:3:outer:form:content:provision:container:content:"
-                + "wizard:form:buttons:cancel", Constants.ON_CLICK);
-
+        formTester = TESTER.newFormTester(
+                
"body:toggle:outerObjectsRepeater:3:outer:form:content:provision:container:content:wizard:form");
+        formTester.submit("buttons:cancel");
+        
         
TESTER.clickLink("body:toggle:outerObjectsRepeater:3:outer:dialog:footer:buttons:0:button");
 
         TESTER.cleanupFeedbackMessages();

Reply via email to