WICKET-6541 small improvements and extended tests

- use covariant for DynamicWizardModel#getActiveStep
- deprecated IDefaultButtonProvider, ButtonBar can take care of default
button itself
- stepIterator() should not return steps with failing condition
- some lambda for conditions


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

Branch: refs/heads/master
Commit: 8068357f3d8bbf8b1b8946599a98924757ba29d0
Parents: f5b2ea2
Author: Sven Meier <svenme...@apache.org>
Authored: Fri Mar 2 11:12:24 2018 +0100
Committer: Sven Meier <svenme...@apache.org>
Committed: Tue Apr 10 22:00:54 2018 +0200

----------------------------------------------------------------------
 .../wizard/IDefaultButtonProvider.java          |  1 +
 .../apache/wicket/extensions/wizard/Wizard.java | 13 ----
 .../extensions/wizard/WizardButtonBar.java      | 59 +++++++++------
 .../wicket/extensions/wizard/WizardModel.java   | 31 ++++----
 .../wizard/dynamic/DynamicWizardModel.java      |  2 +-
 .../extensions/wizard/WizardModelTest.java      | 53 +++++++++++++
 .../wizard/dynamic/DynamicWizardModelTest.java  | 78 ++++++++++++++++++++
 7 files changed, 182 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/8068357f/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/IDefaultButtonProvider.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/IDefaultButtonProvider.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/IDefaultButtonProvider.java
index fabe302..e4bcf89 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/IDefaultButtonProvider.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/IDefaultButtonProvider.java
@@ -32,6 +32,7 @@ import 
org.apache.wicket.markup.html.form.IFormSubmittingComponent;
  * 
  * @author eelcohillenius
  */
+@Deprecated
 public interface IDefaultButtonProvider
 {
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/8068357f/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/Wizard.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/Wizard.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/Wizard.java
index 307c2e2..dc14214 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/Wizard.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/Wizard.java
@@ -20,7 +20,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.feedback.ContainerFeedbackMessageFilter;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.IFormSubmittingComponent;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 import org.apache.wicket.markup.html.panel.Panel;
 
@@ -257,18 +256,6 @@ public class Wizard extends Panel implements 
IWizardModelListener, IWizard
                return new Form<>(id);
        }
 
-       @Override
-       protected void onBeforeRender()
-       {
-               super.onBeforeRender();
-               Component buttonBar = form.get(BUTTONS_ID);
-               if (buttonBar instanceof IDefaultButtonProvider)
-               {
-                       IFormSubmittingComponent defaultButton = 
((IDefaultButtonProvider)buttonBar).getDefaultButton(wizardModel);
-                       form.setDefaultButton(defaultButton);
-               }
-       }
-
        /**
         * Create a new overview bar. Clients can override this method to 
provide a custom bar.
         * 

http://git-wip-us.apache.org/repos/asf/wicket/blob/8068357f/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardButtonBar.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardButtonBar.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardButtonBar.java
index b4362d4..4bd54ef 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardButtonBar.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardButtonBar.java
@@ -16,7 +16,7 @@
  */
 package org.apache.wicket.extensions.wizard;
 
-import org.apache.wicket.markup.html.form.IFormSubmittingComponent;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.panel.Panel;
 
 /**
@@ -31,7 +31,7 @@ import org.apache.wicket.markup.html.panel.Panel;
  * 
  * @author Eelco Hillenius
  */
-public class WizardButtonBar extends Panel implements IDefaultButtonProvider
+public class WizardButtonBar extends Panel
 {
        private static final long serialVersionUID = 1L;
 
@@ -64,83 +64,96 @@ public class WizardButtonBar extends Panel implements 
IDefaultButtonProvider
                add(newFinishButton("finish", wizard));
        }
 
+       @Override
+       protected void onBeforeRender()
+       {
+               super.onBeforeRender();
+
+               WizardButton button = getDefaultButton(wizard.getWizardModel());
+               if (button != null) {
+                       Form<?> form = button.getForm();
+                       if (form != null) {
+                               form.setDefaultButton(button);
+                       }
+               }
+       }
+
        /**
         * @see 
org.apache.wicket.extensions.wizard.IDefaultButtonProvider#getDefaultButton(org.apache.wicket.extensions.wizard.IWizardModel)
         */
