You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2012/06/28 18:57:23 UTC
git commit: WICKET-4593 reverted changes which lead to
ITab#getPanel() created multiple times
Updated Branches:
refs/heads/master ee6a79871 -> f4fca19c0
WICKET-4593 reverted changes which lead to ITab#getPanel() created multiple times
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/f4fca19c
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f4fca19c
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f4fca19c
Branch: refs/heads/master
Commit: f4fca19c0783381a058910e91cd573aae094217d
Parents: ee6a798
Author: svenmeier <sv...@apache.org>
Authored: Thu Jun 28 18:56:41 2012 +0200
Committer: svenmeier <sv...@apache.org>
Committed: Thu Jun 28 18:56:41 2012 +0200
----------------------------------------------------------------------
.../extensions/markup/html/tabs/TabbedPanel.java | 124 +++------------
.../markup/html/tabs/TabbedPanelTest.java | 12 +-
2 files changed, 32 insertions(+), 104 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/f4fca19c/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 fa8ac71..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
@@ -37,6 +37,9 @@ import org.apache.wicket.util.lang.Args;
* TabbedPanel component represets a panel with tabs that are used to switch between different
* content panels inside the TabbedPanel panel.
* <p>
+ * <b>Note:</b> When the currently selected tab is replaced by changing the underlying list of tabs,
+ * the change is not picked up unless a call is made to {@link #setSelectedTab(int)}.
+ * <p>
* Example:
*
* <pre>
@@ -90,22 +93,7 @@ public class TabbedPanel<T extends ITab> extends Panel
*/
public TabbedPanel(final String id, final List<T> tabs)
{
- this(id, tabs, null);
- }
-
- /**
- * Constructor
- *
- * @param id
- * component id
- * @param tabs
- * list of ITab objects used to represent tabs
- * @param model
- * model holding the selected tab index OR {@code -1}
- */
- public TabbedPanel(final String id, final List<T> tabs, IModel<Integer> model)
- {
- super(id, model);
+ super(id, new Model<Integer>(-1));
this.tabs = Args.notNull(tabs, "tabs");
@@ -149,61 +137,6 @@ public class TabbedPanel<T extends ITab> extends Panel
}
/**
- * Get the model.
- *
- * @return model
- */
- @SuppressWarnings("unchecked")
- public final IModel<Integer> getModel()
- {
- return (IModel<Integer>)getDefaultModel();
- }
-
- /**
- * Get the model object.
- *
- * @return model object
- */
- public final Integer getModelObject()
- {
- return getModel().getObject();
- }
-
- /**
- * Set the model.
- *
- * @param model
- */
- public final void setModel(IModel<Integer> model)
- {
- setDefaultModel(model);
- }
-
- /**
- * Set the model object.
- *
- * @param object
- * model object
- */
- public final void setModelObject(Integer object)
- {
- setDefaultModelObject(object);
- }
-
- @Override
- protected IModel<?> initModel()
- {
- IModel<?> model = super.initModel();
-
- if (model == null)
- {
- model = new Model<Integer>(new Integer(-1));
- }
-
- return model;
- }
-
- /**
* Generates the container for all tabs. The default container automatically adds the css
* <code>class</code> attribute based on the return value of {@link #getTabContainerCssClass()}
*
@@ -274,36 +207,37 @@ public class TabbedPanel<T extends ITab> extends Panel
@Override
protected void onBeforeRender()
{
- int index = getSelectedTab();
-
- if (index == -1 || isTabVisible(index) == false)
+ if (tabs.size() == 0)
+ {
+ // force an empty container to be created every time if we have no tabs
+ setSelectedTab(0);
+ }
+ else if ((getSelectedTab() == -1) || (isTabVisible(getSelectedTab()) == false))
{
// find first visible selected tab
- index = 0;
+ int selected = 0;
for (int i = 0; i < tabs.size(); i++)
{
if (isTabVisible(i))
{
- index = i;
+ selected = i;
break;
}
}
- if (index == tabs.size())
+ if (selected == tabs.size())
{
/*
* none of the tabs are selected...
+ *
+ * we do not need to do anything special because the check in setSelectedTab() will
+ * replace the current tab panel with an empty one
*/
- index = -1;
- }
- else
- {
- setModelObject(index);
+ selected = 0;
}
- }
- // updating the tab will do no harm if the index hasn't changed
- updateTab(index);
+ setSelectedTab(selected);
+ }
super.onBeforeRender();
}
@@ -397,25 +331,18 @@ public class TabbedPanel<T extends ITab> extends Panel
* index of the tab to select
* @return this for chaining
*/
- public TabbedPanel<T> setSelectedTab(int index)
+ public TabbedPanel setSelectedTab(final int index)
{
- if (index < 0 || index >= tabs.size())
+ if ((index < 0) || ((index >= tabs.size()) && (index > 0)))
{
throw new IndexOutOfBoundsException();
}
- setModelObject(index);
-
- updateTab(index);
+ setDefaultModelObject(index);
- return this;
- }
-
- private void updateTab(int index)
- {
final Component component;
- if (index == -1 || !isTabVisible(index))
+ if ((tabs.size() == 0) || !isTabVisible(index))
{
// no tabs or the currently selected tab is not visible
component = new WebMarkupContainer(TAB_PANEL_ID);
@@ -423,13 +350,12 @@ public class TabbedPanel<T extends ITab> 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)
{
throw new WicketRuntimeException("ITab.getPanel() returned null. TabbedPanel [" +
getPath() + "] ITab index [" + index + "]");
-
}
}
@@ -443,6 +369,8 @@ public class TabbedPanel<T extends ITab> extends Panel
}
addOrReplace(component);
+
+ return this;
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/f4fca19c/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
index 9acbd13..a220375 100644
--- 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
@@ -90,7 +90,7 @@ public class TabbedPanelTest extends WicketTestCase
tester.assertContainsNot("<span wicket:id=\"label\">default 2</span>");
tester.assertContains("<!-- no panel -->");
- assertEquals(Integer.valueOf(-1), page.tabbedPanel.getModelObject());
+ assertEquals(Integer.valueOf(0), page.tabbedPanel.getDefaultModelObject());
}
@Test
@@ -101,12 +101,12 @@ public class TabbedPanelTest extends WicketTestCase
tester.assertContains("<span wicket:id=\"label\">default 1</span>");
tester.assertContains("<span wicket:id=\"title\">default 2</span></a>");
- assertEquals(Integer.valueOf(0), page.tabbedPanel.getModelObject());
+ assertEquals(Integer.valueOf(0), page.tabbedPanel.getDefaultModelObject());
tester.clickLink("tabpanel:tabs-container:tabs:1:link");
tester.assertContains("<span wicket:id=\"label\">default 2</span>");
- assertEquals(Integer.valueOf(1), page.tabbedPanel.getModelObject());
+ assertEquals(Integer.valueOf(1), page.tabbedPanel.getDefaultModelObject());
}
@Test
@@ -125,20 +125,20 @@ public class TabbedPanelTest extends WicketTestCase
tester.assertContainsNot("<span wicket:id=\"title\">added 1</span></a>");
tester.assertContainsNot("<span wicket:id=\"label\">added 1</span>");
- assertEquals(Integer.valueOf(0), page.tabbedPanel.getModelObject());
+ assertEquals(Integer.valueOf(0), page.tabbedPanel.getDefaultModelObject());
// 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>");
- assertEquals(Integer.valueOf(1), page.tabbedPanel.getModelObject());
+ assertEquals(Integer.valueOf(1), page.tabbedPanel.getDefaultModelObject());
// 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>");
- assertEquals(Integer.valueOf(2), page.tabbedPanel.getModelObject());
+ assertEquals(Integer.valueOf(2), page.tabbedPanel.getDefaultModelObject());
}
}