You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by cr...@apache.org on 2006/07/16 20:54:01 UTC

svn commit: r422496 - in /beehive/trunk/netui: src/pageflow/org/apache/beehive/netui/pageflow/internal/ test/webapps/controls/src/index/ test/webapps/controls/web/index/ test/webapps/drt/testRecorder/config/

Author: crogers
Date: Sun Jul 16 11:54:01 2006
New Revision: 422496

URL: http://svn.apache.org/viewvc?rev=422496&view=rev
Log:
Another change for https://issues.apache.org/jira/browse/BEEHIVE-1096 - Inherited NetUI shared flow reference to be initialized correctly... for the faces backing bean.

tests: NetUI BVT (WinXP pass)


Added:
    beehive/trunk/netui/test/webapps/controls/src/index/
    beehive/trunk/netui/test/webapps/controls/src/index/Controller.java
      - copied unchanged from r422088, beehive/trunk/netui/test/webapps/controls/web/index/Controller.java
Removed:
    beehive/trunk/netui/test/webapps/controls/web/index/Controller.java
Modified:
    beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedFacesBackingInfo.java
    beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedPageFlowInfo.java
    beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedSharedFlowRefInfo.java
    beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedFacesBackingInfo.java
URL: http://svn.apache.org/viewvc/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedFacesBackingInfo.java?rev=422496&r1=422495&r2=422496&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedFacesBackingInfo.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedFacesBackingInfo.java Sun Jul 16 11:54:01 2006
@@ -53,7 +53,7 @@
             }
         }
         
-        initSharedFlowFields( annReader, fields );
+        initSharedFlowFields( annReader, facesBackingClass );
     }
     
     public Field getPageFlowMemberField()

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedPageFlowInfo.java
URL: http://svn.apache.org/viewvc/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedPageFlowInfo.java?rev=422496&r1=422495&r2=422496&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedPageFlowInfo.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedPageFlowInfo.java Sun Jul 16 11:54:01 2006
@@ -44,7 +44,7 @@
 
     public CachedPageFlowInfo(Class pageFlowClass, ServletContext servletContext) {
         AnnotationReader annReader = AnnotationReader.getAnnotationReader( pageFlowClass, servletContext );
-        initSharedFlowFields( annReader, getFields(pageFlowClass) );
+        initSharedFlowFields( annReader, pageFlowClass );
 
         // URI
         String className = pageFlowClass.getName();
@@ -68,28 +68,5 @@
 
     public void setURI(String URI) {
         _URI = URI;
-    }
-
-    /*
-     * Get the declared fields of the page flow. This includes the
-     * inherited fields from super class page flows.
-     */
-    private static Field[] getFields(Class pageFlowClass) {
-        if (! (PageFlowController.class.isAssignableFrom(pageFlowClass))) {
-            return new Field[0];
-        }
-
-        ArrayList results = new ArrayList();
-        do {
-            Field[] fields = pageFlowClass.getDeclaredFields();
-            for (int i = 0; i < fields.length; i++) {
-                results.add(fields[i]);
-            }
-            pageFlowClass = pageFlowClass.getSuperclass();
-        } while (pageFlowClass != null
-                 && !PageFlowController.class.equals(pageFlowClass)
-                 && PageFlowController.class.isAssignableFrom(pageFlowClass));
-
-        return (Field[]) results.toArray(new Field[ results.size() ]);
     }
 }

Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedSharedFlowRefInfo.java
URL: http://svn.apache.org/viewvc/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedSharedFlowRefInfo.java?rev=422496&r1=422495&r2=422496&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedSharedFlowRefInfo.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/CachedSharedFlowRefInfo.java Sun Jul 16 11:54:01 2006
@@ -17,65 +17,97 @@
  */
 package org.apache.beehive.netui.pageflow.internal;
 
+import org.apache.beehive.netui.pageflow.PageFlowManagedObject;
 import org.apache.beehive.netui.pageflow.internal.annotationreader.ProcessedAnnotation;
