Author: jkuhnert
Date: Sat May 19 14:15:16 2007
New Revision: 539802

URL: http://svn.apache.org/viewvc?view=rev&rev=539802
Log:
Fixes TAPESTRY-1462. 

Also did some slight profiling optimizations.

Modified:
    
tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/LocaleList.html
    
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.globals.xml
    
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.url.xml
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/coerce/ValueConverterImpl.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/EngineServiceLink.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncodingImpl.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Shell.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DefaultLinkRenderer.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/QueryParameterMap.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/EngineServiceLinkTest.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/TestServiceEncoding.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/html/TestShell.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/CookieSourceTest.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java
    
tapestry/tapestry4/trunk/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletAssetLinkFactoryImpl.java

Modified: 
tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/LocaleList.html
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/LocaleList.html?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/LocaleList.html
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/LocaleList.html
 Sat May 19 14:15:16 2007
@@ -95,7 +95,7 @@
     <div jwcid="@Locale" selected="ognl:currentSelected">
         <p>
             <a jwcid="[EMAIL PROTECTED]" listener="listener:selectLocale" 
parameters="ognl:{currLocale.language, currLocale.country, currLocale.variant}"
-               
updateComponents="ognl:{'localeDetail',page.components.localeList.clientId}" 
stateful="ognl:false">
+               
updateComponents="ognl:{'localeDetail',page.components.localeList.clientId}" 
stateful="false">
                 <span jwcid="@Insert" value="ognl:currLocale.toString()" />
             </a>
         </p>

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.globals.xml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.globals.xml?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.globals.xml
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.globals.xml
 Sat May 19 14:15:16 2007
@@ -48,7 +48,6 @@
         <construct service-id="RequestGlobals" property="responseBuilder"/>
     </invoke-factory> 
     
-    <interceptor service-id="hivemind.LoggingInterceptor" />
   </service-point>
   
   <service-point id="HttpServletRequest" 
interface="javax.servlet.http.HttpServletRequest">

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.url.xml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.url.xml?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.url.xml
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.url.xml
 Sat May 19 14:15:16 2007
@@ -28,11 +28,9 @@
         <set-object property="dataSqueezer" 
value="infrastructure:dataSqueezer"/>
         <set-configuration property="contributions" 
configuration-id="ServiceEncoders"/>
         <set-object property="servletPath" 
value="app-property:org.apache.tapestry.servlet-path"/>
-        <set-object property="contextPath" value="infrastructure:contextPath"/>
                <set-object property="request" value="infrastructure:request"/>
         <set-object property="requestCycle" 
value="infrastructure:requestCycle"/>
-        <set-service property="persistenceStrategySource" 
-          service-id="tapestry.persist.PropertyPersistenceStrategySource"/>
+        <set-service property="persistenceStrategySource" 
service-id="tapestry.persist.PropertyPersistenceStrategySource"/>
       </construct>
     </invoke-factory>
     

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
 Sat May 19 14:15:16 2007
@@ -580,7 +580,7 @@
         if (_components == null)
             return EMPTY_MAP;
 
-        return Collections.unmodifiableMap(_components);
+        return _components;
 
     }
 
@@ -589,7 +589,7 @@
         if (_assets == null)
             return EMPTY_MAP;
 
-        return Collections.unmodifiableMap(_assets);
+        return _assets;
     }
 
     public IAsset getAsset(String name)
