[richfaces-svn-commits] JBoss Rich Faces SVN: r11791 - trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit.
richfaces-svn-commits at lists.jboss.org
richfaces-svn-commits at lists.jboss.org
Mon Dec 15 14:39:23 EST 2008
Author: nbelaevski
Date: 2008-12-15 14:39:23 -0500 (Mon, 15 Dec 2008)
New Revision: 11791
Removed:
trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DnDValidator.java
Modified:
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:
https://jira.jboss.org/jira/browse/RF-5388
https://jira.jboss.org/jira/browse/RF-961
Deleted: trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DnDValidator.java
===================================================================
--- trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DnDValidator.java 2008-12-15 19:36:12 UTC (rev 11790)
+++ trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DnDValidator.java 2008-12-15 19:39:23 UTC (rev 11791)
@@ -1,67 +0,0 @@
-/**
- * License Agreement.
- *
- * JBoss RichFaces - Ajax4jsf Component Library
- *
- * Copyright (C) 2007 Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-package org.richfaces.renderkit;
-
-import java.text.MessageFormat;
-import java.util.Set;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-import org.ajax4jsf.renderkit.AjaxRendererUtils;
-import org.richfaces.component.Draggable;
-import org.richfaces.component.Dropzone;
-import org.richfaces.component.util.MessageUtil;
-
-/**
- * @author Nick - mailto:nbelaevski at exadel.com
- * created 06.02.2007
- *
- */
-class DnDValidator {
- private final static String MESSAGE_FORMAT = "Dropzone [{0}] with accepted types {1} cannot accept Draggable [{2}] with dragType [{3}]";
-
- static boolean validateAcceptTypes(FacesContext context, Draggable draggable, Dropzone dropzone, String dragType, Object acceptedTypes) {
- Set<String> set = AjaxRendererUtils.asSet(acceptedTypes);
- if (set == null || !set.contains(dragType)) {
- UIComponent component = (UIComponent) dropzone;
- String text = MessageFormat.format(
- MESSAGE_FORMAT,
- new Object[] {
- MessageUtil.getLabel(context, component),
- set,
- MessageUtil.getLabel(context, (UIComponent) draggable),
- dragType});
-
- FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, text, text);
-
- 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 2008-12-15 19:36:12 UTC (rev 11790)
+++ trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DraggableRendererContributor.java 2008-12-15 19:39:23 UTC (rev 11791)
@@ -21,6 +21,7 @@
package org.richfaces.renderkit;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -107,17 +108,14 @@
DraggableOptions options = new DraggableOptions(draggable);
- Map eventOptions = AjaxRendererUtils.buildEventOptions(context, component);
+ Map eventOptions = AjaxRendererUtils.buildEventOptions(context, component,
+ Collections.singletonMap(DRAG_SOURCE_ID, (Object) component.getClientId(context)));
Map parameters = (Map) eventOptions.get("parameters");
if (parameters == null) {
parameters = new HashMap();
}
- String clientId = component.getClientId(context);
-
- parameters.put(DRAG_SOURCE_ID, clientId);
-
options.addOption("parameters", parameters);
String indicatorId = draggable.getResolvedDragIndicator(context);
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 2008-12-15 19:36:12 UTC (rev 11790)
+++ trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DropzoneRendererContributor.java 2008-12-15 19:39:23 UTC (rev 11791)
@@ -21,9 +21,12 @@
package org.richfaces.renderkit;
+import java.text.MessageFormat;
import java.util.Map;
+import java.util.Set;
import javax.faces.FacesException;
+import javax.faces.application.FacesMessage;
import javax.faces.component.ContextCallback;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
@@ -38,6 +41,7 @@
import org.ajax4jsf.renderkit.AjaxRendererUtils;
import org.richfaces.component.Draggable;
import org.richfaces.component.Dropzone;
+import org.richfaces.component.util.MessageUtil;
import org.richfaces.event.DragEvent;
import org.richfaces.event.DropEvent;
import org.richfaces.json.JSONCollection;
@@ -143,39 +147,79 @@
private Dropzone dropzone;
- public DraggableDecoderContextCallback(Dropzone dropzone) {
+ private Draggable draggable;
+
+ private String dragType;
+
+ private Object dragValue;
+
+ private Object acceptedTypes;
+
+ private Object dropValue;
+
+ private boolean valid = true;
+
+ private Object draggableLabel;
+
+ public DraggableDecoderContextCallback(Dropzone dropzone, Object acceptedTypes, Object dropValue) {
super();
this.dropzone = dropzone;
+ this.acceptedTypes = acceptedTypes;
+ this.dropValue = dropValue;
}
+ private boolean validateAcceptTypes(String dragType, Object acceptedTypes) {
+ Set<String> set = AjaxRendererUtils.asSet(acceptedTypes);
+ return (set != null && set.contains(dragType));
+ }
+
public void invokeContextCallback(FacesContext context,
UIComponent target) {
- Draggable draggable = (Draggable) target;
+ this.draggable = (Draggable) target;
- String dragType = draggable.getDragType();
- Object acceptedTypes = dropzone.getAcceptedTypes();
+ this.dragType = draggable.getDragType();
+ this.dragValue = draggable.getDragValue();
+
+ if (validateAcceptTypes(dragType, acceptedTypes)) {
- if (DnDValidator.validateAcceptTypes(context,
- draggable, dropzone,
- dragType, acceptedTypes)) {
-
DragEvent dragEvent = new DragEvent((UIComponent) draggable);
dragEvent.setDropTarget(dropzone);
dragEvent.setAcceptedTypes(acceptedTypes);
- dragEvent.setDropValue(dropzone.getDropValue());
+ dragEvent.setDropValue(dropValue);
- DropEvent dropEvent = new DropEvent((UIComponent) dropzone);
- dropEvent.setDraggableSource(draggable);
- dropEvent.setDragType(dragType);
- dropEvent.setDragValue(draggable.getDragValue());
-
dragEvent.queue();
- dropEvent.queue();
+ } else {
+ //invalidate
+ this.valid = false;
+ //store label for message output
+ this.draggableLabel = MessageUtil.getLabel(context, (UIComponent) draggable);
}
}
+
+ public Draggable getDraggable() {
+ return draggable;
+ }
+
+ public String getDragType() {
+ return dragType;
+ }
+
+ public Object getDragValue() {
+ return dragValue;
+ }
+
+ public boolean isValid() {
+ return valid;
+ }
+
+ public Object getDraggableLabel() {
+ return draggableLabel;
+ }
}
+
+ private final static String MISTYPED_DND_MESSAGE = "Dropzone [{0}] with accepted types {1} cannot accept Draggable [{2}] with dragType [{3}]";
public void decode(FacesContext context, UIComponent component, CompositeRenderer compositeRenderer) {
String clientId = component.getClientId(context);
@@ -185,11 +229,42 @@
String dragSourceId = (String) paramMap.get(DraggableRendererContributor.DRAG_SOURCE_ID);
if (dragSourceId != null && dragSourceId.length() != 0) {
+ Dropzone dropzone = (Dropzone) component;
+ Object acceptedTypes = dropzone.getAcceptedTypes();
+ Object dropValue = dropzone.getDropValue();
+
DraggableDecoderContextCallback draggableDecoderContextCallback =
- new DraggableDecoderContextCallback((Dropzone) component);
+ new DraggableDecoderContextCallback(dropzone,
+ acceptedTypes, dropValue);
context.getViewRoot().invokeOnComponent(context, dragSourceId,
new ContextCallbackWrapper(draggableDecoderContextCallback));
+
+ Draggable draggable = draggableDecoderContextCallback.getDraggable();
+ if (draggable != null) {
+ if (draggableDecoderContextCallback.isValid()) {
+ DropEvent dropEvent = new DropEvent(component);
+ dropEvent.setDraggableSource(draggable);
+ dropEvent.setDragType(draggableDecoderContextCallback.getDragType());
+ dropEvent.setDragValue(draggableDecoderContextCallback.getDragValue());
+
+ dropEvent.queue();
+ } else {
+ String text = MessageFormat.format(
+ MISTYPED_DND_MESSAGE,
+ new Object[] {
+ MessageUtil.getLabel(context, component),
+ acceptedTypes,
+ draggableDecoderContextCallback.getDraggableLabel(),
+ draggableDecoderContextCallback.getDragType()});
+
+ FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, text, text);
+
+ context.addMessage(component.getClientId(context), message);
+
+ context.renderResponse();
+ }
+ }
}
}
}
@@ -207,7 +282,7 @@
definition.addToBody("var options = ").addToBody(ScriptUtils.toScript(requestOpts)).addToBody(";");
definition.addToBody("options.parameters['" + DROP_TARGET_ID + "'] = '" + component.getClientId(context) + "';");
//TODO nick - remove as legacy
- definition.addToBody("Richfaces.mergeObjects(options.parameters, drag.getParameters());");
+ definition.addToBody("Object.extend(options.parameters, drag.getParameters());");
definition.addToBody("var dzOptions = this.getDropzoneOptions(); if (dzOptions.ondrop) { if (!dzOptions.ondrop.call(this, event)) return; };");
JSFunction dropFunction = AjaxRendererUtils.buildAjaxFunction(component, context);
More information about the richfaces-svn-commits
mailing list