+import org.apache.beehive.netui.util.logging.Logger;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 
 public class CachedSharedFlowRefInfo
 {
+    private static final Logger LOG = Logger.getInstance( CachedSharedFlowRefInfo.class );
+
     public static class SharedFlowFieldInfo
     {
         public Field field;
         public String sharedFlowName;
     }
-    
+
     /**
      * The SharedFlowController-initialized member fields -- may or may not be present.
-     */ 
+     */
     private SharedFlowFieldInfo[] _sharedFlowMemberFields;
-    
-    protected void initSharedFlowFields( AnnotationReader annReader, Field[] fields )
+
+    protected void initSharedFlowFields( AnnotationReader annReader, Class clazz )
     {
+        if (annReader == null) {
+            LOG.error("Null AnnotationReader for checking shared flow ref annotations");
+            return;
+        }
+        if (clazz == null) {
+            LOG.error("Null class for checking shared flow ref annotations");
+            return;
+        }
+
+        //
+        // Go through this class and all superclasses, looking for shared fields.
+        // Make sure that a superclass control field never replaces a subclass
+        // control field (this is what the 'fieldNames' HashSet is for).
+        // Note that the annnotation reader doesn't change per-class.
+        // Inherited annotated elements are all read.
+        //
+        HashSet fieldNames = new HashSet();
         List/*< SharedFlowFieldInfo >*/ sharedFlowFields = null;
-        
-        for ( int i = 0; i < fields.length; i++ )
-        {
-            Field field = fields[i];
-            
-            ProcessedAnnotation sharedFlowFieldAnn = annReader.getJpfAnnotation( field, "SharedFlowField" );
-            
-            if ( sharedFlowFieldAnn != null )
-            {
-                if ( ! Modifier.isPublic( field.getModifiers() ) ) field.setAccessible( true );
-                if ( sharedFlowFields == null ) sharedFlowFields = new ArrayList/*< SharedFlowFieldInfo >*/();
-                SharedFlowFieldInfo info = new SharedFlowFieldInfo();
-                info.field = field;
-                info.sharedFlowName = AnnotationReader.getStringAttribute( sharedFlowFieldAnn, "name" );
-                sharedFlowFields.add( info );
-            }
-            else if ( field.getName().equals( InternalConstants.GLOBALAPP_MEMBER_NAME ) )
-            {
-                //
-                // Legacy behavior: initialize a field called 'globalApp' with the Global.app instance.
-                //
-                if ( ! Modifier.isPublic( field.getModifiers() ) ) field.setAccessible( true );
-                if ( sharedFlowFields == null ) sharedFlowFields = new ArrayList/*< SharedFlowFieldInfo >*/();
-                SharedFlowFieldInfo info = new SharedFlowFieldInfo();
-                info.field = field;
-                info.sharedFlowName = null;
-                sharedFlowFields.add( info );
+        do {
+            Field[] fields = clazz.getDeclaredFields();
+            for (int i = 0; i < fields.length; i++) {
+                Field field = fields[i];
+                String fieldName = field.getName();
+                ProcessedAnnotation sharedFlowFieldAnn = annReader.getJpfAnnotation(field, "SharedFlowField");
+                if (! fieldNames.contains(fieldName)) {
+                    if (sharedFlowFieldAnn != null) {
+                        if (! Modifier.isPublic(field.getModifiers())) {
+                            field.setAccessible(true);
+                        }
+                        if (sharedFlowFields == null) {
+                            sharedFlowFields = new ArrayList/*< SharedFlowFieldInfo >*/();
+                        }
+                        SharedFlowFieldInfo info = new SharedFlowFieldInfo();
+                        info.field = field;
+                        info.sharedFlowName = AnnotationReader.getStringAttribute(sharedFlowFieldAnn, "name");
+                        sharedFlowFields.add(info);
+                        fieldNames.add( fieldName );
+                    }
+                    else if (field.getName().equals(InternalConstants.GLOBALAPP_MEMBER_NAME)) {
+                        // Legacy behavior: initialize a field called 'globalApp' with the Global.app instance.
+                        if (! Modifier.isPublic(field.getModifiers())) {
+                            field.setAccessible(true);
+                        }
+                        if (sharedFlowFields == null) {
+                            sharedFlowFields = new ArrayList/*< SharedFlowFieldInfo >*/();
+                        }
+                        SharedFlowFieldInfo info = new SharedFlowFieldInfo();
+                        info.field = field;
+                        info.sharedFlowName = null;
+                        sharedFlowFields.add(info);
+                        fieldNames.add( fieldName );
+                    }
+                }
             }
-        }
-        
-        if ( sharedFlowFields != null )
-        {
-            _sharedFlowMemberFields = ( SharedFlowFieldInfo[] ) sharedFlowFields.toArray( new SharedFlowFieldInfo[ sharedFlowFields.size() ] );
+            clazz = clazz.getSuperclass();
+        } while (clazz != null
+                 && !PageFlowManagedObject.class.equals(clazz)
+                 && PageFlowManagedObject.class.isAssignableFrom(clazz));
+
+        if (sharedFlowFields != null) {
+            _sharedFlowMemberFields = (SharedFlowFieldInfo[]) sharedFlowFields.toArray(new SharedFlowFieldInfo[ sharedFlowFields.size() ]);
         }
     }
-    
+
     public SharedFlowFieldInfo[] getSharedFlowMemberFields()
     {
         return _sharedFlowMemberFields;

Modified: beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml
URL: http://svn.apache.org/viewvc/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml?rev=422496&r1=422495&r2=422496&view=diff
==============================================================================
--- beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml (original)
+++ beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml Sun Jul 16 11:54:01 2006
@@ -1919,7 +1919,7 @@
             <feature>Encoding</feature>
          </features>
       </test>
-       <test>
+      <test>
          <name>ControlsContextualServices</name>
          <description>Test of marking a PageFlowController with the @Control annotation inside a control implementation, which makes the current page flow intance available to the control.</description>
          <webapp>coreWeb</webapp>