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>"); + } +}
