[richfaces-svn-commits] JBoss Rich Faces SVN: r2389 - in trunk: framework/impl/src/main/java/org/ajax4jsf/util and 22 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Tue Aug 21 19:38:33 EDT 2007


Author: nbelaevski
Date: 2007-08-21 19:38:32 -0400 (Tue, 21 Aug 2007)
New Revision: 2389

Added:
   trunk/framework/impl/src/main/java/org/ajax4jsf/util/Zipper2.java
   trunk/framework/impl/src/test/java/org/ajax4jsf/util/
   trunk/framework/impl/src/test/java/org/ajax4jsf/util/Zipper2Test.java
Removed:
   trunk/framework/impl/src/main/javascript/dnd/dnd-draggable.js
   trunk/framework/impl/src/main/javascript/dnd/dnd-dropzone.js
Modified:
   trunk/framework/impl/generatescript.xml
   trunk/framework/impl/src/main/java/org/richfaces/renderkit/html/BaseGradient.java
   trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/dnd/dnd-common.js
   trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/dnd/dnd-draggable.js
   trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/dnd/dnd-dropzone.js
   trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/json/json-mini.js
   trunk/samples/pom.xml
   trunk/samples/tree-demo/src/main/webapp/pages/index.jsp
   trunk/ui/calendar/src/main/java/org/richfaces/renderkit/html/iconimages/CalendarIcon.java
   trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DropzoneRendererContributor.java
   trunk/ui/drag-drop/src/main/resources/org/richfaces/renderkit/html/scripts/simple-draggable.js
   trunk/ui/drag-drop/src/main/resources/org/richfaces/renderkit/html/scripts/simple-dropzone.js
   trunk/ui/inputnumber-spinner/src/main/java/org/richfaces/renderkit/html/images/buttons/SpinnerButtonImage.java
   trunk/ui/menu-components/src/main/java/org/richfaces/renderkit/html/images/MenuNodeImage.java
   trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconBasic.java
   trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconChevron.java
   trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconChevronDown.java
   trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconChevronUp.java
   trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconDisc.java
   trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconGrid.java
   trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconTriangle.java
   trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconTriangleDown.java
   trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconTriangleUp.java
   trunk/ui/scrollableDataTable/src/main/java/org/richfaces/renderkit/html/iconimages/ScrollableDataTableIconBasic.java
   trunk/ui/separator/src/main/java/org/richfaces/renderkit/html/images/BevelSeparatorImage.java
   trunk/ui/separator/src/main/java/org/richfaces/renderkit/html/images/SimpleSeparatorImage.java
   trunk/ui/toolBar/src/main/java/org/richfaces/renderkit/html/images/ToolBarSeparatorImage.java
   trunk/ui/tree/src/main/config/component/treeNode.xml
   trunk/ui/tree/src/main/java/org/richfaces/component/UITreeNode.java
   trunk/ui/tree/src/main/java/org/richfaces/renderkit/NodeRendererBase.java
   trunk/ui/tree/src/main/resources/org/richfaces/renderkit/html/scripts/tree-item-dnd.js
   trunk/ui/tree/src/test/java/org/richfaces/component/TreeComponentTest.java
Log:
- Java2Dresource instances switched to Zipper2
- Legacy DnD scripts removed
- http://jira.jboss.com/jira/browse/RF-642:
    - Evaluation to functions for on* properties of DnD options added
    - EventHandlersWalk function added to json-mini.js
    - tree-demo: ondrop handler added
    - unit test for DnD event getters added
    - getDraggableOptions & getDropzoneOptions methods added
- effect-sample added to pom.xml


Modified: trunk/framework/impl/generatescript.xml
===================================================================
--- trunk/framework/impl/generatescript.xml	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/framework/impl/generatescript.xml	2007-08-21 23:38:32 UTC (rev 2389)
@@ -55,7 +55,7 @@
 
 	<filelist id="dnd"
 		          dir="${basedir}/src/main/javascript/dnd"
-			      files="prolog.js,dnd.js,dnd-draggable.js,dnd-dropzone.js,epilog.js"
+			      files="prolog.js,dnd.js,epilog.js"
 	>
 	</filelist>
 

Added: trunk/framework/impl/src/main/java/org/ajax4jsf/util/Zipper2.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/util/Zipper2.java	                        (rev 0)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/util/Zipper2.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -0,0 +1,104 @@
+/**
+ * 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.ajax4jsf.util;
+
+import java.awt.Color;
+import java.nio.ByteBuffer;
+
+/**
+ * 
+ * <br /><br />
+ * 
+ * Created 21.08.2007
+ * @author Nick Belaevski
+ * @since 3.1
+ */
+
+public class Zipper2 {
+	private byte[] buffer;
+
+	int offset = 0;
+	
+	public Zipper2(byte[] buffer) {
+		super();
+		this.buffer = buffer;
+	}
+
+	public Zipper2 addByte(byte b) {
+		buffer[offset++] = b;
+		return this;
+	}
+
+	public Zipper2 addShort(short s) {
+		ByteBuffer.wrap(buffer, offset, 2).asShortBuffer().put(s);
+		offset += 2;
+		return this;
+	}
+
+	public Zipper2 addColor(Color color) {
+		addColor(color.getRGB());
+		return this;
+	}
+
+	public Zipper2 addColor(int i) {
+		buffer[offset] = (byte) ((i >> 0) & 0xFF);
+		buffer[offset + 1] = (byte) ((i >> 8) & 0xFF);
+		buffer[offset + 2] = (byte) ((i >> 16) & 0xFF);
+		offset += 3;
+		return this;
+	}
+	
+	public Zipper2 addInt(int i) {
+		ByteBuffer.wrap(buffer, offset, 4).asIntBuffer().put(i);
+		offset += 4;
+		return this;
+	}
+	
+	public byte nextByte() {
+		return buffer[offset++];
+	}
+
+	public short nextShort() {
+		short s = ByteBuffer.wrap(buffer, offset, 2).asShortBuffer().get();
+		offset += 2;
+		return s;
+	}
+	
+	public Color nextColor() {
+		return new Color(nextIntColor());
+	}
+	
+	public int nextIntColor() {
+		int r0 = buffer[offset]&0x0ff;
+		int r1 = (buffer[offset+1]<<8)&0x0ff00;
+		int r2 = (buffer[offset+2]<<16)&0x0ff0000;
+		int ret = r0 | r1 | r2;
+		offset += 3;
+		return ret;
+	}
+	
+	public int nextInt() {
+		int i = ByteBuffer.wrap(buffer, offset, 4).asIntBuffer().get();
+		offset += 4;
+		return i;
+	}
+}

Modified: trunk/framework/impl/src/main/java/org/richfaces/renderkit/html/BaseGradient.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/renderkit/html/BaseGradient.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/framework/impl/src/main/java/org/richfaces/renderkit/html/BaseGradient.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -29,7 +29,6 @@
 import java.awt.geom.Rectangle2D;
 import java.io.Serializable;
 import java.util.Date;
-import java.util.StringTokenizer;
 
 import javax.faces.context.FacesContext;
 
@@ -38,7 +37,7 @@
 import org.ajax4jsf.resource.Java2Dresource;
 import org.ajax4jsf.resource.ResourceContext;
 import org.ajax4jsf.util.HtmlColor;
-import org.ajax4jsf.util.Zipper;
+import org.ajax4jsf.util.Zipper2;
 import org.richfaces.skin.Skin;
 import org.richfaces.skin.SkinFactory;
 
