You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2008/01/30 23:38:26 UTC
svn commit: r616930 - in /tapestry/tapestry4/trunk: ./
tapestry-framework/src/java/org/apache/tapestry/
tapestry-framework/src/java/org/apache/tapestry/dojo/html/
tapestry-framework/src/java/org/apache/tapestry/engine/
tapestry-framework/src/java/org/a...
Author: jkuhnert
Date: Wed Jan 30 14:38:23 2008
New Revision: 616930
URL: http://svn.apache.org/viewvc?rev=616930&view=rev
Log:
I hope it fixes TAPESTRY-2092.
The "hacky" way that ComponentEventInvoker was finding a targeted component instance finally caught up with me. Replaced hack with use of IComponent.getIdPath() && IPage.getNestedComponent().
Modified:
tapestry/tapestry4/trunk/pom.xml
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IPage.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/ExternalService.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/event/BrowserEvent.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/event/PageValidateListener.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/ExternalLink.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMap.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/event/BrowserEventTest.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/spec/TestComponentSpecification.java
Modified: tapestry/tapestry4/trunk/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/pom.xml?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/pom.xml (original)
+++ tapestry/tapestry4/trunk/pom.xml Wed Jan 30 14:38:23 2008
@@ -213,7 +213,7 @@
<dependency>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-test</artifactId>
- <version>4.1.3</version>
+ <version>4.1.4-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script Wed Jan 30 14:38:23 2008
@@ -19,9 +19,9 @@
tapestry.cleanConnect("${clientId}", "${event[0]}", "event${event[1]}");
tapestry.event${event[1]}=function( event ){
- var content={beventname:"${event[0]}", bcomponentid:"${component.id}"};
+ var content={beventname:"${event[0]}", bcomponentidpath:"${component.extendedId}", bcomponentid:"${component.id}"};
- tapestry.event.buildEventProperties( event, content, arguments);
+ tapestry.event.buildEventProperties( event, content, arguments);
if (!content["beventtarget.id"]) {
content["beventtarget.id"]="${clientId}";
}
@@ -35,7 +35,7 @@
<foreach expression="formEvents" key="formEvent">
tapestry.cleanConnect("${clientId}", "${formEvent[0]}", "formEvent${formEvent[4]}");
tapestry.formEvent${formEvent[4]}=function(e){
- var content={beventname:"${formEvent[0]}", bcomponentid:"${component.id}"};
+ var content={beventname:"${formEvent[0]}", bcomponentidpath:"${component.extendedId}", bcomponentid:"${component.id}"};
tapestry.event.buildEventProperties(e, content, arguments);
if (!content["beventtarget.id"]){
content["beventtarget.id"]="${clientId}";
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IPage.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IPage.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IPage.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IPage.java Wed Jan 30 14:38:23 2008
@@ -183,7 +183,7 @@
* in) user should not be able to visit directly. This method acts as the first line of defense
* against a malicous user hacking URLs.
* <p>
- * Pages that should be protected will typically throw a {@linkPageRedirectException}, to
+ * Pages that should be protected will typically throw a {@link PageRedirectException}, to
* redirect the user to an appropriate part of the system (such as, a login page).
* <p>
* Since 3.0, it is easiest to not override this method, but to implement the
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script Wed Jan 30 14:38:23 2008
@@ -18,7 +18,7 @@
<foreach expression="events" key="event">
tapestry.cleanConnectWidget("${clientId}", "${event[0]}", "event${event[1]}");
tapestry.event${event[1]}=function(e){
- var content={beventname:"${event[0]}", bcomponentid:"${component.id}"};
+ var content={beventname:"${event[0]}", bcomponentidpath:"${component.extendedId}", bcomponentid:"${component.id}"};
tapestry.event.buildEventProperties(e, content, arguments);
if (!content["beventtarget.id"]) content["beventtarget.id"]="${clientId}";
tapestry.bind("${url}", content);
@@ -30,7 +30,7 @@
<foreach expression="formEvents" key="formEvent">
tapestry.cleanConnectWidget("${clientId}", "${formEvent[0]}", "formEvent${formEvent[4]}");
tapestry.formEvent${formEvent[4]}=function(e){
- var content={beventname:"${formEvent[0]}", bcomponentid:"${component.id}"};
+ var content={beventname:"${formEvent[0]}", bcomponentidpath:"${component.extendedId}", bcomponentid:"${component.id}"};
tapestry.event.buildEventProperties(e, content, arguments);
if (!content["beventtarget.id"]) content["beventtarget.id"]="${clientId}";
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/ExternalService.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/ExternalService.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/ExternalService.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/ExternalService.java Wed Jan 30 14:38:23 2008
@@ -14,10 +14,6 @@
package org.apache.tapestry.engine;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.util.Defense;
import org.apache.tapestry.IExternalPage;
@@ -28,6 +24,10 @@
import org.apache.tapestry.services.ResponseRenderer;
import org.apache.tapestry.services.ServiceConstants;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* The external service enables external applications to reference Tapestry pages via a URL. Pages
* which can be referenced by the external service must implement the {@link IExternalPage}
@@ -147,9 +147,7 @@
}
catch (ClassCastException ex)
{
- throw new ApplicationRuntimeException(EngineMessages.pageNotCompatible(
- rawPage,
- IExternalPage.class), rawPage, null, ex);
+ throw new ApplicationRuntimeException(EngineMessages.pageNotCompatible(rawPage,IExternalPage.class), rawPage, null, ex);
}
Object[] parameters = _linkFactory.extractListenerParameters(cycle);
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/event/BrowserEvent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/event/BrowserEvent.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/event/BrowserEvent.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/event/BrowserEvent.java Wed Jan 30 14:38:23 2008
@@ -29,20 +29,21 @@
*/
public class BrowserEvent
{
- public static final String NAME="beventname";
- public static final String TYPE="beventtype";
- public static final String KEYS="beventkeys";
- public static final String CHAR_CODE="beventcharCode";
- public static final String PAGE_X="beventpageX";
- public static final String PAGE_Y="beventpageY";
- public static final String LAYER_X="beventlayerX";
- public static final String LAYER_Y="beventlayerY";
+ public static final String NAME = "beventname";
+ public static final String TYPE = "beventtype";
+ public static final String KEYS = "beventkeys";
+ public static final String CHAR_CODE = "beventcharCode";
+ public static final String PAGE_X = "beventpageX";
+ public static final String PAGE_Y = "beventpageY";
+ public static final String LAYER_X = "beventlayerX";
+ public static final String LAYER_Y = "beventlayerY";
- public static final String TARGET="beventtarget";
- public static final String TARGET_ATTR_ID="id";
+ public static final String TARGET = "beventtarget";
+ public static final String TARGET_ATTR_ID = "id";
public static final String COMPONENT_ID = "bcomponentid";
+ public static final String COMPONENT_ID_PATH = "bcomponentidpath";
- public static final String METHOD_ARGUMENTS="methodArguments";
+ public static final String METHOD_ARGUMENTS = "methodArguments";
private String _name;
private String _type;
@@ -54,7 +55,8 @@
private String _layerY;
private EventTarget _target;
private String _componentId;
-
+ private String _componentIdPath;
+
private String _methodArguments;
private JSONArray _methodArgumentsArray;
@@ -78,6 +80,7 @@
_layerX = cycle.getParameter(LAYER_X);
_layerY = cycle.getParameter(LAYER_Y);
_componentId = cycle.getParameter(COMPONENT_ID);
+ _componentIdPath = cycle.getParameter(COMPONENT_ID_PATH);
Map props = new HashMap();
_target = new EventTarget(props);
@@ -100,22 +103,26 @@
*/
public BrowserEvent(String name, EventTarget target)
{
- this(name, null, target);
+ this(name, null, null, target);
}
/**
* Creates a new browser event with the specified
* name/target properties.
*
+ * <p>Currently used for testing only.</p>
+ *
* @param name The name of the event, ie "onClick", "onBlur", etc..
* @param componentId Component targeted.
+ * @param componentIdPath The id path of the component.
* @param target The target of the client side event.
*/
- public BrowserEvent(String name, String componentId, EventTarget target)
+ public BrowserEvent(String name, String componentId, String componentIdPath, EventTarget target)
{
_name = name;
_target = target;
_componentId = componentId;
+ _componentIdPath = componentIdPath;
}
/**
@@ -152,7 +159,18 @@
{
return _componentId;
}
-
+
+ /**
+ * If the event was generated for a {@link org.apache.tapestry.IComponent} - will be the
+ * value returned from {@link org.apache.tapestry.IComponent#getExtendedId()}.
+ *
+ * @return Component path id, or null if not present.
+ */
+ public String getComponentIdPath()
+ {
+ return _componentIdPath;
+ }
+
/**
* @return the charCode
*/
@@ -224,15 +242,15 @@
try
{
_methodArgumentsArray = _methodArguments != null
- ? new JSONArray( _methodArguments )
- : new JSONArray();
+ ? new JSONArray( _methodArguments )
+ : new JSONArray();
}
catch (ParseException ex)
{
throw new ApplicationRuntimeException(ex);
}
}
-
+
return _methodArgumentsArray;
}
@@ -271,6 +289,10 @@
", _layerY='" + _layerY + '\'' +
'\n' +
", _target=" + _target +
+ '\n' +
+ ", _componentId='" + _componentId + '\'' +
+ '\n' +
+ ", _componentIdPath='" + _componentIdPath + '\'' +
'\n' +
", _methodArguments='" + _methodArguments + '\'' +
'\n' +
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/event/PageValidateListener.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/event/PageValidateListener.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/event/PageValidateListener.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/event/PageValidateListener.java Wed Jan 30 14:38:23 2008
@@ -35,6 +35,8 @@
* May throw a {@link org.apache.tapestry.PageRedirectException}, to
* redirect the user to an appropriate part of the system (such as, a login
* page).
+ *
+ * @param event The originating event.
*/
void pageValidate(PageEvent event);
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script Wed Jan 30 14:38:23 2008
@@ -44,7 +44,7 @@
<if-not expression="formEvent[2]">
tapestry.form.submit("${formName}");
</if-not>
-
+
tapestry.form.setFormValidating("${formName}", validateState);
</foreach>
};
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java Wed Jan 30 14:38:23 2008
@@ -61,6 +61,7 @@
/**
* Adds a listener bound to the specified client side
* events.
+ *
* @param events
* @param methodName
* @param async
@@ -86,7 +87,8 @@
public void addListener(String[] events, String methodName,
String formId, boolean validateForm, boolean async, boolean focus, boolean autoSubmit)
{
- for (int i=0; i < events.length; i++) {
+ for (int i=0; i < events.length; i++)
+ {
if (formId != null && formId.length() > 0)
{
addFormEventListener(events[i], methodName, formId, validateForm, async, focus, autoSubmit);
@@ -140,15 +142,16 @@
Iterator it = getEvents().iterator();
List removeKeys = new ArrayList();
- while (it.hasNext()) {
+ while (it.hasNext())
+ {
String key = (String)it.next();
-
List listeners = (List) _eventMap.get(key);
+
Iterator lit = listeners.iterator();
- while (lit.hasNext()) {
-
+ while (lit.hasNext())
+ {
EventBoundListener listener = (EventBoundListener) lit.next();
-
+
listener.setFormId(formIdPath);
lit.remove();
@@ -159,13 +162,14 @@
// remove mapping if empty
- if (listeners.size() == 0) {
+ if (listeners.size() == 0)
+ {
removeKeys.add(key);
}
}
- for (int i=0; i < removeKeys.size(); i++) {
-
+ for (int i=0; i < removeKeys.size(); i++)
+ {
_eventMap.remove(removeKeys.get(i));
}
@@ -189,23 +193,25 @@
* Replaces all instances of the existing component id mapped for this property with the new
* {@link org.apache.tapestry.IComponent#getIdPath()} version.
*
- * @param idPath The component id path.
+ * @param extendedId The component extended id path.
+ * @param idPath The component idPath from the page.
*/
- public void rewireComponentId(String idPath)
+ public void rewireComponentId(String extendedId, String idPath)
{
- _componentId = idPath;
+ _componentId = extendedId;
Iterator it = getEvents().iterator();
while (it.hasNext())
{
String key = (String) it.next();
-
List listeners = (List)_eventMap.get(key);
- for (int i=0; i < listeners.size(); i++) {
-
+ for (int i=0; i < listeners.size(); i++)
+ {
EventBoundListener listener = (EventBoundListener) listeners.get(i);
- listener.setComponentId(idPath);
+
+ listener.setComponentId(extendedId);
+ listener.setComponentIdPath(idPath);
}
}
@@ -213,13 +219,14 @@
while (it.hasNext())
{
String key = (String) it.next();
-
List listeners = (List)_formEventMap.get(key);
- for (int i=0; i < listeners.size(); i++) {
-
+ for (int i=0; i < listeners.size(); i++)
+ {
EventBoundListener listener = (EventBoundListener) listeners.get(i);
- listener.setComponentId(idPath);
+
+ listener.setComponentId(extendedId);
+ listener.setComponentIdPath(idPath);
}
}
}
@@ -243,7 +250,8 @@
public List getEventListeners(String event)
{
List listeners = (List)_eventMap.get(event);
- if (listeners == null) {
+ if (listeners == null)
+ {
listeners = new ArrayList();
_eventMap.put(event, listeners);
}
@@ -263,7 +271,8 @@
public List getFormEventListeners(String event)
{
List listeners = (List)_formEventMap.get(event);
- if (listeners == null) {
+ if (listeners == null)
+ {
listeners = new ArrayList();
_formEventMap.put(event, listeners);
}
@@ -311,8 +320,10 @@
if (listeners == null)
return ret;
- for (int i=0; i < listeners.size(); i++) {
+ for (int i=0; i < listeners.size(); i++)
+ {
EventBoundListener listener = (EventBoundListener)listeners.get(i);
+
if (listener.getFormId().equals(formId))
ret.add(listener);
}
@@ -330,7 +341,8 @@
List listeners = (List)source.get(event);
List newListeners = new ArrayList();
- for (int i=0; i < listeners.size(); i++) {
+ for (int i=0; i < listeners.size(); i++)
+ {
EventBoundListener listener = (EventBoundListener) listeners.get(i);
newListeners.add(listener.clone());
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java Wed Jan 30 14:38:23 2008
@@ -28,6 +28,8 @@
private boolean _validateForm;
// The targeted component to listen to events on
private String _componentId;
+ // The id path of the component that the listener method is connected to
+ private String _componentIdPath;
// If targeting a form, whether or not to submit it asynchronously
private boolean _async;
@@ -126,6 +128,11 @@
_componentId = id;
}
+ public void setComponentIdPath(String idPath)
+ {
+ _componentIdPath = idPath;
+ }
+
/**
* @return the validateForm
*/
@@ -153,6 +160,11 @@
public boolean isAutoSubmit()
{
return _autoSubmit;
+ }
+
+ public String getComponentIdPath()
+ {
+ return _componentIdPath;
}
public Object clone()
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java Wed Jan 30 14:38:23 2008
@@ -15,10 +15,7 @@
import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.*;
import org.apache.tapestry.event.BrowserEvent;
import org.apache.tapestry.event.ResetEventListener;
import org.apache.tapestry.form.FormSupport;
@@ -29,7 +26,9 @@
import org.apache.tapestry.spec.IComponentSpecification;
import org.apache.tapestry.spec.IEventListener;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
/**
@@ -76,9 +75,9 @@
String formIdPath = form.getExtendedId();
String targetId = (String)event.getTarget().get("id");
- String componentId = event.getComponentId();
+ String componentIdPath = event.getComponentIdPath();
- if (targetId == null || componentId == null)
+ if (targetId == null || componentIdPath == null)
return;
List comps = getFormEventListeners(formIdPath);
@@ -92,19 +91,13 @@
IComponentSpecification spec = (IComponentSpecification)comps.get(i);
EventBoundListener[] listeners = spec.getFormEvents(formIdPath, event);
- IComponent target = null;
- if (spec.isPageSpecification())
- {
- target = form.getPage();
- } else {
- target = findComponent(form.getPage().getComponents().values(), spec);
- }
-
+ IPage page = form.getPage();
+
for (int e=0; e < listeners.length; e++)
{
// ensure ~only~ the method that targeted this event gets called!
- if (!listeners[e].getComponentId().endsWith(componentId))
+ if (!listeners[e].getComponentId().equals(componentIdPath))
continue;
// clear validation errors but not input if async validation is
@@ -119,6 +112,8 @@
if (!disableFocus && !listeners[e].shouldFocusForm())
disableFocus = true;
+ IComponent target = page.getNestedComponent(listeners[e].getComponentIdPath());
+
// defer execution until after form is done rewinding
form.addDeferredRunnable(
@@ -141,26 +136,18 @@
{
String idPath = component.getExtendedId();
List listeners = getEventListeners(idPath);
+
if (listeners == null)
return;
+ IPage page = component.getPage();
+
for (int i = 0; i < listeners.size(); i++)
{
IComponentSpecification listener = (IComponentSpecification)listeners.get(i);
- IComponent target;
- ComponentEventProperty props;
-
- if (listener.isPageSpecification())
- {
- target = component.getPage();
- props = listener.getComponentEvents(idPath);
- } else
- {
- target = findComponent(component.getPage().getComponents().values(), listener);
- props = target.getSpecification().getComponentEvents(idPath);
- }
-
+ ComponentEventProperty props = listener.getComponentEvents(idPath);
+
if (props == null)
continue;
@@ -169,6 +156,8 @@
{
EventBoundListener eventListener = (EventBoundListener)clisteners.get(e);
+ IComponent target = page.getNestedComponent(eventListener.getComponentIdPath());
+
_invoker.invokeListener(target.getListeners().getListener(eventListener.getMethodName()), target, cycle);
}
@@ -193,30 +182,6 @@
_invoker.invokeListener(component.getListeners().getListener(listener.getMethodName()), component, cycle);
}
- }
-
- IComponent findComponent(Collection comps, IComponentSpecification spec)
- {
- IComponent ret = null;
-
- Iterator it = comps.iterator();
-
- while (it.hasNext())
- {
- IComponent comp = (IComponent)it.next();
-
- if (comp.getSpecification().equals(spec))
- {
- ret = comp;
- break;
- }
-
- ret = findComponent(comp.getComponents().values(), spec);
- if (ret != null)
- break;
- }
-
- return ret;
}
/** Local runnable for deferred form connections. */
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/ExternalLink.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/ExternalLink.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/ExternalLink.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/ExternalLink.java Wed Jan 30 14:38:23 2008
@@ -33,21 +33,17 @@
public abstract class ExternalLink extends AbstractLinkComponent
{
-
public abstract IEngineService getExternalService();
public ILink getLink(IRequestCycle cycle)
{
- Object[] serviceParameters = DirectLink
- .constructServiceParameters(getParameters());
+ Object[] serviceParameters = DirectLink.constructServiceParameters(getParameters());
INamespace namespace = getTargetNamespace();
- String targetPage = (namespace==null) ?
- getTargetPage() : namespace.constructQualifiedName(getTargetPage());
+ String targetPage = (namespace==null) ? getTargetPage() : namespace.constructQualifiedName(getTargetPage());
- ExternalServiceParameter esp = new ExternalServiceParameter(
- targetPage, serviceParameters);
+ ExternalServiceParameter esp = new ExternalServiceParameter(targetPage, serviceParameters);
return getExternalService().getLink(false, esp);
}
@@ -56,6 +52,5 @@
public abstract String getTargetPage();
- /** @since 4.1.4 **/
public abstract INamespace getTargetNamespace();
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMap.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMap.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMap.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMap.java Wed Jan 30 14:38:23 2008
@@ -14,12 +14,12 @@
package org.apache.tapestry.listener;
-import java.util.Collection;
-
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.tapestry.IActionListener;
import org.apache.tapestry.IComponent;
+import java.util.Collection;
+
/**
* @author Howard M. Lewis Ship
*/
@@ -36,7 +36,7 @@
* the name of the method to invoke (the most appropriate method
* will be selected if there are multiple overloadings of the
* same method name)
- * @returns an object implementing {@link IActionListener}.
+ * @return an object implementing {@link IActionListener}.
* @throws ApplicationRuntimeException
* if the listener can not be created.
*/
@@ -50,7 +50,7 @@
* @param component
* the component whose id is used to make up the name of the
* expected listener
- * @returns an object implementing {@link IActionListener}.
+ * @return an object implementing {@link IActionListener}.
* @throws ApplicationRuntimeException
* if the listener can not be found on the component
*/
@@ -59,7 +59,8 @@
/**
* Returns an unmodifiable collection of the names of the listeners
* implemented by the target class.
- *
+ *
+ * @return List of known listener names.
* @since 1.0.6
*/
Collection getListenerNames();
@@ -67,7 +68,9 @@
/**
* Returns true if this ListenerMapImpl can provide a listener with the
* given name.
- *
+ *
+ * @param name Name of the method to check listener existance of.
+ * @return True if there is a matching listener of that name, false otherwise.
* @since 2.2
*/
boolean canProvideListener(String name);
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java Wed Jan 30 14:38:23 2008
@@ -32,32 +32,37 @@
Map events = component.getSpecification().getComponentEvents();
Set keySet = events.keySet();
String[] compIds = (String[]) keySet.toArray(new String[keySet.size()]);
-
+
for (int i=0; i < compIds.length; i++)
{
String compId = compIds[i];
- ComponentEventProperty property = (ComponentEventProperty) events.get(compId);
- // find the targeted component
+ // find the targeted component, first search component children
+ // and then page children if not contained by component
- IComponent comp = findComponent(compId, component.getPage());
+ IComponent comp = findComponent(compId, component);
+
+ if (comp == null && !IPage.class.isInstance(component))
+ {
+ comp = findComponent(compId, component.getPage());
+ }
if (comp == null)
continue;
if (Component.class.isInstance(comp))
((Component)comp).setHasEvents(true);
-
+
// wire up with idPath
String idPath = comp.getExtendedId();
-
- component.getSpecification().rewireComponentId(compId, idPath);
-
+
+ component.getSpecification().rewireComponentId(compId, idPath, component.getIdPath());
+
_invoker.addEventListener(idPath, component.getSpecification());
wireFormEvents(comp, component.getSpecification());
}
-
+
// find form element targets for re-mapping with proper idpath && IEventInvoker connection
events = component.getSpecification().getElementEvents();
@@ -65,7 +70,8 @@
// for efficiency later in ComponentEventConnectionWorker
- if (events.size() > 0 && Component.class.isInstance(component)) {
+ if (events.size() > 0 && Component.class.isInstance(component))
+ {
((Component)component).setHasEvents(true);
}
@@ -80,8 +86,8 @@
String key = (String) bindingIt.next();
List listeners = property.getFormEventListeners(key);
- for (int i=0; i < listeners.size(); i++) {
-
+ for (int i=0; i < listeners.size(); i++)
+ {
EventBoundListener listener = (EventBoundListener) listeners.get(i);
wireElementFormEvents(listener, component, component.getSpecification());
}
@@ -115,7 +121,7 @@
component, component.getLocation(), null);
String idPath = form.getExtendedId();
-
+
listener.setFormId(idPath);
_invoker.addFormEventListener(idPath, spec);
}
@@ -143,7 +149,7 @@
Map components = target.getComponents();
if (components == null)
return null;
-
+
IComponent comp = (IComponent) components.get(id);
if (comp != null)
return comp;
@@ -178,8 +184,8 @@
IForm findComponentForm(IFormComponent child)
{
- for (int i = 0; i < _forms.size(); i++) {
-
+ for (int i = 0; i < _forms.size(); i++)
+ {
IForm form = (IForm) _forms.get(i);
IComponent match = findContainedComponent(child.getExtendedId(), (Component)form);
@@ -201,8 +207,8 @@
if (children == null)
return null;
- for (int i=0; i < children.length; i++) {
-
+ for (int i=0; i < children.length; i++)
+ {
if (children[i] == null)
return null;
@@ -213,18 +219,18 @@
if (found != null)
return found;
}
-
+
return null;
}
void checkComponentPage(IComponent component)
{
- if (_currentPage == null) {
-
+ if (_currentPage == null)
+ {
_currentPage = component.getPage();
_forms.clear();
- } else if (component.getPage() != _currentPage) {
-
+ } else if (component.getPage() != _currentPage)
+ {
_currentPage = component.getPage();
_forms.clear();
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java Wed Jan 30 14:38:23 2008
@@ -101,7 +101,8 @@
DeferredFormConnection that = (DeferredFormConnection) o;
- if (_uniqueHash != null ? !_uniqueHash.equals(that._uniqueHash) : that._uniqueHash != null) return false;
+ if (_uniqueHash != null ? !_uniqueHash.equals(that._uniqueHash) : that._uniqueHash != null)
+ return false;
return true;
}
@@ -157,8 +158,8 @@
if (props == null)
return;
- for (int i=0; i < props.length; i++) {
-
+ for (int i=0; i < props.length; i++)
+ {
String clientId = component.getClientId();
Map parms = new HashMap();
@@ -172,7 +173,7 @@
continue;
DirectEventServiceParameter dsp =
- new DirectEventServiceParameter((IDirectEvent)component, new Object[] {}, new String[] {}, false);
+ new DirectEventServiceParameter((IDirectEvent)component, new Object[] {}, new String[] {}, false);
parms.put("url", _eventEngine.getLink(false, dsp).getURL());
parms.put("events", events);
@@ -191,7 +192,7 @@
return;
DirectEventServiceParameter dsp =
- new DirectEventServiceParameter((IDirectEvent)component, new Object[] {}, new String[] {}, false);
+ new DirectEventServiceParameter((IDirectEvent)component, new Object[] {}, new String[] {}, false);
String url = _eventEngine.getLink(false, dsp).getURL();
@@ -202,8 +203,8 @@
Iterator keys = elements.keySet().iterator();
// build our list of targets / events
- while (keys.hasNext()) {
-
+ while (keys.hasNext())
+ {
Map parms = new HashMap();
String target = (String)keys.next();
@@ -238,9 +239,9 @@
{
List names = (List)cycle.getAttribute(FORM_NAME_LIST + form.getExtendedId());
- if (names == null) {
+ if (names == null)
+ {
names = new ArrayList();
-
cycle.setAttribute(FORM_NAME_LIST + form.getExtendedId(), names);
}
@@ -269,8 +270,8 @@
if (props == null)
continue;
- for (int e=0; e < props.length; e++) {
-
+ for (int e=0; e < props.length; e++)
+ {
Object[][] formEvents = buildFormEvents(cycle, form.getExtendedId(),
props[e].getFormEvents(), fConn._async,
fConn._validate, fConn._uniqueHash);
@@ -412,11 +413,6 @@
listener.isAsync(),
listener.isValidateForm(),
ScriptUtils.functionHash(listener.hashCode() + (String) scriptParms.get("clientId")));
-
- /*deferFormConnection(formId, scriptParms,
- listener.isAsync(),
- listener.isValidateForm(),
- ScriptUtils.functionHash(listener.hashCode() + (String) scriptParms.get("clientId")));*/
// re-looping over the same property -> event listener list would
// result in duplicate bindings so break out
@@ -425,10 +421,10 @@
// form has been rendered so go ahead
retval.add(new Object[] {
- event, formNames,
- Boolean.valueOf(listener.isAsync()),
- Boolean.valueOf(listener.isValidateForm()),
- ScriptUtils.functionHash(listener)
+ event, formNames,
+ Boolean.valueOf(listener.isAsync()),
+ Boolean.valueOf(listener.isValidateForm()),
+ ScriptUtils.functionHash(listener)
});
}
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java Wed Jan 30 14:38:23 2008
@@ -736,22 +736,22 @@
property.connectAutoSubmitEvents(form.getExtendedId());
}
- public void rewireComponentId(String componentId, String idPath)
+ public void rewireComponentId(String componentId, String extendedId, String idPath)
{
ComponentEventProperty prop = getComponentEvents(componentId);
if (prop == null)
return;
- if (_componentEvents.containsKey(idPath))
+ if (_componentEvents.containsKey(extendedId))
return;
try {
ComponentEventProperty clone = (ComponentEventProperty) prop.clone();
- clone.rewireComponentId(idPath);
+ clone.rewireComponentId(extendedId, idPath);
- _componentEvents.put(idPath, clone);
+ _componentEvents.put(extendedId, clone);
} catch (CloneNotSupportedException e) {
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java Wed Jan 30 14:38:23 2008
@@ -143,9 +143,11 @@
* to use the more unique {@link org.apache.tapestry.IComponent#getIdPath()}.
*
* @param componentId
- * The basic component id.
+ * The base component id.
+ * @param extendedId
+ * The id of the component as returned by {@link org.apache.tapestry.IComponent#getExtendedId()}
* @param idPath
- * The id of the component pre-pended with the path of components containing it.
+ * The id of the component as returned by {@link org.apache.tapestry.IComponent#getIdPath()}
*/
- void rewireComponentId(String componentId, String idPath);
+ void rewireComponentId(String componentId, String extendedId, String idPath);
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java Wed Jan 30 14:38:23 2008
@@ -32,9 +32,6 @@
/**
* Tests for {@link org.apache.tapestry.engine.DirectService}.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
*/
@Test
public class DirectServiceTest extends ServiceTestCase
@@ -55,7 +52,7 @@
return c;
}
- public void testGetLinkOnSamePage()
+ public void test_Get_Link_On_Same_Page()
{
IPage page = newPage("ThePage");
IDirect c = newDirect(true);
@@ -93,7 +90,7 @@
verify();
}
- public void testGetLinkOnSamePageForPost()
+ public void test_Get_Link_On_Same_Page_For_Post()
{
IPage page = newPage("ThePage");
IDirect c = newDirect(true);
@@ -131,7 +128,7 @@
verify();
}
- public void testGetLinkOnSamePageStateful()
+ public void test_Get_Link_On_Same_Page_Stateful()
{
IDirect c = newDirect(true);
@@ -170,7 +167,7 @@
verify();
}
- public void testGetLinkOnDifferentPage()
+ public void test_Get_Link_On_Different_Page()
{
IPage page = newPage("ActivePage");
IPage componentPage = newPage("ComponentPage");
@@ -208,7 +205,7 @@
verify();
}
- public void testServiceSimple() throws Exception
+ public void test_Service_Simple() throws Exception
{
Object[] parameters = new Object[0];
IRequestCycle cycle = newCycle();
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/event/BrowserEventTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/event/BrowserEventTest.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/event/BrowserEventTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/event/BrowserEventTest.java Wed Jan 30 14:38:23 2008
@@ -72,6 +72,7 @@
expect(cycle.getParameter(BrowserEvent.LAYER_X)).andReturn(null);
expect(cycle.getParameter(BrowserEvent.LAYER_Y)).andReturn(null);
expect(cycle.getParameter(BrowserEvent.COMPONENT_ID)).andReturn(null);
+ expect(cycle.getParameter(BrowserEvent.COMPONENT_ID_PATH)).andReturn(null);
expect(cycle.getParameter(BrowserEvent.TARGET + "." + BrowserEvent.TARGET_ATTR_ID)).andReturn("element1");
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java Wed Jan 30 14:38:23 2008
@@ -196,7 +196,8 @@
assertEquals(prop.getFormEvents().size(), 1);
String path = "new/Path/Id";
- prop.rewireComponentId(path);
+ String idPath = "Home/" + path;
+ prop.rewireComponentId(path, idPath);
assertEquals(prop.getComponentId(), path);
@@ -211,6 +212,7 @@
EventBoundListener listener = (EventBoundListener) listeners.get(i);
assertEquals(listener.getComponentId(), path);
+ assertEquals(listener.getComponentIdPath(), idPath);
}
}
@@ -224,6 +226,7 @@
EventBoundListener listener = (EventBoundListener) listeners.get(i);
assertEquals(listener.getComponentId(), path);
+ assertEquals(listener.getComponentIdPath(), idPath);
}
}
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java Wed Jan 30 14:38:23 2008
@@ -32,43 +32,43 @@
/**
* Tests functionality of {@link ComponentEventInvoker}.
- *
+ *
* @author jkuhnert
*/
@Test
public class ComponentEventInvokerTest extends BaseComponentTestCase
{
-
+
public void test_Event_Properties()
{
IComponentSpecification spec = new ComponentSpecification();
spec.addEventListener("comp1", new String[] {"onClick"}, "testFoo", null, false, false, false, false);
-
+
assert spec.getComponentEvents("comp1") != null;
assert spec.getComponentEvents("comp1").getEvents().size() == 1;
-
+
ComponentEventProperty prop = spec.getComponentEvents("comp1");
assertNotNull(prop);
assertEquals(prop.getEventListeners("onClick").size(), 1);
-
+
prop = spec.getComponentEvents("comp2");
assert prop == null;
}
-
+
public void test_Form_Event_Properties()
{
IComponentSpecification spec = new ComponentSpecification();
spec.addEventListener("comp1", new String[] {"onClick"}, "testFoo", "form", false, true, false, false);
spec.addEventListener("comp1", new String[] {"onClick"}, "testBar", "form", false, true, false, false);
-
+
assert spec.getComponentEvents("comp1") != null;
-
+
ComponentEventProperty p = spec.getComponentEvents("comp1");
-
+
// should be only form events bound
assertEquals(p.getEvents().size(), 0);
assertEquals(p.getEventListeners("onClick").size(), 0);
-
+
assertEquals(p.getComponentId(), "comp1");
assertEquals(p.getFormEventListeners("onClick").size(), 2);
assertEquals(p.getFormEvents().size(), 1);
@@ -105,90 +105,84 @@
IRequestCycle cycle = newCycle();
IComponent comp = newComponent();
checkOrder(comp, false);
-
+
IPage page = newMock(IPage.class);
ListenerInvoker listenerInvoker = newMock(ListenerInvoker.class);
ListenerMap listenerMap = newMock(ListenerMap.class);
IActionListener listener1 = newMock(IActionListener.class);
IComponentSpecification spec = new ComponentSpecification();
-
- Map comps = new HashMap();
- comps.put("testId", comp);
-
+
Map tprops = new HashMap();
tprops.put("id", "testId");
BrowserEvent event = new BrowserEvent("onSelect", new EventTarget(tprops));
-
+
ComponentEventInvoker invoker = new ComponentEventInvoker();
invoker.setInvoker(listenerInvoker);
-
- spec.addEventListener("testId", new String[] { "onSelect" },
- "fooListener", null, false, false, false, false);
+
+ spec.addEventListener("testId", new String[] { "onSelect" },
+ "fooListener", null, false, false, false, false);
invoker.addEventListener("testId", spec);
expect(comp.getExtendedId()).andReturn("testId").anyTimes();
expect(comp.getSpecification()).andReturn(spec).anyTimes();
expect(comp.getPage()).andReturn(page);
- expect(page.getComponents()).andReturn(comps);
+ expect(page.getNestedComponent(null)).andReturn(comp);
expect(comp.getListeners()).andReturn(listenerMap);
-
+
expect(listenerMap.getListener("fooListener")).andReturn(listener1);
-
+
listenerInvoker.invokeListener(listener1, comp, cycle);
-
+
replay();
-
+
invoker.invokeListeners(comp, cycle, event);
-
+
verify();
}
-
+
public void test_Invoke_Element_Listener()
{
IRequestCycle cycle = newCycle();
IComponent comp = newComponent();
checkOrder(comp, false);
-
+
IPage page = newMock(IPage.class);
IComponentSpecification spec = new ComponentSpecification();
-
+
ListenerInvoker listenerInvoker = newMock(ListenerInvoker.class);
ListenerMap listenerMap = newMock(ListenerMap.class);
IActionListener listener = newMock(IActionListener.class);
-
- Map comps = new HashMap();
- comps.put("testId", comp);
-
+
Map tprops = new HashMap();
tprops.put("id", "testId");
BrowserEvent event = new BrowserEvent("onSelect", new EventTarget(tprops));
-
+
ComponentEventInvoker invoker = new ComponentEventInvoker();
invoker.setInvoker(listenerInvoker);
-
- spec.addElementEventListener("testId", new String[] { "onSelect" },
- "fooListener", null, false, true, true);
+
+ spec.addElementEventListener("testId", new String[] { "onSelect" },
+ "fooListener", null, false, true, true);
invoker.addEventListener("testId", spec);
-
+
expect(comp.getExtendedId()).andReturn("testId").anyTimes();
expect(comp.getSpecification()).andReturn(spec).anyTimes();
expect(comp.getPage()).andReturn(page);
- expect(page.getComponents()).andReturn(comps);
+
expect(comp.getListeners()).andReturn(listenerMap);
-
+
expect(listenerMap.getListener("fooListener")).andReturn(listener);
-
+
listenerInvoker.invokeListener(listener, comp, cycle);
-
+
replay();
-
+
invoker.invokeListeners(comp, cycle, event);
-
+
verify();
}
-
+
public void test_Invoke_Form_Listener()
{
IRequestCycle cycle = newCycle();
@@ -202,48 +196,42 @@
IActionListener listener = newMock(IActionListener.class);
IPage page = newMock(IPage.class);
checkOrder(page, false);
-
- Map comps = new HashMap();
- comps.put("form1", form);
-
+
Map tprops = new HashMap();
tprops.put("id", "form1");
- BrowserEvent event = new BrowserEvent("onSelect", "form1", new EventTarget(tprops));
-
+ BrowserEvent event = new BrowserEvent("onSelect", "form1", "form1", new EventTarget(tprops));
+
ComponentEventInvoker invoker = new ComponentEventInvoker();
invoker.setInvoker(listenerInvoker);
-
+
spec.addEventListener("form1", new String[] { "onSelect" }, "fooListener",
- "form1", false, false, false, false);
+ "form1", false, false, false, false);
invoker.addFormEventListener("form1", spec);
-
+
expect(formSupport.getForm()).andReturn(form);
expect(form.getExtendedId()).andReturn("form1").anyTimes();
- expect(form.getPage()).andReturn(page);
- expect(page.getComponents()).andReturn(comps);
-
- expect(form.getSpecification()).andReturn(spec);
+ expect(form.getPage()).andReturn(page);
+ expect(page.getNestedComponent(null)).andReturn(form);
expect(form.getDelegate()).andReturn(delegate).anyTimes();
delegate.clearErrors();
expectLastCall().anyTimes();
expect(form.getListeners()).andReturn(listenerMap);
-
expect(listenerMap.getListener("fooListener")).andReturn(listener);
-
+
form.addDeferredRunnable(isA(Runnable.class));
-
+
cycle.disableFocus();
-
+
replay();
-
+
invoker.invokeFormListeners(formSupport, cycle, event);
-
+
verify();
}
-
+
public void test_Invoke_Form_Listener_Enabled_Focus()
{
IRequestCycle cycle = newCycle();
@@ -252,49 +240,48 @@
FormSupport formSupport = newMock(FormSupport.class);
IComponentSpecification spec = new ComponentSpecification();
IValidationDelegate delegate = newMock(IValidationDelegate.class);
-
+
ListenerInvoker listenerInvoker = newMock(ListenerInvoker.class);
ListenerMap listenerMap = newMock(ListenerMap.class);
IActionListener listener = newMock(IActionListener.class);
IPage page = newMock(IPage.class);
checkOrder(page, false);
-
+
Map comps = new HashMap();
comps.put("form1", form);
-
+
Map tprops = new HashMap();
tprops.put("id", "form1");
- BrowserEvent event = new BrowserEvent("onSelect", "form1", new EventTarget(tprops));
-
+ BrowserEvent event = new BrowserEvent("onSelect", "form1", "form1", new EventTarget(tprops));
+
ComponentEventInvoker invoker = new ComponentEventInvoker();
invoker.setInvoker(listenerInvoker);
-
+
spec.addEventListener("form1", new String[] { "onSelect" }, "fooListener",
- "form1", false, false, true, false);
+ "form1", false, false, true, false);
invoker.addFormEventListener("form1", spec);
-
+
expect(formSupport.getForm()).andReturn(form);
expect(form.getExtendedId()).andReturn("form1").anyTimes();
+
expect(form.getPage()).andReturn(page);
+ expect(page.getNestedComponent(null)).andReturn(form);
- expect(page.getComponents()).andReturn(comps);
-
- expect(form.getSpecification()).andReturn(spec);
expect(form.getDelegate()).andReturn(delegate).anyTimes();
delegate.clearErrors();
expectLastCall().anyTimes();
expect(form.getListeners()).andReturn(listenerMap);
-
+
expect(listenerMap.getListener("fooListener")).andReturn(listener);
-
+
form.addDeferredRunnable(isA(Runnable.class));
-
+
replay();
-
+
invoker.invokeFormListeners(formSupport, cycle, event);
-
+
verify();
}
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java Wed Jan 30 14:38:23 2008
@@ -27,7 +27,7 @@
IComponentSpecification spec = new ComponentSpecification();
spec.addEventListener("comp1", new String[] {"onClick"}, "testFoo", null, false, false, false, false);
- IComponent comp = newComponent(spec, "comp1", "path/");
+ IComponent comp = newComponent(spec, "comp1", "path/", "Home/");
IComponentEventInvoker invoker = newMock(IComponentEventInvoker.class);
invoker.addEventListener("path/comp1", spec);
@@ -81,7 +81,7 @@
{
IComponentSpecification spec = newMock(IComponentSpecification.class);
IComponentEventInvoker invoker = newMock(IComponentEventInvoker.class);
- IComponent comp = newComponent(spec, "comp1", "path/");
+ IComponent comp = newComponent(spec, "comp1", "path/", "Home/");
ComponentEventProperty p = new ComponentEventProperty("comp1");
p.addListener(new String[] {"onClick"}, "testFoo", null, false, false, false, false);
@@ -93,7 +93,7 @@
expect(spec.getElementEvents()).andReturn(Collections.EMPTY_MAP);
invoker.addEventListener("path/comp1", spec);
- spec.rewireComponentId("comp1", "path/comp1");
+ spec.rewireComponentId("comp1", "path/comp1", "Home/path/comp1");
replay();
@@ -118,9 +118,14 @@
expect(page.getComponents()).andReturn(comps).anyTimes();
expect(comp.getComponents()).andReturn(null).anyTimes();
- if (args.length > 0) {
-
+ if (args.length > 0)
+ {
expect(comp.getExtendedId()).andReturn(args[0] + findCompId).anyTimes();
+ }
+
+ if (args.length > 1)
+ {
+ expect(comp.getIdPath()).andReturn((String)args[1] + (String)args[0] + findCompId).anyTimes();
}
return comp;
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/spec/TestComponentSpecification.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/spec/TestComponentSpecification.java?rev=616930&r1=616929&r2=616930&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/spec/TestComponentSpecification.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/spec/TestComponentSpecification.java Wed Jan 30 14:38:23 2008
@@ -230,12 +230,12 @@
assertEquals(cs.getComponentEvents().size(), 1);
assert cs.getComponentEvents("comp") != null;
- cs.rewireComponentId("unknown", "new/path");
+ cs.rewireComponentId("unknown", "new/path", "id/path");
assertEquals(cs.getComponentEvents().size(), 1);
- cs.rewireComponentId("comp", "page/comp");
- cs.rewireComponentId("comp", "page/comp");
+ cs.rewireComponentId("comp", "page/comp", "id/path");
+ cs.rewireComponentId("comp", "page/comp", "id/path");
assertEquals(cs.getComponentEvents().size(), 2);
assert cs.getComponentEvents("comp") != null;