-       @Override
-       public IFormSubmittingComponent getDefaultButton(final IWizardModel 
model)
+       public WizardButton getDefaultButton(final IWizardModel model)
        {
                if (model.isNextAvailable())
                {
-                       return (IFormSubmittingComponent)get("next");
+                       return (WizardButton)get("next");
                }
                else if (model.isLastAvailable())
                {
-                       return (IFormSubmittingComponent)get("last");
+                       return (WizardButton)get("last");
                }
                else if (model.isLastStep(model.getActiveStep()))
                {
-                       return (IFormSubmittingComponent)get("finish");
+                       return (WizardButton)get("finish");
                }
                return null;
        }
        
        /**
-        * Creates a new {@link PreviousButton}
+        * Creates a new button for {@link IWizardModel#previous()}.
         * 
-        * @param id the button's markup-id
+        * @param id the button's id
         * @param wizard the {@link IWizard}
         * @return a new {@code PreviousButton}
         */
-       protected PreviousButton newPreviousButton(final String id, final 
IWizard wizard)
+       protected WizardButton newPreviousButton(final String id, final IWizard 
wizard)
        {
                return new PreviousButton(id, wizard);
        }
 
        /**
-        * Creates a new {@link NextButton}
+        * Creates a new button for {@link IWizardModel#next()}.
         * 
-        * @param id the button's markup-id
+        * @param id the button's id
         * @param wizard the {@link IWizard}
         * @return a new {@code NextButton}
         */
-       protected NextButton newNextButton(final String id, final IWizard 
wizard)
+       protected WizardButton newNextButton(final String id, final IWizard 
wizard)
        {
                return new NextButton(id, wizard);
        }
 
        /**
-        * Creates a new {@link LastButton}
+        * Creates a new button for {@link IWizardModel#last()}.
         * 
-        * @param id the button's markup-id
+        * @param id the button's id
         * @param wizard the {@link IWizard}
         * @return a new {@code LastButton}
         */
-       protected LastButton newLastButton(final String id, final IWizard 
wizard)
+       protected WizardButton newLastButton(final String id, final IWizard 
wizard)
        {
                return new LastButton(id, wizard);
        }
 
        /**
-        * Creates a new {@link CancelButton}
+        * Creates a new button for {@link IWizardModel#cancel()}.
         * 
-        * @param id the button's markup-id
+        * @param id the button's id
         * @param wizard the {@link IWizard}
         * @return a new {@code CancelButton}
         */
-       protected CancelButton newCancelButton(final String id, final IWizard 
wizard)
+       protected WizardButton newCancelButton(final String id, final IWizard 
wizard)
        {
                return new CancelButton(id, wizard);
        }
 
        /**
-        * Creates a new {@link FinishButton}
+        * Creates a new button for {@link IWizardModel#finish()}.
         * 
-        * @param id the button's markup-id
+        * @param id the button's id
         * @param wizard the {@link IWizard}
-        * @return a new {@code FinishButton}
+        * @return a new button
         */
-       protected FinishButton newFinishButton(final String id, final IWizard 
wizard)
+       protected WizardButton newFinishButton(final String id, final IWizard 
wizard)
        {
                return new FinishButton(id, wizard);
        }

http://git-wip-us.apache.org/repos/asf/wicket/blob/8068357f/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardModel.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardModel.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardModel.java
index fd88683..8b28dac 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardModel.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardModel.java
@@ -21,8 +21,8 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.wicket.util.io.IClusterable;
 import org.apache.wicket.util.collections.ArrayListStack;
+import org.apache.wicket.util.io.IClusterable;
 
 
 /**
@@ -47,6 +47,7 @@ public class WizardModel extends AbstractWizardModel
        /**
         * Interface for conditional displaying of wizard steps.
         */