@@ -183,8 +182,9 @@
 		}
 
 		public Data(byte[] data) {
-			headerBackgroundColor = new Integer(Zipper.unzip(data,0));
-			headerGradientColor = new Integer(Zipper.unzip(data,3));
+			Zipper2 zipper2 = new Zipper2(data);
+			headerBackgroundColor = new Integer(zipper2.nextIntColor());
+			headerGradientColor = new Integer(zipper2.nextIntColor());
 		}
 		
 		protected Data(FacesContext context) {
@@ -230,8 +230,7 @@
 		protected Integer headerGradientColor;
 		public byte[] toByteArray() {
 			byte[] ret = new byte[6];
-			Zipper.zip(ret,headerBackgroundColor.intValue(),0);
-			Zipper.zip(ret,headerGradientColor.intValue(),3);
+			new Zipper2(ret).addColor(headerBackgroundColor.intValue()).addColor(headerGradientColor.intValue());
 			return ret;
 		}
 	}

Deleted: trunk/framework/impl/src/main/javascript/dnd/dnd-draggable.js
===================================================================
--- trunk/framework/impl/src/main/javascript/dnd/dnd-draggable.js	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/framework/impl/src/main/javascript/dnd/dnd-draggable.js	2007-08-21 23:38:32 UTC (rev 2389)
@@ -1,55 +0,0 @@
-/**
- * @author Maksim Kaszynski
- * base class for draggable component.
- */
-DnD.Draggable = function() {};
-DnD.Draggable.prototype = {
-	
-	/**
-	 * @return type of draggable content
-	 */
-	getContentType: function() {
-		return "ZZZZZ";
-	},
-	/**
-	 * implementations are responsible for getting drag indicator
-	 * @return DnD.Indicator
-	 */
-	getIndicator: function() {
-		return null;
-	},
-
-	startDrag : function(event) {
-		var type = this.getContentType();
-		var indicator = this.getIndicator();
-		var drag = new DnD.Drag(this, indicator, type);
-		DnD.startDrag(drag);
-		DnD.updateDrag(event);
-		this.ondragstart(event, drag);
-		if (indicator) {
-			indicator.show();
-		}
-	},
-	/**
-	 * 
-	 * @param {DnD.Drag} drag
-	 */
-	endDrag: function(event, drag) {
-		var indicator = drag.indicator;
-		if (indicator) {
-			indicator.hide();
-		}
-		this.ondragend(event, drag);
-	},
-	/**
-	 * cubclasses may define custom behavior
-	 * @param {Object} drag
-	 */
-	ondragstart: function(event, drag) {
-		
-	},
-	
-	ondragend: function (event, drag) {
-		
-	}
-};
\ No newline at end of file

Deleted: trunk/framework/impl/src/main/javascript/dnd/dnd-dropzone.js
===================================================================
--- trunk/framework/impl/src/main/javascript/dnd/dnd-dropzone.js	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/framework/impl/src/main/javascript/dnd/dnd-dropzone.js	2007-08-21 23:38:32 UTC (rev 2389)
@@ -1,82 +0,0 @@
-/**
- * @author Maksim Kaszynski
- *	@classDescription
- * Base class for drop zones
- */
-DnD.Dropzone = function(){};
-DnD.Dropzone.DROP_TARGET_ID = "dropTargetId";
-DnD.Dropzone.prototype = {
-	/**
-	 * 
-	 * @param {Object} drag
-	 * @return 
-	 */
-	accept: function(drag) {
-		return this.getAcceptedTypes().indexOf(drag.type) > -1 ;
-	},
-	getAcceptedTypes: function() {
-		return [];
-	},
-	getTypeMapping: function() {
-		return {};
-	},
-	drop: function(event, drag){
-	},		
-	getIconCodeForType: function(type) {
-		var types = this.getTypeMapping();
-		if (type && types) {
-			return types[type];
-		}
-		return null;
-	},
-
-	/**
-	 * implementations call this method when mouse over them
-	 * @param {Object} drag
-	 */
-	dragEnter: function(event) {
-		var drag = window.drag;
-		drag.dropzone = this;	
-		var icon;
-		var indicator = drag.indicator;
-		if (this.accept(drag)) {
-			icon = this.getIconCodeForType(drag.type);
-			if (!indicator.hasTemplate(icon)) {
-				icon = DnD.CODE_ACCEPT;
-			}
-			indicator.accept();
-		} else {
-			icon = DnD.CODE_REJECT;
-			indicator.reject();
-		}
-		indicator.setLeftCell(icon);
-	},
-	
-	
-	/**
-	 * Implementations call this method when mouse exits them
-	 * @param {Object} drag
-	 */
-	dragLeave: function(event) {
-		var drag = window.drag;
-		drag.dropzone = null;
-		var indicator = drag.indicator;
-		indicator.setLeftCell(DnD.CODE_DEFAULT);
-		indicator.leave();
-	},
-	
-	onafterdrag: function(event) {
-	},
-	
-	onbeforedrag: function(event, drag){
-	},
-	
-	ondragenter: function(event) {
-		
-	},
-	ondragexit : function(event) {
-		
-	}
-	
-};
-

Modified: trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/dnd/dnd-common.js
===================================================================
--- trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/dnd/dnd-common.js	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/dnd/dnd-common.js	2007-08-21 23:38:32 UTC (rev 2389)
@@ -2,7 +2,7 @@
 	var attr = Richfaces.getNSAttribute("defaultdndparams", elt);
 
 	if (attr) {
-		var params = attr.parseJSON();
+		var params = attr.parseJSON(EventHandlersWalk);
 		if (params) {
 			return params;
 		}
@@ -17,7 +17,7 @@
 	var attr = Richfaces.getNSAttribute(name, elt);
 
 	if (attr) {
-		var dndParams = attr.parseJSON();
+		var dndParams = attr.parseJSON(EventHandlersWalk);
 		if (params) {
 			if (dndParams) {
 				Object.extend(params, dndParams);

Modified: trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/dnd/dnd-draggable.js
===================================================================
--- trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/dnd/dnd-draggable.js	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/dnd/dnd-draggable.js	2007-08-21 23:38:32 UTC (rev 2389)
@@ -64,6 +64,10 @@
 		return $(this.id);
 	},
 
+	getDraggableOptions: function() {
+		return null;
+	},
+
 	getDnDDefaultParams: function() {
 		return DnD.getDnDDefaultParams(this.getElement());
 	},
@@ -193,8 +197,9 @@
 			indicator.show();
 		}	
 	
-		if( this.options && this.options.ondragstart) {
-			this.options.ondragstart();
+		var options = this.getDraggableOptions();
+		if (options && options.ondragstart) {
+			options.ondragstart();
 		}
 	
 	        // cancel out any text selections
@@ -230,8 +235,9 @@
 			this.ondragend(event, drag);
 		}
 		
-		if( this.options && this.options.ondragend) {
-			this.options.ondragend();
+		var options = this.getDraggableOptions();
+		if (options && options.ondragend) {
+			options.ondragend();
 		}
     },
     

Modified: trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/dnd/dnd-dropzone.js
===================================================================
--- trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/dnd/dnd-dropzone.js	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/dnd/dnd-dropzone.js	2007-08-21 23:38:32 UTC (rev 2389)
@@ -12,6 +12,10 @@
 		return $(this.id);
 	},
 
+	getDropzoneOptions: function() {
+		return null;
+	},
+
 	getDnDDefaultParams: function() {
 		return DnD.getDnDDefaultParams(this.getElement());
 	},
@@ -112,8 +116,9 @@
 	dragUp: function(event) {
         this.ondropend(event);
 
-		if( this.options && this.options.ondropend) {
-			this.options.ondropend();
+		var options = this.getDropzoneOptions();
+		if (options && options.ondropend) {
+			options.ondropend();
 		}
 	},
 

Modified: trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/json/json-mini.js
===================================================================
--- trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/json/json-mini.js	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/json/json-mini.js	2007-08-21 23:38:32 UTC (rev 2389)
@@ -69,3 +69,29 @@
         throw new SyntaxError("parseJSON");
     };
 }
