You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2006/12/03 00:19:24 UTC

svn commit: r481667 - in /tapestry/tapestry4/trunk: tapestry-examples/Workbench/src/context/WEB-INF/ tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ tapestry-framework/src/descriptor/META-INF/ tapestry-framework/src/java/org/a...

Author: jkuhnert
Date: Sat Dec  2 15:19:22 2006
New Revision: 481667

URL: http://svn.apache.org/viewvc?view=rev&rev=481667
Log:
Removed DirectLinkWorker. Was a brain dead idea. DefaultLinkRenderer now handles connecting async events 
up if the right parameters exist. Also selectively renders a more efficient onClick attribute if none currently 
exist, else reverts to more verbose scripted version.

Added:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.script
      - copied unchanged from r481565, tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLinkWorker.script
Removed:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLinkWorker.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLinkWorker.script
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/link/DirectLinkWorkerTest.java
Modified:
    tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/hivemodule.xml
    tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java
    tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.render.xml
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DefaultLinkRenderer.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.jwc
    tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/core.js

Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/hivemodule.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/hivemodule.xml?view=diff&rev=481667&r1=481666&r2=481667
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/hivemodule.xml (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/hivemodule.xml Sat Dec  2 15:19:22 2006
@@ -40,7 +40,7 @@
     <invoke-factory>
       <construct class="chart.ChartService">
         <set-object property="exceptionReporter" value="infrastructure:requestExceptionReporter"/>
-        <set-object property="response" value="infrastructure:response"/>
+        <set-service property="response" service-id="tapestry.globals.HttpServletResponse"/>
         <set-object property="linkFactory" value="infrastructure:linkFactory"/>
       </construct>
     </invoke-factory>

Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java?view=diff&rev=481667&r1=481666&r2=481667
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java Sat Dec  2 15:19:22 2006
@@ -15,10 +15,11 @@
 package org.apache.tapestry.workbench.chart;
 
 import java.io.IOException;
-import java.io.OutputStream;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.servlet.http.HttpServletResponse;
+
 import org.apache.hivemind.util.Defense;
 import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IPage;
@@ -28,8 +29,6 @@
 import org.apache.tapestry.error.RequestExceptionReporter;
 import org.apache.tapestry.services.LinkFactory;
 import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.web.WebResponse;
 import org.jCharts.Chart;
 import org.jCharts.encoders.JPEGEncoder13;
 
@@ -53,7 +52,7 @@
     private LinkFactory _linkFactory;
 
     /** @since 4.0 */
-    private WebResponse _response;
+    private HttpServletResponse _response;
 
     public ILink getLink(boolean post, Object parameter)
     {
@@ -81,19 +80,10 @@
         try
         {
             IChartProvider provider = (IChartProvider) component;
-
+            
             Chart chart = provider.getChart();
-
-            OutputStream output = _response.getOutputStream(new ContentType("image/jpeg"));
-
-            // I've seen a few bits of wierdness (including a JVM crash) inside this code.
-            // Hopefully, its a multi-threading problem that can be resolved
-            // by synchronizing.
-
-            synchronized (this)
-            {
-                JPEGEncoder13.encode(chart, 1.0f, output);
-            }
+            
+            JPEGEncoder13.encode(chart, 1.0f, _response);
         }
         catch (ClassCastException ex)
         {
@@ -130,7 +120,7 @@
     }
 
     /** @since 4.0 */
-    public void setResponse(WebResponse response)
+    public void setResponse(HttpServletResponse response)
     {
         _response = response;
     }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.render.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.render.xml?view=diff&rev=481667&r1=481666&r2=481667
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.render.xml (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.render.xml Sat Dec  2 15:19:22 2006
@@ -55,25 +55,8 @@
   
   </service-point>
   
-  <service-point id="DirectLinkWorker" 
-                interface="org.apache.tapestry.services.ComponentRenderWorker">
-    
-    Wires the optional parameters updateComponents/async/json shared by all IDirect components
-    to client side javascript IO events if specified.
-    
-    <invoke-factory model="threaded">
-      <construct class="org.apache.tapestry.link.DirectLinkWorker"
-                 initialize-method="initialize" >
-        <set property="script" value="/org/apache/tapestry/link/DirectLinkWorker.script" />
-        <set-service property="scriptSource" service-id="tapestry.script.ScriptSource"/>
-      </construct>
-    </invoke-factory>
-  
-  </service-point>
-  
   <contribution configuration-id="ComponentRenderWorkers">
     <command id="component-event-connection" object="service:ComponentEventConnectionWorker" />
-    <command id="direct-link-worker" object="service:DirectLinkWorker" />
   </contribution>
   
 </module>

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=481667&r1=481666&r2=481667
==============================================================================
--- 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 Dec  2 15:19:22 2006
@@ -14,13 +14,19 @@
 
 package org.apache.tapestry.link;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.hivemind.HiveMind;
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.PageRenderSupport;
 import org.apache.tapestry.Tapestry;
+import org.apache.tapestry.TapestryUtils;
 import org.apache.tapestry.components.ILinkComponent;
 import org.apache.tapestry.engine.ILink;
+import org.apache.tapestry.util.ScriptUtils;
 
 /**
  * Default implementation of {@link org.apache.tapestry.link.ILinkRenderer},
@@ -74,6 +80,12 @@
             if (HiveMind.isNonBlank(target))
                 writer.attribute(getTargetAttribute(), target);
             
+            if (DirectLink.class.isInstance(linkComponent)) {
+                DirectLink direct = (DirectLink)linkComponent;
+                
+                renderAsyncParams(writer, cycle, direct);
+            }
+            
             beforeBodyRender(writer, cycle, linkComponent);
             
             // Allow the wrapped components a chance to render.
@@ -150,6 +162,52 @@
     {
     }
 
+    /**
+     * For {@link DirectLink} components only, manages writing out event handlers for link
+     * if any of the dynamic (async/json/etc) parameters are set on the component.
+     * 
+     * <p>
+     *  Will try to write the logic into the <code>onClick</code> attribute of the link 
+     *  if not bound, otherwise it will render it using the {@link DirectLink#getScript()} script.
+     * </p>
+     * 
+     * @param writer
+     *          The writer to render attributes into.
+     * @param cycle
+     *          The current request cycle.
+     * @param link
+     *          The component link being rendered for.
+     */
+    protected void renderAsyncParams(IMarkupWriter writer, IRequestCycle cycle, DirectLink link)
+    {
+        if (!link.isAsync() && !link.isJson() 
+                && (link.getUpdateComponents() == null 
+                || link.getUpdateComponents().size() <= 0))
+            return;
+        
+        if (!link.isParameterBound("onclick") && !link.isParameterBound("onClick")) {
+            writer.attribute("onclick", 
+                    "return tapestry.linkOnClick(this.href,'" + link.getClientId() + "', " 
+                    + link.isJson() + ")");
+            return;
+        }
+        
+        PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, link);
+        
+        if (prs == null)
+            return;
+        
+        Map parms = new HashMap();
+        
+        parms.put("component", link);
+        parms.put("json", Boolean.valueOf(link.isJson()));
+        parms.put("key", ScriptUtils.functionHash("onclick" + link.hashCode()));
+        
+        // execute script template
+        
+        link.getScript().execute(link, cycle, prs, parms);
+    }
+    
     /** @since 3.0 * */
 
     protected String getElement()

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java?view=diff&rev=481667&r1=481666&r2=481667
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java Sat Dec  2 15:19:22 2006
@@ -19,6 +19,7 @@
 import org.apache.tapestry.IActionListener;
 import org.apache.tapestry.IDirect;
 import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.IScript;
 import org.apache.tapestry.Tapestry;
 import org.apache.tapestry.engine.DirectServiceParameter;
 import org.apache.tapestry.engine.IEngineService;
@@ -123,4 +124,10 @@
      * @since 4.1
      */
     public abstract IEngineService getEngine();
+    
+    /**
+     * Injected.
+     * @return The script to process asynchronous connection hookups.
+     */
+    public abstract IScript getScript();
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.jwc
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.jwc?view=diff&rev=481667&r1=481666&r2=481667
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.jwc (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.jwc Sat Dec  2 15:19:22 2006
@@ -69,6 +69,8 @@
   
   <parameter name="async" default-value="false" />
   
+  <inject property="script" type="script" object="DirectLink.script"/>
+  
   <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/>
   <inject object="service:tapestry.services.Direct" property="engine"/>
   

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/core.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/core.js?view=diff&rev=481667&r1=481666&r2=481667
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/core.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/core.js Sat Dec  2 15:19:22 2006
@@ -344,6 +344,14 @@
 		if (!dj_undef(funcName, tapestry)){
         	dojo.event.disconnect(target, event, tapestry, funcName);
         }
+	},
+	
+	linkOnClick:function(url, id, isJson){
+		var content={beventname:"onClick"};
+		content["beventtarget.id"]=id;
+		
+		tapestry.bind(url, content, isJson);
+		return false;
 	}
 }