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>