You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/04/01 01:16:15 UTC
svn commit: r1087498 - in
/tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor:
AbstractMinimizer.java JavaScriptResourceMinimizer.java
Author: hlship
Date: Thu Mar 31 23:16:15 2011
New Revision: 1087498
URL: http://svn.apache.org/viewvc?rev=1087498&view=rev
Log:
TAP5-73: Refactor out a base class for implementing minimizers
Added:
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/AbstractMinimizer.java
- copied, changed from r1087497, tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java
Modified:
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java
Copied: tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/AbstractMinimizer.java (from r1087497, tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/AbstractMinimizer.java?p2=tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/AbstractMinimizer.java&p1=tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java&r1=1087497&r2=1087498&rev=1087498&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java (original)
+++ tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/AbstractMinimizer.java Thu Mar 31 23:16:15 2011
@@ -35,12 +35,7 @@ import org.mozilla.javascript.ErrorRepor
import org.mozilla.javascript.EvaluatorException;
import org.slf4j.Logger;
-import com.yahoo.platform.yui.compressor.JavaScriptCompressor;
-
-/**
- * JavaScript resource minimizer based on the YUI {@link JavaScriptCompressor}.
- */
-public class JavaScriptResourceMinimizer implements ResourceMinimizer
+public abstract class AbstractMinimizer implements ResourceMinimizer
{
private static final double NANOS_TO_MILLIS = 1.0d / 1000000.0d;
@@ -48,40 +43,15 @@ public class JavaScriptResourceMinimizer
private final OperationTracker tracker;
- public JavaScriptResourceMinimizer(Logger logger, OperationTracker tracker)
+ private final String resourceType;
+
+ public AbstractMinimizer(Logger logger, OperationTracker tracker, String resourceType)
{
this.logger = logger;
this.tracker = tracker;
+ this.resourceType = resourceType;
}
- private final ErrorReporter errorReporter = new ErrorReporter()
- {
- private String format(String message, int line, int lineOffset)
- {
- if (line < 0)
- return message;
-
- return String.format("(%d:%d): %s", line, lineOffset, message);
- }
-
- public void warning(String message, String sourceName, int line, String lineSource, int lineOffset)
- {
- logger.warn(format(message, line, lineOffset));
- }
-
- public EvaluatorException runtimeError(String message, String sourceName, int line, String lineSource,
- int lineOffset)
- {
- error(message, sourceName, line, lineSource, lineOffset);
-
- return new EvaluatorException(message);
- }
-
- public void error(String message, String sourceName, int line, String lineSource, int lineOffset)
- {
- }
- };
-
public StreamableResource minimize(StreamableResource input) throws IOException
{
long startNanos = System.nanoTime();
@@ -94,19 +64,17 @@ public class JavaScriptResourceMinimizer
final Writer writer = new OutputStreamWriter(bos);
- TapestryInternalUtils.performIO(tracker, "Compressing JavaScript using YUICompressor", new IOOperation()
+ TapestryInternalUtils.performIO(tracker, "Minimizing " + resourceType, new IOOperation()
{
public void perform() throws IOException
{
try
{
- JavaScriptCompressor compressor = new JavaScriptCompressor(reader, errorReporter);
-
- compressor.compress(writer, 0, true, false, false, false);
+ doMinimize(reader, writer);
}
catch (EvaluatorException ex)
{
- throw new RuntimeException(String.format("Unable to compress JavaScript: %s",
+ throw new RuntimeException(String.format("Unable to minimize %s: %s", resourceType,
InternalUtils.toMessage(ex)), ex);
}
}
@@ -126,8 +94,8 @@ public class JavaScriptResourceMinimizer
{
double elapsedMillis = ((double) elapsedNanos) * NANOS_TO_MILLIS;
- logger.debug(String.format("Minimized %,d input bytes to %,d output bytes in %.2f ms", input.getSize(),
- output.getSize(), elapsedMillis));
+ logger.debug(String.format("Minimized %,d input bytes of %s to %,d output bytes in %.2f ms",
+ input.getSize(), resourceType, output.getSize(), elapsedMillis));
}
return output;
@@ -137,4 +105,14 @@ public class JavaScriptResourceMinimizer
{
return new InputStreamReader(input, "UTF-8");
}
+
+ /**
+ * Implemented in subclasses to do the actual work.
+ *
+ * @param input
+ * content to minimize
+ * @param output
+ * writer for minimized version of input
+ */
+ protected abstract void doMinimize(Reader input, Writer output) throws IOException;
}
Modified: tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java?rev=1087498&r1=1087497&r2=1087498&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java (original)
+++ tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java Thu Mar 31 23:16:15 2011
@@ -14,23 +14,11 @@
package org.apache.tapestry5.internal.yuicompressor;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
-import org.apache.tapestry5.internal.IOOperation;
-import org.apache.tapestry5.internal.TapestryInternalUtils;
-import org.apache.tapestry5.internal.services.assets.BytestreamCache;
-import org.apache.tapestry5.internal.services.assets.StreamableResourceImpl;
import org.apache.tapestry5.ioc.OperationTracker;
-import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.services.assets.CompressionStatus;
-import org.apache.tapestry5.services.assets.ResourceMinimizer;
-import org.apache.tapestry5.services.assets.StreamableResource;
import org.mozilla.javascript.ErrorReporter;
import org.mozilla.javascript.EvaluatorException;
import org.slf4j.Logger;
@@ -40,101 +28,49 @@ import com.yahoo.platform.yui.compressor
/**
* JavaScript resource minimizer based on the YUI {@link JavaScriptCompressor}.
*/
-public class JavaScriptResourceMinimizer implements ResourceMinimizer
+public class JavaScriptResourceMinimizer extends AbstractMinimizer
{
- private static final double NANOS_TO_MILLIS = 1.0d / 1000000.0d;
+ private final ErrorReporter errorReporter;
- private final Logger logger;
-
- private final OperationTracker tracker;
-
- public JavaScriptResourceMinimizer(Logger logger, OperationTracker tracker)
- {
- this.logger = logger;
- this.tracker = tracker;
- }
-
- private final ErrorReporter errorReporter = new ErrorReporter()
+ public JavaScriptResourceMinimizer(final Logger logger, OperationTracker tracker)
{
- private String format(String message, int line, int lineOffset)
- {
- if (line < 0)
- return message;
+ super(logger, tracker, "JavaScript");
- return String.format("(%d:%d): %s", line, lineOffset, message);
- }
-
- public void warning(String message, String sourceName, int line, String lineSource, int lineOffset)
+ errorReporter = new ErrorReporter()
{
- logger.warn(format(message, line, lineOffset));
- }
-
- public EvaluatorException runtimeError(String message, String sourceName, int line, String lineSource,
- int lineOffset)
- {
- error(message, sourceName, line, lineSource, lineOffset);
-
- return new EvaluatorException(message);
- }
-
- public void error(String message, String sourceName, int line, String lineSource, int lineOffset)
- {
- }
- };
-
- public StreamableResource minimize(StreamableResource input) throws IOException
- {
- long startNanos = System.nanoTime();
-
- InputStream inputStream = input.openStream();
-
- final Reader reader = toReader(inputStream);
-
- ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
+ private String format(String message, int line, int lineOffset)
+ {
+ if (line < 0)
+ return message;
- final Writer writer = new OutputStreamWriter(bos);
+ return String.format("(%d:%d): %s", line, lineOffset, message);
+ }
- TapestryInternalUtils.performIO(tracker, "Compressing JavaScript using YUICompressor", new IOOperation()
- {
- public void perform() throws IOException
+ public void warning(String message, String sourceName, int line, String lineSource, int lineOffset)
{
- try
- {
- JavaScriptCompressor compressor = new JavaScriptCompressor(reader, errorReporter);
-
- compressor.compress(writer, 0, true, false, false, false);
- }
- catch (EvaluatorException ex)
- {
- throw new RuntimeException(String.format("Unable to compress JavaScript: %s",
- InternalUtils.toMessage(ex)), ex);
- }
+ logger.warn(format(message, line, lineOffset));
}
- });
-
- inputStream.close();
- writer.close();
-
- // The content is minimized, but can still be (GZip) compressed.
- StreamableResource output = new StreamableResourceImpl(input.getContentType(), CompressionStatus.COMPRESSABLE,
- input.getLastModified(), new BytestreamCache(bos));
-
- long elapsedNanos = System.nanoTime() - startNanos;
+ public EvaluatorException runtimeError(String message, String sourceName, int line, String lineSource,
+ int lineOffset)
+ {
+ error(message, sourceName, line, lineSource, lineOffset);
- if (logger.isDebugEnabled())
- {
- double elapsedMillis = ((double) elapsedNanos) * NANOS_TO_MILLIS;
+ return new EvaluatorException(message);
+ }
- logger.debug(String.format("Minimized %,d input bytes to %,d output bytes in %.2f ms", input.getSize(),
- output.getSize(), elapsedMillis));
- }
+ public void error(String message, String sourceName, int line, String lineSource, int lineOffset)
+ {
+ logger.error(format(message, line, lineOffset));
+ }
+ };
- return output;
}
- private Reader toReader(InputStream input) throws IOException
+ protected void doMinimize(Reader input, Writer output) throws IOException
{
- return new InputStreamReader(input, "UTF-8");
+ JavaScriptCompressor compressor = new JavaScriptCompressor(input, errorReporter);
+
+ compressor.compress(output, 0, true, false, false, false);
}
}