You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2009/08/26 16:54:12 UTC

svn commit: r808032 - in /myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting: core/util/ servlet/

Author: werpu
Date: Wed Aug 26 14:54:11 2009
New Revision: 808032

URL: http://svn.apache.org/viewvc?rev=808032&view=rev
Log:
ongoing works with the scripting engine integration

https://issues.apache.org/jira/browse/EXTSCRIPT-5

Added:
    myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/core/util/ScriptingWeaverHolder.java   (with props)
Modified:
    myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/core/util/ProxyUtils.java
    myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java
    myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/ScriptingServletFilter.java
    myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/StartupServletContextPluginChainLoader.java

Modified: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/core/util/ProxyUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/core/util/ProxyUtils.java?rev=808032&r1=808031&r2=808032&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/core/util/ProxyUtils.java (original)
+++ myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/core/util/ProxyUtils.java Wed Aug 26 14:54:11 2009
@@ -118,16 +118,24 @@
     }
 
 
+    public static int getEngineType(Class clazz) {
+        DynamicClassIdentifier identifier = getDynamicClassIdentifier();
+        return identifier.getEngineType(clazz);
+    }
+
     public static boolean isDynamic(Class clazz) {
-        //TODO open this for a chain of responsibility pattern
+        DynamicClassIdentifier identifier = getDynamicClassIdentifier();
+        return identifier.isDynamic(clazz);
+    }
+
+    private static DynamicClassIdentifier getDynamicClassIdentifier() {
         DynamicClassIdentifier identifier = (DynamicClassIdentifier) _identifierHolder.get();
         if(identifier == null) {
             identifier =  new DynamicClassIdentifierHolder();
             _identifierHolder.set(identifier);
         }
-        return identifier.isDynamic(clazz);
+        return identifier;
     }
 
-    
 
 }

Added: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/core/util/ScriptingWeaverHolder.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/core/util/ScriptingWeaverHolder.java?rev=808032&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/core/util/ScriptingWeaverHolder.java (added)
+++ myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/core/util/ScriptingWeaverHolder.java Wed Aug 26 14:54:11 2009
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.myfaces.scripting.core.util;
+
+import org.apache.myfaces.scripting.api.ScriptingConst;
+import org.apache.myfaces.scripting.api.ScriptingWeaver;
+
+/**
+ * @author werpu
+ *
+ * Facade which holds multiple weavers
+ * and implements a chain of responsibility pattern
+ * on them
+ */
+public class ScriptingWeaverHolder implements ScriptingWeaver {
+
+    ScriptingWeaver _groovyWeaver = null;
+    ScriptingWeaver _javaWeaver = null;
+
+    public ScriptingWeaverHolder(ScriptingWeaver ... weavers) {
+        _groovyWeaver = weavers[0];
+        _javaWeaver = weavers[1];
+
+    }
+
+    @Override
+    public void appendCustomScriptPath(String scriptPaths) {
+        throw new RuntimeException("Method not supported from this facade");
+    }
+
+    @Override
+    public Object reloadScriptingInstance(Object o) {
+        int objectType = ProxyUtils.getEngineType(o.getClass());
+        switch (objectType) {
+            case ScriptingConst.ENGINE_TYPE_GROOVY:
+                return this._groovyWeaver.reloadScriptingInstance(o);
+            default: //java
+                return this._javaWeaver.reloadScriptingInstance(o);
+        }
+    }
+
+    @Override
+    public Class reloadScriptingClass(Class aclass) {
+        int objectType = ProxyUtils.getEngineType(aclass);
+        switch (objectType) {
+            case ScriptingConst.ENGINE_TYPE_GROOVY:
+                return this._groovyWeaver.reloadScriptingClass(aclass);
+            default: //java
+                return this._javaWeaver.reloadScriptingClass(aclass);
+        }
+    }
+
+    @Override
+    public Class loadScriptingClassFromName(String className) {
+        //we try to load from the chain, we cannot determine the engine type upfront here
+        Class retVal = this._groovyWeaver.loadScriptingClassFromName(className);
+        if (retVal != null) {
+            return this._javaWeaver.loadScriptingClassFromName(className);
+        }
+        return retVal;
+    }
+}

Propchange: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/core/util/ScriptingWeaverHolder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/core/util/ScriptingWeaverHolder.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java?rev=808032&r1=808031&r2=808032&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java (original)
+++ myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java Wed Aug 26 14:54:11 2009
@@ -21,7 +21,9 @@
 import org.apache.myfaces.groovyloader.core.GroovyWeaver;
 import org.apache.myfaces.scripting.api.ScriptingWeaver;
 import org.apache.myfaces.scripting.core.util.ProxyUtils;
+import org.apache.myfaces.scripting.core.util.ScriptingWeaverHolder;
 import org.apache.myfaces.shared_impl.util.ClassLoaderExtension;
+import org.apache.myfaces.javaloader.core.JavaScriptingWeaver;
 import org.apache.commons.lang.StringUtils;
 
 import javax.servlet.ServletContext;