@@ -644,9 +644,9 @@
     public Map getBindings()
     {
         if (_bindings == null)
-            return Collections.EMPTY_MAP;
+            return EMPTY_MAP;
 
-        return Collections.unmodifiableMap(_bindings);
+        return _bindings;
     }
 
     /**
@@ -664,8 +664,7 @@
         // getMessages(), etc.
 
         if (_listeners == null)
-            _listeners = 
getPage().getEngine().getInfrastructure().getListenerMapSource()
-                    .getListenerMapForObject(this);
+            _listeners = 
getPage().getEngine().getInfrastructure().getListenerMapSource().getListenerMapForObject(this);
 
         return _listeners;
     }

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/coerce/ValueConverterImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/coerce/ValueConverterImpl.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/coerce/ValueConverterImpl.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/coerce/ValueConverterImpl.java
 Sat May 19 14:15:16 2007
@@ -14,6 +14,10 @@
 
 package org.apache.tapestry.coerce;
 
+import org.apache.hivemind.ApplicationRuntimeException;
+import org.apache.hivemind.util.ConstructorUtils;
+import org.apache.hivemind.util.Defense;
+
 import java.beans.PropertyEditor;
 import java.beans.PropertyEditorManager;
 import java.util.HashMap;
@@ -21,10 +25,6 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.ConstructorUtils;
-import org.apache.hivemind.util.Defense;
-
 /**
  * Implementation of [EMAIL PROTECTED] 
org.apache.tapestry.coerce.ValueConverter}. Selects an appropriate type
  * converter and delegates to it.
@@ -170,8 +170,7 @@
 
         String valueAsString = value.toString();
 
-        return (Number) ConstructorUtils.invokeConstructor(targetType, new 
Object[]
-        { valueAsString });
+        return (Number) ConstructorUtils.invokeConstructor(targetType, new 
Object[] { valueAsString });
     }
 
     private Class convertType(Class possiblePrimitiveType)

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/EngineServiceLink.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/EngineServiceLink.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/EngineServiceLink.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/EngineServiceLink.java
 Sat May 19 14:15:16 2007
@@ -23,7 +23,6 @@
 import org.apache.tapestry.web.WebRequest;
 
 import java.io.UnsupportedEncodingException;
-import java.util.Map;
 
 /**
  * A EngineServiceLink represents a possible action within the client web 
browser; either clicking a
@@ -77,7 +76,7 @@
      */
     
     public EngineServiceLink(String servletPath, String encoding,
-            URLCodec codec, WebRequest request, Map parameters, boolean 
stateful)
+            URLCodec codec, WebRequest request, QueryParameterMap parameters, 
boolean stateful)
     {
         Defense.notNull(servletPath, "servletPath");
         Defense.notNull(encoding, "encoding");
@@ -90,7 +89,7 @@
         _codec = codec;
         _request = request;
         _stateful = stateful;
-        _parameters = new QueryParameterMap(parameters);
+        _parameters = parameters;
     }
     
     /**
@@ -114,7 +113,7 @@
      */
 
     public EngineServiceLink(IRequestCycle cycle, String servletPath, String 
encoding,
-            URLCodec codec, WebRequest request, Map parameters, boolean 
stateful)
+            URLCodec codec, WebRequest request, QueryParameterMap parameters, 
boolean stateful)
     {
         Defense.notNull(cycle, "cycle");
         Defense.notNull(servletPath, "servletPath");
@@ -129,7 +128,7 @@
         _codec = codec;
         _request = request;
         _stateful = stateful;
-        _parameters = new QueryParameterMap(parameters);
+        _parameters = parameters;
     }
 
     public String getURL()

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncodingImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncodingImpl.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncodingImpl.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncodingImpl.java
 Sat May 19 14:15:16 2007
@@ -14,8 +14,6 @@
 
 package org.apache.tapestry.engine;
 
-import java.util.Map;
-
 import org.apache.hivemind.util.Defense;
 import org.apache.tapestry.util.QueryParameterMap;
 
@@ -50,9 +48,9 @@
         this(servletPath, null, new QueryParameterMap());
     }
 
-    public ServiceEncodingImpl(String servletPath, Map parametersMap)
+    public ServiceEncodingImpl(String servletPath, QueryParameterMap 
parametersMap)
     {
-        this(servletPath, null, new QueryParameterMap(parametersMap));
+        this(servletPath, null, parametersMap);
     }
 
     public ServiceEncodingImpl(String servletPath, String pathInfo, 
QueryParameterMap parameters)
@@ -62,7 +60,6 @@
 
         _servletPath = servletPath;
         _pathInfo = pathInfo;