+       @FunctionalInterface
        public interface ICondition extends IClusterable
        {
                /**
@@ -61,21 +62,7 @@ public class WizardModel extends AbstractWizardModel
        /**
         * Condition that always evaluates true.
         */
-       public static final ICondition TRUE = new ICondition()
-       {
-               private static final long serialVersionUID = 1L;
-
-               /**
-                * Always returns true.
-                * 
-                * @return True
-                */
-               @Override
-               public boolean evaluate()
-               {
-                       return true;
-               }
-       };
+       public static final ICondition TRUE = (() -> true);
 
        private static final long serialVersionUID = 1L;
 
@@ -258,9 +245,17 @@ public class WizardModel extends AbstractWizardModel
         * @see IWizardModel#stepIterator()
         */
        @Override
-       public final Iterator<IWizardStep> stepIterator()
+       public Iterator<IWizardStep> stepIterator()
        {
-               return steps.iterator();
+               List<IWizardStep> filtered = new ArrayList<>();
+               
+               for (int s = 0; s < steps.size(); s++) {
+                       if (conditions.get(s).evaluate()) {
+                               filtered.add(steps.get(s));
+                       }
+               }
+               
+               return filtered.iterator();
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/8068357f/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/dynamic/DynamicWizardModel.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/dynamic/DynamicWizardModel.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/dynamic/DynamicWizardModel.java
index 25e9ad9..61a671f 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/dynamic/DynamicWizardModel.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/dynamic/DynamicWizardModel.java
@@ -58,7 +58,7 @@ public class DynamicWizardModel extends AbstractWizardModel
         * @see org.apache.wicket.extensions.wizard.IWizardModel#getActiveStep()
         */
        @Override
-       public IWizardStep getActiveStep()
+       public IDynamicWizardStep getActiveStep()
        {
                return activeStep;
        }

http://git-wip-us.apache.org/repos/asf/wicket/blob/8068357f/wicket-extensions/src/test/java/org/apache/wicket/extensions/wizard/WizardModelTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/test/java/org/apache/wicket/extensions/wizard/WizardModelTest.java
 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/wizard/WizardModelTest.java
index 661078a..a350031 100644
--- 
a/wicket-extensions/src/test/java/org/apache/wicket/extensions/wizard/WizardModelTest.java
+++ 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/wizard/WizardModelTest.java
@@ -18,6 +18,7 @@ package org.apache.wicket.extensions.wizard;
 
 import java.util.Iterator;
 
+import org.apache.wicket.extensions.wizard.WizardModel.ICondition;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.Test;
 
@@ -48,4 +49,56 @@ public class WizardModelTest extends WicketTestCase
                        assertEquals(model, step.getWizardModel());
                }
        }
+       
+       @Test
+       public void testWizard()
+       {
+               WizardModel model = new WizardModel();
+               
+               WizardStep step1 = new WizardStep();
+               model.add(step1);
+               
+               WizardStep step2 = new WizardStep();
+               model.add(step2, () -> false);
+               
+               class ConditionWizadStep extends WizardStep implements 
ICondition {
+
+                       @Override
+                       public boolean evaluate()
+                       {
+                               return false;
+                       }
+                       
+               };
+               WizardStep step3 = new ConditionWizadStep();
+               model.add(step3);
+               
+               WizardStep step4 = new WizardStep();
+               model.add(step4);
+
+               model.reset();
+               
+               Iterator<IWizardStep> iterator = model.stepIterator();
+               assertTrue(iterator.hasNext());
+               iterator.next();
+               assertTrue(iterator.hasNext());
+               iterator.next();
+               assertFalse(iterator.hasNext());
+               try {
+                       iterator.next();
+                       fail();
+               } catch (Exception expected) {
+               }
+
+               assertSame(step1, model.getActiveStep());
+               assertTrue(model.isNextAvailable());
+               model.next();
+               assertSame(step4, model.getActiveStep());
+               assertFalse(model.isNextAvailable());
+               try {
+                       model.next();
+                       fail();
+               } catch (Exception expected) {
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/8068357f/wicket-extensions/src/test/java/org/apache/wicket/extensions/wizard/dynamic/DynamicWizardModelTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/test/java/org/apache/wicket/extensions/wizard/dynamic/DynamicWizardModelTest.java
 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/wizard/dynamic/DynamicWizardModelTest.java
new file mode 100644
index 0000000..c5c15b4
--- /dev/null
+++ 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/wizard/dynamic/DynamicWizardModelTest.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.extensions.wizard.dynamic;
+
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.Test;
+
+/**
+ * Test for {@link DynamicWizardModel}.
+ */
+public class DynamicWizardModelTest extends WicketTestCase
+{
+
+       private IDynamicWizardStep step4;
+       
+       @Test
+       public void testDynamicWizard()
+       {
+               DynamicWizardStep step1 = new DynamicWizardStep(null)
+               {
+                       @Override
+                       public boolean isLastStep()
+                       {
+                               return false;
+                       }
+
+                       @Override
+                       public IDynamicWizardStep next()
+                       {
+                               return step4;
+                       }
+               };
+                       
+               step4 = new DynamicWizardStep(step1)
+               {
+                       @Override
+                       public boolean isLastStep()
+                       {
+                               return true;
+                       }
+                       
+                       @Override
+                       public IDynamicWizardStep next()
+                       {
+                               return null;
+                       }
+               };
+               
+               DynamicWizardModel model = new DynamicWizardModel(step1);
+               
+               model.reset();
+               
+               assertSame(step1, model.getActiveStep());
+               assertTrue(model.isNextAvailable());
+               model.next();
+               assertSame(step4, model.getActiveStep());
+               assertFalse(model.isNextAvailable());
+               try {
+                       model.next();
+                       fail();
+               } catch (Exception expected) {
+               }
+       }
+}

Reply via email to