+
+EventHandlersWalk = function(v) {
+    if (v && typeof v == 'object') {
+	    var names = new Array();
+	    for (var i in v) {
+	        if (v.hasOwnProperty(i)) {
+	            if (i.length > 2 && i.substring(0, 2) == 'on') {
+	            	names.push(i);
+	            }
+	        }
+	    }
+	    
+	    for (var i = 0; i < names.length; i++) {
+	    	var name = names[i];
+		    var value = v[name];
+		    if (value && typeof value != 'function') {
+			    var f = eval('([' + v[name] + '])')[0];
+			    if (typeof f == 'function') {
+			    	v[name] = f;
+			    }
+		    }
+	    }
+    }
+
+	return v;    
+};
\ No newline at end of file

Added: trunk/framework/impl/src/test/java/org/ajax4jsf/util/Zipper2Test.java
===================================================================
--- trunk/framework/impl/src/test/java/org/ajax4jsf/util/Zipper2Test.java	                        (rev 0)
+++ trunk/framework/impl/src/test/java/org/ajax4jsf/util/Zipper2Test.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -0,0 +1,89 @@
+/**
+ * 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.ajax4jsf.util;
+
+import java.awt.Color;
+
+import junit.framework.TestCase;
+
+/**
+ * 
+ * <br /><br />
+ * 
+ * Created 21.08.2007
+ * @author Nick Belaevski
+ * @since 3.1
+ */
+
+public class Zipper2Test extends TestCase {
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+	
+	public void testByte() throws Exception {
+		byte[] b = new byte[3];
+		new Zipper2(b).addByte((byte) 0xDF).addByte((byte) 0x90).addByte((byte) 0xAA);
+		Zipper2 zipper2 = new Zipper2(b);
+		assertEquals((byte) 0xDF, zipper2.nextByte());
+		assertEquals((byte) 0x90, zipper2.nextByte());
+		assertEquals((byte) 0xAA, zipper2.nextByte());
+	}
+
+	public void testShort() throws Exception {
+		byte[] b = new byte[6];
+		new Zipper2(b).addShort((short) 0xA7DF).addShort((short) 0xFE90).addShort((short) 0x34AA);
+		Zipper2 zipper2 = new Zipper2(b);
+		assertEquals((short) 0xA7DF, zipper2.nextShort());
+		assertEquals((short) 0xFE90, zipper2.nextShort());
+		assertEquals((short) 0x34AA, zipper2.nextShort());
+	}
+	
+	public void testColor() throws Exception {
+		byte[] b = new byte[9];
+		new Zipper2(b).addColor(new Color(0xA7DFE0)).addColor(0xE2349A).addColor(new Color(0x4812F9));
+		Zipper2 zipper2 = new Zipper2(b);
+		assertEquals(0xA7DFE0, zipper2.nextIntColor());
+		assertEquals(new Color(0xE2349A), zipper2.nextColor());
+		assertEquals(0x4812F9, zipper2.nextIntColor());
+	}
+	
+	public void testInt() throws Exception {
+		byte[] b = new byte[12];
+		new Zipper2(b).addInt(0x12A7DFE0).addInt(0x67E2349A).addInt(0xBD4812F9);
+		Zipper2 zipper2 = new Zipper2(b);
+		assertEquals(0x12A7DFE0, zipper2.nextInt());
+		assertEquals(0x67E2349A, zipper2.nextInt());
+		assertEquals(0xBD4812F9, zipper2.nextInt());
+	}
+
+}

Modified: trunk/samples/pom.xml
===================================================================
--- trunk/samples/pom.xml	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/samples/pom.xml	2007-08-21 23:38:32 UTC (rev 2389)
@@ -405,6 +405,7 @@
 		<module>dataTableDemo</module>
 		<module>modalpanel-sample</module>
 		<module>datascroller-sample</module>
+		<module>effect-sample</module>
 		<module>richfaces-demo</module>
 		<module>dropdownmenu-sample</module>
 		<module>tooltip-sample</module>

Modified: trunk/samples/tree-demo/src/main/webapp/pages/index.jsp
===================================================================
--- trunk/samples/tree-demo/src/main/webapp/pages/index.jsp	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/samples/tree-demo/src/main/webapp/pages/index.jsp	2007-08-21 23:38:32 UTC (rev 2389)
@@ -42,7 +42,18 @@
 			height : 32px;
 		} 
 		</style>
-        
+        <script type="text/javascript">
+        	function blinkElement(elt) {
+				while (elt.tagName.toLowerCase() != 'table') {
+					elt = elt.parentNode;
+				}
+				
+				elt.style.borderColor= '#5555FF'; 
+				elt.style.borderStyle= 'dotted';
+				elt.style.borderWidth = '3px';
+				setTimeout( function() { this.style.borderStyle = 'none'; }.bind(elt), 300);
+        	}
+        </script>
 	</head>
 	<body>
 		<f:view>
@@ -120,7 +131,8 @@
 					iconLeaf="#{bean.iconLeaf}"
 					icon="#{bean.icon}"
                     dropListener="#{bean.processDrop}"
-                    styleClass="#{bean.styleClass}">
+                    styleClass="#{bean.styleClass}"
+                    >
 
 					<f:facet name="icon">
 						<h:outputText value="icon" rendered="#{bean.renderFacets}"/>
@@ -141,7 +153,7 @@
 					<dnd:dndParam name="treeParam" value="Tree Parameter" />
 					<dnd:dndParam name="accept" value="accept" />
 
-					<rich:treeNode type="input" dropListener="#{bean.processDrop}" oncollapse="Element.removeClassName(event['treeItem'].getElement(), 'colored')" onexpand="Element.addClassName(event['treeItem'].getElement(), 'colored')">
+					<rich:treeNode ondrop="blinkElement(this.getElement())" type="input" dropListener="#{bean.processDrop}" oncollapse="Element.removeClassName(event['treeItem'].getElement(), 'colored')" onexpand="Element.addClassName(event['treeItem'].getElement(), 'colored')">
 						<h:outputText value="#{data} : " />
 						<h:inputText value="#{data.name}" required="true" styleClass="inputs">
 						</h:inputText>

Modified: trunk/ui/calendar/src/main/java/org/richfaces/renderkit/html/iconimages/CalendarIcon.java
===================================================================
--- trunk/ui/calendar/src/main/java/org/richfaces/renderkit/html/iconimages/CalendarIcon.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/calendar/src/main/java/org/richfaces/renderkit/html/iconimages/CalendarIcon.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -40,6 +40,8 @@
 import org.ajax4jsf.resource.Java2Dresource;
 import org.ajax4jsf.resource.ResourceContext;
 import org.ajax4jsf.util.HtmlColor;
+import org.ajax4jsf.util.Zipper;
+import org.ajax4jsf.util.Zipper2;
 import org.richfaces.skin.Skin;
 import org.richfaces.skin.SkinFactory;
 
@@ -80,29 +82,31 @@
 		Skin skin = SkinFactory.getInstance().getSkin(context);
 		Skin defaultSkin = SkinFactory.getInstance().getDefaultSkin(context);
 		
-		Object [] stored = new Object[2];
-		
-		Color col = null;
-		
 		String skinParameter = "headerBackgroundColor";
 		String headerTextColor = (String) skin.getParameter(context, skinParameter);
 		if (null == headerTextColor || "".equals(headerTextColor))
 			headerTextColor = (String) defaultSkin.getParameter(context, skinParameter);
