Author: nbelaevski
Date: 2007-11-11 22:03:18 -0500 (Sun, 11 Nov 2007)
New Revision: 3901
Modified:
trunk/ui/drag-drop/src/main/java/org/richfaces/component/UIDragSupport.java
trunk/ui/drag-drop/src/main/java/org/richfaces/component/UIDropSupport.java
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DnDEventsExchangeMailer.java
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DnDValidator.java
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DraggableRendererContributor.java
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DropzoneRendererContributor.java
Log:
http://jira.jboss.com/jira/browse/RF-1330
Modified: trunk/ui/drag-drop/src/main/java/org/richfaces/component/UIDragSupport.java
===================================================================
--- trunk/ui/drag-drop/src/main/java/org/richfaces/component/UIDragSupport.java 2007-11-12
03:03:11 UTC (rev 3900)
+++ trunk/ui/drag-drop/src/main/java/org/richfaces/component/UIDragSupport.java 2007-11-12
03:03:18 UTC (rev 3901)
@@ -58,13 +58,16 @@
public void broadcast(FacesEvent event) throws AbortProcessingException {
super.broadcast(event);
if (event instanceof DragEvent) {
- MethodBinding binding = getDragListener();
- if (binding != null) {
- binding.invoke(getFacesContext(), new Object[] {event});
+ DragEvent dragEvent = (DragEvent) event;
+ if (dragEvent.isValid()) {
+ MethodBinding binding = getDragListener();
+ if (binding != null) {
+ binding.invoke(getFacesContext(), new Object[] {event});
+ }
+
+ new AjaxEvent(this).queue();
+ new ActionEvent(this).queue();
}
-
- new AjaxEvent(this).queue();
- new ActionEvent(this).queue();
}
}
Modified: trunk/ui/drag-drop/src/main/java/org/richfaces/component/UIDropSupport.java
===================================================================
--- trunk/ui/drag-drop/src/main/java/org/richfaces/component/UIDropSupport.java 2007-11-12
03:03:11 UTC (rev 3900)
+++ trunk/ui/drag-drop/src/main/java/org/richfaces/component/UIDropSupport.java 2007-11-12
03:03:18 UTC (rev 3901)
@@ -57,14 +57,15 @@
public void broadcast(FacesEvent event) throws AbortProcessingException {
super.broadcast(event);
if (event instanceof DropEvent) {
- MethodBinding binding = getDropListener();
- if (binding != null) {
- binding.invoke(getFacesContext(), new Object[] {event});
+ if (((DropEvent) event).isValid()) {
+ MethodBinding binding = getDropListener();
+ if (binding != null) {
+ binding.invoke(getFacesContext(), new Object[] {event});
+ }
+
+ new AjaxEvent(this).queue();
+ new ActionEvent(this).queue();
}
-
- new AjaxEvent(this).queue();
- new ActionEvent(this).queue();
-
}
}
Modified:
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DnDEventsExchangeMailer.java
===================================================================
---
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DnDEventsExchangeMailer.java 2007-11-12
03:03:11 UTC (rev 3900)
+++
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DnDEventsExchangeMailer.java 2007-11-12
03:03:18 UTC (rev 3901)
@@ -28,11 +28,11 @@
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
-import javax.faces.event.FacesEvent;
import org.apache.commons.collections.MultiHashMap;
import org.richfaces.component.Draggable;
import org.richfaces.component.Dropzone;
+import org.richfaces.event.DnDEvent;
/**
* @author Nick Belaevski - nbelaevski(a)exadel.com
@@ -45,16 +45,16 @@
}
private static class EventInfoStructure {
- private FacesEvent facesEvent;
+ private DnDEvent dndEvent;
private EventCallback eventCallback;
private Object type;
private Object value;
- public EventInfoStructure(FacesEvent facesEvent,
+ public EventInfoStructure(DnDEvent dndEvent,
EventCallback eventCallback, Object type, Object value) {
super();
- this.facesEvent = facesEvent;
+ this.dndEvent = dndEvent;
this.eventCallback = eventCallback;
this.type = type;
this.value = value;
@@ -63,7 +63,7 @@
}
static abstract class EventCallback {
- abstract void processEvent(FacesEvent facesEvent, UIComponent source, FacesContext
facesContext, Object type, Object value);
+ abstract void processEvent(DnDEvent dndEvent, UIComponent source, FacesContext
facesContext, Object type, Object value);
}
static DnDEventsExchangeMailer getInstance(FacesContext facesContext) {
@@ -86,22 +86,25 @@
private Map components = new HashMap();
- private void processEvent(UIComponent source, FacesContext facesContext, FacesEvent
facesEvent, EventCallback callback, Object type, Object value) {
+ private void processEvent(UIComponent source, FacesContext facesContext, DnDEvent
dndEvent, EventCallback callback, Object type, Object value) {
if (callback != null) {
- callback.processEvent(facesEvent, source, facesContext, type, value);
+ callback.processEvent(dndEvent, source, facesContext, type, value);
}
}
- public void mailEvent(String sourceId, UIComponent target, FacesContext facesContext,
FacesEvent facesEvent,
+ public void mailEvent(String sourceId, UIComponent target, FacesContext facesContext,
DnDEvent dndEvent,
EventCallback callback, Object type, Object value, boolean isDraggable) {
- facesEvent.queue();
+ //we should queue event right now to preserve row key if its generator
+ //is nested in UIData...
+ dndEvent.queue();
+
UIComponent component = (UIComponent) components.get(sourceId);
String targetId = target.getClientId(facesContext);
if (component == null) {
//component with that sourceId have never mailed anything before - wait
- queuedMap.put(sourceId, new EventInfoStructure(facesEvent, callback, type, value));
+ queuedMap.put(sourceId, new EventInfoStructure(dndEvent, callback, type, value));
components.put(targetId, target);
} else {
//check queued mail lists for current component
@@ -131,15 +134,24 @@
dragType = eventInfo.type;
}
- DnDValidator.validateAcceptTypes(facesContext, draggable, dropzone, dragType,
acceptedTypes);
+ if (DnDValidator.validateAcceptTypes(facesContext,
+ draggable, dropzone,
+ dragType, acceptedTypes)) {
+
- processEvent(target, facesContext, eventInfo.facesEvent, eventInfo.eventCallback,
- type, value);
+ processEvent(target, facesContext, eventInfo.dndEvent, eventInfo.eventCallback,
+ type, value);
- //we know the component - process event now
- processEvent(component, facesContext, facesEvent, callback,
- eventInfo.type, eventInfo.value);
+ //we know the component - process event now
+ processEvent(component, facesContext, dndEvent, callback,
+ eventInfo.type, eventInfo.value);
+ } else {
+ dndEvent.invalidate();
+
+ eventInfo.dndEvent.invalidate();
+ }
+
iterator.remove();
}
Modified: trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DnDValidator.java
===================================================================
--- trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DnDValidator.java 2007-11-12
03:03:11 UTC (rev 3900)
+++ trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DnDValidator.java 2007-11-12
03:03:18 UTC (rev 3901)
@@ -41,7 +41,7 @@
class DnDValidator {
private final static String MESSAGE_FORMAT = "Dropzone [{0}] with accepted types
{1} cannot accept Draggable [{2}] with dragType [{3}]";
- static void validateAcceptTypes(FacesContext context, Draggable draggable, Dropzone
dropzone, Object dragType, Object acceptedTypes) {
+ static boolean validateAcceptTypes(FacesContext context, Draggable draggable, Dropzone
dropzone, Object dragType, Object acceptedTypes) {
Set set = AjaxRendererUtils.asSet(acceptedTypes);
if (set == null || !set.contains(dragType)) {
UIComponent component = (UIComponent) dropzone;
@@ -58,6 +58,10 @@
context.addMessage(component.getClientId(context), message);
context.renderResponse();
+
+ return false;
}
+
+ return true;
}
}
Modified:
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DraggableRendererContributor.java
===================================================================
---
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DraggableRendererContributor.java 2007-11-12
03:03:11 UTC (rev 3900)
+++
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DraggableRendererContributor.java 2007-11-12
03:03:18 UTC (rev 3901)
@@ -26,7 +26,6 @@
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
-import javax.faces.event.FacesEvent;
import org.ajax4jsf.javascript.DnDScript;
import org.ajax4jsf.javascript.PrototypeScript;
@@ -34,6 +33,7 @@
import org.ajax4jsf.renderkit.RendererUtils;
import org.richfaces.component.Draggable;
import org.richfaces.component.Dropzone;
+import org.richfaces.event.DnDEvent;
import org.richfaces.event.DragEvent;
import org.richfaces.renderkit.DnDEventsExchangeMailer.EventCallback;
@@ -47,10 +47,10 @@
private static final EventCallback dragEventsCallback = new EventCallback() {
- void processEvent(FacesEvent facesEvent, UIComponent source,
+ void processEvent(DnDEvent dndEvent, UIComponent source,
FacesContext facesContext, Object type, Object value) {
- DragEvent dragEvent = (DragEvent) facesEvent;
+ DragEvent dragEvent = (DragEvent) dndEvent;
dragEvent.setDropTarget((Dropzone) source);
dragEvent.setDropValue(value);
dragEvent.setAcceptedTypes(type);
Modified:
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DropzoneRendererContributor.java
===================================================================
---
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DropzoneRendererContributor.java 2007-11-12
03:03:11 UTC (rev 3900)
+++
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DropzoneRendererContributor.java 2007-11-12
03:03:18 UTC (rev 3901)
@@ -26,7 +26,6 @@
import javax.faces.FacesException;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
-import javax.faces.event.FacesEvent;
import org.ajax4jsf.javascript.DnDScript;
import org.ajax4jsf.javascript.JSFunction;
@@ -37,6 +36,7 @@
import org.ajax4jsf.renderkit.AjaxRendererUtils;
import org.richfaces.component.Draggable;
import org.richfaces.component.Dropzone;
+import org.richfaces.event.DnDEvent;
import org.richfaces.event.DropEvent;
import org.richfaces.json.JSONCollection;
import org.richfaces.json.JSONException;
@@ -53,10 +53,10 @@
private static final EventCallback dropEventsCallback = new EventCallback() {
- void processEvent(FacesEvent facesEvent, UIComponent source,
+ void processEvent(DnDEvent dndEvent, UIComponent source,
FacesContext facesContext, Object type, Object value) {
- DropEvent dropEvent = (DropEvent) facesEvent;
+ DropEvent dropEvent = (DropEvent) dndEvent;
Draggable draggable = (Draggable) source;
dropEvent.setDraggableSource(draggable);