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";


Reply via email to