-		col = HtmlColor.decode(headerTextColor);
 		
-		stored[0] = col;
+		byte[] ret = new byte[6];
+		Zipper2 zipper2 = new Zipper2(ret).addColor(HtmlColor.decode(headerTextColor).getRGB());
 		
 		skinParameter = "selectControlColor";
 		String headerBackgroundColor = (String) skin.getParameter(context, skinParameter);
 		if (null == headerBackgroundColor || "".equals(headerBackgroundColor))
 			headerBackgroundColor = (String) defaultSkin.getParameter(context, skinParameter);
-		col = HtmlColor.decode(headerBackgroundColor);
 		
-		stored[1] = col;
-		
-		return stored;
+		zipper2.addColor(HtmlColor.decode(headerBackgroundColor).getRGB());
+
+		return ret;
 	}
 	
+	protected Object deserializeData(byte[] objectArray) {
+		Object[] colors = new Object[2];
+		Zipper2 z = new Zipper2(objectArray);
+		colors[0] = z.nextColor();
+		colors[1] = z.nextColor();
+		return colors;
+	}
 	
 	public void paint(ResourceContext context,  Graphics2D graphics) {
 		Object[] stored = (Object[]) restoreData(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	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/drag-drop/src/main/java/org/richfaces/renderkit/DropzoneRendererContributor.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -169,7 +169,7 @@
 		definition.addToBody("options.parameters['" + DROP_TARGET_ID + "'] = '" + component.getClientId(context) + "';");
 		//TODO nick - remove as legacy
 		definition.addToBody("Object.extend(options.parameters,drag.getParameters());");
-		definition.addToBody("if (this.options.ondrop) { if (!this.options.ondrop.call(this, event)) return; };");
+		definition.addToBody("var dzOptions = this.getDropzoneOptions(); if (dzOptions.ondrop) { if (!dzOptions.ondrop.call(this, event)) return; };");
 		
 		JSFunction dropFunction = AjaxRendererUtils.buildAjaxFunction(component, context);
 		dropFunction.addParameter(new JSReference("options"));

Modified: trunk/ui/drag-drop/src/main/resources/org/richfaces/renderkit/html/scripts/simple-draggable.js
===================================================================
--- trunk/ui/drag-drop/src/main/resources/org/richfaces/renderkit/html/scripts/simple-draggable.js	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/drag-drop/src/main/resources/org/richfaces/renderkit/html/scripts/simple-draggable.js	2007-08-21 23:38:32 UTC (rev 2389)
@@ -21,7 +21,7 @@
 
 	getDnDDragParams: function() {
 		if (this.options.dndParams) {
-			return this.options.dndParams.parseJSON();
+			return this.options.dndParams.parseJSON(EventHandlersWalk);
 		}
 		
 		return null;
@@ -49,6 +49,10 @@
 		return this.options.dragType;
 	},
 
+	getDraggableOptions: function() {
+		return this.options;
+	},
+
 	initDrag: function(event) {
 		if(Event.isLeftClick(event)) {
 		  var src = Event.element(event);

Modified: trunk/ui/drag-drop/src/main/resources/org/richfaces/renderkit/html/scripts/simple-dropzone.js
===================================================================
--- trunk/ui/drag-drop/src/main/resources/org/richfaces/renderkit/html/scripts/simple-dropzone.js	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/drag-drop/src/main/resources/org/richfaces/renderkit/html/scripts/simple-dropzone.js	2007-08-21 23:38:32 UTC (rev 2389)
@@ -35,9 +35,13 @@
 		
 	},
 
+	getDropzoneOptions: function() {
+		return this.options;
+	},
+
 	getDnDDropParams: function() {
 		if (this.options.dndParams) {
-			return this.options.dndParams.parseJSON();
+			return this.options.dndParams.parseJSON(EventHandlersWalk);
 		}
 		
 		return null;

Modified: trunk/ui/inputnumber-spinner/src/main/java/org/richfaces/renderkit/html/images/buttons/SpinnerButtonImage.java
===================================================================
--- trunk/ui/inputnumber-spinner/src/main/java/org/richfaces/renderkit/html/images/buttons/SpinnerButtonImage.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/inputnumber-spinner/src/main/java/org/richfaces/renderkit/html/images/buttons/SpinnerButtonImage.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -29,6 +29,7 @@
 import org.ajax4jsf.resource.InternetResourceBuilder;
 import org.ajax4jsf.resource.Java2Dresource;
 import org.ajax4jsf.util.HtmlColor;
+import org.ajax4jsf.util.Zipper2;
 import org.richfaces.skin.Skin;
 import org.richfaces.skin.SkinFactory;
 
@@ -39,6 +40,10 @@
 		setLastModified(new Date(InternetResourceBuilder.getInstance().getStartTime()));
 	}
 	
+	protected Object deserializeData(byte[] objectArray) {
+		return new Integer(new Zipper2(objectArray).nextIntColor());
+	}
+	
 	protected Object getDataToStore(FacesContext context, Object data) {
 		Skin skin = SkinFactory.getInstance().getSkin(context);
 		
@@ -50,7 +55,9 @@
 		}
 		
 		int intValue = HtmlColor.decode( tmp ==null? "#000000":tmp ).getRGB();
-		return new Integer(intValue);
+		byte[] ret = new byte[3];
+		new Zipper2(ret).addColor(intValue);
+		return ret;
 	}
 	
 }

Modified: trunk/ui/menu-components/src/main/java/org/richfaces/renderkit/html/images/MenuNodeImage.java
===================================================================
--- trunk/ui/menu-components/src/main/java/org/richfaces/renderkit/html/images/MenuNodeImage.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/menu-components/src/main/java/org/richfaces/renderkit/html/images/MenuNodeImage.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -14,6 +14,8 @@
 import org.ajax4jsf.resource.Java2Dresource;
 import org.ajax4jsf.resource.ResourceContext;
 import org.ajax4jsf.util.HtmlColor;
+import org.ajax4jsf.util.Zipper;
+import org.ajax4jsf.util.Zipper2;
 import org.richfaces.skin.Skin;
 import org.richfaces.skin.SkinFactory;
 
@@ -33,9 +35,15 @@
         setLastModified(new Date(InternetResourceBuilder.getInstance().getStartTime()));
     }
 
