Author: rich Date: Tue Jan 11 16:56:40 2005 New Revision: 124932 URL: http://svn.apache.org/viewcvs?view=rev&rev=124932 Log: - Fixed to inherit control member fields in page flows. - Changed to avoid requiring a "begin" action on an abstract page flow. - Fixed to avoid requiring a "begin" action on a page flow that extends another which has one.
DRT/BVT: netui (WinXP) BB: self (linux) Added: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/internal/PageFlowActionListener.java (contents, props changed) incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowCore/inheritControls/ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowCore/inheritControls/BaseControl.java (contents, props changed) incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowCore/inheritControls/BaseControlImpl.jcs (contents, props changed) incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/Controller.jpf (contents, props changed) incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/derived/ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/derived/DerivedController.jpf (contents, props changed) incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/derived/index.jsp (contents, props changed) incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/InheritControls.xml (contents, props changed) Modified: incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathOrActionType.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/internal/PageFlowApplication.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml Modified: incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java?view=diff&rev=124932&p1=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java&r1=124931&p2=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java&r2=124932 ============================================================================== --- incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java (original) +++ incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java Tue Jan 11 16:56:40 2005 @@ -31,6 +31,7 @@ import com.sun.mirror.declaration.MemberDeclaration; import com.sun.mirror.declaration.AnnotationTypeElementDeclaration; import com.sun.mirror.declaration.FieldDeclaration; +import com.sun.mirror.declaration.Modifier; import com.sun.mirror.type.TypeMirror; import com.sun.mirror.type.DeclaredType; @@ -233,9 +234,10 @@ } // - // Make sure every .jpf has a begin action. + // Make sure every .jpf has a begin action if the class isn't abstract. // - if ( ! WebappPathOrActionType.actionExists( BEGIN_ACTION_NAME, jpfClass, null, getEnv(), getFlowControllerInfo(), true ) ) + if ( ! WebappPathOrActionType.actionExists( BEGIN_ACTION_NAME, jpfClass, null, getEnv(), getFlowControllerInfo(), true ) + && ! CompilerUtils.hasModifier( jpfClass, Modifier.ABSTRACT ) ) { getDiagnostics().addError( jpfClass, "error.no-begin-action" ); } Modified: incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathOrActionType.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathOrActionType.java?view=diff&rev=124932&p1=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathOrActionType.java&r1=124931&p2=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathOrActionType.java&r2=124932 ============================================================================== --- incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathOrActionType.java (original) +++ incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/WebappPathOrActionType.java Tue Jan 11 16:56:40 2005 @@ -27,7 +27,9 @@ import com.sun.mirror.declaration.TypeDeclaration; import com.sun.mirror.declaration.AnnotationTypeElementDeclaration; import com.sun.mirror.declaration.MethodDeclaration; +import com.sun.mirror.declaration.ClassDeclaration; import com.sun.mirror.apt.AnnotationProcessorEnvironment; +import com.sun.mirror.type.ClassType; import java.util.Collection; @@ -99,28 +101,41 @@ public static boolean actionExists( String actionName, TypeDeclaration type, AnnotationMirror annotationToIgnore, AnnotationProcessorEnvironment env, FlowControllerInfo fcInfo, - boolean checkInheritedSimpleActions ) + boolean checkInheritedActions ) { - // - // First look through the action methods. - // - Collection< ? extends MethodDeclaration > methods = type.getMethods(); + if ( ! ( type instanceof ClassDeclaration ) ) + { + return false; + } - for ( MethodDeclaration method : methods ) + ClassDeclaration classDecl = ( ClassDeclaration ) type; + + do { - if ( method.getSimpleName().equals( actionName ) - && CompilerUtils.getAnnotation( method, ACTION_TAG_NAME ) != null ) + // + // First look through the action methods. + // + Collection< ? extends MethodDeclaration > methods = classDecl.getMethods(); + + for ( MethodDeclaration method : methods ) { - return true; + if ( method.getSimpleName().equals( actionName ) + && CompilerUtils.getAnnotation( method, ACTION_TAG_NAME ) != null ) + { + return true; + } } - } + + ClassType superType = classDecl.getSuperclass(); + classDecl = superType != null ? superType.getDeclaration() : null; + } while ( classDecl != null ); // // Next, look through the simple actions (annotations). // MergedControllerAnnotation mca = fcInfo.getMergedControllerAnnotation(); Collection< AnnotationMirror > simpleActionAnnotations = - checkInheritedSimpleActions + checkInheritedActions ? mca.getSimpleActions() : CompilerUtils.getAnnotationArrayValue( type, CONTROLLER_TAG_NAME, SIMPLE_ACTIONS_ATTR, true ); Added: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/internal/PageFlowActionListener.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/internal/PageFlowActionListener.java?view=auto&rev=124932 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/internal/PageFlowActionListener.java Tue Jan 11 16:56:40 2005 @@ -0,0 +1,37 @@ +/* + * Copyright 2004 The Apache Software Foundation. + * + * Licensed 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. + * + * $Header:$ + */ +package org.apache.beehive.netui.pageflow.faces.internal; + +import javax.faces.event.ActionListener; +import javax.faces.event.ActionEvent; +import javax.faces.event.AbortProcessingException; + +public class PageFlowActionListener + implements ActionListener +{ + private ActionListener _delegate; + + public PageFlowActionListener( ActionListener delegate ) + { + _delegate = delegate; + } + + public void processAction( ActionEvent event ) throws AbortProcessingException + { + } +} Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/internal/PageFlowApplication.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/internal/PageFlowApplication.java?view=diff&rev=124932&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/internal/PageFlowApplication.java&r1=124931&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/internal/PageFlowApplication.java&r2=124932 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/internal/PageFlowApplication.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/internal/PageFlowApplication.java Tue Jan 11 16:56:40 2005 @@ -67,7 +67,7 @@ public void setActionListener( ActionListener listener ) { - _delegate.setActionListener( listener ); + _delegate.setActionListener( new PageFlowActionListener( listener ) ); } public Locale getDefaultLocale() Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java?view=diff&rev=124932&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java&r1=124931&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java&r2=124932 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java Tue Jan 11 16:56:40 2005 @@ -214,21 +214,34 @@ } - Field[] fields = controlContainerClass.getDeclaredFields(); HashMap< Field, PropertyMap > ret = new HashMap< Field, PropertyMap >(); + boolean accessPrivateFields = true; - for ( int i = 0; i < fields.length; i++ ) + do { - Field field = fields[i]; + Field[] fields = controlContainerClass.getDeclaredFields(); - if ( ! Modifier.isStatic( field.getModifiers() ) && field.getAnnotation( Control.class ) != null ) + for ( int i = 0; i < fields.length; i++ ) { - field.setAccessible( true ); - ret.put( field, new AnnotatedElementMap( field ) ); + Field field = fields[i]; + int modifiers = field.getModifiers(); + + if ( ! Modifier.isStatic( modifiers ) && field.getAnnotation( Control.class ) != null ) + { + if ( accessPrivateFields || ! Modifier.isPrivate( modifiers ) ) + { + field.setAccessible( true ); + ret.put( field, new AnnotatedElementMap( field ) ); + } + } } - } - - _controlFieldCache.put( className, ret ); + + _controlFieldCache.put( className, ret ); + + accessPrivateFields = false; + controlContainerClass = controlContainerClass.getSuperclass(); + } while ( controlContainerClass != null ); + return ret; } } Added: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowCore/inheritControls/BaseControl.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowCore/inheritControls/BaseControl.java?view=auto&rev=124932 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowCore/inheritControls/BaseControl.java Tue Jan 11 16:56:40 2005 @@ -0,0 +1,9 @@ +package pageFlowCore.inheritControls; + +import org.apache.beehive.controls.api.bean.ControlInterface; + [EMAIL PROTECTED] +public interface BaseControl +{ + public String hello(); +} Added: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowCore/inheritControls/BaseControlImpl.jcs Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowCore/inheritControls/BaseControlImpl.jcs?view=auto&rev=124932 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/pageFlowCore/inheritControls/BaseControlImpl.jcs Tue Jan 11 16:56:40 2005 @@ -0,0 +1,12 @@ +package pageFlowCore.inheritControls; + +import org.apache.beehive.controls.api.bean.ControlImplementation; + [EMAIL PROTECTED] +public class BaseControlImpl implements BaseControl +{ + public String hello() + { + return "hi there"; + } +} Added: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/Controller.jpf Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/Controller.jpf?view=auto&rev=124932 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/Controller.jpf Tue Jan 11 16:56:40 2005 @@ -0,0 +1,13 @@ +package pageFlowCore.inheritControls; + +import org.apache.beehive.controls.api.bean.Control; +import org.apache.beehive.netui.pageflow.PageFlowController; +import org.apache.beehive.netui.pageflow.annotations.Jpf; + + [EMAIL PROTECTED]() +public abstract class Controller extends PageFlowController +{ + @Control() + protected BaseControlBean baseClassControl; +} Added: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/derived/DerivedController.jpf Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/derived/DerivedController.jpf?view=auto&rev=124932 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/derived/DerivedController.jpf Tue Jan 11 16:56:40 2005 @@ -0,0 +1,19 @@ +package pageFlowCore.inheritControls.derived; + +import pageFlowCore.inheritControls.Controller; +import org.apache.beehive.netui.pageflow.PageFlowController; +import org.apache.beehive.netui.pageflow.annotations.Jpf; + + [EMAIL PROTECTED]( + simpleActions={ + @Jpf.SimpleAction(name="begin", path="index.jsp") + } +) +public class DerivedController extends Controller +{ + public String getControlMessage() + { + return baseClassControl.hello(); + } +} Added: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/derived/index.jsp Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/derived/index.jsp?view=auto&rev=124932 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/inheritControls/derived/index.jsp Tue Jan 11 16:56:40 2005 @@ -0,0 +1,16 @@ +<%@ page language="java" contentType="text/html;charset=UTF-8"%> +<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%> +<%@ taglib prefix="netui-data" uri="http://beehive.apache.org/netui/tags-databinding-1.0"%> +<%@ taglib prefix="netui-template" uri="http://beehive.apache.org/netui/tags-template-1.0"%> + + +<netui:html> + <head> + <netui:base/> + </head> + <netui:body> + Inherited control says: <b>${pageFlow.controlMessage}</b> + </netui:body> +</netui:html> + + \ No newline at end of file Modified: incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml?view=diff&rev=124932&p1=incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml&r1=124931&p2=incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml&r2=124932 ============================================================================== --- incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml (original) +++ incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml Tue Jan 11 16:56:40 2005 @@ -3218,6 +3218,21 @@ </features> </test> <test> + <name>InheritControls</name> + <description>Test of inheriting control member fields.</description> + <webapp>coreWeb</webapp> + <categories> + <category>bvt</category> + <category>bvt.struts11</category> + <category>corePageFlow</category> + </categories> + <features> + <feature>PageFlow</feature> + <feature>Inheritance</feature> + <feature>Controls</feature> + </features> + </test> + <test> <name>IteratorTest</name> <description>Tests that warnings are returned for null object use by iterators</description> <webapp>coreWeb</webapp> Added: incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/InheritControls.xml Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/InheritControls.xml?view=auto&rev=124932 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/InheritControls.xml Tue Jan 11 16:56:40 2005 @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session"> + <ses:sessionName>InheritControls</ses:sessionName> + <ses:tester>rich</ses:tester> + <ses:startDate>11 Jan 2005, 04:47:05.273 PM MST</ses:startDate> + <ses:description>Test inheritance of control member fields.</ses:description> + <ses:tests> + <ses:test> + <ses:testNumber>1</ses:testNumber> + <ses:request> + <ses:protocol>HTTP</ses:protocol> + <ses:protocolVersion>1.1</ses:protocolVersion> + <ses:host>localhost</ses:host> + <ses:port>8080</ses:port> + <ses:uri>/coreWeb/pageFlowCore/inheritControls/derived/DerivedController.jpf</ses:uri> + <ses:method>GET</ses:method> + <ses:parameters/> + <ses:cookies> + <ses:cookie> + <ses:name>JSESSIONID</ses:name> + <ses:value>71E360AEF8A8967BC8F6F2E16EE86351</ses:value> + </ses:cookie> + <ses:cookie> + <ses:name>JSESSIONID</ses:name> + <ses:value>BkZJECYxQ0gonT6INiUZLr2qUwZ98y52JLnKaKC1TpnQrK4qbJeI!1758486163</ses:value> + </ses:cookie> + </ses:cookies> + <ses:headers> + <ses:header> + <ses:name>accept</ses:name> + <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value> + </ses:header> + <ses:header> + <ses:name>accept-charset</ses:name> + <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value> + </ses:header> + <ses:header> + <ses:name>accept-encoding</ses:name> + <ses:value>gzip,deflate</ses:value> + </ses:header> + <ses:header> + <ses:name>accept-language</ses:name> + <ses:value>en-us,en;q=0.5</ses:value> + </ses:header> + <ses:header> + <ses:name>connection</ses:name> + <ses:value>keep-alive</ses:value> + </ses:header> + <ses:header> + <ses:name>cookie</ses:name> + <ses:value>JSESSIONID=71E360AEF8A8967BC8F6F2E16EE86351; JSESSIONID=BkZJECYxQ0gonT6INiUZLr2qUwZ98y52JLnKaKC1TpnQrK4qbJeI!1758486163</ses:value> + </ses:header> + <ses:header> + <ses:name>host</ses:name> + <ses:value>localhost:8080</ses:value> + </ses:header> + <ses:header> + <ses:name>keep-alive</ses:name> + <ses:value>300</ses:value> + </ses:header> + <ses:header> + <ses:name>user-agent</ses:name> + <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value> + </ses:header> + </ses:headers> + </ses:request> + <ses:response> + <ses:statusCode>200</ses:statusCode> + <ses:reason/> + <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/html4/loose.dtd"> +<html lang="en"> + + <head> + <base href="http://localhost:8080/coreWeb/pageFlowCore/inheritControls/derived/index.jsp"> + </head> + <body> + Inherited control says: <b>hi there</b> + </body> + +</html>]]></ses:responseBody> + </ses:response> + </ses:test> + </ses:tests> + <ses:endDate>11 Jan 2005, 04:47:18.662 PM MST</ses:endDate> + <ses:testCount>1</ses:testCount> +</ses:recorderSession>
