Repository: tapestry-5
Updated Branches:
  refs/heads/master 323cb8c34 -> 814fdb509


Make LessResourceTransformer easier to subclass and extend


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/814fdb50
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/814fdb50
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/814fdb50

Branch: refs/heads/master
Commit: 814fdb509f712052d38b324caeadbcb2c0df180d
Parents: 323cb8c
Author: Howard M. Lewis Ship <[email protected]>
Authored: Fri May 30 13:33:30 2014 -0700
Committer: Howard M. Lewis Ship <[email protected]>
Committed: Fri May 30 15:02:32 2014 -0700

----------------------------------------------------------------------
 .../webresources/LessResourceTransformer.java   | 95 ++++---------------
 .../webresources/ResourceLessSource.java        | 97 ++++++++++++++++++++
 2 files changed, 114 insertions(+), 78 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/814fdb50/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/LessResourceTransformer.java
----------------------------------------------------------------------
diff --git 
a/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/LessResourceTransformer.java
 
b/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/LessResourceTransformer.java
index 6ed705f..ebaf35d 100644
--- 
a/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/LessResourceTransformer.java
+++ 
b/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/LessResourceTransformer.java
@@ -1,3 +1,5 @@
+// Copyright 2013-2014 The Apache Software Foundation
+//
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
@@ -16,14 +18,14 @@ import com.github.sommeri.less4j.Less4jException;
 import com.github.sommeri.less4j.LessCompiler;
 import com.github.sommeri.less4j.LessSource;
 import com.github.sommeri.less4j.core.DefaultLessCompiler;
-import org.apache.commons.io.IOUtils;
 import org.apache.tapestry5.internal.services.assets.BytestreamCache;
 import org.apache.tapestry5.ioc.Resource;
-import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.services.assets.ResourceDependencies;
 import org.apache.tapestry5.services.assets.ResourceTransformer;
 
