You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2007/03/06 02:41:37 UTC
svn commit: r514950 - in
/incubator/wicket/trunk/wicket/src/main/java/wicket: ./ markup/html/form/
markup/repeater/ markup/repeater/data/ protocol/http/
Author: ivaynberg
Date: Mon Mar 5 17:41:36 2007
New Revision: 514950
URL: http://svn.apache.org/viewvc?view=rev&rev=514950
Log:
first pass at repeaters cleanup, gridview lives again!
Modified:
incubator/wicket/trunk/wicket/src/main/java/wicket/Component.java
incubator/wicket/trunk/wicket/src/main/java/wicket/MarkupContainer.java
incubator/wicket/trunk/wicket/src/main/java/wicket/markup/html/form/Form.java
incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/DefaultItemReuseStrategy.java
incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/IItemFactory.java
incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/IItemReuseStrategy.java
incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/RefreshingView.java
incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/ReuseIfModelsEqualStrategy.java
incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/data/GridView.java
incubator/wicket/trunk/wicket/src/main/java/wicket/protocol/http/WicketServlet.java
Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/Component.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/Component.java?view=diff&rev=514950&r1=514949&r2=514950
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/Component.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/Component.java Mon Mar 5 17:41:36 2007
@@ -708,6 +708,24 @@
return parent;
}
+ public final Component reparent(MarkupContainer<?> parent)
+ {
+ this.parent = getRealParent(parent, id);
+ if (id.startsWith(AUTO_COMPONENT_PREFIX) == false)
+ {
+ this.markupFragment = getMarkupFragment();
+ }
+ else
+ {
+ setAuto(true);
+ }
+ this.parent.add(this);
+ setFlag(FLAG_REMOVED_FROM_PARENT, false);
+
+ return this;
+ }
+
+
/**
* Gets the markup fragment associated with the component. Except for Pages,
* Panels and Borders, it is assumed that the first markup element of the
@@ -2017,11 +2035,11 @@
if (isVisible())
{
// is this component also a IHeaderContributor
- if (this instanceof IHeaderContributor)
+ if (this instanceof IHeaderContributor)
{
((IHeaderContributor)this).renderHead(response);
}
-
+
// Ask all behaviors if they have something to contribute to the
// header or body onLoad tag.
if (this.behaviors != null)
Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/MarkupContainer.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/MarkupContainer.java?view=diff&rev=514950&r1=514949&r2=514950
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/MarkupContainer.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/MarkupContainer.java Mon Mar 5 17:41:36 2007
@@ -180,21 +180,27 @@
// Add to map
Component<?> replaced = put(child);
- if (replaced != null)
+ // guard against the component.reparent(component.getparent()) case
+ if (replaced != child)
{
- replaced.setFlag(FLAG_REMOVED_FROM_PARENT, true);
- removedComponent(replaced);
- // The position of the associated markup remains the same
- child.markupIndex = replaced.markupIndex;
+ if (replaced != null)
+ {
+ replaced.setFlag(FLAG_REMOVED_FROM_PARENT, true);
+ removedComponent(replaced);
+ // The position of the associated markup remains the same
+ child.markupIndex = replaced.markupIndex;
- // The generated markup id remains the same
- String replacedId = (replaced.hasMarkupIdMetaData()) ? replaced.getMarkupId() : null;
- child.setMarkupIdMetaData(replacedId);
- }
- // now call addedComponent (after removedComponent)
- addedComponent(child);
+ // The generated markup id remains the same
+ String replacedId = (replaced.hasMarkupIdMetaData())
+ ? replaced.getMarkupId()
+ : null;
+ child.setMarkupIdMetaData(replacedId);
+ }
+ // now call addedComponent (after removedComponent)
+ addedComponent(child);
+ }
return this;
}
@@ -505,6 +511,13 @@
*/
public final void removeAll()
{
+ Iterator<Component<?>> children = iterator();
+ while (children.hasNext())
+ {
+ children.next().setFlag(FLAG_REMOVED_FROM_PARENT, true);
+ }
+
+
if (children != null)
{
addStateChange(new Change()
Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/html/form/Form.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/html/form/Form.java?view=diff&rev=514950&r1=514949&r2=514950
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/html/form/Form.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/html/form/Form.java Mon Mar 5 17:41:36 2007
@@ -619,17 +619,9 @@
}
// append the button
- String userAgent = ((WebClientInfo)getSession().getClientInfo()).getUserAgent();
buffer.append("<input type=\"submit\" value=\"").append(value).append("\" name=\"").append(
defaultButton.getInputName()).append("\"");
- if (userAgent != null && userAgent.indexOf("MSIE") != -1)
- {
- buffer.append("style=\"width: 0px; height: 0px; position: absolute;\"");
- }
- else
- {
- buffer.append(" style=\"display: none\"");
- }
+ buffer.append("style=\"width: 0px; height: 0px; position: absolute; left:-1000px;\"");
buffer.append(" />");
getResponse().write(buffer);
}
Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/DefaultItemReuseStrategy.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/DefaultItemReuseStrategy.java?view=diff&rev=514950&r1=514949&r2=514950
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/DefaultItemReuseStrategy.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/DefaultItemReuseStrategy.java Mon Mar 5 17:41:36 2007
@@ -51,7 +51,7 @@
* @see wicket.markup.repeater.IItemReuseStrategy#getItems(MarkupContainer, wicket.markup.repeater.IItemFactory,
* java.util.Iterator, java.util.Iterator)
*/
- public Iterator<Item<T>> getItems(final MarkupContainer<?> parent, final IItemFactory<T> factory, final Iterator<IModel<T>> newModels,
+ public Iterator<Item<T>> getItems(final IItemFactory<T> factory, final Iterator<IModel<T>> newModels,
final Iterator<Item<T>> existingItems)
{
return new Iterator<Item<T>>()
@@ -72,7 +72,7 @@
{
final IModel<T> model = newModels.next();
- Item<T> item = factory.newItem(parent, index, model);
+ Item<T> item = factory.newItem(index, model);
index++;
return item;
Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/IItemFactory.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/IItemFactory.java?view=diff&rev=514950&r1=514949&r2=514950
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/IItemFactory.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/IItemFactory.java Mon Mar 5 17:41:36 2007
@@ -16,7 +16,6 @@
*/
package wicket.markup.repeater;
-import wicket.MarkupContainer;
import wicket.model.IModel;
/**
@@ -42,8 +41,8 @@
* @param model
* the model for the new data item
*
- * @return DataItem new DataItem
+ * @return new Item
*/
- Item<T> newItem(MarkupContainer<?> parent, int index, IModel<T> model);
+ Item<T> newItem(int index, IModel<T> model);
}
Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/IItemReuseStrategy.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/IItemReuseStrategy.java?view=diff&rev=514950&r1=514949&r2=514950
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/IItemReuseStrategy.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/IItemReuseStrategy.java Mon Mar 5 17:41:36 2007
@@ -25,15 +25,15 @@
/**
* Interface for item reuse strategies.
* <p>
- * <u>Notice:</u> Child items will be rendered in the order they are provided
- * by the returned iterator, so it is important that the strategy preserve this
- * order
+ * <u>Note:</u> Child items will be rendered in the order they are provided by
+ * the returned iterator, so it is important that the returned iterator
+ * preserves the order of the <code>models</code> iterator.
* </p>
*
* @author Igor Vaynberg (ivaynberg)
- *
- * @param <T>
- * Type of model object this component holds
+ *
+ * @param <T>
+ * Type of model object this component holds
*/
public interface IItemReuseStrategy<T> extends IClusterable
{
@@ -42,19 +42,24 @@
* Returns an iterator over items that will be added to the view. The
* iterator needs to return all the items because the old ones are removed
* prior to the new ones added.
+ * <p>
+ * <u>Note:</u> Child items will be rendered in the order they are provided
+ * by the returned iterator, so it is important that the returned iterator
+ * preserves the order of the <code>models</code> iterator.
+ * </p>
*
* @param parent
* parent for returned item components
*
* @param factory
* implementation of IItemFactory
- * @param newModels
+ * @param models
* iterator over models for items
* @param existingItems
- * iterator over child items
+ * iterator over child items from the previous request
* @return iterator over items that will be added after all the old items
- * are moved.
+ * are removed.
*/
- Iterator<Item<T>> getItems(MarkupContainer<?> parent, IItemFactory<T> factory, Iterator<IModel<T>> newModels,
- Iterator<Item<T>> existingItems);
+ Iterator<Item<T>> getItems(IItemFactory<T> factory,
+ Iterator<IModel<T>> models, Iterator<Item<T>> existingItems);
}
Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/RefreshingView.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/RefreshingView.java?view=diff&rev=514950&r1=514949&r2=514950
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/RefreshingView.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/RefreshingView.java Mon Mar 5 17:41:36 2007
@@ -88,32 +88,45 @@
@Override
protected void onAttach()
{
+ if (isVisibleInHierarchy())
+ {
+ populate();
+ }
+
super.onAttach();
+ }
- if (isVisibleInHierarchy())
+ /**
+ * Populates the repeater with items
+ */
+ protected void populate()
+ {
+
+ IItemFactory<T> itemFactory = new IItemFactory<T>()
{
- IItemFactory<T> itemFactory = new IItemFactory<T>()
+ public Item<T> newItem(int index, IModel<T> model)
{
+ String id = RefreshingView.this.newChildId();
+ Item<T> item = RefreshingView.this.newItem(RefreshingView.this, id, index, model);
+ RefreshingView.this.populateItem(item);
+ return item;
+ }
- public Item<T> newItem(MarkupContainer<?> parent, int index, IModel<T> model)
- {
- String id = RefreshingView.this.newChildId();
- Item<T> item = RefreshingView.this.newItem(parent, id, index, model);
- RefreshingView.this.populateItem(item);
- item.attach();
- return item;
- }
-
- };
-
- Iterator<IModel<T>> models = getItemModels();
- Iterator<Item<T>> items = getItemReuseStrategy().getItems(RefreshingView.this,
- itemFactory, models, getItems());
- removeAll();
- addItems(items);
- }
+ };
+
+ Iterator<IModel<T>> models = getItemModels();
+
+ Iterator<Item<T>> items = getItemReuseStrategy().getItems(itemFactory, models, getItems());
+ removeAll();
+ // we need to iterate over the strategy-returned iterator so that it
+ // creates all the items, and we also reattach them in case they
+ // have been detached by removeAll() and reused
+ while (items.hasNext())
+ {
+ items.next().reAttach();
+ }
}
/**
@@ -172,7 +185,7 @@
/**
* @return iterator over item instances that exist as children of this view
*/
- public Iterator<Item<T>> getItems()
+ private Iterator<Item<T>> getItems()
{
final Iterator<Component<?>> iterator = iterator();
return new Iterator<Item<T>>()
@@ -192,21 +205,6 @@
iterator.remove();
}
};
- }
-
- /**
- * Add items to the view. Prior to this all items were removed so every
- * request this function starts from a clean slate.
- *
- * @param items
- * item instances to be added to this view
- */
- protected void addItems(Iterator<Item<T>> items)
- {
- while (items.hasNext())
- {
- items.next().reAttach();
- }
}
// /////////////////////////////////////////////////////////////////////////
Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/ReuseIfModelsEqualStrategy.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/ReuseIfModelsEqualStrategy.java?view=diff&rev=514950&r1=514949&r2=514950
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/ReuseIfModelsEqualStrategy.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/ReuseIfModelsEqualStrategy.java Mon Mar 5 17:41:36 2007
@@ -55,7 +55,7 @@
* @see wicket.markup.repeater.IItemReuseStrategy#getItems(MarkupContainer, wicket.markup.repeater.IItemFactory,
* java.util.Iterator, java.util.Iterator)
*/
- public Iterator getItems(final MarkupContainer parent, final IItemFactory factory, final Iterator newModels,
+ public Iterator getItems(final IItemFactory factory, final Iterator newModels,
Iterator existingItems)
{
final Map<IModel< ? >, Item> modelToItem = new HashMap<IModel< ? >, Item>();
@@ -82,12 +82,13 @@
final Item item;
if (oldItem == null)
{
- item = factory.newItem(parent, index, model);
+ item = factory.newItem(index, model);
}
else
{
oldItem.setIndex(index);
item = oldItem;
+ oldItem.reAttach();
}
index++;
Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/data/GridView.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/data/GridView.java?view=diff&rev=514950&r1=514949&r2=514950
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/data/GridView.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/repeater/data/GridView.java Mon Mar 5 17:41:36 2007
@@ -20,8 +20,11 @@
import wicket.Component;
import wicket.MarkupContainer;
+import wicket.markup.html.WebMarkupContainer;
+import wicket.markup.repeater.IItemFactory;
import wicket.markup.repeater.Item;
import wicket.markup.repeater.RepeatingView;
+import wicket.model.IModel;
import wicket.version.undo.Change;
/**
@@ -33,13 +36,13 @@
* Example
*
* <pre>
- * <tbody>
- * <tr wicket:id="rows" class"even">
- * <td wicket:id="cols">
- * <span wicket:id="id">Test ID</span>
- * </td>
- * </tr>
- * </tbody>
+ * <tbody>
+ * <tr wicket:id="rows" class"even">
+ * <td wicket:id="cols">
+ * <span wicket:id="id">Test ID</span>
+ * </td>
+ * </tr>
+ * </tbody>
* </pre>
*
* and in java:
@@ -51,8 +54,8 @@
* @author Igor Vaynberg
* @author Christian Essl
*
- * @param <T>
- * Type of model object this component holds
+ * @param <T>
+ * Type of model object this component holds
*/
public abstract class GridView<T> extends DataViewBase<T>
{
@@ -202,10 +205,32 @@
}
-
@Override
- protected void addItems(Iterator<Item<T>> items)
+ protected void populate()
{
+ Iterator<Item<T>> items = new ItemsIterator<T>(iterator());
+
+ WebMarkupContainer fake1 = new WebMarkupContainer(this, newChildId());
+ final WebMarkupContainer fake2 = new RepeatingView(fake1, "cols");
+
+ IItemFactory<T> itemFactory = new IItemFactory<T>()
+ {
+
+ public Item<T> newItem(int index, IModel<T> model)
+ {
+ String id = GridView.this.newChildId();
+ Item<T> item = GridView.this.newItem(fake2, id, index, model);
+ GridView.this.populateItem(item);
+ return item;
+ }
+
+ };
+
+
+ items = getItemReuseStrategy().getItems(itemFactory, getItemModels(), items);
+
+ removeAll();
+
if (items.hasNext())
{
final int cols = getColumns();
@@ -216,7 +241,7 @@
{
// Build a row
Item<T> rowItem = newRowItem(newChildId(), row);
- new RepeatingView<T>(rowItem, "cols");
+ RepeatingView rowRepeater = new RepeatingView<T>(rowItem, "cols");
// Populate the row
for (int index = 0; index < cols; index++)
@@ -225,12 +250,14 @@
if (items.hasNext())
{
cellItem = items.next();
+ cellItem.reparent(rowRepeater);
}
else
{
- cellItem = newEmptyItem(newChildId(), index);
+ cellItem = newEmptyItem(rowRepeater, newChildId(), index);
populateEmptyItem(cellItem);
}
+
}
// increase row
@@ -239,9 +266,9 @@
}
while (items.hasNext());
}
-
}
+
/**
* @return data provider
*/
@@ -250,14 +277,6 @@
return internalGetDataProvider();
}
- /**
- * @see wicket.markup.repeater.PageableRefreshingView#getItems()
- */
- @Override
- public Iterator<Item<T>> getItems()
- {
- return new ItemsIterator<T>(iterator());
- }
/**
* Add component to an Item for which there is no model anymore and is shown
@@ -272,13 +291,16 @@
* Create a Item which represents an empty cell (there is no model for it in
* the DataProvider)
*
+ * @param parent
+ * parent
+ *
* @param id
* @param index
* @return created item
*/
- protected Item<T> newEmptyItem(final String id, int index)
+ protected Item<T> newEmptyItem(WebMarkupContainer<?> parent, final String id, int index)
{
- return new Item<T>(this, id, index, null);
+ return new Item<T>(parent, id, index, null);
}
/**
@@ -296,10 +318,10 @@
/**
* Iterator that iterats over all items in the cells
*
- * @author igor
- *
- * @param <T>
- * Type of model object this component holds
+ * @author ivaynberg
+ *
+ * @param <T>
+ * Type of model object this component holds
*/
private static class ItemsIterator<T> implements Iterator<Item<T>>
{
Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/protocol/http/WicketServlet.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/protocol/http/WicketServlet.java?view=diff&rev=514950&r1=514949&r2=514950
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/protocol/http/WicketServlet.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/protocol/http/WicketServlet.java Mon Mar 5 17:41:36 2007
@@ -116,7 +116,8 @@
public WicketServlet() {
// log warning
log.info("********************************************");
- log.info("DEPRECATED! Please use WicketFilter instead.");
+ log.info("IF YOUR SERVLET CONTAINER SUPPORTS FILTERS");
+ log.info("YOU SHOULD USE WicketFilter INSTEAD");
log.info("********************************************");
}