You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2008/08/21 03:20:38 UTC

svn commit: r687532 - in /wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng: AjaxNGBehavior.java request/AjaxNGUrlCodingStrategy.java

Author: knopp
Date: Wed Aug 20 18:20:38 2008
New Revision: 687532

URL: http://svn.apache.org/viewvc?rev=687532&view=rev
Log:
More stuff

Modified:
    wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxNGBehavior.java
    wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/request/AjaxNGUrlCodingStrategy.java

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxNGBehavior.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxNGBehavior.java?rev=687532&r1=687531&r2=687532&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxNGBehavior.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxNGBehavior.java Wed Aug 20 18:20:38 2008
@@ -124,14 +124,17 @@
 		
 		res.append("{");
 		
-		res.append("p:'");
+		res.append("p:'");		
 		Page page = component.getPage();
-		res.append(page.getNumericId());
-		if (page.getCurrentVersionNumber() != 0)
+		if (page.getPageMapName() != null)
 		{
+			res.append(page.getPageMapName());
 			res.append(":");
-			res.append(page.getCurrentVersionNumber());
 		}
+		res.append(page.getNumericId());
+		res.append(":");
+		res.append(page.getCurrentVersionNumber());
+		
 		res.append("'");
 		
 		

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/request/AjaxNGUrlCodingStrategy.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/request/AjaxNGUrlCodingStrategy.java?rev=687532&r1=687531&r2=687532&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/request/AjaxNGUrlCodingStrategy.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/request/AjaxNGUrlCodingStrategy.java Wed Aug 20 18:20:38 2008
@@ -18,6 +18,9 @@
 
 import org.apache.wicket.Component;
 import org.apache.wicket.IRequestTarget;
+import org.apache.wicket.Page;
+import org.apache.wicket.Session;
+import org.apache.wicket.Component.IVisitor;
 import org.apache.wicket.request.RequestParameters;
 import org.apache.wicket.request.target.coding.IRequestTargetUrlCodingStrategy;
 
@@ -27,26 +30,97 @@
 public class AjaxNGUrlCodingStrategy implements IRequestTargetUrlCodingStrategy
 {
 	private final String mountPath;
-	
+
 	public AjaxNGUrlCodingStrategy(String mountPath)
 	{
 		this.mountPath = mountPath;
 	}
+
+	private String getParameter(RequestParameters parameters, String key)
+	{
+		Object o = parameters.getParameters().get(key);
+		if (o instanceof String[])
+		{
+			return ((String[])o)[0];
+		}
+		else
+		{
+			return null;
+		}
+	}
 	
+	private Page getPage(RequestParameters parameters)
+	{
+		String page = getParameter(parameters, PARAM_PAGE_ID);
+		String elements[] = page.split(":");
+		int pageId;
+		String pageMapName = null; 
+		int version = 0;
+		if (elements.length == 2)
+		{
+			pageId = Integer.valueOf(elements[0]);	
+			version = Integer.valueOf(elements[1]);
+		}
+		else if (elements.length == 3)
+		{
+			pageMapName = elements[0];
+			pageId = Integer.valueOf(elements[1]);	
+			version = Integer.valueOf(elements[2]);
+		}
+		else
+		{
+			throw new IllegalStateException("Couldn't parse pageID '" + page + "'");
+		}
+		return Session.get().getPage(pageMapName, "" + pageId, version);
+	}
+
 	private Component getComponent(RequestParameters parameters)
 	{
+		Page page = getPage(parameters);
+
+		if (page != null)
+		{
+			final String componentId = getParameter(parameters, PARAM_COMPONENT_ID);
+			if (componentId == null)
+			{
+				return page;
+			}
+			else
+			{
+				return (Component)page.visitChildren(new IVisitor<Component>()
+				{
+					public Object component(Component component)
+					{
+						if (componentId.equals(component.getMarkupId(false)))
+						{
+							return component;
+						}
+						return CONTINUE_TRAVERSAL;
+					}
+				});
+			}
+		}
+
 		return null;
-		//String page = parameters.getParameters().get(PARAM_PAGE_ID);
 	}
 
 	public IRequestTarget decode(RequestParameters requestParameters)
 	{
-		return AjaxNGRequestTarget.DUMMY; 		
-	}		
+		Component component = getComponent(requestParameters);
+		if (component == null)
+		{
+			throw new IllegalStateException("Couldn't find component with id '" +
+				getParameter(requestParameters, PARAM_COMPONENT_ID) + "'.");
+		}
+		
+		int behaviorIndex = Integer.valueOf(getParameter(requestParameters, PARAM_BEHAVIOR_INDEX));
+		
+		return new AjaxNGRequestTarget(component, behaviorIndex);
+	}
 
 	public CharSequence encode(IRequestTarget requestTarget)
 	{
-		// we need this as the prefix for the ajax configuration 
+		// we need this as the prefix for the ajax configuration
 		return getMountPath();
 	}
 
@@ -54,8 +128,8 @@
 	{
 		return mountPath;
 	}
-	
-	private static final String PARAM_PREFIX = "wicket:";
+
+	private static final String PARAM_PREFIX = "wicketNG:";
 	public static final String PARAM_TIMESTAMP = PARAM_PREFIX + "timestamp";
 	public static final String PARAM_COMPONENT_ID = PARAM_PREFIX + "componentId";
 	public static final String PARAM_PAGE_ID = PARAM_PREFIX + "pageId";