+    protected Object deserializeData(byte[] objectArray) {
+        MenuNodeImageData mnd = new MenuNodeImageData();
+        Zipper2 zipper2 = new Zipper2(objectArray);
+        mnd.setGeneralColor(new Integer(zipper2.nextIntColor()));
+        mnd.setDisabledColor(new Integer(zipper2.nextIntColor()));
+    	return mnd;
+    }
+    
     protected Object getDataToStore(FacesContext context, Object data) {
-        
-        MenuNodeImageData mnd = new MenuNodeImageData();
         Skin skin = SkinFactory.getInstance().getSkin(context);
         Skin defaultSkin = SkinFactory.getInstance().getDefaultSkin(context);
         
@@ -50,8 +58,10 @@
         if (tmp == null || "".equals(tmp))
         	tmp = "#4A75B5";
         intValue = HtmlColor.decode(tmp).getRGB();
-        mnd.setGeneralColor(new Integer(intValue));
         
+        byte[] ret = new byte[6];
+        Zipper2 zipper2 = new Zipper2(ret).addColor(intValue);
+        
         skinParameter = "tabDisabledTextColor";
         tmp = (String) skin.getParameter(context, skinParameter);
         if (null == tmp || "".equals(tmp)) {
@@ -60,9 +70,10 @@
         if (tmp == null || "".equals(tmp))
         	tmp = "#6A92CF";
         intValue = HtmlColor.decode(tmp).getRGB();
-        mnd.setDisabledColor(new Integer(intValue));
         
-        return mnd;
+        zipper2.addColor(intValue);
+        
+        return ret;
     }
     
     protected void paint(ResourceContext context, Graphics2D g2d) {

Modified: trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconBasic.java
===================================================================
--- trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconBasic.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconBasic.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -32,10 +32,10 @@
 import org.ajax4jsf.resource.InternetResourceBuilder;
 import org.ajax4jsf.resource.Java2Dresource;
 import org.ajax4jsf.resource.ResourceContext;
+import org.ajax4jsf.util.HtmlColor;
+import org.ajax4jsf.util.Zipper2;
 import org.richfaces.skin.Skin;
 import org.richfaces.skin.SkinFactory;
-import org.ajax4jsf.util.HtmlColor;
-import org.ajax4jsf.util.HtmlDimensions;
 
 
 /**
@@ -62,21 +62,21 @@
 	}
 	
 	protected Dimension calculateDimensions(Object data){
-		Object [] stored = (Object []) data;
-		int h = ((Integer) stored[0]).intValue();
-		return new Dimension(h,h);
+		return new Dimension(16, 16);
 	}
 
+	protected Object deserializeData(byte[] objectArray) {
+		return new Zipper2(objectArray).nextColor();
+	}
 	
 	/**
 	 * @param data - pass icon color there
 	 */
 	protected Object getDataToStore(FacesContext context, Object data) {
-		Object[] stored = new Object[5];
 		Skin skin = SkinFactory.getInstance().getSkin(context);
 		Skin defaultSkin = SkinFactory.getInstance().getDefaultSkin(context);
 		
-		stored[0] = new Integer(HtmlDimensions.decode("16px").intValue());
+		byte[] ret = new byte[3];
 		
 		Color col = null;
 		
@@ -89,8 +89,10 @@
 				headerTextColor = (String) defaultSkin.getParameter(context, skinParameter);
 			col = HtmlColor.decode(headerTextColor);
 		}
-		stored[1]= col;
-		return stored;
+		
+		new Zipper2(ret).addColor(col);
+
+		return ret;
 	}
 	
 	public boolean isCacheable() {

Modified: trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconChevron.java
===================================================================
--- trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconChevron.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconChevron.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -53,8 +53,7 @@
 		GeneralPath path = new GeneralPath();
 		g2d.setStroke(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER));
 		g2d.translate(28,28);
-		Object [] data = (Object[]) restoreData(context);
-		Color col = (Color)data[1];
+		Color col = (Color) restoreData(context);
 		
 		g2d.setColor(col);
 

Modified: trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconChevronDown.java
===================================================================
--- trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconChevronDown.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconChevronDown.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -52,8 +52,7 @@
 		GeneralPath path = new GeneralPath();
 		g2d.setStroke(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER));
 		g2d.translate(28,28);
-		Object [] data = (Object[]) restoreData(context);
-		Color col = (Color)data[1];
+		Color col = (Color) restoreData(context);
 		
 		g2d.setColor(col);
 

Modified: trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconChevronUp.java
===================================================================
--- trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconChevronUp.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconChevronUp.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -52,8 +52,7 @@
 		GeneralPath path = new GeneralPath();
 		g2d.setStroke(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER));
 		g2d.translate(28,28);
-		Object [] data = (Object[]) restoreData(context);
-		Color col = (Color)data[1];
+		Color col = (Color) restoreData(context);
 		
 		g2d.setColor(col);
 

Modified: trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconDisc.java
===================================================================
--- trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconDisc.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconDisc.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -35,8 +35,7 @@
 	protected void paint(ResourceContext context, Graphics2D g2d) {
 		
 		Dimension dimension = getDimensions(context);
-		Object [] data = (Object[]) restoreData(context);
-		Color col = (Color)data[1];
+		Color col = (Color) restoreData(context);
 		
 		int dim = (int) Math.round(dimension.getWidth() / 3);
 		

Modified: trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconGrid.java
===================================================================
--- trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconGrid.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconGrid.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -50,8 +50,7 @@
 		g2d.translate(40,40);
 		
 		path.setRect(0,0,40,40);
-		Object [] data = (Object[]) restoreData(context);
-		Color col = (Color)data[1];
+		Color col = (Color) restoreData(context);
 		
 		g2d.setColor(col);
 		Color bcolor = new Color(1f,1f,1f,0f);

Modified: trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconTriangle.java
===================================================================
--- trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconTriangle.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconTriangle.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -45,7 +45,7 @@
 		path.lineTo(33,34);
 		path.lineTo(0,67);
 		path.closePath();
-		g2d.setColor((Color)(((Object[]) restoreData(context))[1]));
+		g2d.setColor((Color)restoreData(context));
 		g2d.fill(path);
 	}
 }
\ No newline at end of file

Modified: trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconTriangleDown.java
===================================================================
--- trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconTriangleDown.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconTriangleDown.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -48,8 +48,7 @@
 		path.lineTo(34,33);
 		path.lineTo(67,0);
 		path.closePath();
-		Object [] data = (Object[]) restoreData(context);
-		Color col = (Color)data[1];
+		Color col = (Color) restoreData(context);
 		
 		g2d.setColor(col);
 		g2d.fill(path);

Modified: trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconTriangleUp.java
===================================================================
--- trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconTriangleUp.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/iconimages/PanelMenuIconTriangleUp.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -47,8 +47,7 @@
 		path.lineTo(34,0);
 		path.lineTo(67,33);
 		path.closePath();
-		Object [] data = (Object[]) restoreData(context);
-		Color col = (Color)data[1];
+		Color col = (Color) restoreData(context);
 		
 		g2d.setColor(col);
 		g2d.fill(path);

Modified: trunk/ui/scrollableDataTable/src/main/java/org/richfaces/renderkit/html/iconimages/ScrollableDataTableIconBasic.java
===================================================================
--- trunk/ui/scrollableDataTable/src/main/java/org/richfaces/renderkit/html/iconimages/ScrollableDataTableIconBasic.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/scrollableDataTable/src/main/java/org/richfaces/renderkit/html/iconimages/ScrollableDataTableIconBasic.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -11,6 +11,7 @@
 import org.ajax4jsf.resource.Java2Dresource;
 import org.ajax4jsf.resource.ResourceContext;
 import org.ajax4jsf.util.HtmlColor;
+import org.ajax4jsf.util.Zipper;
 import org.richfaces.skin.Skin;
 import org.richfaces.skin.SkinFactory;
 
@@ -28,6 +29,13 @@
 		return calculateDimensions();
 	}
 	
+	protected Object deserializeData(byte[] objectArray) {
+		Object [] stored = new Object[2];
+		stored[0] = new Color(Zipper.unzip(objectArray, 0));
+		stored[1] = new Color(Zipper.unzip(objectArray, 3));
+		return stored;
+	}
+	
 	public abstract Dimension calculateDimensions();
 	
 	
@@ -35,8 +43,6 @@
 		Skin skin = SkinFactory.getInstance().getSkin(context);
 		Skin defaultSkin = SkinFactory.getInstance().getDefaultSkin(context);
 		
-		Object [] stored = new Object[2];
-		
 		Color col = null;
 		
 		String skinParameter = "headerTextColor";
@@ -45,7 +51,8 @@
 			headerTextColor = (String) defaultSkin.getParameter(context, skinParameter);
 		col = HtmlColor.decode(headerTextColor);
 		
-		stored[0] = col;
+		byte[] ret = new byte[6];
+		Zipper.zip(ret, col.getRGB(), 0);
 		
 		skinParameter = "headerBackgroundColor";
 		String headerBackgroundColor = (String) skin.getParameter(context, skinParameter);
