[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