You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ri...@apache.org on 2005/01/12 01:56:40 UTC
svn commit: r124932 - in incubator/beehive/trunk/netui: src/compiler/org/apache/beehive/netui/compiler src/compiler/org/apache/beehive/netui/compiler/grammar src/pageflow/org/apache/beehive/netui/pageflow/faces/internal src/pageflow/org/apache/beehive/netui/pageflow/internal test/webapps/drt/coreWeb/WEB-INF/src/pageFlowCore/inheritControls test/webapps/drt/coreWeb/pageFlowCore/inheritControls test/webapps/drt/coreWeb/pageFlowCore/inheritControls/derived test/webapps/drt/testRecorder/config test/webapps/drt/testRecorder/tests
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;
+
+@ControlInterface
+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;
+
+@ControlImplementation
+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;
+
+
+@Jpf.Controller()
+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;
+
+
+@Jpf.Controller(
+ 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>