-
         _parameters = parameters;
     }
     

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Shell.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Shell.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Shell.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Shell.java
 Sat May 19 14:15:16 2007
@@ -20,6 +20,7 @@
 import org.apache.tapestry.coerce.ValueConverter;
 import org.apache.tapestry.engine.IEngineService;
 import org.apache.tapestry.engine.ILink;
+import org.apache.tapestry.services.ResponseBuilder;
 import org.apache.tapestry.spec.IApplicationSpecification;
 
 import java.util.ArrayList;
@@ -50,8 +51,9 @@
         
         long startTime = System.currentTimeMillis();
         boolean rewinding = cycle.isRewinding();
+        boolean dynamic = getBuilder().isDynamic();
 
-        if (!rewinding)
+        if (!rewinding && !dynamic)
         {
             writeDocType(writer, cycle);
 
@@ -119,11 +121,11 @@
 
         // Render the body, the actual page content
 
-        IMarkupWriter nested = writer.getNestedWriter();
+        IMarkupWriter nested = !dynamic ? writer.getNestedWriter() : writer;
 
         renderBody(nested, cycle);
 
-        if (!rewinding)
+        if (!rewinding && !dynamic)
         {
             List relations = getRelations();
             if (relations != null)
@@ -136,9 +138,10 @@
             writer.end(); // head
         }
         
-        nested.close();
+        if (!dynamic)
+            nested.close();
         
-        if (!rewinding)
+        if (!rewinding && !dynamic)
         {
             writer.end(); // html
             writer.println();
@@ -310,7 +313,9 @@
     public abstract boolean getRenderContentType();
 
     public abstract boolean isDisableTapestryMeta();
-    
+
+    public abstract ResponseBuilder getBuilder();
+
     /** @since 4.0 */
     public abstract ValueConverter getValueConverter();
 

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DefaultLinkRenderer.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DefaultLinkRenderer.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DefaultLinkRenderer.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DefaultLinkRenderer.java
 Sat May 19 14:15:16 2007
@@ -22,6 +22,7 @@
 import org.apache.tapestry.util.ScriptUtils;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -185,9 +186,11 @@
      */
     protected void renderAsyncParams(IMarkupWriter writer, IRequestCycle 
cycle, DirectLink link)
     {
+        List comps = link.getUpdateComponents();
+        
         if (!link.isAsync() && !link.isJson() 
-                && (link.getUpdateComponents() == null 
-                || link.getUpdateComponents().size() <= 0))
+                && (comps == null
+                || comps.size() <= 0))
             return;
         
         if (!link.isParameterBound("onclick") && 
!link.isParameterBound("onClick")) {

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
 Sat May 19 14:15:16 2007
@@ -85,11 +85,13 @@
      */
     public void renderComponent(IRequestCycle cycle, IComponent component)
     {
-        if (cycle.isRewinding() || 
TapestryUtils.getOptionalPageRenderSupport(cycle) == null)
+        if (cycle.isRewinding())
             return;
 
-        Component icomp = Component.class.isInstance(component) ? 
(Component)component : null;
-        if (icomp != null && !icomp.hasEvents() && 
!IForm.class.isInstance(component))
+        if (Component.class.isInstance(component) && 
!((Component)component).hasEvents() && !IForm.class.isInstance(component))
+            return;
+
+        if (TapestryUtils.getOptionalPageRenderSupport(cycle) == null)
             return;
 
         // Don't render fields being pre-rendered, otherwise we'll render twice

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java
 Sat May 19 14:15:16 2007
@@ -14,10 +14,6 @@
 
 package org.apache.tapestry.services.impl;
 
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.commons.codec.net.URLCodec;
 import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.hivemind.ErrorLog;
@@ -26,29 +22,27 @@
 import org.apache.tapestry.IEngine;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.EngineServiceLink;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.engine.ServiceEncoder;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.engine.ServiceEncodingImpl;
+import org.apache.tapestry.engine.*;
 import org.apache.tapestry.record.PropertyPersistenceStrategySource;
 import org.apache.tapestry.services.DataSqueezer;
 import org.apache.tapestry.services.LinkFactory;
 import org.apache.tapestry.services.ServiceConstants;
+import org.apache.tapestry.util.QueryParameterMap;
 import org.apache.tapestry.web.WebRequest;
 
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author Howard M. Lewis Ship
  * @since 4.0
  */
 public class LinkFactoryImpl implements LinkFactory
 {
- 
-    protected URLCodec _codec = new URLCodec();
-    
-    protected String _contextPath;
     
+    protected URLCodec _codec = new URLCodec();
+        
     protected PropertyPersistenceStrategySource _persistenceStrategySource;
     
     protected IRequestCycle _requestCycle;
@@ -71,7 +65,6 @@
 
     private final Object[] _empty = new Object[0];
     
-    
     public void initializeService()
     {
         Orderer orderer = new Orderer(_errorLog, "encoder");
@@ -105,25 +98,27 @@
 
         IEngine engine = _requestCycle.getEngine();
 
-        ServiceEncoding serviceEncoding = createServiceEncoding(parameters);
-
+        QueryParameterMap qmap = new QueryParameterMap(parameters);
+        
+        ServiceEncoding serviceEncoding = createServiceEncoding(qmap);
+        
         // Give persistent property strategies a chance to store extra data
         // into the link.
 
         if (stateful)
             
_persistenceStrategySource.addParametersForPersistentProperties(serviceEncoding,
 post);
 
-        String fullServletPath = _contextPath + 
serviceEncoding.getServletPath();
-        
+        String fullServletPath = _request.getContextPath() + 
serviceEncoding.getServletPath();
+
         return new EngineServiceLink(_requestCycle, fullServletPath, 
engine.getOutputEncoding(),
-                _codec, _request, parameters, stateful);
+                _codec, _request, qmap, stateful);
     }
 
     protected void finalizeParameters(IEngineService service, Map parameters)
     {
         Defense.notNull(service, "service");
         Defense.notNull(parameters, "parameters");
-
+        
         String serviceName = service.getName();
 
         if (serviceName == null)
@@ -143,7 +138,7 @@
      * Creates a new service encoding, and allows the encoders to modify it 
before returning.
      */
 
-    protected ServiceEncoding createServiceEncoding(Map parameters)
+    protected ServiceEncoding createServiceEncoding(QueryParameterMap 
parameters)
     {
         ServiceEncodingImpl result = new ServiceEncodingImpl(_servletPath, 
parameters);
 
@@ -164,10 +159,8 @@
 
         if (serviceParameters == null)
             return;
-
-        String[] squeezed = squeeze(serviceParameters);
-
-        parameters.put(ServiceConstants.PARAMETER, squeezed);
+        
+        parameters.put(ServiceConstants.PARAMETER, squeeze(serviceParameters));
     }
 
     public Object[] extractListenerParameters(IRequestCycle cycle)
@@ -219,11 +212,6 @@
         _servletPath = servletPath;
     }
 
-    public void setContextPath(String contextPath)
-    {
-        _contextPath = contextPath;
-    }
-
     public void setRequest(WebRequest request)
     {
         _request = request;
@@ -234,10 +222,12 @@
      * want to have a hand at encoding data into URLs. If that comes to pass, 
we'll need to
      * implement an event coordinator/listener combo to let implementations 
know about links being
      * generated.
+     *
+     * @param persistenceStrategySource
+     *          The persistent strategy to use.
      */
 
-    public void setPersistenceStrategySource(
-            PropertyPersistenceStrategySource persistenceStrategySource)
+    public void setPersistenceStrategySource(PropertyPersistenceStrategySource 
persistenceStrategySource)
     {
         _persistenceStrategySource = persistenceStrategySource;
     }

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/QueryParameterMap.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/QueryParameterMap.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/QueryParameterMap.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/QueryParameterMap.java
 Sat May 19 14:15:16 2007
@@ -14,13 +14,13 @@
 
 package org.apache.tapestry.util;
 
+import org.apache.hivemind.util.Defense;
+
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.TreeMap;
 
-import org.apache.hivemind.util.Defense;
-
 /**
  * A wrapper around a Map that stores query parameter values. Map keys are
  * strings. Map values can be simple strings or array of string (or null).
@@ -30,7 +30,6 @@
  */
 public class QueryParameterMap
 {
-
     private final Map _parameters;
 
     public QueryParameterMap()
@@ -119,10 +118,10 @@
     {
         int count = _parameters.size();
 
-        String[] result = (String[]) _parameters.keySet().toArray(
-                new String[count]);
+        String[] result = (String[]) _parameters.keySet().toArray(new 
String[count]);
 
-        if (!TreeMap.class.isInstance(_parameters)) Arrays.sort(result);
+        if (!TreeMap.class.isInstance(_parameters))
+            Arrays.sort(result);
 
         return result;
     }

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/EngineServiceLinkTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/EngineServiceLinkTest.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/EngineServiceLinkTest.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/EngineServiceLinkTest.java
 Sat May 19 14:15:16 2007
@@ -14,15 +14,16 @@
 
 package org.apache.tapestry.engine;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.commons.codec.net.URLCodec;
 import org.apache.tapestry.BaseComponentTestCase;
 import org.apache.tapestry.services.ServiceConstants;
+import org.apache.tapestry.util.QueryParameterMap;
 import org.apache.tapestry.web.WebRequest;
 import org.testng.annotations.Test;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Tests for [EMAIL PROTECTED] org.apache.tapestry.engine.EngineServiceLink}.
  * 
@@ -36,14 +37,14 @@
 
     private static final String ENCODING = "utf-8";
 
-    private Map buildParameters(String serviceName, String[] serviceParameters)
+    private QueryParameterMap buildParameters(String serviceName, String[] 
serviceParameters)
     {
         Map result = new HashMap();
 
         result.put(ServiceConstants.SERVICE, serviceName);
         result.put(ServiceConstants.PARAMETER, serviceParameters);
 
-        return result;
+        return new QueryParameterMap(result);
     }
 
     /** @since 4.0 */

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/TestServiceEncoding.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/TestServiceEncoding.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/TestServiceEncoding.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/TestServiceEncoding.java
 Sat May 19 14:15:16 2007
@@ -14,12 +14,13 @@
 
 package org.apache.tapestry.engine;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.tapestry.BaseComponentTestCase;
+import org.apache.tapestry.util.QueryParameterMap;
 import org.testng.annotations.Test;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Tests for [EMAIL PROTECTED] org.apache.tapestry.engine.ServiceEncodingImpl}.
  * 
@@ -45,7 +46,7 @@
     {
         Map parameters = new HashMap();
 
-        ServiceEncodingImpl se = new ServiceEncodingImpl("/foo", parameters);
+        ServiceEncodingImpl se = new ServiceEncodingImpl("/foo", new 
QueryParameterMap(parameters));
 
         se.setParameterValue("foo", "bar");
 

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/html/TestShell.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/html/TestShell.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/html/TestShell.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/html/TestShell.java
 Sat May 19 14:15:16 2007
@@ -14,17 +14,13 @@
 
 package org.apache.tapestry.html;
 
+import org.apache.tapestry.*;
+import org.apache.tapestry.services.ResponseBuilder;
 import static org.easymock.EasyMock.expect;
+import org.testng.annotations.Test;
 
 import java.util.List;
 
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.NestedMarkupWriter;
-import org.testng.annotations.Test;
-
 /**
  * Tests for the [EMAIL PROTECTED] org.apache.tapestry.html.Shell}&nbsp; 
component.
  * 
@@ -44,17 +40,18 @@
     {
         IMarkupWriter writer = newWriter();
         NestedMarkupWriter nested = newNestedWriter();
-        
+        ResponseBuilder builder = newMock(ResponseBuilder.class);
         IRequestCycle cycle = newCycle(true, writer);
         IRender body = newRender();
         
-        Shell shell = newInstance(Shell.class, null);
+        Shell shell = (Shell) newInstance(Shell.class, "builder", builder);
         
         expect(cycle.renderStackPush(shell)).andReturn(shell);
         
         shell.addBody(body);
 
         trainStoreShellInCycle(cycle, shell);
+        expect(builder.isDynamic()).andReturn(false);
         trainGetNestedWriter(writer, nested);
         
         body.render(nested, cycle);

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/CookieSourceTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/CookieSourceTest.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/CookieSourceTest.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/CookieSourceTest.java
 Sat May 19 14:15:16 2007
@@ -14,23 +14,18 @@
 
 package org.apache.tapestry.services.impl;
 
-import static org.easymock.EasyMock.expect;
-
-import java.util.ArrayList;
-import java.util.List;
-
 import org.apache.tapestry.BaseComponentTestCase;
+import static org.easymock.EasyMock.expect;
 import org.testng.annotations.Test;
 
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
- * Tests for [EMAIL PROTECTED] 
org.apache.tapestry.services.impl.CookieSourceImpl}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
+ * Tests for [EMAIL PROTECTED] 
org.apache.tapestry.services.impl.CookieSourceImpl}. 
  */
 @Test
 public class CookieSourceTest extends BaseComponentTestCase

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java
 Sat May 19 14:15:16 2007
@@ -14,15 +14,6 @@
 
 package org.apache.tapestry.services.impl;
 
-import static org.easymock.EasyMock.expect;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.hivemind.ErrorLog;
 import org.apache.tapestry.BaseComponentTestCase;
@@ -39,8 +30,12 @@
 import org.apache.tapestry.services.ServiceConstants;
 import org.apache.tapestry.util.io.DataSqueezerUtil;
 import org.apache.tapestry.web.WebRequest;
+import static org.easymock.EasyMock.checkOrder;
+import static org.easymock.EasyMock.expect;
 import org.testng.annotations.Test;
 
+import java.util.*;
+
 /**
  * Tests for [EMAIL PROTECTED] 
org.apache.tapestry.services.impl.LinkFactoryImpl}.
  * 
@@ -112,10 +107,20 @@
         expect(engine.getOutputEncoding()).andReturn(outputEncoding);
     }
 
-    public void testNoEncoders()
+    protected WebRequest newRequest(String contextPath)
     {
-        ErrorLog log = newErrorLog();
         WebRequest request = newRequest();
+        checkOrder(request, false);
+        
+        expect(request.getContextPath()).andReturn(contextPath).anyTimes();
+
+        return request;
+    }
+
+    public void test_No_Encoders()
+    {
+        ErrorLog log = newErrorLog();
+        WebRequest request = newRequest("/context");
         IEngine engine = newEngine();
         IRequestCycle cycle = newCycle();
         IEngineService service = newService("myservice");
@@ -129,7 +134,6 @@
 
         lf.setContributions(Collections.EMPTY_LIST);
         lf.setErrorLog(log);
-        lf.setContextPath("/context");
         lf.setServletPath("/app");
         lf.setRequest(request);
         lf.setRequestCycle(cycle);
@@ -154,10 +158,10 @@
         return service;
     }
 
-    public void testStatefulRequest()
+    public void test_Stateful_Request()
     {
         ErrorLog log = newErrorLog();
-        WebRequest request = newRequest();
+        WebRequest request = newRequest("/context");
         IEngine engine = newEngine();
         IEngineService service = newService("myservice");
         IRequestCycle cycle = newCycle();
@@ -172,7 +176,6 @@
 
         lf.setContributions(Collections.EMPTY_LIST);
         lf.setErrorLog(log);
-        lf.setContextPath("/context");
         lf.setServletPath("/app");
         lf.setRequest(request);
         lf.setPersistenceStrategySource(new MockSource());
@@ -189,9 +192,9 @@
         verify();
     }
 
-    public void testNoopEncoders()
+    public void test_Noop_Encoders()
     {
-        WebRequest request = newRequest();
+        WebRequest request = newRequest("/context");
         IRequestCycle cycle = newCycle();
         ErrorLog log = newErrorLog();
         IEngine engine = newEngine();
@@ -210,7 +213,6 @@
 
         lf.setContributions(l);
         lf.setErrorLog(log);
-        lf.setContextPath("/context");
         lf.setServletPath("/app");
         lf.setRequest(request);
         lf.setRequestCycle(cycle);
@@ -226,9 +228,9 @@
         verify();
     }
 
-    public void testActiveEncoder()
+    public void test_Active_Encoder()
     {
-        WebRequest request = newRequest();
+        WebRequest request = newRequest("/context");
         IRequestCycle cycle = newCycle();
         ErrorLog log = newErrorLog();
         IEngineService service = newService("page");
@@ -249,7 +251,6 @@
 
         lf.setContributions(l);
         lf.setErrorLog(log);
-        lf.setContextPath("/context");
         lf.setServletPath("/app");
         lf.setRequest(request);
         lf.setRequestCycle(cycle);
@@ -266,7 +267,7 @@
         verify();
     }
 
-    public void testServiceNameIsNull()
+    public void test_Service_Name_Is_Null()
     {
         IEngineService service = newService(null);
 
@@ -289,9 +290,9 @@
         verify();
     }
 
-    public void testWithServiceParameters()
+    public void test_With_Service_Parameters()
     {
-        WebRequest request = newRequest();
+        WebRequest request = newRequest("/context");
         IRequestCycle cycle = newCycle();
         ErrorLog log = newErrorLog();
         IEngineService service = newService("external");
@@ -312,7 +313,6 @@
 
         lf.setContributions(l);
         lf.setErrorLog(log);
-        lf.setContextPath("/context");
         lf.setServletPath("/app");
         lf.setDataSqueezer(DataSqueezerUtil.createUnitTestSqueezer());
         lf.setRequest(request);

Modified: 
tapestry/tapestry4/trunk/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletAssetLinkFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletAssetLinkFactoryImpl.java?view=diff&rev=539802&r1=539801&r2=539802
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletAssetLinkFactoryImpl.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletAssetLinkFactoryImpl.java
 Sat May 19 14:15:16 2007
@@ -13,8 +13,6 @@
 // limitations under the License.
 package org.apache.tapestry.portlet;
 
-import java.util.Map;
-
 import org.apache.tapestry.IEngine;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.engine.EngineServiceLink;
@@ -22,13 +20,15 @@
 import org.apache.tapestry.engine.ILink;
 import org.apache.tapestry.engine.ServiceEncoding;
 import org.apache.tapestry.services.impl.LinkFactoryImpl;
+import org.apache.tapestry.util.QueryParameterMap;
+
+import java.util.Map;
 
 
 /**
  * Creates [EMAIL PROTECTED] EngineServiceLink}s that will re-encode asset 
URL's
  * using [EMAIL PROTECTED] IRequestCycle#encodeURL(String)}.
  * 
- * @author jkuhnert
  */
 public class PortletAssetLinkFactoryImpl extends LinkFactoryImpl
 {
@@ -39,8 +39,10 @@
         finalizeParameters(service, parameters);
         
         IEngine engine = _requestCycle.getEngine();
-        
-        ServiceEncoding serviceEncoding = createServiceEncoding(parameters);
+
+        QueryParameterMap qmap = new QueryParameterMap(parameters);
+
+        ServiceEncoding serviceEncoding = createServiceEncoding(qmap);
         
         // Give persistent property strategies a chance to store extra data
         // into the link.
@@ -48,9 +50,9 @@
         if (stateful)
             
_persistenceStrategySource.addParametersForPersistentProperties(serviceEncoding,
 post);
         
-        String fullServletPath = _contextPath + 
serviceEncoding.getServletPath();
+        String fullServletPath = _request.getContextPath() + 
serviceEncoding.getServletPath();
         
         return new EngineServiceLink(_requestCycle, fullServletPath, 
engine.getOutputEncoding(),
-                _codec, _request, parameters, stateful);
+                _codec, _request, qmap, stateful);
     }
 }


Reply via email to