@@ -53,8 +60,8 @@
 			headerBackgroundColor = (String) defaultSkin.getParameter(context, skinParameter);
 		col = HtmlColor.decode(headerBackgroundColor);
 		
-		stored[1] = col;
+		Zipper.zip(ret, col.getRGB(), 3);
 		
-		return stored;
+		return ret;
 	}
 }

Modified: trunk/ui/separator/src/main/java/org/richfaces/renderkit/html/images/BevelSeparatorImage.java
===================================================================
--- trunk/ui/separator/src/main/java/org/richfaces/renderkit/html/images/BevelSeparatorImage.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/separator/src/main/java/org/richfaces/renderkit/html/images/BevelSeparatorImage.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -39,6 +39,8 @@
 import org.ajax4jsf.resource.ResourceContext;
 import org.ajax4jsf.util.HtmlColor;
 import org.ajax4jsf.util.HtmlDimensions;
+import org.ajax4jsf.util.Zipper;
+import org.ajax4jsf.util.Zipper2;
 import org.richfaces.component.UISeparator;
 import org.richfaces.skin.Skin;
 import org.richfaces.skin.SkinFactory;
@@ -126,17 +128,29 @@
         }
 
     }
+    
+    protected Object deserializeData(byte[] objectArray) {
+        SeparatorData separatorData = new SeparatorData();
+        Zipper2 zipper2 = new Zipper2(objectArray);
+        separatorData.setHeight(zipper2.nextShort());
+        separatorData.setLevel3D(zipper2.nextShort());
+        separatorData.setBgColor(zipper2.nextIntColor());
+        separatorData.setGradColor(zipper2.nextIntColor());
+        return separatorData;
+    }
 
     protected Object getDataToStore(FacesContext context, Object data) {
-        SeparatorData separatorData = new SeparatorData();
         Skin skin = SkinFactory.getInstance().getSkin(context);
 
         //XXX by nick - fantonov - ((UISeparator)data).getHeight() ?
         String tmp = (String) ((UISeparator) data).getHeight();
-        separatorData.setHeight(HtmlDimensions.decode(tmp == null ? "6" : tmp).intValue());
+        
+        byte[] ret = new byte[10];
+        
+        Zipper2 zipper2 = new Zipper2(ret).addShort((short) HtmlDimensions.decode(tmp == null ? "6" : tmp).intValue());
 
         tmp = (String) skin.getParameter(context, "interfaceLevel3D");
-        separatorData.setLevel3D(HtmlDimensions.decode(tmp == null ? "5" : tmp).intValue());
+        zipper2.addShort((short) HtmlDimensions.decode(tmp == null ? "5" : tmp).intValue());
 
         String skinParameter = "headerBackgroundColor";
         tmp = (String) skin.getParameter(context, skinParameter);
@@ -144,7 +158,7 @@
 			Skin defaultSkin = SkinFactory.getInstance().getDefaultSkin(context);
 			tmp = (String) defaultSkin.getParameter(context, skinParameter);
 		}
-        separatorData.setBgColor(HtmlColor.decode(tmp == null ? "#4169E1" : tmp).getRGB());
+        zipper2.addColor(HtmlColor.decode(tmp == null ? "#4169E1" : tmp).getRGB());
 
         skinParameter = "overAllBackground";
         tmp = (String) skin.getParameter(context, skinParameter);
@@ -152,9 +166,9 @@
 			Skin defaultSkin = SkinFactory.getInstance().getDefaultSkin(context);
 			tmp = (String) defaultSkin.getParameter(context, skinParameter);
 		}
-        separatorData.setGradColor(HtmlColor.decode(tmp == null ? "#FFFFFF" : tmp).getRGB());
+        zipper2.addColor(HtmlColor.decode(tmp == null ? "#FFFFFF" : tmp).getRGB());
 
-        return separatorData;
+        return ret;
     }
 
     protected static class SeparatorData implements Serializable {

Modified: trunk/ui/separator/src/main/java/org/richfaces/renderkit/html/images/SimpleSeparatorImage.java
===================================================================
--- trunk/ui/separator/src/main/java/org/richfaces/renderkit/html/images/SimpleSeparatorImage.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/separator/src/main/java/org/richfaces/renderkit/html/images/SimpleSeparatorImage.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -37,6 +37,8 @@
 import org.ajax4jsf.resource.ResourceContext;
 import org.ajax4jsf.util.HtmlColor;
 import org.ajax4jsf.util.HtmlDimensions;
+import org.ajax4jsf.util.Zipper;
+import org.ajax4jsf.util.Zipper2;
 import org.richfaces.component.UISeparator;
 import org.richfaces.skin.Skin;
 import org.richfaces.skin.SkinFactory;
@@ -103,12 +105,23 @@
         return null;
     }
 
+    protected Object deserializeData(byte[] objectArray) {
+        SimpleSeparatorData separatorData = new SimpleSeparatorData();
+    	Zipper2 zipper2 = new Zipper2(objectArray);
+        separatorData.setHeight(zipper2.nextShort());
+    	separatorData.setColor(zipper2.nextIntColor());
+    	separatorData.setLineType(zipper2.nextByte());
+        return separatorData;
+    }
+    
     protected Object getDataToStore(FacesContext context, Object data) {
-        SimpleSeparatorData separatorData = new SimpleSeparatorData();
         Skin skin = SkinFactory.getInstance().getSkin(context);
 
+        byte[] ret = new byte[6];
+        
         String tmp = (String) ((UIComponent) data).getAttributes().get("height");
-        separatorData.setHeight(HtmlDimensions.decode(tmp == null ? "6" : tmp).intValue());
+        int height = HtmlDimensions.decode(tmp == null ? "6" : tmp).intValue();
+        Zipper2 zipper2 = new Zipper2(ret).addShort((short) height);
 
         String skinParameter = "headerBackgroundColor";
         tmp = (String) skin.getParameter(context, skinParameter);
@@ -116,7 +129,7 @@
 			Skin defaultSkin = SkinFactory.getInstance().getDefaultSkin(context);
 			tmp = (String) defaultSkin.getParameter(context, skinParameter);
 		}
-        separatorData.setColor(HtmlColor.decode(tmp == null ? "#4169E1" : tmp).getRGB());
+        zipper2.addColor(HtmlColor.decode(tmp == null ? "#4169E1" : tmp).getRGB());
 
         //XXX by nick - fantonov - ((UISeparator)data).getLineType() ?
         tmp = (String) ((UISeparator) data).getLineType();
@@ -126,12 +139,12 @@
         } else if (tmp.equalsIgnoreCase(UISeparator.LINE_TYPE_DASHED)) {
             lineType = LINE_TYPE_DASHED;
         } else
-        if (tmp.equalsIgnoreCase(UISeparator.LINE_TYPE_DOUBLE) && separatorData.getHeight() > 2)
+        if (tmp.equalsIgnoreCase(UISeparator.LINE_TYPE_DOUBLE) && height > 2)
         {
             lineType = LINE_TYPE_DOUBLE;
         }
-        separatorData.setLineType(lineType);
-        return separatorData;
+        zipper2.addByte((byte) lineType);
+        return ret;
     }
 
     protected static class SimpleSeparatorData implements Serializable {

Modified: trunk/ui/toolBar/src/main/java/org/richfaces/renderkit/html/images/ToolBarSeparatorImage.java
===================================================================
--- trunk/ui/toolBar/src/main/java/org/richfaces/renderkit/html/images/ToolBarSeparatorImage.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/toolBar/src/main/java/org/richfaces/renderkit/html/images/ToolBarSeparatorImage.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -31,6 +31,8 @@
 import org.ajax4jsf.resource.Java2Dresource;
 import org.ajax4jsf.util.HtmlColor;
 import org.ajax4jsf.util.HtmlDimensions;
+import org.ajax4jsf.util.Zipper;
+import org.ajax4jsf.util.Zipper2;
 import org.richfaces.component.UIToolBar;
 import org.richfaces.component.UIToolBarGroup;
 import org.richfaces.skin.Skin;
@@ -47,8 +49,19 @@
 		setLastModified(new Date(InternetResourceBuilder.getInstance().getStartTime()));
 	}
 	
