Author: hlship Date: Thu Mar 3 18:42:23 2011 New Revision: 1076721 URL: http://svn.apache.org/viewvc?rev=1076721&view=rev Log: TAP5-73: Convert the master ResourceMinimizer to use a configuration that maps content types to ResourceMinimizer implementations
Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/MasterResourceMinimizer.java - copied, changed from r1076456, tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/DefaultResourceMinimizer.java Removed: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/DefaultResourceMinimizer.java Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/AssetsModule.java tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResourceMinimizer.java Copied: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/MasterResourceMinimizer.java (from r1076456, tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/DefaultResourceMinimizer.java) URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/MasterResourceMinimizer.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/MasterResourceMinimizer.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/DefaultResourceMinimizer.java&r1=1076456&r2=1076721&rev=1076721&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/DefaultResourceMinimizer.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/MasterResourceMinimizer.java Thu Mar 3 18:42:23 2011 @@ -15,18 +15,32 @@ package org.apache.tapestry5.internal.services.assets; import java.io.IOException; +import java.util.Map; +import org.apache.tapestry5.ioc.annotations.Marker; +import org.apache.tapestry5.ioc.annotations.Primary; import org.apache.tapestry5.services.assets.ResourceMinimizer; import org.apache.tapestry5.services.assets.StreamableResource; /** - * Default implementation that simply returns the resource unchanged. + * Implementation that delegates, via its configuration, to a real implementation based on the content type of the + * resource. */ -public class DefaultResourceMinimizer implements ResourceMinimizer +@Marker(Primary.class) +public class MasterResourceMinimizer implements ResourceMinimizer { + private final Map<String, ResourceMinimizer> configuration; + + public MasterResourceMinimizer(Map<String, ResourceMinimizer> configuration) + { + this.configuration = configuration; + } + /** Does nothing; an override of this service can be installed to provide minimization. */ public StreamableResource minimize(StreamableResource resource) throws IOException { - return resource; + ResourceMinimizer minimizer = configuration.get(resource.getContentType()); + + return minimizer == null ? resource : minimizer.minimize(resource); } } 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=1076721&r1=1076720&r2=1076721&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 Thu Mar 3 18:42:23 2011 @@ -17,7 +17,7 @@ package org.apache.tapestry5.services.as import org.apache.tapestry5.SymbolConstants; import org.apache.tapestry5.internal.services.assets.CompressionAnalyzerImpl; import org.apache.tapestry5.internal.services.assets.ContentTypeAnalyzerImpl; -import org.apache.tapestry5.internal.services.assets.DefaultResourceMinimizer; +import org.apache.tapestry5.internal.services.assets.MasterResourceMinimizer; import org.apache.tapestry5.internal.services.assets.ResourceChangeTracker; import org.apache.tapestry5.internal.services.assets.ResourceChangeTrackerImpl; import org.apache.tapestry5.internal.services.assets.SRSCachingInterceptor; @@ -48,7 +48,7 @@ public class AssetsModule binder.bind(CompressionAnalyzer.class, CompressionAnalyzerImpl.class); binder.bind(ContentTypeAnalyzer.class, ContentTypeAnalyzerImpl.class); binder.bind(ResourceChangeTracker.class, ResourceChangeTrackerImpl.class); - binder.bind(ResourceMinimizer.class, DefaultResourceMinimizer.class); + binder.bind(ResourceMinimizer.class, MasterResourceMinimizer.class); } @Contribute(SymbolProvider.class) Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResourceMinimizer.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResourceMinimizer.java?rev=1076721&r1=1076720&r2=1076721&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResourceMinimizer.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/assets/ResourceMinimizer.java Thu Mar 3 18:42:23 2011 @@ -16,18 +16,24 @@ package org.apache.tapestry5.services.as import java.io.IOException; +import org.apache.tapestry5.ioc.annotations.Primary; +import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration; + /** * Certain kinds of resources can be minimized: this primarily refers to JavaScript and CSS, both of which contain * whitespace, comments and other features that can be reduced. + * <p> + * The service configuration maps a MIME content type (e.g., "text/javascript") to an appropriate implementation of this + * interface. The master service has the @{@link Primary} marker interface. * * @since 5.3.0 */ +@UsesMappedConfiguration(ResourceMinimizer.class) public interface ResourceMinimizer { /** * Checks the {@linkplain StreamableResource#getContentType() content type} of the resource and applies an - * appropriate - * minimization to it if possible. + * appropriate minimization to it if possible. * * @param resource * to minimize