WICKET-4537: Made TabbedPanel generic

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

Branch: refs/heads/master
Commit: 58d90e91e1215d4f72a69e0848840b69b7fcd827
Parents: fc23eeb
Author: Carl-Eric Menzel <[email protected]>
Authored: Mon May 21 17:19:20 2012 +0200
Committer: Carl-Eric Menzel <[email protected]>
Committed: Mon May 21 17:19:41 2012 +0200

----------------------------------------------------------------------
 .../extensions/markup/html/tabs/TabbedPanel.java   |   15 ++-
 wicket-extensions/src/test/java/.gitignore         |    1 +
 .../markup/html/tabs/TabbedPanelTest$TestPage.html |    5 +
 .../html/tabs/TabbedPanelTest$TestPanel.html       |    3 +
 .../markup/html/tabs/TabbedPanelTest.java          |  108 +++++++++++++++
 5 files changed, 126 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/58d90e91/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java
index 751cf65..8fa9d50 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java
@@ -68,15 +68,18 @@ import org.apache.wicket.util.lang.Args;
  * @see org.apache.wicket.extensions.markup.html.tabs.ITab
  * 
  * @author Igor Vaynberg (ivaynberg at apache dot org)
+ * @param <T>
+ *            The type of panel to be used for this component's tabs. Just use 
{@link ITab} if you
+ *            have no special needs here.
  */
-public class TabbedPanel extends Panel
+public class TabbedPanel<T extends ITab> extends Panel
 {
        private static final long serialVersionUID = 1L;
 
        /** id used for child panels */
        public static final String TAB_PANEL_ID = "panel";
 
-       private final List<? extends ITab> tabs;
+       private final List<T> tabs;
 
        private transient Boolean[] tabsVisibilityCache;
 
@@ -88,7 +91,7 @@ public class TabbedPanel extends Panel
         * @param tabs
         *            list of ITab objects used to represent tabs
         */
-       public TabbedPanel(final String id, final List<? extends ITab> tabs)
+       public TabbedPanel(final String id, final List<T> tabs)
        {
                super(id, new Model<Integer>(-1));
 
@@ -117,7 +120,7 @@ public class TabbedPanel extends Panel
                        protected void populateItem(final LoopItem item)
                        {
                                final int index = item.getIndex();
-                               final ITab tab = 
TabbedPanel.this.tabs.get(index);
+                               final T tab = TabbedPanel.this.tabs.get(index);
 
                                final WebMarkupContainer titleLink = 
newLink("link", index);
 
@@ -251,7 +254,7 @@ public class TabbedPanel extends Panel
        /**
         * @return list of tabs that can be used by the user to 
add/remove/reorder tabs in the panel
         */
-       public final List<? extends ITab> getTabs()
+       public final List<T> getTabs()
        {
                return tabs;
        }
@@ -347,7 +350,7 @@ public class TabbedPanel extends Panel
                else
                {
                        // show panel from selected tab
-                       ITab tab = tabs.get(index);
+                       T tab = tabs.get(index);
                        component = tab.getPanel(TAB_PANEL_ID);
                        if (component == null)
                        {

http://git-wip-us.apache.org/repos/asf/wicket/blob/58d90e91/wicket-extensions/src/test/java/.gitignore
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/test/java/.gitignore 
b/wicket-extensions/src/test/java/.gitignore
new file mode 100644
index 0000000..72bcd0d
--- /dev/null
+++ b/wicket-extensions/src/test/java/.gitignore
@@ -0,0 +1 @@
+log4j.properties

http://git-wip-us.apache.org/repos/asf/wicket/blob/58d90e91/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanelTest$TestPage.html
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanelTest$TestPage.html
 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanelTest$TestPage.html
new file mode 100644
index 0000000..6de956a
--- /dev/null
+++ 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanelTest$TestPage.html
@@ -0,0 +1,5 @@
+<html>
+<body>
+    <div wicket:id="tabpanel"></div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/58d90e91/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanelTest$TestPanel.html
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanelTest$TestPanel.html
 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanelTest$TestPanel.html
new file mode 100644
index 0000000..f08475e
--- /dev/null
+++ 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanelTest$TestPanel.html
@@ -0,0 +1,3 @@
+<wicket:panel>
+    <span wicket:id="label"></span>
+</wicket:panel>

http://git-wip-us.apache.org/repos/asf/wicket/blob/58d90e91/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanelTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanelTest.java
 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanelTest.java
new file mode 100644
index 0000000..2d22c0d
--- /dev/null
+++ 
b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanelTest.java
@@ -0,0 +1,108 @@
+/*
+ * 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.markup.html.tabs;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
+import org.junit.Test;
+
+public class TabbedPanelTest extends WicketTestCase
+{
+       public static class TestPage extends WebPage
+       {
+               public TabbedPanel<ITab> tabbedPanel;
+
+               public TestPage()
+               {
+                       List<ITab> defaultTabs = new ArrayList<ITab>();
+                       defaultTabs.add(new AbstractTab(Model.of("default 1"))
+                       {
+
+                               @Override
+                               public WebMarkupContainer getPanel(String 
panelId)
+                               {
+                                       return new TestPanel(panelId, "default 
1");
+                               }
+                       });
+                       defaultTabs.add(new AbstractTab(Model.of("default 2"))
+                       {
+
+                               @Override
+                               public WebMarkupContainer getPanel(String 
panelId)
+                               {
+                                       return new TestPanel(panelId, "default 
2");
+                               }
+                       });
+                       tabbedPanel = new TabbedPanel<ITab>("tabpanel", 
defaultTabs);
+                       add(tabbedPanel);
+               }
+       }
+
+       public static class TestPanel extends Panel
+       {
+               public TestPanel(String id, String panelTestId)
+               {
+                       super(id);
+                       this.add(new Label("label", panelTestId));
+               }
+       }
+
+       @Test
+       public void renderDefaultTabsOnly() throws Exception
+       {
+               tester.startPage(TestPage.class);
+               tester.assertContains("<span wicket:id=\"title\">default 
1</span></a>");
+               tester.assertContains("<span wicket:id=\"label\">default 
1</span>");
+               tester.assertContains("<span wicket:id=\"title\">default 
2</span></a>");
+               tester.clickLink("tabpanel:tabs-container:tabs:1:link");
+               tester.assertContains("<span wicket:id=\"label\">default 
2</span>");
+       }
+
+       @Test
+       public void renderAdditionalTabs() throws Exception
+       {
+               TestPage page = tester.startPage(TestPage.class);
+               page.tabbedPanel.getTabs().add(new AbstractTab(Model.of("added 
1"))
+               {
+                       @Override
+                       public WebMarkupContainer getPanel(String panelId)
+                       {
+                               return new TestPanel(panelId, "added 1");
+                       }
+               });
+               // the additional tab isn't rendered yet
+               tester.assertContainsNot("<span wicket:id=\"title\">added 
1</span></a>");
+               tester.assertContainsNot("<span wicket:id=\"label\">added 
1</span>");
+
+               // now its title is visible, but the contents not
+               tester.clickLink("tabpanel:tabs-container:tabs:1:link");
+               tester.assertContains("<span wicket:id=\"title\">added 
1</span></a>");
+               tester.assertContainsNot("<span wicket:id=\"label\">added 
1</span>");
+
+               // now the entire panel should be there
+               tester.clickLink("tabpanel:tabs-container:tabs:2:link");
+               tester.assertContains("<span wicket:id=\"title\">added 
1</span></a>");
+               tester.assertContains("<span wicket:id=\"label\">added 
1</span>");
+       }
+}

Reply via email to