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/09/18 14:52:12 UTC
svn commit: r816610 - in /myfaces/extensions/scripting/trunk/core:
core/src/main/java/org/apache/myfaces/scripting/api/
myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/
Author: werpu
Date: Fri Sep 18 12:52:12 2009
New Revision: 816610
URL: http://svn.apache.org/viewvc?rev=816610&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-18
introducing a singleton which is the bridge between our annotation scanners
and the core which cannot process annotations directly
Added:
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanListener.java
- copied, changed from r816608, myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanner.java (with props)
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScannerHolder.java (with props)
Modified:
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorImplementationListener.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ComponentImplementationListener.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ConverterImplementationListener.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/SourceAnnotationScanner.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ValidatorImplementationListener.java
Copied: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanListener.java (from r816608, myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanListener.java?p2=myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanListener.java&p1=myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java&r1=816608&r2=816610&rev=816610&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanListener.java Fri Sep 18 12:52:12 2009
@@ -16,27 +16,25 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.myfaces.scripting.jsf2.annotation;
+package org.apache.myfaces.scripting.api;
-import com.thoughtworks.qdox.model.JavaClass;
import java.util.Map;
/**
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
+ * <p/>
+ * We use a source code artefact observer here to register the
+ * meta data in the correct registry entries
*/
-public class RendererImplementationListener implements SourceClassAnnotationListener {
- public boolean supportsAnnotation(Class annotation) {
- return false; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- public void register(JavaClass clazz, String annotationName, Map<String, String> params) {
- }
-
- public void register(Class clazz, String annotationName, Map<String, String> params) {
- throw new UnsupportedOperationException("Not yet implemented");
- }
+public interface AnnotationScanListener {
+
+ public boolean supportsAnnotation(Class annotation);
+
+ public void registerSource(Object clazz, String annotationName, Map<String, String> params);
+
+ public void register(Class clazz, String annotationName, Map<String, String> params);
}
Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanner.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanner.java?rev=816610&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanner.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanner.java Fri Sep 18 12:52:12 2009
@@ -0,0 +1,23 @@
+package org.apache.myfaces.scripting.api;
+
+/**
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ *
+ * Generic annotation scanner interface
+ * which is a helper to plug in external annotation scanners
+ * as adapters for the annotation handling
+ * we cannot deal with annotations directly in the core
+ * because we are bound by the jsf 1.2 lower threshold limit
+ * hence this indirection
+ *
+ */
+public interface AnnotationScanner {
+
+
+ void scanPaths();
+
+ void clearListeners();
+
+ void addListener(AnnotationScanListener listener);
+}
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanner.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanner.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScannerHolder.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScannerHolder.java?rev=816610&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScannerHolder.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScannerHolder.java Fri Sep 18 12:52:12 2009
@@ -0,0 +1,64 @@
+/*
+ * 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.api;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+
+public class AnnotationScannerHolder {
+ Map<String, AnnotationScanner> _scannerMap = new HashMap<String, AnnotationScanner>();
+
+ static AnnotationScannerHolder _instance = null;
+
+ AnnotationScannerHolder() {
+ super();
+ }
+
+ public static AnnotationScannerHolder getInstance() {
+ if(_instance != null) {
+ return _instance;
+ }
+
+ //we do not synchronize upfront for speed reasons
+ synchronized(AnnotationScannerHolder.class) {
+ if(_instance != null) {
+ //another check just in case someone went out of synchronized
+ //between the last if and synchronized
+ return _instance;
+ }
+ _instance = new AnnotationScannerHolder();
+ }
+
+ return _instance;
+ }
+
+
+ public void addAnnotationScanner(String key, AnnotationScanner scanner) {
+ _scannerMap.put(key, scanner);
+ }
+
+ public AnnotationScanner getAnnotationScanner(String key) {
+ return _scannerMap.get(key);
+ }
+}
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScannerHolder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScannerHolder.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java?rev=816610&r1=816609&r2=816610&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java Fri Sep 18 12:52:12 2009
@@ -20,12 +20,11 @@
import org.apache.myfaces.config.RuntimeConfig;
import org.apache.myfaces.config.impl.digester.elements.ManagedBean;
+import org.apache.myfaces.scripting.api.AnnotationScanListener;
import javax.faces.context.FacesContext;
-import javax.faces.bean.ManagedProperty;
import java.util.Map;
import java.util.HashMap;
-import java.util.Collections;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaField;
@@ -40,7 +39,7 @@
* it is only allowed to be called from a single thread
*/
-public class BeanImplementationListener implements SourceClassAnnotationListener {
+public class BeanImplementationListener implements AnnotationScanListener {
static Map<String, ManagedBean> _alreadyRegistered = new HashMap<String, ManagedBean>();
@@ -80,11 +79,13 @@
* or class has changed
* or class does not exist at all
*
- * @param clazz
+ * @param sourceClass
* @param annotationName
* @param params
*/
- public void register(JavaClass clazz, String annotationName, Map<String, String> params) {
+ public void registerSource(Object sourceClass, String annotationName, Map<String, String> params) {
+ JavaClass clazz = (JavaClass) sourceClass;
+
RuntimeConfig config = getRuntimeConfig();
String beanName = params.get("name");
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorImplementationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorImplementationListener.java?rev=816610&r1=816609&r2=816610&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorImplementationListener.java Fri Sep 18 12:52:12 2009
@@ -22,17 +22,19 @@
import java.util.Map;
+import org.apache.myfaces.scripting.api.AnnotationScanListener;
+
/**
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
*/
-public class BehaviorImplementationListener implements SourceClassAnnotationListener {
+public class BehaviorImplementationListener implements AnnotationScanListener {
public boolean supportsAnnotation(Class annotation) {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
- public void register(JavaClass clazz, String annotationName, Map<String, String> params) {
+ public void registerSource(Object clazz, String annotationName, Map<String, String> params) {
//To change body of implemented methods use File | Settings | File Templates.
}
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ComponentImplementationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ComponentImplementationListener.java?rev=816610&r1=816609&r2=816610&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ComponentImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ComponentImplementationListener.java Fri Sep 18 12:52:12 2009
@@ -22,17 +22,20 @@
import java.util.Map;
+import org.apache.myfaces.scripting.api.AnnotationScanListener;
+
/**
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
*/
-public class ComponentImplementationListener implements SourceClassAnnotationListener {
+public class ComponentImplementationListener implements AnnotationScanListener {
public boolean supportsAnnotation(Class annotation) {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
- public void register(JavaClass clazz, String annotationName, Map<String, String> params) {
+ public void registerSource(Object sourceClass, String annotationName, Map<String, String> params) {
+ JavaClass clazz = (JavaClass) sourceClass;
//To change body of implemented methods use File | Settings | File Templates.
}
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ConverterImplementationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ConverterImplementationListener.java?rev=816610&r1=816609&r2=816610&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ConverterImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ConverterImplementationListener.java Fri Sep 18 12:52:12 2009
@@ -22,18 +22,21 @@
import java.util.Map;
+import org.apache.myfaces.scripting.api.AnnotationScanListener;
+
/**
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
*/
-public class ConverterImplementationListener implements SourceClassAnnotationListener {
+public class ConverterImplementationListener implements AnnotationScanListener {
public boolean supportsAnnotation(Class annotation) {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
- public void register(JavaClass clazz, String annotationName, Map<String, String> params) {
+ public void registerSource(Object sourceClass, String annotationName, Map<String, String> params) {
+ JavaClass clazz = (JavaClass) sourceClass;
//To change body of implemented methods use File | Settings | File Templates.
}
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java?rev=816610&r1=816609&r2=816610&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java Fri Sep 18 12:52:12 2009
@@ -22,17 +22,20 @@
import java.util.Map;
+import org.apache.myfaces.scripting.api.AnnotationScanListener;
+
/**
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
*/
-public class RendererImplementationListener implements SourceClassAnnotationListener {
+public class RendererImplementationListener implements AnnotationScanListener {
public boolean supportsAnnotation(Class annotation) {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
- public void register(JavaClass clazz, String annotationName, Map<String, String> params) {
+ public void registerSource(Object sourceClass, String annotationName, Map<String, String> params) {
+ JavaClass clazz = (JavaClass) sourceClass;
}
public void register(Class clazz, String annotationName, Map<String, String> params) {
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/SourceAnnotationScanner.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/SourceAnnotationScanner.java?rev=816610&r1=816609&r2=816610&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/SourceAnnotationScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/SourceAnnotationScanner.java Fri Sep 18 12:52:12 2009
@@ -21,16 +21,14 @@
import com.thoughtworks.qdox.JavaDocBuilder;
import com.thoughtworks.qdox.model.JavaSource;
import com.thoughtworks.qdox.model.JavaClass;
-import com.thoughtworks.qdox.model.Type;
import com.thoughtworks.qdox.model.Annotation;
import java.util.List;
import java.util.LinkedList;
import java.io.File;
-import org.apache.myfaces.config.RuntimeConfig;
-
-import javax.faces.context.FacesContext;
+import org.apache.myfaces.scripting.api.AnnotationScanner;
+import org.apache.myfaces.scripting.api.AnnotationScanListener;
/**
* @author Werner Punz (latest modification by $Author$)
@@ -42,9 +40,9 @@
* wherever possible
*/
-public class SourceAnnotationScanner {
+public class SourceAnnotationScanner implements AnnotationScanner {
- List<SourceClassAnnotationListener> _listeners = new LinkedList<SourceClassAnnotationListener>();
+ List<AnnotationScanListener> _listeners = new LinkedList<AnnotationScanListener>();
JavaDocBuilder _builder = new JavaDocBuilder();
public SourceAnnotationScanner(String... sourcePaths) {
@@ -74,12 +72,11 @@
_listeners.add(new ValidatorImplementationListener());
}
-
/**
* builds up the parsing chain and then notifies its observers
* on the found data
*/
- public void scanSources() {
+ public void scanPaths() {
JavaSource[] sources = _builder.getSources();
for (JavaSource source : sources) {
String packageName = source.getPackage().toString();
@@ -88,9 +85,10 @@
Annotation[] anns = clazz.getAnnotations();
for (Annotation ann : anns) {
- for (SourceClassAnnotationListener listener : _listeners) {
+ for (AnnotationScanListener listener : _listeners) {
if (listener.supportsAnnotation(ann.getClass())) {
- listener.register(clazz, ann.getType().getValue(), ann.getPropertyMap());
+ listener.registerSource(
+ clazz, ann.getType().getValue(), ann.getPropertyMap());
}
}
}
@@ -102,7 +100,7 @@
_listeners.clear();
}
- public void addListener(SourceClassAnnotationListener listener) {
+ public void addListener(AnnotationScanListener listener) {
_listeners.add(listener);
}
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ValidatorImplementationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ValidatorImplementationListener.java?rev=816610&r1=816609&r2=816610&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ValidatorImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ValidatorImplementationListener.java Fri Sep 18 12:52:12 2009
@@ -22,17 +22,20 @@
import java.util.Map;
+import org.apache.myfaces.scripting.api.AnnotationScanListener;
+
/**
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
*/
-public class ValidatorImplementationListener implements SourceClassAnnotationListener {
+public class ValidatorImplementationListener implements AnnotationScanListener {
public boolean supportsAnnotation(Class annotation) {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
- public void register(JavaClass clazz, String annotationName, Map<String, String> params) {
+ public void registerSource(Object sourceClass, String annotationName, Map<String, String> params) {
+ JavaClass clazz = (JavaClass) sourceClass;
//To change body of implemented methods use File | Settings | File Templates.
}