+	protected Object deserializeData(byte[] objectArray) {
+		SeparatorData separatorData = new SeparatorData();
+		Zipper2 zipper2 = new Zipper2(objectArray);
+		separatorData.setHeaderBackgroundColor(zipper2.nextIntColor());
+		separatorData.setHeaderGradientColor(zipper2.nextIntColor());
+		separatorData.setHeaderTextColor(zipper2.nextIntColor());
+		separatorData.setFontSize(zipper2.nextShort());
+		separatorData.setSeparatorHeight(zipper2.nextShort());
+		
+		return separatorData;
+	}
+	
 	protected Object getDataToStore(FacesContext context, Object data) {
-		SeparatorData separatorData = new SeparatorData();
 		Skin skin = SkinFactory.getInstance().getSkin(context);
 		Skin defaultSkin = SkinFactory.getInstance().getDefaultSkin(context);
 		
@@ -57,32 +70,33 @@
 		if (null == tmp || "".equals(tmp)) {
 			tmp = (String) defaultSkin.getParameter(context, skinParameter);
 		}
-		separatorData.setHeaderBackgroundColor(HtmlColor.decode( tmp == null ? "#224986" : tmp ).getRGB());
 		
+		byte[] ret = new byte[13];
+		Zipper2 zipper2 = new Zipper2(ret).addColor(HtmlColor.decode( tmp == null ? "#224986" : tmp ).getRGB());
+		
 		skinParameter = "headerGradientColor";
 		tmp = (String) skin.getParameter(context, skinParameter);
 		if (null == tmp || "".equals(tmp)) {
 			tmp = (String) defaultSkin.getParameter(context, skinParameter);
 		}
-		separatorData.setHeaderGradientColor(HtmlColor.decode( tmp == null ? "#CCCCFF" : tmp).getRGB());
+		zipper2.addColor(HtmlColor.decode( tmp == null ? "#CCCCFF" : tmp).getRGB());
 		
 		skinParameter = "headerTextColor";
 		tmp = (String) skin.getParameter(context, skinParameter);
 		if (null == tmp || "".equals(tmp)) {
 			tmp = (String) defaultSkin.getParameter(context, skinParameter);
 		}
-		separatorData.setHeaderTextColor(HtmlColor.decode( tmp == null ? "#000000" : tmp ).getRGB());
+		zipper2.addColor(HtmlColor.decode( tmp == null ? "#000000" : tmp ).getRGB());
 		
 		skinParameter = "headerSizeFont";
 		tmp = (String) skin.getParameter(context, skinParameter);
 		if (null == tmp || "".equals(tmp)) {
 			tmp = (String) defaultSkin.getParameter(context, skinParameter);
 		}
-		separatorData.setFontSize(HtmlDimensions.decode( tmp == null ? "11px" : tmp ).intValue());
-				
-		separatorData.setSeparatorHeight(resolveBarHeight(data));
+		zipper2.addShort((short) HtmlDimensions.decode( tmp == null ? "11px" : tmp ).intValue());
+		zipper2.addShort((short) resolveBarHeight(data));
 		
-		return separatorData;
+		return ret;
 	}
 	
 	private int resolveBarHeight(Object data){		

Modified: trunk/ui/tree/src/main/config/component/treeNode.xml
===================================================================
--- trunk/ui/tree/src/main/config/component/treeNode.xml	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/tree/src/main/config/component/treeNode.xml	2007-08-21 23:38:32 UTC (rev 2389)
@@ -59,7 +59,34 @@
            <name>ondrop</name>
         	<classname>java.lang.String</classname>
 		   <description>It's an event that is called when something is dropped on a drop zone</description>
+		   <defaultvalue>getDefaultOndrop()</defaultvalue>
         </property>
+        <property>
+           <name>ondropend</name>
+           <classname>java.lang.String</classname>
+		   <defaultvalue>getDefaultOndropend()</defaultvalue>
+        </property>
+        <property>
+           <name>ondragstart</name>
+           <classname>java.lang.String</classname>
+		   <defaultvalue>getDefaultOndragstart()</defaultvalue>
+        </property>
+        <property>
+           <name>ondragend</name>
+           <classname>java.lang.String</classname>
+		   <defaultvalue>getDefaultOndragend()</defaultvalue>
+        </property>
+        <property>
+           <name>ondragenter</name>
+           <classname>java.lang.String</classname>
+		   <defaultvalue>getDefaultOndragenter()</defaultvalue>
+        </property>
+        <property>
+           <name>ondragexit</name>
+           <classname>java.lang.String</classname>
+		   <defaultvalue>getDefaultOndragexit()</defaultvalue>
+        </property>
+
 		<property>
            <name>oncontextmenu</name>
            <classname>java.lang.String</classname>

Modified: trunk/ui/tree/src/main/java/org/richfaces/component/UITreeNode.java
===================================================================
--- trunk/ui/tree/src/main/java/org/richfaces/component/UITreeNode.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/tree/src/main/java/org/richfaces/component/UITreeNode.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -359,4 +359,53 @@
 		return null;
 	}
 	
+	protected String getDefaultOndragend() {
+		//tag invokes read method on component creation
+		//we shouldn't fail with NPE
+		UITree tree = getUITree();
+		if (tree == null) {
+			return null;
+		}
+		return tree.getOndragend();
+	}
+	
+	protected String getDefaultOndragenter() {
+		UITree tree = getUITree();
+		if (tree == null) {
+			return null;
+		}
+		return tree.getOndragenter();
+	}
+	
+	protected String getDefaultOndragexit() {
+		UITree tree = getUITree();
+		if (tree == null) {
+			return null;
+		}
+		return tree.getOndragexit();
+	}
+	
+	protected String getDefaultOndragstart() {
+		UITree tree = getUITree();
+		if (tree == null) {
+			return null;
+		}
+		return tree.getOndragstart();
+	}
+	
+	protected String getDefaultOndrop() {
+		UITree tree = getUITree();
+		if (tree == null) {
+			return null;
+		}
+		return tree.getOndrop();
+	}
+	
+	protected String getDefaultOndropend() {
+		UITree tree = getUITree();
+		if (tree == null) {
+			return null;
+		}
+		return tree.getOndropend();
+	}
 }

Modified: trunk/ui/tree/src/main/java/org/richfaces/renderkit/NodeRendererBase.java
===================================================================
--- trunk/ui/tree/src/main/java/org/richfaces/renderkit/NodeRendererBase.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/tree/src/main/java/org/richfaces/renderkit/NodeRendererBase.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -6,6 +6,7 @@
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
@@ -13,6 +14,7 @@
 import javax.faces.context.FacesContext;
 
 import org.ajax4jsf.javascript.JSFunction;
+import org.ajax4jsf.javascript.JSFunctionDefinition;
 import org.ajax4jsf.javascript.ScriptUtils;
 import org.ajax4jsf.renderkit.AjaxRendererUtils;
 import org.ajax4jsf.renderkit.ComponentVariables;
@@ -308,11 +310,25 @@
 
 		return null;
 	}