@@ -39,37 +41,61 @@
        * higher priority than the default ones 
        */
     static String CUSTOM_LOADER_PATHS = "org.apache.myfaces.scripting.groovy.LOADER_PATHS";
+    static String CUSTOM_JAVA_LOADER_PATHS = "org.apache.myfaces.scripting.java.LOADER_PATHS";
 
 
     String classRoot = "";
     String scriptingRoot = "";
     ScriptingWeaver scriptingWeaver = null;
+    private static final String GROOVY_SOURCE_ROOT = "/WEB-INF/groovy/";
+    private static final String JAVA_SOURCE_ROOT = "/WEB-INF/java/";
 
     public CustomChainLoader(ServletContext servletContext) {
-        this.scriptingWeaver = new GroovyWeaver();
+        ScriptingWeaver groovyWeaver = new GroovyWeaver();
+        ScriptingWeaver javaWeaver = new JavaScriptingWeaver();
 
-        String contextRoot = servletContext.getRealPath("/WEB-INF/groovy/");
+        //this.scriptingWeaver = new GroovyWeaver();
+
+        String contextRoot = servletContext.getRealPath(GROOVY_SOURCE_ROOT);
 
         contextRoot = contextRoot.trim();
+        //TODO still needed?
         if (!contextRoot.endsWith("/") && !contextRoot.endsWith("\\"))
             contextRoot += "/";
         scriptingRoot = contextRoot;
 
-        String additionalGroovyLoaderPaths = servletContext.getInitParameter(CUSTOM_LOADER_PATHS);
-        if(!StringUtils.isBlank(additionalGroovyLoaderPaths)) {
-            String [] additionalPaths = additionalGroovyLoaderPaths.split(",");
-            for(String path: additionalPaths) {
-                 this.scriptingWeaver.appendCustomScriptPath(path);    
-            }
-        }
+        setupScriptingPatsh(servletContext, groovyWeaver, CUSTOM_JAVA_LOADER_PATHS);
+
+        contextRoot = servletContext.getRealPath(JAVA_SOURCE_ROOT);
+        contextRoot = contextRoot.trim();
+
+        scriptingRoot = contextRoot;
+        setupScriptingPatsh(servletContext, javaWeaver, CUSTOM_JAVA_LOADER_PATHS);
 
-        this.scriptingWeaver.appendCustomScriptPath(scriptingRoot);
-        this.scriptingWeaver.appendCustomScriptPath(classRoot);
+
+        this.scriptingWeaver = new ScriptingWeaverHolder(groovyWeaver, javaWeaver);
         //we have to store it because our filter
         //does not trigger upon initialisation
         ProxyUtils.setWeaver(this.scriptingWeaver);
     }
 
+    private void setupScriptingPatsh(ServletContext servletContext, ScriptingWeaver weaver, String initParams) {
+        String additionalLoaderPaths;
+        additionalLoaderPaths = servletContext.getInitParameter(initParams);
+        appendAdditionalPaths(additionalLoaderPaths, weaver);
+        weaver.appendCustomScriptPath(scriptingRoot);
+        weaver.appendCustomScriptPath(classRoot);
+    }
+
+    private void appendAdditionalPaths(String additionalLoaderPaths, ScriptingWeaver workWeaver) {
+        if(!StringUtils.isBlank(additionalLoaderPaths)) {
+            String [] additionalPaths = additionalLoaderPaths.split(",");
+            for(String path: additionalPaths) {
+                 workWeaver.appendCustomScriptPath(path);
+            }
+        }
+    }
+
     public Class forName(String name) {
 
         if (name.startsWith("java.")) /*the entire java namespace is reserved so no use to do a specific classloading check here*/

Modified: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/ScriptingServletFilter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/ScriptingServletFilter.java?rev=808032&r1=808031&r2=808032&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/ScriptingServletFilter.java (original)
+++ myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/ScriptingServletFilter.java Wed Aug 26 14:54:11 2009
@@ -42,7 +42,7 @@
      }
 
      public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
-         Object groovyDynamicLoader = context.getAttribute("GroovyDynamicLoader");
+         Object groovyDynamicLoader = context.getAttribute("MyFacesDynamicLoader");
          ProxyUtils.setWeaver(groovyDynamicLoader);
          filterChain.doFilter(servletRequest, servletResponse);
      }

Modified: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/StartupServletContextPluginChainLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/StartupServletContextPluginChainLoader.java?rev=808032&r1=808031&r2=808032&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/StartupServletContextPluginChainLoader.java (original)
+++ myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/StartupServletContextPluginChainLoader.java Wed Aug 26 14:54:11 2009
@@ -45,7 +45,7 @@
 
         CustomChainLoader loader = new CustomChainLoader(servletContext);
         ClassUtils.addClassLoadingExtension(loader, true);
-        servletContext.setAttribute("GroovyDynamicLoader", loader.getScriptingWeaver());
+        servletContext.setAttribute("MyFacesDynamicLoader", loader.getScriptingWeaver());
 
    }