Author: hlship
Date: Wed Jun  1 22:56:16 2011
New Revision: 1130338

URL: http://svn.apache.org/viewvc?rev=1130338&view=rev
Log:
TAP5-1508: Optimize the @Import worker to initialize assets in the constructor, 
not on page load

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java?rev=1130338&r1=1130337&r2=1130338&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
 Wed Jun  1 22:56:16 2011
@@ -21,16 +21,18 @@ import org.apache.tapestry5.ComponentRes
 import org.apache.tapestry5.annotations.Import;
 import org.apache.tapestry5.annotations.SetupRender;
 import org.apache.tapestry5.func.F;
-import org.apache.tapestry5.func.Flow;
 import org.apache.tapestry5.func.Mapper;
 import org.apache.tapestry5.func.Worker;
 import org.apache.tapestry5.ioc.Resource;
 import org.apache.tapestry5.ioc.services.SymbolSource;
 import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.ComputedValue;
 import org.apache.tapestry5.plastic.FieldHandle;
+import org.apache.tapestry5.plastic.InstanceContext;
 import org.apache.tapestry5.plastic.MethodAdvice;
 import org.apache.tapestry5.plastic.MethodInvocation;
 import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticField;
 import org.apache.tapestry5.plastic.PlasticMethod;
 import org.apache.tapestry5.services.AssetSource;
 import org.apache.tapestry5.services.TransformConstants;
@@ -157,12 +159,12 @@ public class ImportWorker implements Com
 
         String[] expandedPaths = expandPaths(paths);
 
-        FieldHandle assetListHandle = 
componentClass.introduceField(Asset[].class,
-                "importedAssets_" + 
method.getDescription().methodName).getHandle();
+        PlasticField assetListField = 
componentClass.introduceField(Asset[].class,
+                "importedAssets_" + method.getDescription().methodName);
 
-        storeLocalizedAssetsAtPageLoad(componentClass, 
model.getBaseResource(), expandedPaths, assetListHandle);
+        initializeAssetsFromPaths(componentClass, model.getBaseResource(), 
expandedPaths, assetListField);
 
-        addMethodAssetOperationAdvice(method, assetListHandle, operation);
+        addMethodAssetOperationAdvice(method, assetListField.getHandle(), 
operation);
     }
 
     private String[] expandPaths(String[] paths)
@@ -175,24 +177,18 @@ public class ImportWorker implements Com
         return result;
     }
 
-    private void storeLocalizedAssetsAtPageLoad(PlasticClass componentClass, 
final Resource baseResource,
-            final String[] expandedPaths, final FieldHandle access)
+    private void initializeAssetsFromPaths(PlasticClass componentClass, final 
Resource baseResource,
+            final String[] expandedPaths, final PlasticField assetsField)
     {
-        MethodAdvice advice = new MethodAdvice()
+        assetsField.injectComputed(new ComputedValue<Asset[]>()
         {
-            public void advise(MethodInvocation invocation)
+            public Asset[] get(InstanceContext context)
             {
-                invocation.proceed();
-
-                ComponentResources resources = 
invocation.getInstanceContext().get(ComponentResources.class);
-
-                Asset[] assets = convertPathsToAssetArray(baseResource, 
resources.getLocale(), expandedPaths);
+                ComponentResources resources = 
context.get(ComponentResources.class);
 
-                access.set(invocation.getInstance(), assets);
+                return convertPathsToAssetArray(baseResource, 
resources.getLocale(), expandedPaths);
             }
-        };
-
-        
componentClass.introduceMethod(TransformConstants.CONTAINING_PAGE_DID_LOAD_DESCRIPTION).addAdvice(advice);
+        });
     }
 
     private Asset[] convertPathsToAssetArray(final Resource baseResource, 
final Locale locale, String[] assetPaths)


Reply via email to