Author: reto
Date: Fri Oct  8 19:07:13 2010
New Revision: 1005964

URL: http://svn.apache.org/viewvc?rev=1005964&view=rev
Log:
extracted method and reformated

Modified:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/ScalaServerPagesRenderlet.java

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/ScalaServerPagesRenderlet.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/ScalaServerPagesRenderlet.java?rev=1005964&r1=1005963&r2=1005964&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/ScalaServerPagesRenderlet.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/ScalaServerPagesRenderlet.java
 Fri Oct  8 19:07:13 2010
@@ -66,19 +66,18 @@ import scala.collection.Seq;
 @Service(Renderlet.class)
 public class ScalaServerPagesRenderlet implements Renderlet {
 
-
-       @Reference(target="(javax.script.language=scala)")
+       @Reference(target = "(javax.script.language=scala)")
        private ScriptEngineFactory scalaScriptEngineFactory;
-       
        private static final Logger logger = 
LoggerFactory.getLogger(ScalaServerPagesRenderlet.class);
        private int byteHeaderLines = 0;
        private Type multiStringObjectMapType;
+
        {
                try {
                        multiStringObjectMapType = 
RequestProperties.class.getMethod("getHttpHeaders", new 
Class[0]).getReturnType();
                } catch (NoSuchMethodException ex) {
                        throw new RuntimeException(ex);
-               } 
+               }
        }
 
        /**
@@ -86,11 +85,9 @@ public class ScalaServerPagesRenderlet i
         */
        public ScalaServerPagesRenderlet() {
        }
-
-
-
        private final String lineSeparator = 
System.getProperty("line.separator");
        private final byte[] byteHeader;
+
        {
                final InputStream in = 
ScalaServerPagesRenderlet.class.getResourceAsStream("implicit-header.txt");
                final ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -109,12 +106,10 @@ public class ScalaServerPagesRenderlet i
                }
                byteHeader = baos.toByteArray();
        }
-
        private final byte[] byteCloser = (";}" + lineSeparator).getBytes();
-
        //TODO a map with SoftReferences as keys
        private Map<String, CompiledScript> compiledScripts = new 
HashMap<String, CompiledScript>();
-       
+
        @Override
        public void render(GraphNode res, GraphNode context, Map<String, 
Object> sharedRenderingValues,
                        CallbackRenderer callbackRenderer, URI 
renderingSpecification,
@@ -122,21 +117,7 @@ public class ScalaServerPagesRenderlet i
                        RequestProperties requestProperties, OutputStream os) 
throws IOException {
                try {
                        logger.debug("ScalaServerPagesRenderlet rendering");
-                       final InputStream in = 
renderingSpecification.toURL().openStream();
-                       final ByteArrayOutputStream baos = new 
ByteArrayOutputStream();
-                       //Add the scriptHeader to the beginning of the script
-                       baos.write(byteHeader);
-                       //add the content
-                       for (int b = in.read(); b != -1; b = in.read()) {
-                               baos.write(b);
-                       }
-                       //add the closing ";" 
-                       baos.write(byteCloser);
-                       String scriptName = 
extractFileName(renderingSpecification);
-                       logger.debug("getting CompiledScript for: {}", 
scriptName);
-                       final byte[] scriptBytes = baos.toByteArray();
-                       final CompiledScript cs = 
getCompiledScript(scriptBytes);
-                       
+                       final byte[] scriptBytes = 
getScriptBytes(renderingSpecification);
                        final SimpleBindings values = new SimpleBindings();
                        values.put("res", res);
                        values.put("context", context);
@@ -148,32 +129,16 @@ public class ScalaServerPagesRenderlet i
                                //values.put("httpHeaders", 
requestProperties.getHttpHeaders());
                        }
                        //The priviledged block is needed because of FELIX-2273
-                       Object execResult = null;
-                       try {
-                               execResult = AccessController.doPrivileged(new 
PrivilegedExceptionAction<Object>() {
-
-                                       @Override
-                                       public Object run() throws 
ScriptException {
-                                               return cs.eval(values);
-                                       }
-                               });
-                       } catch (PrivilegedActionException ex) {
-                               Exception cause = (Exception) ex.getCause();
-                               logger.debug("Exception executing 
ScalaServerPage Script", cause);
-                               if (cause instanceof ScriptException) {
-                                       throw (ScriptException) cause;
-                               }
-                               throw new RuntimeException(cause);
-                       } catch (RuntimeException ex) {
-                               logger.debug("RuntimeException executing 
ScalaServerPage Script", ex);
-                               throw ex;
-                       }
+                       Object execResult = exec(scriptBytes, values);
                        if (execResult != null) {
                                String sspResult = toString(execResult);
-                               logger.debug("executed ssp, result: {} (for 
{})", sspResult, scriptName);
+                               if (logger.isDebugEnabled()) {
+                                       String scriptName = 
extractFileName(renderingSpecification);
+                                       logger.debug("executed ssp, result: {} 
(for {})", sspResult, scriptName);
+                               }
                                os.write(sspResult.getBytes("UTF-8"));
                        }
-                       
+
                        os.flush();
                        logger.debug("flushed");
                } catch (MalformedURLException ex) {
@@ -211,7 +176,7 @@ public class ScalaServerPagesRenderlet i
 
        private static String toString(Object object) {
                if (object instanceof Seq) {
-                       return ((Seq)object).mkString();
+                       return ((Seq) object).mkString();
                } else {
                        return object.toString();
                }
@@ -231,13 +196,51 @@ public class ScalaServerPagesRenderlet i
                }
                CompiledScript cs = compiledScripts.get(scriptString);
                if (cs == null) {
-                       cs = 
((Compilable)scalaScriptEngineFactory.getScriptEngine())
-                                       .compile(scriptString);
+                       cs = ((Compilable) 
scalaScriptEngineFactory.getScriptEngine()).compile(scriptString);
                        compiledScripts.put(scriptString, cs);
                }
                return cs;
        }
 
+       private byte[] getScriptBytes(URI renderingSpecification) throws 
IOException {
+               final InputStream in = 
renderingSpecification.toURL().openStream();
+               final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+               //Add the scriptHeader to the beginning of the script
+               baos.write(byteHeader);
+               //add the content
+               final byte[] buffer = new byte[1024];
+               int bytesRead;
+               while ((bytesRead = in.read(buffer, 0, 1024)) != -1) {
+                       baos.write(buffer, 0, bytesRead);
+               }
+               //add the closing ";"
+               baos.write(byteCloser);
+               String scriptName = extractFileName(renderingSpecification);
+               logger.debug("getting CompiledScript for: {}", scriptName);
+               return baos.toByteArray();
+       }
+
+       private Object exec(byte[] scriptBytes, final SimpleBindings values) 
throws ScriptException {
+               final CompiledScript cs = getCompiledScript(scriptBytes);
 
+               try {
+                       return AccessController.doPrivileged(new 
PrivilegedExceptionAction<Object>() {
 
+                               @Override
+                               public Object run() throws ScriptException {
+                                       return cs.eval(values);
+                               }
+                       });
+               } catch (PrivilegedActionException ex) {
+                       Exception cause = (Exception) ex.getCause();
+                       logger.debug("Exception executing ScalaServerPage 
Script", cause);
+                       if (cause instanceof ScriptException) {
+                               throw (ScriptException) cause;
+                       }
+                       throw new RuntimeException(cause);
+               } catch (RuntimeException ex) {
+                       logger.debug("RuntimeException executing 
ScalaServerPage Script", ex);
+                       throw ex;
+               }
+       }
 }


Reply via email to