You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by cm...@apache.org on 2012/05/21 18:04:09 UTC

[1/2] git commit: WICKET-4537: Made TabbedPanel generic

Updated Branches:
  refs/heads/master fc23eebdf -> 58d90e91e
  refs/heads/wicket-1.5.x dbb5095d7 -> 2cc12ee11


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/2cc12ee1
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2cc12ee1
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2cc12ee1

Branch: refs/heads/wicket-1.5.x
Commit: 2cc12ee116789669c2aedd8bc884229f5a09a1a4
Parents: dbb5095
Author: Carl-Eric Menzel <cm...@wicketbuch.de>
Authored: Mon May 21 17:19:20 2012 +0200
Committer: Carl-Eric Menzel <cm...@wicketbuch.de>
Committed: Mon May 21 17:27:05 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/2cc12ee1/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/2cc12ee1/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/2cc12ee1/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/2cc12ee1/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/2cc12ee1/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>");
+	}
+}