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());
}