[richfaces-svn-commits] JBoss Rich Faces SVN: r15987 - in root/ui-sandbox/trunk/components/tables/ui/src/main: java/org/richfaces/event and 5 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Tue Nov 24 11:36:34 EST 2009


Author: abelevich
Date: 2009-11-24 11:36:33 -0500 (Tue, 24 Nov 2009)
New Revision: 15987

Modified:
   root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UISubTable.java
   root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/event/ToggleEvent.java
   root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/event/ToggleListener.java
   root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/DataTableRenderer.java
   root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ToggleControlRendererBase.java
   root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/taglib/SubTableHandler.java
   root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/resources/toggler.js
   root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/tables.taglib.xml
   root/ui-sandbox/trunk/components/tables/ui/src/main/templates/org/richfaces/renderkit/html/toggle-control.template.xml
Log:
expand subTables functionality

Modified: root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UISubTable.java
===================================================================
--- root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UISubTable.java	2009-11-24 15:31:22 UTC (rev 15986)
+++ root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UISubTable.java	2009-11-24 16:36:33 UTC (rev 15987)
@@ -24,13 +24,16 @@
 import java.util.Iterator;
 
 import javax.el.MethodExpression;
+import javax.faces.component.StateHelper;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.event.AbortProcessingException;
 import javax.faces.event.FacesEvent;
 import javax.faces.event.PhaseId;
 
+import org.ajax4jsf.model.DataComponentState;
 import org.ajax4jsf.model.DataVisitor;
+import org.richfaces.component.state.SubTableState;
 import org.richfaces.event.ToggleEvent;
 import org.richfaces.event.ToggleListener;
 
@@ -39,7 +42,7 @@
  * JSF component class
  *
  */
-public abstract class UISubTable extends UIDataTableBase implements Row, Column, Expandable{
+public abstract class UISubTable extends UIDataTableBase implements Row, Column, Expandable {
 	
 	public static final String COMPONENT_TYPE = "org.richfaces.SubTable";
 	
@@ -50,13 +53,52 @@
 	public static final String SWITCH_TYPE_CLIENT = "client";
 	
 	public static final String SWITCH_TYPE_AJAX = "ajax";
+	
+	private boolean expanded = Boolean.TRUE;
 		
 		
 	enum PropertyKeys {
-		switchType, expanded, toggleExpression
+		switchType, expanded, toggleExpression, childState
 	}
-		
+	
 	@Override
+	protected DataComponentState createComponentState() {
+		return new SubTableState() {
+
+			@Override
+			public int getFirst() {
+				return UISubTable.this.getFirst();
+			}
+
+			@Override
+			public int getRows() {
+				return UISubTable.this.getRows();
+			}
+		};
+	}
+	
+/*	
+	@Override
+	public Object getIterationState() {
+		StateHelper stateHelper = getStateHelper();
+        return new Object[] {stateHelper.get(PropertyKeys.childState), this.expanded};
+	}
+	
+	@Override
+	public void setIterationState(Object stateObject) {
+	    StateHelper stateHelper = getStateHelper();
+
+        if (stateObject != null) {
+            Object[] state = (Object[]) stateObject;
+            stateHelper.put(PropertyKeys.childState, state[0]);
+            this.expanded = (Boolean) state[1];
+        } else {
+            stateHelper.remove(PropertyKeys.childState);
+            this.expanded = Boolean.TRUE;
+        }
+	} */
+	
+	@Override
 	public Iterator<UIComponent> fixedChildren() {
 		return new SubtableFixedChildrenIterator(this);
 	}
@@ -93,10 +135,12 @@
 	}
 	
 	public void setExpanded(boolean expanded) {
+//		((SubTableState)getComponentState()).setExpanded(expanded);
 		getStateHelper().put(PropertyKeys.expanded, expanded);
 	}
 	
 	public boolean isExpanded() {
+//		return ((SubTableState)getComponentState()).isExpanded();
 		return (Boolean) getStateHelper().eval(PropertyKeys.expanded, Boolean.TRUE);
 	}
 	
@@ -126,7 +170,10 @@
 			MethodExpression expression = getToggleListener();
 			if(expression != null) {
 				expression.invoke(getFacesContext().getELContext(), new Object[]{toggleEvent});
-			}	
+			}
+			//???
+//			((SubTableState)getComponentState()).setExpanded(toggleEvent.isExpanded());
+//			getStateHelper().put(PropertyKeys.expanded, toggleEvent.isExpanded());
 		}
 	}
 	

