Author: ivaynberg
Date: Wed Jul 6 22:35:37 2011
New Revision: 1143592
URL: http://svn.apache.org/viewvc?rev=1143592&view=rev
Log:
add support for ".." path fragments that retreive parent containers in
MarkupContainer.get(String)
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MarkupContainerTest.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java?rev=1143592&r1=1143591&r2=1143592&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java
(original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java Wed
Jul 6 22:35:37 2011
@@ -257,6 +257,8 @@ public abstract class Component
/** Separator for component paths */
public static final char PATH_SEPARATOR = ':';
+ /** Path segment that represents this component's parent */
+ public static final String PARENT_PATH = "..";
/**
* Action used with IAuthorizationStrategy to determine whether a
component and its children are
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java?rev=1143592&r1=1143591&r2=1143592&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
Wed Jul 6 22:35:37 2011
@@ -348,19 +348,38 @@ public abstract class MarkupContainer ex
* @return The component at the path
*/
@Override
- public final Component get(final String path)
+ public final Component get(String path)
{
// Reference to this container
- if (path == null || path.trim().equals(""))
+ if (Strings.isEmpty(path))
{
return this;
}
- // Get child's id, if any
- final String id = Strings.firstPathComponent(path,
Component.PATH_SEPARATOR);
+ // process parent .. references
+
+ MarkupContainer container = this;
+
+ String id = Strings.firstPathComponent(path,
Component.PATH_SEPARATOR);
+
+ while (Component.PARENT_PATH.equals(id))
+ {
+ container = container.getParent();
+ if (container == null)
+ {
+ return null;
+ }
+ path = path.length() == id.length() ? "" :
path.substring(id.length() + 1);
+ id = Strings.firstPathComponent(path,
Component.PATH_SEPARATOR);
+ }
+
+ if (Strings.isEmpty(id))
+ {
+ return container;
+ }
// Get child by id
- Component child = children_get(id);
+ Component child = container.children_get(id);
// Found child?
if (child != null)
Modified:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MarkupContainerTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MarkupContainerTest.java?rev=1143592&r1=1143591&r2=1143592&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MarkupContainerTest.java
(original)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MarkupContainerTest.java
Wed Jul 6 22:35:37 2011
@@ -60,4 +60,49 @@ public class MarkupContainerTest extends
{
executeTest(MarkupIdTestPage.class,
"MarkupIdTestPageExpectedResult.html");
}
+
+ public void testGet()
+ {
+ WebMarkupContainer a = new WebMarkupContainer("a");
+ WebMarkupContainer b = new WebMarkupContainer("b");
+ WebMarkupContainer c = new WebMarkupContainer("c");
+ WebMarkupContainer d = new WebMarkupContainer("d");
+ WebMarkupContainer e = new WebMarkupContainer("e");
+ WebMarkupContainer f = new WebMarkupContainer("f");
+
+ // ....A
+ // ...B....C
+ // .......D..E
+ // ...........F
+
+ a.add(b);
+ a.add(c);
+ c.add(d);
+ c.add(e);
+ e.add(f);
+
+ // basic gets
+
+ assertTrue(a.get(null) == a);
+ assertTrue(a.get("") == a);
+ assertTrue(a.get("b") == b);
+ assertTrue(a.get("c") == c);
+ assertTrue(a.get("c:d") == d);
+ assertTrue(a.get("c:e:f") == f);
+
+ // parent path gets
+
+ assertTrue(b.get("..") == a);
+ assertTrue(e.get("..:..") == a);
+ assertTrue(d.get("..:..:c:e:f") == f);
+ assertTrue(e.get("..:d:..:e:f") == f);
+ assertTrue(e.get("..:d:..:..") == a);
+
+ // invalid gets
+
+ assertNull(a.get(".."));
+ assertNull(a.get("..:a"));
+ assertNull(b.get("..|.."));
+ assertNull(a.get("q"));
+ }
}