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.
     }