You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by ml...@apache.org on 2011/10/26 12:50:59 UTC
svn commit: r1189123 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/
main/java/org/apache/tapestry5/internal/services/assets/
main/java/org/apache/tapestry5/services/assets/
test/java/org/apache/tapestry5/internal/serv...
Author: mlusetti
Date: Wed Oct 26 10:50:59 2011
New Revision: 1189123
URL: http://svn.apache.org/viewvc?rev=1189123&view=rev
Log:
TAP5-1483 Make configuration knob to use of BaseURLSource to build fully qualified Assets URL, defaults to false
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/AssetsModule.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextAssetFactoryTest.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java?rev=1189123&r1=1189122&r2=1189123&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java Wed Oct 26 10:50:59 2011
@@ -353,4 +353,11 @@ public class SymbolConstants
* @since 5.3
*/
public static final String APPLICATION_FOLDER = "tapestry.application-folder";
+
+ /**
+ * Boolean value to indicate if every {@link org.apache.tapestry5.Asset2} should be fully qualified or not.
+ * Default to <code>false</code> meaning no Asset URL will be fully qualified.
+ * @since 5.3
+ */
+ public static final String ASSET_URL_FULL_QUALIFIED = "tapestry.asset-url-fully-qualified";
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImpl.java?rev=1189123&r1=1189122&r2=1189123&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImpl.java Wed Oct 26 10:50:59 2011
@@ -17,6 +17,7 @@ package org.apache.tapestry5.internal.se
import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.internal.services.RequestConstants;
import org.apache.tapestry5.ioc.annotations.Symbol;
+import org.apache.tapestry5.services.BaseURLSource;
import org.apache.tapestry5.services.Request;
import org.apache.tapestry5.services.assets.AssetPathConstructor;
@@ -26,15 +27,26 @@ public class AssetPathConstructorImpl im
private final String prefix;
+ private final BaseURLSource baseURLSource;
+
+ private final boolean fullyQualified;
+
public AssetPathConstructorImpl(Request request,
+ BaseURLSource baseURLSource,
@Symbol(SymbolConstants.APPLICATION_VERSION)
String applicationVersion,
@Symbol(SymbolConstants.APPLICATION_FOLDER)
- String applicationFolder)
+ String applicationFolder,
+
+ @Symbol(SymbolConstants.ASSET_URL_FULL_QUALIFIED)
+ boolean fullyQualified)
{
this.request = request;
+ this.baseURLSource = baseURLSource;
+
+ this.fullyQualified = fullyQualified;
String folder = applicationFolder.equals("") ? "" : "/" + applicationFolder;
@@ -43,7 +55,12 @@ public class AssetPathConstructorImpl im
public String constructAssetPath(String virtualFolder, String path)
{
- StringBuilder builder = new StringBuilder(request.getContextPath());
+ StringBuilder builder = new StringBuilder();
+
+ if (fullyQualified)
+ builder.append(baseURLSource.getBaseURL(request.isSecure()));
+
+ builder.append(request.getContextPath());
builder.append(prefix);
builder.append(virtualFolder);
builder.append('/');
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/AssetsModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/AssetsModule.java?rev=1189123&r1=1189122&r2=1189123&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/AssetsModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/AssetsModule.java Wed Oct 26 10:50:59 2011
@@ -45,6 +45,7 @@ public class AssetsModule
configuration.add(SymbolConstants.MINIFICATION_ENABLED, SymbolConstants.PRODUCTION_MODE_VALUE);
configuration.add(SymbolConstants.GZIP_COMPRESSION_ENABLED, "true");
configuration.add(SymbolConstants.COMBINE_SCRIPTS, SymbolConstants.PRODUCTION_MODE_VALUE);
+ configuration.add(SymbolConstants.ASSET_URL_FULL_QUALIFIED, "false");
}
// The use of decorators is to allow third-parties to get their own extensions
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java?rev=1189123&r1=1189122&r2=1189123&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java Wed Oct 26 10:50:59 2011
@@ -18,6 +18,7 @@ import org.apache.tapestry5.internal.ser
import org.apache.tapestry5.internal.test.InternalBaseTestCase;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.util.UnknownValueException;
+import org.apache.tapestry5.services.BaseURLSource;
import org.apache.tapestry5.services.ClasspathAssetAliasManager;
import org.apache.tapestry5.services.Request;
import org.testng.annotations.DataProvider;
@@ -79,12 +80,14 @@ public class ClasspathAssetAliasManagerI
{
Request request = mockRequest();
+ BaseURLSource baseURLSource = newMock(BaseURLSource.class);
+
train_getContextPath(request, "/ctx");
replay();
ClasspathAssetAliasManager manager = new ClasspathAssetAliasManagerImpl(new AssetPathConstructorImpl(request,
- APP_VERSION, ""), configuration());
+ baseURLSource, APP_VERSION, "", false), configuration());
String expectedPath = "/ctx" + RequestConstants.ASSET_PATH_PREFIX + APP_VERSION + "/" + expectedClientURL;
assertEquals(manager.toClientURL(resourcePath), expectedPath);
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextAssetFactoryTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextAssetFactoryTest.java?rev=1189123&r1=1189122&r2=1189123&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextAssetFactoryTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextAssetFactoryTest.java Wed Oct 26 10:50:59 2011
@@ -19,6 +19,7 @@ import org.apache.tapestry5.internal.ser
import org.apache.tapestry5.internal.test.InternalBaseTestCase;
import org.apache.tapestry5.ioc.Resource;
import org.apache.tapestry5.services.AssetFactory;
+import org.apache.tapestry5.services.BaseURLSource;
import org.apache.tapestry5.services.Context;
import org.apache.tapestry5.services.Request;
import org.testng.annotations.Test;
@@ -31,7 +32,7 @@ public class ContextAssetFactoryTest ext
public void root_resource()
{
Context context = mockContext();
- Request request = mockRequest();
+ // Request request = mockRequest();
replay();
@@ -48,14 +49,63 @@ public class ContextAssetFactoryTest ext
Context context = mockContext();
Request request = mockRequest();
+ BaseURLSource baseURLSource = newMock(BaseURLSource.class);
+
+ Resource r = new ContextResource(context, "foo/Bar.txt");
+
+ train_getContextPath(request, "/context");
+
+ replay();
+
+ AssetFactory factory = new ContextAssetFactory(
+ new AssetPathConstructorImpl(request,
+ baseURLSource,
+ "4.5.6",
+ "",
+ false
+ ),
+ context,
+ new IdentityAssetPathConverter()
+ );
+
+ Asset asset = factory.createAsset(r);
+
+ assertSame(asset.getResource(), r);
+ assertEquals(asset.toClientURL(), "/context/assets/4.5.6/ctx/foo/Bar.txt");
+
+ // In real life, toString() is the same as toClientURL(), but we're testing
+ // that the optimize method is getting called, basically.
+
+ assertEquals(asset.toString(), "/context/assets/4.5.6/ctx/foo/Bar.txt");
+
+ verify();
+ }
+
+ @Test
+ public void asset_client_URL_fully_qualified()
+ {
+ Context context = mockContext();
+ Request request = mockRequest();
+
+ BaseURLSource baseURLSource = newMock(BaseURLSource.class);
+
Resource r = new ContextResource(context, "foo/Bar.txt");
train_getContextPath(request, "/context");
+ train_getBaseSource(baseURLSource, request);
replay();
- AssetFactory factory = new ContextAssetFactory(new AssetPathConstructorImpl(request, "4.5.6", ""), context,
- new IdentityAssetPathConverter());
+ AssetFactory factory = new ContextAssetFactory(
+ new AssetPathConstructorImpl(request,
+ baseURLSource,
+ "4.5.6",
+ "",
+ true
+ ),
+ context,
+ new IdentityAssetPathConverter()
+ );
Asset asset = factory.createAsset(r);
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java?rev=1189123&r1=1189122&r2=1189123&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java Wed Oct 26 10:50:59 2011
@@ -171,6 +171,12 @@ public class InternalBaseTestCase extend
expect(request.getContextPath()).andReturn(contextPath).atLeastOnce();
}
+ protected final void train_getBaseSource(BaseURLSource baseURLSource, Request request)
+ {
+ expect(request.isSecure()).andReturn(false);
+ expect(baseURLSource.getBaseURL(false)).andReturn("");
+ }
+
protected final void train_resolvePageClassNameToPageName(ComponentClassResolver resolver, String pageClassName,
String pageName)
{