+	
+	private void convertOptions(Map opts) {
+		//converts JSFunctionDefinition to string
+		Iterator iterator = opts.entrySet().iterator();
+		while (iterator.hasNext()) {
+			Map.Entry entry = (Map.Entry) iterator.next();
+			Object value = entry.getValue();
+			if (value instanceof JSFunctionDefinition) {
+				JSFunctionDefinition definition = (JSFunctionDefinition) value;
+				entry.setValue(definition.toScript());
+			}
+		}
+	}
 
 	public String getDraggableScriptOptions(FacesContext context,
 			UITreeNode component) {
 		ScriptOptions options = new TreeNodeOptions(component);
 		mergeScriptOptions(options, context, component, Draggable.class);
+		convertOptions(options.getMap());
 		return ScriptUtils.toScript(options);
 	}
 
@@ -320,6 +336,7 @@
 			UITreeNode component) {
 		ScriptOptions options = new TreeNodeOptions(component);
 		mergeScriptOptions(options, context, component, Dropzone.class);
+		convertOptions(options.getMap());
 		return ScriptUtils.toScript(options);
 	}
 }

Modified: trunk/ui/tree/src/main/resources/org/richfaces/renderkit/html/scripts/tree-item-dnd.js
===================================================================
--- trunk/ui/tree/src/main/resources/org/richfaces/renderkit/html/scripts/tree-item-dnd.js	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/tree/src/main/resources/org/richfaces/renderkit/html/scripts/tree-item-dnd.js	2007-08-21 23:38:32 UTC (rev 2389)
@@ -56,7 +56,7 @@
 	getDropzoneOptions: function() {
 		var attr = Richfaces.getNSAttribute("dropzoneoptions", $(this.elementID.icon));
 		if (attr) {
-			return attr.parseJSON();
+			return attr.parseJSON(EventHandlersWalk);
 		}
 		
 		return null;
@@ -74,7 +74,7 @@
 			Object.extend(drag.params, opts.parameters);
 		}
 		
-		this.tree.drop(event, drag);
+		this.tree.drop.call(this, event, drag);
 	},
 		
 	getIndicator: function() {
@@ -110,7 +110,7 @@
 
 		var attr = Richfaces.getNSAttribute("draggableoptions", $(this.elementID.icon));
 		if (attr) {
-			var opts = attr.parseJSON();
+			var opts = attr.parseJSON(EventHandlersWalk);
 			if (window.drag) {
 				window.drag.treeDraggableOptions = opts;
 			}

Modified: trunk/ui/tree/src/test/java/org/richfaces/component/TreeComponentTest.java
===================================================================
--- trunk/ui/tree/src/test/java/org/richfaces/component/TreeComponentTest.java	2007-08-21 23:19:31 UTC (rev 2388)
+++ trunk/ui/tree/src/test/java/org/richfaces/component/TreeComponentTest.java	2007-08-21 23:38:32 UTC (rev 2389)
@@ -72,26 +72,27 @@
 	private static Set javaScripts = new HashSet();
 
 	static {
-		javaScripts.add("/org/richfaces/renderkit/html/scripts/json/json-mini.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/json/json-dom.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/json/json-mini.js");
 		
-		javaScripts.add("org.ajax4jsf.framework.resource.PrototypeScript");
-		javaScripts.add("scripts/AJAX.js");
-		javaScripts.add("org.ajax4jsf.dnd.DnDScript");
+		javaScripts.add("org.ajax4jsf.javascript.PrototypeScript");
+		javaScripts.add("org.ajax4jsf.javascript.AjaxScript");
+		javaScripts.add("org.ajax4jsf.javascript.DnDScript");
 
-		javaScripts.add("/org/richfaces/renderkit/html/scripts/utils.js");
-		javaScripts.add("/org/richfaces/renderkit/html/scripts/dnd/dnd-common.js");
-		javaScripts.add("/org/richfaces/renderkit/html/scripts/dnd/dnd-draggable.js");
-		javaScripts.add("/org/richfaces/renderkit/html/scripts/dnd/dnd-dropzone.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/utils.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/dnd/dnd-common.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/dnd/dnd-draggable.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/dnd/dnd-dropzone.js");
 
 
-		javaScripts.add("/org/ajax4jsf/renderkit/html/scripts/form.js");
-		javaScripts.add("/org/richfaces/renderkit/html/scripts/form.js");
-		javaScripts.add("/org/richfaces/renderkit/html/scripts/events.js");
-		javaScripts.add("/org/richfaces/renderkit/html/scripts/tree.js");
-		javaScripts.add("/org/richfaces/renderkit/html/scripts/tree-selection.js");
-		javaScripts.add("/org/richfaces/renderkit/html/scripts/tree-item.js");
-		javaScripts.add("/org/richfaces/renderkit/html/scripts/tree-item-dnd.js");
-		javaScripts.add("/org/richfaces/renderkit/html/scripts/drag-indicator.js");		
+		javaScripts.add("org/ajax4jsf/javascript/scripts/form.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/form.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/events.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/tree.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/tree-selection.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/tree-item.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/tree-item-dnd.js");
+		javaScripts.add("org/richfaces/renderkit/html/scripts/drag-indicator.js");		
 
 	}
 
@@ -801,6 +802,58 @@
 		assertEquals("indicator2", treeNode.getDragIndicator());
 		assertNull(treeNode.getLocalDragIndicator());
 	}
+	
+	public void testDnDEventGetters() throws Exception {
+		assertNull(treeNode.getOndragend());
+		assertNull(treeNode.getOndragenter());
+		assertNull(treeNode.getOndragexit());
+		assertNull(treeNode.getOndragstart());
+		assertNull(treeNode.getOndrop());
+		assertNull(treeNode.getOndropend());
+
+		tree.setOndragend("dragEnd1");
+		tree.setOndragenter("dragEnter1");
+		tree.setOndragexit("dragExit1");
+		tree.setOndragstart("dragStart1");
+		tree.setOndrop("drop1");
+		tree.setOndropend("dropEnd1");
+		
+		assertEquals("dragEnd1", treeNode.getOndragend());
+		assertEquals("dragEnter1", treeNode.getOndragenter());
+		assertEquals("dragExit1", treeNode.getOndragexit());
+		assertEquals("dragStart1", treeNode.getOndragstart());
+		assertEquals("drop1", treeNode.getOndrop());
+		assertEquals("dropEnd1", treeNode.getOndropend());
+
+		treeNode.setOndragend("dragEnd2");
+		treeNode.setOndragenter("dragEnter2");
+		treeNode.setOndragexit("dragExit2");
+		treeNode.setOndragstart("dragStart2");
+		treeNode.setOndrop("drop2");
+		treeNode.setOndropend("dropEnd2");
+	
+		assertEquals("dragEnd2", treeNode.getOndragend());
+		assertEquals("dragEnter2", treeNode.getOndragenter());
+		assertEquals("dragExit2", treeNode.getOndragexit());
+		assertEquals("dragStart2", treeNode.getOndragstart());
+		assertEquals("drop2", treeNode.getOndrop());
+		assertEquals("dropEnd2", treeNode.getOndropend());
+
+		tree.setOndragend(null);
+		tree.setOndragenter(null);
+		tree.setOndragexit(null);
+		tree.setOndragstart(null);
+		tree.setOndrop(null);
+		tree.setOndropend(null);
+
+		assertEquals("dragEnd2", treeNode.getOndragend());
+		assertEquals("dragEnter2", treeNode.getOndragenter());
+		assertEquals("dragExit2", treeNode.getOndragexit());
+		assertEquals("dragStart2", treeNode.getOndragstart());
+		assertEquals("drop2", treeNode.getOndrop());
+		assertEquals("dropEnd2", treeNode.getOndropend());
+
+	}
 }
 
 




More information about the richfaces-svn-commits mailing list