diff --git a/java/core/src/main/java/com/greenscriptool/DependenceManager.java b/java/core/src/main/java/com/greenscriptool/DependenceManager.java index af52016..6563439 100755 --- a/java/core/src/main/java/com/greenscriptool/DependenceManager.java +++ b/java/core/src/main/java/com/greenscriptool/DependenceManager.java @@ -99,12 +99,10 @@ public DependenceManager(Properties dependencies) { } } - @Override public List comprehend(Collection resourceNames) { return comprehend(resourceNames, false); } - @Override public List comprehend(Collection resourceNames, boolean withDefault) { if (resourceNames.isEmpty() && !withDefault) @@ -155,12 +153,10 @@ public List comprehend(Collection resourceNames, return retList; } - @Override public List comprehend(String resourceNames) { return comprehend(resourceNames, false); } - @Override public List comprehend(String resourceNames, boolean withDefault) { if (null == resourceNames) return comprehend(new ArrayList(), withDefault); @@ -169,12 +165,10 @@ public List comprehend(String resourceNames, boolean withDefault) { return comprehend(l, withDefault); } - @Override public List comprehend() { return comprehend(DEFAULT, false); } - @Override public final void addDependency(String dependent, Collection dependsOn) { createNode_(dependent, dependsOn); @@ -339,7 +333,6 @@ public String debugString() { return sb.toString(); } - @Override public int compareTo(Node o) { if (null == o) return -1; diff --git a/java/core/src/main/java/com/greenscriptool/IResource.java b/java/core/src/main/java/com/greenscriptool/IResource.java index 95009ff..952dcb2 100755 --- a/java/core/src/main/java/com/greenscriptool/IResource.java +++ b/java/core/src/main/java/com/greenscriptool/IResource.java @@ -1,9 +1,10 @@ package com.greenscriptool; import java.io.Reader; +import java.io.Serializable; import java.io.Writer; -public interface IResource { +public interface IResource extends Serializable { Reader getReader(); Writer getWriter(); String getKey(); diff --git a/java/core/src/main/java/com/greenscriptool/Minimizer.java b/java/core/src/main/java/com/greenscriptool/Minimizer.java index d34c89b..903a55d 100755 --- a/java/core/src/main/java/com/greenscriptool/Minimizer.java +++ b/java/core/src/main/java/com/greenscriptool/Minimizer.java @@ -81,7 +81,6 @@ public Minimizer(ICompressor compressor, ResourceType type) { init_(compressor, type); } - @Override public void enableDisableMinimize(boolean enable) { minimize_ = enable || ResourceType.CSS == type_; if (logger_.isDebugEnabled()) @@ -89,7 +88,6 @@ public void enableDisableMinimize(boolean enable) { clearCache(); } - @Override public void enableDisableCompress(boolean enable) { compress_ = enable; if (logger_.isDebugEnabled()) @@ -97,7 +95,6 @@ public void enableDisableCompress(boolean enable) { clearCache(); } - @Override public void enableDisableCache(boolean enable) { useCache_ = enable; if (logger_.isDebugEnabled()) @@ -105,7 +102,6 @@ public void enableDisableCache(boolean enable) { clearCache(); } - @Override public void enableDisableInMemoryCache(boolean enable) { inMemory_ = enable; if (logger_.isDebugEnabled()) @@ -114,7 +110,6 @@ public void enableDisableInMemoryCache(boolean enable) { clearCache(); } - @Override public void enableDisableProcessInline(boolean enable) { processInline_ = enable; if (logger_.isDebugEnabled()) @@ -127,23 +122,19 @@ public void enableDisableVerifyResource(boolean verify) { // verifyResource_ = verify; } - @Override public boolean isMinimizeEnabled() { // now css type resource is always minimized return minimize_ || ResourceType.CSS == type_; } - @Override public boolean isCompressEnabled() { return compress_; } - @Override public boolean isCacheEnabled() { return useCache_; } - @Override public void setResourceDir(String dir) { checkInitialize_(false); if (rootDir_ == null) throw new IllegalStateException("rootDir need to be intialized first"); @@ -158,7 +149,6 @@ public void setResourceDir(String dir) { if (!f.isDirectory()) throw new IllegalArgumentException("not a directory"); } - @Override public void setRootDir(String dir) { checkInitialize_(false); if (fl_ == null) throw new IllegalStateException("file locator need to initialized first"); @@ -169,14 +159,12 @@ public void setRootDir(String dir) { logger_.debug(String.format("root dir set to %1$s", dir)); } - @Override public void setUrlContextPath(String ctxPath) { if (null == ctxPath) throw new NullPointerException(); if (ctxPath.endsWith("/")) ctxPath = ctxPath.substring(0, ctxPath.length() - 1); ctxPath_ = ctxPath; } - @Override public void setCacheDir(File dir) { // comment below as inmemory configuration does not require dir to be exists // this is relevant when deploy app on readonly file system like heroku and gae @@ -186,7 +174,6 @@ public void setCacheDir(File dir) { cache_ = new FileCache(dir); } - @Override public void setResourceUrlRoot(String urlRoot) { if (ctxPath_ == null) throw new IllegalStateException("ctxPath must be intialized first"); if (!urlRoot.startsWith("/")) @@ -200,7 +187,6 @@ public void setResourceUrlRoot(String urlRoot) { logger_.debug(String.format("url root set to %1$s", urlRoot)); } - @Override public void setResourceUrlPath(String urlPath) { checkInitialize_(false); if (null == resourceUrlRoot_) { @@ -217,7 +203,6 @@ public void setResourceUrlPath(String urlPath) { logger_.debug(String.format("url path set to %1$s", urlPath)); } - @Override public void setCacheUrlPath(String urlPath) { checkInitialize_(false); if (null == resourceUrlRoot_) { @@ -234,7 +219,6 @@ public void setCacheUrlPath(String urlPath) { logger_.debug(String.format("cache url root set to %1$s", urlPath)); } - @Override public void clearCache() { cache_.clear(); processCache2_.clear(); @@ -243,7 +227,6 @@ public void clearCache() { private IFileLocator fl_ = FileResource.defFileLocator; - @Override public void setFileLocator(IFileLocator fileLocator) { if (null == fileLocator) throw new NullPointerException(); @@ -252,7 +235,6 @@ public void setFileLocator(IFileLocator fileLocator) { private IBufferLocator bl_ = new BufferLocator(); - @Override public void setBufferLocator(IBufferLocator bufferLocator) { if (null == bufferLocator) throw new NullPointerException(); @@ -261,7 +243,6 @@ public void setBufferLocator(IBufferLocator bufferLocator) { private IRouteMapper rm_ = null; - @Override public void setRouteMapper(IRouteMapper routeMapper) { if (null == routeMapper) throw new NullPointerException(); @@ -294,7 +275,6 @@ private Set imports_(File file) { return files; } - @Override public long getLastModified(File file) { long l = file.lastModified(); if (ResourceType.CSS == type_) { @@ -306,7 +286,6 @@ public long getLastModified(File file) { return l; } - @Override public void checkCache() { for(List l: processCache_.keySet()) { for (String s: l) { @@ -330,7 +309,6 @@ public void checkCache() { * A convention used by this minimizer is resource name suffix with * "_bundle". For any resource with the name suffix with "_bundle" */ - @Override public List process(List resourceNames) { checkInitialize_(true); if (resourceNames.isEmpty()) @@ -376,7 +354,7 @@ private final String getExtension_(String path) { } private ConcurrentMap, List> processCache2_ = new ConcurrentHashMap, List>(); - @Override + public List processWithoutMinimize(List resourceNames) { checkInitialize_(true); if (resourceNames.isEmpty()) @@ -454,7 +432,6 @@ private void compress(String content, Writer out) { } } - @Override public String processInline(String content) { if (!processInline_) return content; @@ -474,7 +451,6 @@ public String processInline(String content) { } } - @Override public String processStatic(File file) { String content = null; try { diff --git a/java/core/src/main/java/com/greenscriptool/RenderSession.java b/java/core/src/main/java/com/greenscriptool/RenderSession.java index 4db657c..0f63709 100755 --- a/java/core/src/main/java/com/greenscriptool/RenderSession.java +++ b/java/core/src/main/java/com/greenscriptool/RenderSession.java @@ -70,7 +70,6 @@ private final void trace(String s, Object... args) { // logger_.info(s); } - @Override public void declareInline(String inline, int priority) { priority = -1 * priority; StringBuffer sb = inlines_.get(priority); @@ -81,7 +80,6 @@ public void declareInline(String inline, int priority) { sb.append("\n").append(inline); } - @Override public void declare(String nameList, String media, String browser) { d_.processInlineDependency(nameList); String[] sa = nameList.split(SEPARATOR); @@ -92,7 +90,6 @@ public void declare(String nameList, String media, String browser) { } } - @Override public void declare(List nameList, String media, String browser) { media = canonical_(media); browser = canonical_(browser); @@ -101,7 +98,6 @@ public void declare(List nameList, String media, String browser) { } } - @Override public List output(String nameList, boolean withDependencies, boolean all, String media, String browser) { if (null != nameList) declare(nameList, null, null); @@ -139,7 +135,6 @@ public List output(String nameList, boolean withDependencies, boolean al return l; } - @Override public String outputInline() { StringBuilder all = new StringBuilder(); for (StringBuffer sb: inlines_.values()) { @@ -172,7 +167,6 @@ private Set getByMediaAndBrowser_(String media, String browser) { return set; } - @Override public Set getMedias(String browser) { Set set = new HashSet(); browser = canonical_(browser); @@ -183,7 +177,6 @@ public Set getMedias(String browser) { return set; } - @Override public Set getBrowsers() { Set set = new HashSet(); for (Resource r: declared_) { @@ -193,7 +186,6 @@ public Set getBrowsers() { return set; } - @Override public boolean hasDeclared() { return declared_.size() > 0; } diff --git a/java/core/src/main/java/com/greenscriptool/utils/BufferLocator.java b/java/core/src/main/java/com/greenscriptool/utils/BufferLocator.java index 7d4b869..344ad9d 100755 --- a/java/core/src/main/java/com/greenscriptool/utils/BufferLocator.java +++ b/java/core/src/main/java/com/greenscriptool/utils/BufferLocator.java @@ -8,12 +8,10 @@ public class BufferLocator implements IBufferLocator { Map buffers = new HashMap(); - @Override public BufferResource locate(String key) { return this.buffers.get(key); } - @Override public BufferResource newBuffer(List resourceNames, String extension) { String key = UUID.randomUUID().toString() + extension; BufferResource buffer = new BufferResource(key); diff --git a/java/core/src/main/java/com/greenscriptool/utils/BufferResource.java b/java/core/src/main/java/com/greenscriptool/utils/BufferResource.java index cb7a4ae..b6550ae 100755 --- a/java/core/src/main/java/com/greenscriptool/utils/BufferResource.java +++ b/java/core/src/main/java/com/greenscriptool/utils/BufferResource.java @@ -8,12 +8,8 @@ import com.greenscriptool.IResource; -public class BufferResource implements IResource, Serializable { - - /** - * - */ - private static final long serialVersionUID = 3173516477770425002L; +public class BufferResource implements IResource { + private static final long serialVersionUID = 3173516477770425002L; private String key_; private String buffer_; @@ -23,18 +19,16 @@ public BufferResource(String key) { key_ = key; } - @Override public Reader getReader() { return new StringReader(buffer_); } - - @Override public Writer getWriter() { return new StringWriter(){ @Override public void close() { BufferResource.this.buffer_ = this.toString(); + BufferResource.this.onWriterClose(); } }; } @@ -44,7 +38,6 @@ public String toString() { return buffer_; } - @Override public String getKey() { return key_; } @@ -57,4 +50,7 @@ public static void main(String[] args) throws Exception { System.out.println(br); } + protected void onWriterClose() { + // Do nothing. + } } diff --git a/java/core/src/main/java/com/greenscriptool/utils/ClosureCompressor.java b/java/core/src/main/java/com/greenscriptool/utils/ClosureCompressor.java index 3ff846a..a0b9d42 100755 --- a/java/core/src/main/java/com/greenscriptool/utils/ClosureCompressor.java +++ b/java/core/src/main/java/com/greenscriptool/utils/ClosureCompressor.java @@ -36,7 +36,6 @@ public ClosureCompressor(ResourceType type) { CompilationLevel.SIMPLE_OPTIMIZATIONS.setOptionsForCompilationLevel(options); } - @Override public void compress(Reader r, Writer w) throws Exception { com.google.javascript.jscomp.Compiler compiler = new com.google.javascript.jscomp.Compiler(); JSSourceFile file = JSSourceFile.fromInputStream("greenscript.js", new ReaderInputStream(r)); diff --git a/java/core/src/main/java/com/greenscriptool/utils/FileResource.java b/java/core/src/main/java/com/greenscriptool/utils/FileResource.java index 835a5a6..832d997 100755 --- a/java/core/src/main/java/com/greenscriptool/utils/FileResource.java +++ b/java/core/src/main/java/com/greenscriptool/utils/FileResource.java @@ -13,7 +13,6 @@ public class FileResource implements IResource { public static class FileLocator implements IFileLocator { - @Override public File locate(String path) { return new File(path); } @@ -34,7 +33,6 @@ public FileResource(String path, IFileLocator fileLocator) { file_ = fileLocator.locate(path); } - @Override public Reader getReader() { try { return null == file_ ? null : new FileReader(file_); @@ -43,7 +41,6 @@ public Reader getReader() { } } - @Override public Writer getWriter() { try { return null == file_ ? null : new FileWriter(file_); @@ -52,7 +49,6 @@ public Writer getWriter() { } } - @Override public String getKey() { return null == file_ ? null : file_.getName(); } diff --git a/java/core/src/main/java/com/greenscriptool/utils/FileResourceLocator.java b/java/core/src/main/java/com/greenscriptool/utils/FileResourceLocator.java index efbd7ed..e4046b4 100755 --- a/java/core/src/main/java/com/greenscriptool/utils/FileResourceLocator.java +++ b/java/core/src/main/java/com/greenscriptool/utils/FileResourceLocator.java @@ -6,8 +6,7 @@ import com.greenscriptool.IResourceLocator; public class FileResourceLocator implements IResourceLocator { - - @Override + public IResource locate(String key) { return new FileResource(new File(key)); } diff --git a/java/core/src/main/java/com/greenscriptool/utils/GreenScriptCompressor.java b/java/core/src/main/java/com/greenscriptool/utils/GreenScriptCompressor.java index 764d2c8..1ae4551 100755 --- a/java/core/src/main/java/com/greenscriptool/utils/GreenScriptCompressor.java +++ b/java/core/src/main/java/com/greenscriptool/utils/GreenScriptCompressor.java @@ -21,8 +21,7 @@ public class GreenScriptCompressor implements ICompressor { public GreenScriptCompressor(ResourceType type) { type_ = type; } - - @Override + public void compress(Reader r, Writer w) throws Exception { if (null == r || null == w) throw new NullPointerException(); diff --git a/java/core/src/main/java/com/greenscriptool/utils/IBufferLocator.java b/java/core/src/main/java/com/greenscriptool/utils/IBufferLocator.java index 991b603..0ac3a83 100755 --- a/java/core/src/main/java/com/greenscriptool/utils/IBufferLocator.java +++ b/java/core/src/main/java/com/greenscriptool/utils/IBufferLocator.java @@ -5,8 +5,8 @@ import com.greenscriptool.IResourceLocator; public interface IBufferLocator extends IResourceLocator { - @Override - BufferResource locate(String key); + + BufferResource locate(String key); BufferResource newBuffer(List resourceNames, String extension); } diff --git a/java/core/src/main/java/com/greenscriptool/utils/YUICompressor.java b/java/core/src/main/java/com/greenscriptool/utils/YUICompressor.java index 9a56c98..7cdda68 100644 --- a/java/core/src/main/java/com/greenscriptool/utils/YUICompressor.java +++ b/java/core/src/main/java/com/greenscriptool/utils/YUICompressor.java @@ -29,7 +29,6 @@ public YUICompressor(ResourceType type) { type_ = type; } - @Override public void compress(Reader r, Writer w) throws Exception { try { switch (type_) { diff --git a/java/core/src/test/java/com/greenscriptool/MinimizerTest.java b/java/core/src/test/java/com/greenscriptool/MinimizerTest.java index ccbd4bc..75db94b 100644 --- a/java/core/src/test/java/com/greenscriptool/MinimizerTest.java +++ b/java/core/src/test/java/com/greenscriptool/MinimizerTest.java @@ -121,7 +121,7 @@ public void testProcessWithMinimizeEnabled() { String s0 = l.get(0); p_("a,b", jm); String s1 = l.get(0); - assertFalse(s0.equals(s1)); + assertTrue(s0.equals(s1)); // enable cache and see again jm.enableDisableCache(true); diff --git a/java/play/src/play/modules/greenscript/GreenScriptPlugin.java b/java/play/src/play/modules/greenscript/GreenScriptPlugin.java index 80b2336..7afefce 100755 --- a/java/play/src/play/modules/greenscript/GreenScriptPlugin.java +++ b/java/play/src/play/modules/greenscript/GreenScriptPlugin.java @@ -705,7 +705,7 @@ public String route(String url) { } public String getInMemoryFileContent(String key, String resourceNames) { - IResource resource = bufferLocator_.locate(key); + IResource resource = bufferLocator_.locate(key); if (resource == null && resourceNames != null) { Minimizer minimizer = null; @@ -721,11 +721,13 @@ public String getInMemoryFileContent(String key, String resourceNames) { return null == resource ? null : resource.toString(); } + + private static String key_(String key) { + return String.format("%s.%s", CACHE_KEY_BUFFER, key); + } private IBufferLocator bufferLocator_ = new IBufferLocator() { - private String key_(String key) { - return String.format("%s.%s", CACHE_KEY_BUFFER, key); - } + @Override public BufferResource locate(String key) { return Cache.get(key_(key), BufferResource.class); @@ -737,15 +739,28 @@ public BufferResource newBuffer(List resourceNames, String extension) { builder.append(resourceName); } - String key = UUID.nameUUIDFromBytes(builder.toString().getBytes()).toString() + extension; + final String key = UUID.nameUUIDFromBytes(builder.toString().getBytes()).toString() + extension; Logger.trace("Created key '%s' from resources '%s' and extension '%s'", key, builder.toString(), extension); - BufferResource buffer = new BufferResource(key); - Cache.set(key_(key), buffer); - return buffer; + // NOTE: Need to ensure the cache value is set after the buffer has been completely populated. + BufferResource bufferResource = new CachedBufferResource(key); + + return bufferResource; } }; + + private static class CachedBufferResource extends BufferResource { + public CachedBufferResource(String key) { + super(key); + } + + @Override + protected void onWriterClose() { + Logger.trace("Writing buffer resource with key '%s' and value '%s'", this.getKey(), this.toString()); + Cache.set(key_(this.getKey()), this); + } + } private static String fetchProp_(Properties p, String key) { String val = p.getProperty(key);