Modified: root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/event/ToggleEvent.java
===================================================================
--- root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/event/ToggleEvent.java	2009-11-24 15:31:22 UTC (rev 15986)
+++ root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/event/ToggleEvent.java	2009-11-24 16:36:33 UTC (rev 15987)
@@ -4,20 +4,24 @@
 import javax.faces.event.FacesEvent;
 import javax.faces.event.FacesListener;
 
+/**
+ * @author Anton Belevich
+ *
+ */
 public class ToggleEvent extends FacesEvent {
 
 	private static final long serialVersionUID = 2916560585918250885L;
 
-	private String state;
+	private boolean expanded;
 	
 	
-	public ToggleEvent(UIComponent target, String state) {
+	public ToggleEvent(UIComponent target, boolean expanded) {
 		super(target);
-		this.state = state;
+		this.expanded = expanded;
 	}
 
-	public String getState() {
-		return  this.state;
+	public boolean isExpanded() { 
+		return this.expanded;
 	}
 	
 	@Override

Modified: root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/event/ToggleListener.java
===================================================================
--- root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/event/ToggleListener.java	2009-11-24 15:31:22 UTC (rev 15986)
+++ root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/event/ToggleListener.java	2009-11-24 16:36:33 UTC (rev 15987)
@@ -2,6 +2,10 @@
 
 import javax.faces.event.FacesListener;
 
+/**
+ * @author Anton Belevich
+ *
+ */
 public interface ToggleListener extends FacesListener {
 	
 	public void processToggle(ToggleEvent event);

Modified: root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/DataTableRenderer.java
===================================================================
--- root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/DataTableRenderer.java	2009-11-24 15:31:22 UTC (rev 15986)
+++ root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/DataTableRenderer.java	2009-11-24 16:36:33 UTC (rev 15987)
@@ -298,6 +298,16 @@
 	public void encodeTableBodyStart(ResponseWriter writer, FacesContext context, UIDataTableBase component) throws IOException {
 		writer.startElement(HTML.TBOBY_ELEMENT, component);
 		getUtils().encodeId(context, component);
+		
+		String predefinedStyles = null;
+		if(component instanceof UISubTable) {
+			UISubTable subTable = (UISubTable)component;
+			if(!subTable.isExpanded()) {
+				predefinedStyles = "display: none;";
+			}
+		}
+		
+		encodeStyle(writer, context, component, predefinedStyles);
 	}
 
 	public void encodeTableEnd(ResponseWriter writer, FacesContext context, UIDataTableBase component) throws IOException {
@@ -536,7 +546,7 @@
 	
 
 	protected void  encodeStyleClass(ResponseWriter writer, FacesContext context, UIComponent component , String styleClassAttribute, String styleClass) throws IOException {
-		boolean isEmpty = isEmpty(component, styleClassAttribute); 
+		boolean isEmpty = isEmptyAttr(component, styleClassAttribute); 
 		if( isEmpty && !(styleClass != null && styleClass.trim().length() != 0)) {
 			return;
 		}
@@ -545,7 +555,7 @@
 		writer.writeAttribute(HTML.CLASS_ATTRIBUTE, componentStyleClass, null);
 	}
 		
-	protected boolean isEmpty(UIComponent component, String attribute) {
+	protected boolean isEmptyAttr(UIComponent component, String attribute) {
 		if(attribute == null) {
 			return true;
 		}
@@ -553,14 +563,26 @@
 		return !(value != null && value.trim().length()!=0);
 	}
 	
-	protected void encodeStyle(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException {
-		String style = (String)component.getAttributes().get(HTML.STYLE_ATTRIBUTE);
-		if(!isEmptyStyle(style)) {
-			writer.writeAttribute(HTML.STYLE_ATTRIBUTE, style, null);
+	protected void encodeStyle(ResponseWriter writer, FacesContext context, UIComponent component, String predefinedStyles) throws IOException {
+		StringBuffer toEncode = new StringBuffer();
+		
+		if(!isEmptyAttr(component, HTML.STYLE_ATTRIBUTE)) {
+			String style = ((String)component.getAttributes().get(HTML.STYLE_ATTRIBUTE)).trim();
+			style = style.endsWith(";") ? style : style + ";";
+			toEncode.append(style);
 		}
+		
+		if(!isEmpty(predefinedStyles)) {
+			String style = predefinedStyles.endsWith(";") ? predefinedStyles : predefinedStyles + ";";			
+			toEncode.append(style);
+		}
+		
+		if(toEncode.length() > 0) {
+			writer.writeAttribute(HTML.STYLE_ATTRIBUTE, toEncode.toString(), null);
+		}	
 	}
 	
-	protected boolean isEmptyStyle(String style) {
+	protected boolean isEmpty(String style) {
 		return !((style != null) && (style.trim().length()!=0)); 
 	}
 	

Modified: root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ToggleControlRendererBase.java
===================================================================
--- root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ToggleControlRendererBase.java	2009-11-24 15:31:22 UTC (rev 15986)
+++ root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ToggleControlRendererBase.java	2009-11-24 16:36:33 UTC (rev 15987)
@@ -2,14 +2,17 @@
 
 import java.io.IOException;
 import java.text.MessageFormat;
+import java.util.HashMap;
 import java.util.Map;
 
 import javax.faces.application.ResourceDependencies;
 import javax.faces.application.ResourceDependency;
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
 
+import org.ajax4jsf.javascript.ScriptUtils;
 import org.ajax4jsf.renderkit.RendererBase;
 import org.ajax4jsf.renderkit.RendererUtils.HTML;
 import org.richfaces.component.Expandable;
@@ -17,12 +20,16 @@
 import org.richfaces.component.UIToggleControl;
 import org.richfaces.event.ToggleEvent;
 
+/**
+ * @author Anton Belevich
+ *
+ */
 @ResourceDependencies({
     @ResourceDependency(name = "toggler.js")
 })
 public abstract class ToggleControlRendererBase extends RendererBase {
 
-	private static final String MANAGER_SCRIPT = "<script type=\"text/javascript\">ToggleManager.add(new Toggle(\"{0}\", \"{1}\", \"{2}\"));</script>";
+	private static final String MANAGER_SCRIPT = "<script type=\"text/javascript\">ToggleManager.add(new Toggle(\"{0}\", {1}));</script>";
 	
 	private static final String CLIENT_TOGGLE_SCRIPT = "ToggleManager.clientToggle(''{0}'', ''{1}'');";
 	
@@ -48,7 +55,7 @@
 		
 		Map<String, String> params = context.getExternalContext().getRequestParameterMap();
 		
-		String hiddenId = toggle.getClientId() + HIDDEN;
+		String hiddenId = toggle.getClientId();
 		String state = params.get(hiddenId);
 		
 		if(state != null && state.trim().length()> 0) {
@@ -58,11 +65,9 @@
 			
 				String prevState = getState(((Expandable)processed).isExpanded());
 				if(!state.equals(prevState)) {
-					new ToggleEvent(processed, state).queue();
+					new ToggleEvent(processed, isExpanded(state)).queue();
 				}
-				
 			}
-			
 		}	
 	}
 	
@@ -76,17 +81,17 @@
 				ResponseWriter writer = context.getResponseWriter();
 								
 				String toggleId = toggleControl.getClientId(context); 
-				String subTableId = subTable.getClientId(context);
-				boolean expanded = subTable.isExpanded();
-				String initialState = getState(expanded);
+				String options = encodeOptions(context, toggleControl, subTable);							
 				
-				String registerScript = MessageFormat.format(MANAGER_SCRIPT, toggleId, subTableId,  initialState);
+				String registerScript = MessageFormat.format(MANAGER_SCRIPT, toggleId, options);
 				writer.write(registerScript);
 				
 				String switchType = subTable.getSwichType();
+				boolean expanded = subTable.isExpanded();
+				
 				encodeControl(context, writer, toggleControl, switchType, expanded, false);
 				encodeControl(context, writer, toggleControl, switchType, !expanded, true);
-				encodeHiddenInput(context, writer, toggleControl);
+			//	encodeHiddenInput(context, writer, toggleControl);
 	
 			}
 		}
@@ -127,6 +132,22 @@
 		writer.endElement(HTML.SPAN_ELEM);
 	}
 	
+	public String encodeOptions(FacesContext context, UIToggleControl toggleControl, UISubTable subTable) {
+		
+		UIForm nestingForm = getUtils().getNestingForm(context, toggleControl);
+		
+		String formId = nestingForm.getClientId(context);
+		String forId = subTable.getClientId(context);
+		String state = getState(subTable.isExpanded());
+		
+		HashMap<String, String> options = new HashMap<String, String>();
+		options.put("formId", formId);
+		options.put("forId", forId);
+		options.put("initialState", state);
+		
+		return ScriptUtils.toScript(options);
+	}
+	
 	public void  encodeHiddenInput(FacesContext context, ResponseWriter writer, UIComponent component) throws IOException {
 		
 		String hiddenId = component.getClientId(context) +HIDDEN;
@@ -136,7 +157,7 @@
 		writer.writeAttribute(HTML.NAME_ATTRIBUTE, hiddenId, null);
 		writer.writeAttribute(HTML.TYPE_ATTR,"hidden", null);
 		writer.endElement(HTML.INPUT_ELEM);
-			
+		
 	}
 	
 	public String getStyleClass(FacesContext context, UIToggleControl control) {
@@ -182,4 +203,8 @@
 		return expand ? EXPAND_STATE: COLLAPSE_STATE;
 	}
 	
+	protected boolean isExpanded(String state) {
+		return state.equals(EXPAND_STATE);
+	}
+	
 }

Modified: root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/taglib/SubTableHandler.java
===================================================================
--- root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/taglib/SubTableHandler.java	2009-11-24 15:31:22 UTC (rev 15986)
+++ root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/taglib/SubTableHandler.java	2009-11-24 16:36:33 UTC (rev 15987)
@@ -12,6 +12,10 @@
 
 import org.richfaces.component.UISubTable;
 
+/**
+ * @author Anton Belevich
+ *
+ */
 public class SubTableHandler extends ComponentHandler{
 
 	private static final SubTableHandlerMetaRule metaRule = new SubTableHandlerMetaRule();

Modified: root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/resources/toggler.js
===================================================================
--- root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/resources/toggler.js	2009-11-24 15:31:22 UTC (rev 15986)
+++ root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/resources/toggler.js	2009-11-24 16:36:33 UTC (rev 15987)
@@ -1,7 +1,8 @@
-function Toggle(id, forId, initialState){
+function Toggle(id, options){
     this.id = id;
-    this.forId = forId;
-    this.state = initialState;
+    this.forId = options.forId;
+    this.state = options.initialState;
+    this.formId = options.formId;
     this.hidden = id + ":hidden";
 }
 
@@ -9,61 +10,66 @@
     return id.replace(/:/g, "\\:");
 }
 
-Toggle.prototype.clientToggle= function(toState){
-   var elements = this.getElement(this.forId);
-   
-   if(this.state != toState) {
+Toggle.prototype.toggle = function(toState) {
+	var elements = this.getElement(this.forId);
+	   
+	if(this.state != toState) {
 
-	   var hideId = this.id + ":" + toState;
-       var showId = this.id + ":" + this.state; 
+		var hideId = this.id + ":" + toState;
+		var showId = this.id + ":" + this.state; 
 
-       var hideControl = this.getElement(hideId); 
-       var showControl = this.getElement(showId);   
-       
-       this.command("show", showControl);
-       this.command("hide", hideControl);
- 
-       if(toState == 'collapse') {
-    	   this.command("hide", elements);
-       }  else {
-    	   this.command("show", elements);
-       }
-       this.state = toState;
-       this.saveState(this.state);
-   }
+		var hideControl = this.getElement(hideId); 
+		var showControl = this.getElement(showId);   
+	       
+		this.command("show", showControl);
+		this.command("hide", hideControl);
+	 
+		if(toState == 'collapse') {
+			this.command("hide", elements);
+		}  else {
+			this.command("show", elements);
+		}
+		this.state = toState;
+	//	this.saveState(this.state);
+	}
 }
 
 Toggle.prototype.saveState= function(state) {
-	var id = this.hidden;
+	/*var id = this.hidden;
 	var element = this.getElement(id);
 	if(element) {
-		element[0].attr('value', state);
-	}
+		element.attr('value', state);
+	}*/
 }
 
+Toggle.prototype.clientToggle= function(toState){
+	this.toggle(toState);
+}
+
 Toggle.prototype.serverToggle = function(toState) {
+    if(mojarra && mojarra.jsfcljs) {
+    	var form = this.getElement(this.formId);
+    	var prv = {};
+    	if(this.id) {
+    		prv[this.id] = toState;
+    		mojarra.jsfcljs(form[0],prv,'');
+    	}	
+    }
 }
 
 Toggle.prototype.ajaxToggle = function(toState) {
 }
 
-Toggle.prototype.command = function(name, elements){
+Toggle.prototype.command = function(name, element){
     if(name) {
-        for(var i in elements) {
-            var element = elements[i];
-            if(element && typeof element[name] == 'function') {
+    	if(element && typeof element[name] == 'function') {
                  element[name]();            
-            }
-        }    
-    }
+    	}
+    }    
 }
 
-Toggle.prototype.getElement = function() {
-    var elements = new Array();
-    for(var i = 0; i < arguments.length; i++) {
-         elements[i] = $("#" + this.convertId(arguments[i]));
-    }
-    return elements;
+Toggle.prototype.getElement = function(id) {
+    return $("#" + this.convertId(id));
 }
 
 ToggleManager = new Object();

Modified: root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/tables.taglib.xml
===================================================================
--- root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/tables.taglib.xml	2009-11-24 15:31:22 UTC (rev 15986)
+++ root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/tables.taglib.xml	2009-11-24 16:36:33 UTC (rev 15987)
@@ -36,7 +36,7 @@
 		<component>
 			<component-type>org.richfaces.SubTable</component-type>
 			<!-- renderer-type>org.richfaces.renderkit.SubTableRenderer</renderer-type-->
-			<!-- handler-class>org.richfaces.taglib.SubTableHandler</handler-class -->
+			<handler-class>org.richfaces.taglib.SubTableHandler</handler-class>
 		</component>
 	</tag>
 	<tag>

Modified: root/ui-sandbox/trunk/components/tables/ui/src/main/templates/org/richfaces/renderkit/html/toggle-control.template.xml
===================================================================
--- root/ui-sandbox/trunk/components/tables/ui/src/main/templates/org/richfaces/renderkit/html/toggle-control.template.xml	2009-11-24 15:31:22 UTC (rev 15986)
+++ root/ui-sandbox/trunk/components/tables/ui/src/main/templates/org/richfaces/renderkit/html/toggle-control.template.xml	2009-11-24 16:36:33 UTC (rev 15987)
@@ -13,9 +13,11 @@
 	</cc:interface>
 
 	<cc:implementation>
+		<cdk:call expression="getUtils().encodeBeginFormIfNessesary(facesContext, cc);"/>
 		<span id="#{clientId}" 	class="#{cc.attributes['styleClass']}">
 			<cdk:call expression="encodeControl(facesContext, cc);" />
 		</span>
+		<cdk:call expression="getUtils().encodeEndFormIfNessesary(facesContext, cc);"/>
 	</cc:implementation>
 		
 </cdk:root>
\ No newline at end of file



More information about the richfaces-svn-commits mailing list