-import java.io.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
 
 /**
  * Direct wrapper around the LessCompiler, so that Less source files may use 
{@code @import}, which isn't
@@ -39,79 +41,6 @@ public class LessResourceTransformer implements 
ResourceTransformer
         return "text/css";
     }
 
-    protected class ResourceLessSource extends LessSource
-    {
-        private final Resource resource;
-
-        private final ResourceDependencies dependencies;
-
-        protected ResourceLessSource(Resource resource, ResourceDependencies 
dependencies)
-        {
-            this.resource = resource;
-            this.dependencies = dependencies;
-        }
-
-        @Override
-        public LessSource relativeSource(String filename) throws FileNotFound, 
CannotReadFile, StringSourceException
-        {
-            Resource relative = resource.forFile(filename);
-
-            if (!relative.exists())
-            {
-                throw new FileNotFound();
-            }
-
-            dependencies.addDependency(relative);
-
-            return new ResourceLessSource(relative, dependencies);
-        }
-
-        @Override
-        public String getContent() throws FileNotFound, CannotReadFile
-        {
-            // Adapted from Less's URLSource
-            Reader input = null;
-            try
-            {
-                input = new InputStreamReader(resource.openStream());
-                String content = IOUtils.toString(input).replace("\r\n", "\n");
-
-                return content;
-            } catch (FileNotFoundException ex)
-            {
-                throw new FileNotFound();
-            } catch (IOException ex)
-            {
-                throw new CannotReadFile();
-            } finally
-            {
-                InternalUtils.close(input);
-            }
-        }
-
-        @Override
-        public byte[] getBytes() throws FileNotFound, CannotReadFile
-        {
-            Reader input = null;
-            try
-            {
-                input = new InputStreamReader(resource.openStream());
-
-                return IOUtils.toByteArray(input);
-            } catch (FileNotFoundException ex)
-            {
-                throw new FileNotFound();
-            } catch (IOException ex)
-            {
-                throw new CannotReadFile();
-            } finally
-            {
-                InternalUtils.close(input);
-            }
-
-        }
-    }
-
 
     @Override
     public InputStream transform(Resource source, ResourceDependencies 
dependencies) throws IOException
@@ -121,13 +50,13 @@ public class LessResourceTransformer implements 
ResourceTransformer
         return compiled.openStream();
     }
 
-    protected BytestreamCache invokeLessCompiler(Resource source, 
ResourceDependencies dependencies) throws IOException
+    private BytestreamCache invokeLessCompiler(Resource source, 
ResourceDependencies dependencies) throws IOException
     {
         try
         {
             LessSource lessSource = new ResourceLessSource(source, 
dependencies);
 
-            LessCompiler.CompilationResult compilationResult = 
compiler.compile(lessSource);
+            LessCompiler.CompilationResult compilationResult = 
compile(compiler, lessSource);
 
             // Currently, ignoring any warnings.
 
@@ -141,4 +70,14 @@ public class LessResourceTransformer implements 
ResourceTransformer
             throw new IOException(ex);
         }
     }
+
+    /**
+     * Invoked from {@link #transform(org.apache.tapestry5.ioc.Resource, 
org.apache.tapestry5.services.assets.ResourceDependencies)}
+     * to perform the actual work of compiling a {@link 
org.apache.tapestry5.ioc.Resource} which has been wrapped as a
+     * {@link com.github.sommeri.less4j.LessSource}.
+     */
+    protected LessCompiler.CompilationResult compile(LessCompiler compiler, 
LessSource lessSource) throws Less4jException
+    {
+        return compiler.compile(lessSource);
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/814fdb50/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/ResourceLessSource.java
----------------------------------------------------------------------
diff --git 
a/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/ResourceLessSource.java
 
b/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/ResourceLessSource.java
new file mode 100644
index 0000000..25de63d
--- /dev/null
+++ 
b/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/ResourceLessSource.java
@@ -0,0 +1,97 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.webresources;
+
+import com.github.sommeri.less4j.LessSource;
+import org.apache.commons.io.IOUtils;
+import org.apache.tapestry5.ioc.Resource;
+import org.apache.tapestry5.ioc.internal.util.InternalUtils;
+import org.apache.tapestry5.services.assets.ResourceDependencies;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+public class ResourceLessSource extends LessSource
+{
+    private final Resource resource;
+
+    private final ResourceDependencies dependencies;
+
+    ResourceLessSource(Resource resource, ResourceDependencies dependencies)
+    {
+        this.resource = resource;
+        this.dependencies = dependencies;
+    }
+
+    @Override
+    public LessSource relativeSource(String filename) throws FileNotFound, 
CannotReadFile, StringSourceException
+    {
+        Resource relative = resource.forFile(filename);
+
+        if (!relative.exists())
+        {
+            throw new FileNotFound();
+        }
+
+        dependencies.addDependency(relative);
+
+        return new ResourceLessSource(relative, dependencies);
+    }
+
+    @Override
+    public String getContent() throws FileNotFound, CannotReadFile
+    {
+        // Adapted from Less's URLSource
+        Reader input = null;
+        try
+        {
+            input = new InputStreamReader(resource.openStream());
+            String content = IOUtils.toString(input).replace("\r\n", "\n");
+
+            return content;
+        } catch (FileNotFoundException ex)
+        {
+            throw new FileNotFound();
+        } catch (IOException ex)
+        {
+            throw new CannotReadFile();
+        } finally
+        {
+            InternalUtils.close(input);
+        }
+    }
+
+    @Override
+    public byte[] getBytes() throws FileNotFound, CannotReadFile
+    {
+        Reader input = null;
+        try
+        {
+            input = new InputStreamReader(resource.openStream());
+
+            return IOUtils.toByteArray(input);
+        } catch (FileNotFoundException ex)
+        {
+            throw new FileNotFound();
+        } catch (IOException ex)
+        {
+            throw new CannotReadFile();
+        } finally
+        {
+            InternalUtils.close(input);
+        }
+
+    }
+}

Reply via email to