[richfaces-svn-commits] JBoss Rich Faces SVN: r5694 - in trunk/sandbox/ui/progressBAR/src/main: java/org/richfaces/renderkit and 1 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Tue Jan 29 07:11:07 EST 2008


Author: andrei_exadel
Date: 2008-01-29 07:11:07 -0500 (Tue, 29 Jan 2008)
New Revision: 5694

Modified:
   trunk/sandbox/ui/progressBAR/src/main/java/org/richfaces/component/UIProgressBar.java
   trunk/sandbox/ui/progressBAR/src/main/java/org/richfaces/renderkit/AbstractProgressBarRenderer.java
   trunk/sandbox/ui/progressBAR/src/main/resources/org/richfaces/renderkit/html/js/progressBar.js
Log:
refactoring

Modified: trunk/sandbox/ui/progressBAR/src/main/java/org/richfaces/component/UIProgressBar.java
===================================================================
--- trunk/sandbox/ui/progressBAR/src/main/java/org/richfaces/component/UIProgressBar.java	2008-01-29 12:08:51 UTC (rev 5693)
+++ trunk/sandbox/ui/progressBAR/src/main/java/org/richfaces/component/UIProgressBar.java	2008-01-29 12:11:07 UTC (rev 5694)
@@ -6,7 +6,24 @@
 
 package org.richfaces.component;
 
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.FacesEvent;
+import javax.servlet.http.HttpServletRequest;
+
 import org.ajax4jsf.component.UIPoll;
+import org.ajax4jsf.context.AjaxContext;
+import org.ajax4jsf.context.AjaxContextImpl;
+import org.ajax4jsf.event.AjaxEvent;
+import org.ajax4jsf.javascript.JSLiteral;
+import org.ajax4jsf.renderkit.AjaxRendererUtils;
+import org.richfaces.renderkit.AbstractProgressBarRenderer;
 
 /**
  * TODO Class description goes here.
@@ -15,12 +32,161 @@
  * 
  */
 
-//TODO add @since declaration
+// TODO add @since declaration
 public abstract class UIProgressBar extends UIPoll {
 
     public static final String COMPONENT_TYPE = "org.richfaces.ProgressBar";
 
     public static final String COMPONENT_FAMILY = "org.richfaces.ProgressBar";
-  
-    //TODO value can be any number, e.g. big decimal
+
+    /** Request parameter name containing component state to render */
+    private static final String FORCE_STATE_PARAM = "forceState";
+
+    public void broadcast(FacesEvent event) throws AbortProcessingException {
+	// TODO Auto-generated method stub
+	if (event instanceof AjaxEvent) {
+	    FacesContext facesContext = FacesContext.getCurrentInstance();
+	    AjaxContext ajaxContext = AjaxContextImpl
+		    .getCurrentInstance(facesContext);
+
+	    HttpServletRequest request = (HttpServletRequest) facesContext
+		    .getExternalContext().getRequest();
+
+	    Number percent = getNumber(this.getAttributes().get("value"));
+	    Number maxValue = getNumber(this.getAttributes().get("maxValue"));
+	    Map params = request.getParameterMap();
+	    if (params.containsKey(FORCE_STATE_PARAM)) {
+		ajaxContext.addComponentToAjaxRender(this);
+		String[] str = (String[]) params.get(FORCE_STATE_PARAM);
+		for (String s : str) {
+		    this.getAttributes().put(FORCE_STATE_PARAM, s);
+		}
+	    } else if (percent.doubleValue() < maxValue.doubleValue()
+		    && params.containsKey("percent")) {
+		ajaxContext.removeRenderedArea(this.getClientId(facesContext));
+		ajaxContext.setResponseData(getResponseData(percent,
+			facesContext));
+		Object rerenderAfterComplete = this.getAttributes().get(
+			"reRender");
+		Set ajaxRegions = AjaxRendererUtils
+			.asSet(rerenderAfterComplete);
+
+		if (ajaxRegions != null) {
+		    for (Iterator iter = ajaxRegions.iterator(); iter.hasNext();) {
+			String id = iter.next().toString();
+			ajaxContext.addComponentToAjaxRender(this, id);
+		    }
+		}
+	    } else {
+		ajaxContext.addComponentToAjaxRender(this);
+	    }
+
+	}
+    }
+
+    /**
+     * Returns ajax response data
+     * 
+     * @param uiComponent
+     * @param percent
+     * @return
+     */
+    private Map<Object, Object> getResponseData(Number percent,
+	    FacesContext facesContext) {
+
+	AbstractProgressBarRenderer renderer = (AbstractProgressBarRenderer) this
+		.getRenderer(facesContext);
+
+	Map<Object, Object> map = new HashMap<Object, Object>();
+	map.put("percent", percent);
+	map.put("interval", this.getInterval());
+
+	if (this.getAttributes().get("style") != null) {
+	    map.put("style", this.getAttributes().get("style"));
+	}
+
+	boolean enabled = (Boolean) this.getAttributes().get("enabled");
+	map.put("enabled", Boolean.toString(enabled));
+
+	map.put("markup", getMarkup(facesContext, renderer));
+
+	map.put("context", getContext(renderer, percent));
+
+	addStyles2Responce(map, "completeClass", this.getAttributes().get(
+		"completeClass"));
+	addStyles2Responce(map, "remainClass", this.getAttributes().get(
+		"remainClass"));
+	addStyles2Responce(map, "styleClass", this.getAttributes().get(
+		"styleClass"));
+	return map;
+
+    }
+
+    private Map<String, Object> getContext(
+	    AbstractProgressBarRenderer renderer, Number percent) {
+	Map<String, Object> context = renderer.getParametersMap(this);
+	if (context == null) {
+	    context = new HashMap<String, Object>();
+	}
+	context.put("value", percent.toString());
+	context.put("maxValue", this.getAttributes().get("maxValue"));
+	context.put("minValue", this.getAttributes().get("minValue"));
+	return context;
+    }
+
+    private JSLiteral getMarkup(FacesContext context,
+	    AbstractProgressBarRenderer renderer) {
+	JSLiteral literal = null;
+	try {
+	    literal = new JSLiteral(renderer.getMarkup(context, this)
+		    .toString());
+	} catch (Exception e) {
+
+	}
+	return literal;
+    }
+
+    /**
+     * Add component classes to ajax response
+     * 
+     * @param buffer
+     * @param attr
+     * @param newValue
+     */
+    private void addStyles2Responce(Map<Object, Object> map, String key,
+	    Object className) {
+	if (className != null) {
+	    map.put(key, className);
+	}
+    }
+
+    /**
+     * Converts value attr to number value
+     * 
+     * @param v -
+     *                value attr
+     * @return result
+     */
+    public Number getNumber(Object v) {
+	Number result = new Integer(0);
+	if (v != null) {
+	    try {
+		if (v instanceof String) {
+		    result = Double.parseDouble((String) v);
+		} else {
+		    Number n = (Number) v;
+		    if (n instanceof BigDecimal || n instanceof Double
+			    || n instanceof Float) {
+			result = n.floatValue();
+		    } else if (n instanceof Integer) {
+			result = n.intValue();
+		    }
+		}
+	    } catch (Exception e) {
+		// TODO: handle exception
+	    }
+	}
+	return result;
+    }
+
 }

Modified: trunk/sandbox/ui/progressBAR/src/main/java/org/richfaces/renderkit/AbstractProgressBarRenderer.java
===================================================================
--- trunk/sandbox/ui/progressBAR/src/main/java/org/richfaces/renderkit/AbstractProgressBarRenderer.java	2008-01-29 12:08:51 UTC (rev 5693)
+++ trunk/sandbox/ui/progressBAR/src/main/java/org/richfaces/renderkit/AbstractProgressBarRenderer.java	2008-01-29 12:11:07 UTC (rev 5694)
@@ -15,13 +15,15 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import javax.faces.FactoryFinder;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
-import javax.servlet.http.HttpServletRequest;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
 
 import org.ajax4jsf.context.AjaxContext;
-import org.ajax4jsf.context.AjaxContextImpl;
+import org.ajax4jsf.event.AjaxEvent;
 import org.ajax4jsf.javascript.JSFunction;
 import org.ajax4jsf.javascript.JSFunctionDefinition;
 import org.ajax4jsf.javascript.JSReference;
@@ -30,6 +32,7 @@
 import org.ajax4jsf.renderkit.ComponentVariables;
 import org.ajax4jsf.renderkit.ComponentsVariableResolver;
 import org.ajax4jsf.renderkit.RendererUtils.HTML;
+import org.ajax4jsf.resource.CountingOutputWriter;
 import org.richfaces.component.UIProgressBar;
 
 /**
@@ -61,47 +64,12 @@
      */
     @Override
     protected void doDecode(FacesContext facesContext, UIComponent uiComponent) {
-	AjaxContext ajaxContext = AjaxContextImpl
-		.getCurrentInstance(facesContext);
-
-	if (!ajaxContext.isAjaxRequest()) {
-	    return;
-	}
-
-	HttpServletRequest request = (HttpServletRequest) facesContext
-		.getExternalContext().getRequest();
-
-	Number percent = getNumber(uiComponent.getAttributes().get("value"));
-	Number maxValue = getNumber(uiComponent.getAttributes().get("maxValue"));
-	Map params = request.getParameterMap();
-	if (params.containsKey(FORCE_STATE_PARAM)) {
-	    ajaxContext.addComponentToAjaxRender(uiComponent);
-	    String[] str = (String[]) params.get(FORCE_STATE_PARAM);
-	    for (String s : str) {
-		uiComponent.getAttributes().put(FORCE_STATE_PARAM, s);
-	    }
-	} else if (percent.doubleValue() < maxValue.doubleValue()
-		&& params.containsKey("percent")) {
-	    ajaxContext.removeRenderedArea(uiComponent
-		    .getClientId(facesContext));
-	    ajaxContext.setResponseData(getResponseData(uiComponent, percent));
-	    Object rerenderAfterComplete = uiComponent.getAttributes().get(
-		    "reRender");
-	    Set ajaxRegions = AjaxRendererUtils.asSet(rerenderAfterComplete);
-
-	    if (ajaxRegions != null) {
-		for (Iterator iter = ajaxRegions.iterator(); iter.hasNext();) {
-		    String id = iter.next().toString();
-		    ajaxContext.addComponentToAjaxRender(uiComponent, id);
-		}
-	    }
-	} else {
-	    ajaxContext.addComponentToAjaxRender(uiComponent);
-	}
+	new AjaxEvent(uiComponent).queue();
     }
 
     /**
      * Render progress state forced from javascript
+     * 
      * @param state
      * @param context
      * @param component
@@ -121,6 +89,7 @@
 
     /**
      * Gets state forced from javascript
+     * 
      * @param component
      * @return
      */
@@ -131,72 +100,46 @@
 	return null;
     }
 
+
     /**
-     * Returns ajax response data
-     * @param uiComponent
-     * @param percent
+     * Renderes label markup
+     * @param context
+     * @param component
      * @return
      */
-    private String getResponseData(UIComponent uiComponent, Number percent) {
-	UIProgressBar progressBar = (UIProgressBar) uiComponent;
-	StringBuffer buffer = new StringBuffer();
-	buffer.append("percent:");
-	buffer.append(percent);
-	buffer.append(",");
+    public StringBuffer getMarkup(FacesContext context, UIComponent component) {
+	StringBuffer result = null;
+	CountingOutputWriter customWriter = new CountingOutputWriter();
+	ResponseWriter writer = context.getResponseWriter();
+	try {
 
-	buffer.append("interval:");
-	buffer.append(progressBar.getInterval());
-	buffer.append(",");
-	
-	if (progressBar.getAttributes().get("style") != null) {
-	    buffer.append("style:");
-	    buffer.append(progressBar.getAttributes().get("style"));
-	    buffer.append(",");
+	    String defaultRenderKitId = context.getApplication()
+		    .getDefaultRenderKitId();
+	    if (null == defaultRenderKitId) {
+		defaultRenderKitId = RenderKitFactory.HTML_BASIC_RENDER_KIT;
+	    }
+	    RenderKitFactory renderKitFactory = (RenderKitFactory) FactoryFinder
+		    .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+	    RenderKit renderKit = renderKitFactory.getRenderKit(context,
+		    defaultRenderKitId);
+
+	    ResponseWriter responseWriter = renderKit.createResponseWriter(
+		    customWriter, null, "UTF-8");
+	    context.setResponseWriter(responseWriter);
+	    writeScriptBody(context, component, true);
+	    result = customWriter.getContent();
+	    if (writer != null) {
+		context.setResponseWriter(writer);
+	    }
+	} catch (Exception e) {
+	    e.getMessage();
 	}
 
-	boolean enabled = (Boolean) uiComponent.getAttributes().get("enabled");
-	buffer.append("enabled:");
-	buffer.append(Boolean.toString(enabled));
-	buffer.append(",");
+	return result;
 
-	addStyles2Responce(buffer, "completeClass", (String) uiComponent
-		.getAttributes().get("completeClass"));
-	addStyles2Responce(buffer, "remainClass", (String) uiComponent
-		.getAttributes().get("remainClass"));
-	addStyles2Responce(buffer, "styleClass", (String) uiComponent
-		.getAttributes().get("styleClass"));
-	return buffer.toString();
-
     }
 
     /**
-     * Add component classes to ajax response
-     * 
-     * @param buffer
-     * @param attr
-     * @param newValue
-     */
-    private void addStyles2Responce(StringBuffer buffer, String attr,
-	    String newValue) {
-	if (newValue != null) {
-	    buffer.append(attr);
-	    buffer.append(":");
-	    buffer.append(newValue);
-	    buffer.append(",");
-	}
-    }
-
-    /**
-     * Return poll function name
-     * 
-     * @param component
-     * @return
-     */
-    public String getVarName(UIComponent component) {
-	return String.valueOf(Math.abs(component.hashCode()));
-    }
-
-    /**
      * Methods encodes AJAX script for polling
      * 
      * @param context -
@@ -249,8 +192,10 @@
 	StringBuffer script = new StringBuffer();
 	writer.startElement(HTML.SPAN_ELEM, component);
 	writer.startElement(HTML.SCRIPT_ELEM, component);
-	script.append("new ProgressBar('" + component.getClientId(context)
-		+ "').renderLabel();\n");
+	script.append(
+		"new ProgressBar('" + component.getClientId(context)
+			+ "').renderLabel(").append(
+		getMarkup(context, component)).append(",null);\n");
 	writer.append(script.toString());
 	writer.endElement(HTML.SCRIPT_ELEM);
 	writer.endElement(HTML.SPAN_ELEM);
@@ -268,7 +213,7 @@
 	    throws IOException {
 	ResponseWriter writer = context.getResponseWriter();
 	UIProgressBar progressBar = (UIProgressBar) component;
-	AjaxContext ajaxContext = AjaxContextImpl.getCurrentInstance(context);
+
 	writer.startElement(HTML.SPAN_ELEM, component);
 	writer.startElement(HTML.SCRIPT_ELEM, component);
 
@@ -286,23 +231,20 @@
 		.append("','").append(containerId).append("','").append(formId)
 		.append("','").append(mode).append("',").append(minValue)
 		.append(",").append(maxValue).append(",");
-	writer.write(script.toString());
-	writeScriptBody(context, component, true);
-	script = new StringBuffer();
-	script.append(",");
 	script.append(ScriptUtils.toScript(getParametersMap(component)));
 	script.append(",");
 	script.append(ScriptUtils.toScript(buildAjaxOptions(clientId,
 		progressBar, context)));
-	String progressVar = (String)component.getAttributes().get("progressVar");
+	String progressVar = (String) component.getAttributes().get(
+		"progressVar");
 	if (progressVar != null) {
 	    script.append(",'");
 	    script.append(progressVar);
 	    script.append("'");
-	}else {
+	} else {
 	    script.append(",null");
 	}
-	
+
 	script.append(");\n");
 	writer.write(script.toString());
 
@@ -360,13 +302,6 @@
 	functionDefinition.addParameter("event");
 	functionDefinition.addParameter("data");
 	StringBuffer body = new StringBuffer();
-	ComponentVariables variables = ComponentsVariableResolver.getVariables(
-		this, component);
-	UIComponent nestingContainer = (UIComponent) AjaxRendererUtils
-		.findAjaxContainer(context, component);
-	UIComponent form = (UIComponent) AjaxRendererUtils
-		.getNestingForm(component);
-	String content = (String) variables.getVariable("content");
 	body.append("new ProgressBar('" + clientId + "').onComplete(data);");
 	functionDefinition.addToBody(body.toString());
 
@@ -496,11 +431,11 @@
      * @param component
      * @return
      */
-    private Map<String, String> getParametersMap(UIComponent component) {
+    public Map<String, Object> getParametersMap(UIComponent component) {
 	String parameters = (String) component.getAttributes()
 		.get("parameters");
 	if (parameters != null) {
-	    Map<String, String> map = new HashMap<String, String>();
+	    Map<String, Object> map = new HashMap<String, Object>();
 	    String[] strs = parameters.split(SPLIT_EXPRS);
 	    if (strs != null) {
 		for (String str : strs) {

Modified: trunk/sandbox/ui/progressBAR/src/main/resources/org/richfaces/renderkit/html/js/progressBar.js
===================================================================
--- trunk/sandbox/ui/progressBAR/src/main/resources/org/richfaces/renderkit/html/js/progressBar.js	2008-01-29 12:08:51 UTC (rev 5693)
+++ trunk/sandbox/ui/progressBAR/src/main/resources/org/richfaces/renderkit/html/js/progressBar.js	2008-01-29 12:11:07 UTC (rev 5694)
@@ -8,14 +8,13 @@
     		this.id = id;
     	}
     },
-    init: function (id, containerId, formId, mode, minValue, maxValue, label , context, options, progressVar) {
+    init: function (id, containerId, formId, mode, minValue, maxValue, context, options, progressVar) {
     	ProgressBar.Pollers[id] = {};
     	ProgressBar.Pollers[id]['containerId'] = containerId;
     	ProgressBar.Pollers[id]['formId'] = formId;
     	ProgressBar.Pollers[id]['mode'] = mode;
     	ProgressBar.Pollers[id]['minValue'] = minValue;
     	ProgressBar.Pollers[id]['maxValue'] = maxValue;
-    	ProgressBar.Pollers[id]['label'] = label;
     	ProgressBar.Pollers[id]['context'] = context;
     	ProgressBar.Pollers[id]['options'] = options;
     	ProgressBar.Pollers[id]['progressVar'] = progressVar;
@@ -32,9 +31,8 @@
 	},
 	onComplete: function (data) {
 		if (data) {
-			this.parseResponse(data);
-			this.setValue(this.value);
-			this.renderLabel();
+			this.updateComponent(data);
+			this.renderLabel(data['markup'], data['context']);
 			this.poll();
 		}
 		
@@ -50,42 +48,30 @@
 		}
 		return placeholders;
 	},
-	parseResponse: function (data) {
-		var params = data.split(",");
-		for (var i = 0; i < params.length; i++) {
-				var param = params[i];
-				if (param) {
-					var t = param.split(":");
-					 	if (t)
-					 		if (t.length == 2) {
-					 			var k = t[0];
-					 			var v = t[1];
-		 						this.updateComponent(k,v);
-					 		}
-				} 										
-			}
-	},
-	updateComponent: function (k,v) {
-		switch (k) {
-			case "style" : this.updateStyle(v); break;
-			case "percent" : this.value = v; break;
-			case "enabled" : if (v == "false") { this.disable(); }; break;  
-			case "completeClass" : this.updateClassName($(this.id + ":complete"), v, "rich-progress-bar-base"); break;
-			case "remainClass" : this.updateClassName($(this.id + ":remain"), v, "rich-progress-bar-base");  break;
-			case "styleClass" : this.updateClassName($(this.id), v, "rich-progress-bar"); break;
-			case "interval" : if (ProgressBar.Pollers[this.id]['options']['pollinterval'] != v) ProgressBar.Pollers[this.id]['options']['pollinterval'] = v; break;
+	updateComponent: function (data) {
+		this.updateStyle(data['style']);
+		this.setValue(data['percent']);
+		if (!data['enabled']) { this.disable(); }
+		this.updateClassName($(this.id + ":complete"), data['completeClass'], "rich-progress-bar-base");
+		this.updateClassName($(this.id + ":remain"), data['remainClass'], "rich-progress-bar-base");
+		this.updateClassName($(this.id), data['styleClass'], "rich-progress-bar-base");
+		
+		if (ProgressBar.Pollers[this.id]['options']['pollinterval'] != data['interval']) {
+			ProgressBar.Pollers[this.id]['options']['pollinterval'] = data['interval'];
 		}
 	},
 	updateStyle: function (style) {
+	if (!style)  { return; }
 		var d = $(this.id);
-		if (d.style != style) {
-			d.style = style;
+		if (d.style)
+		  if (d.style.cssText != style) {
+			d.style.cssText = style;
 			d = $(this.id + ":remain");
-			if (d) d.style = style;
+			if (d) d.style.cssText = style;
 			d = $(this.id + ":complete");
-			if (d) d.style = style; 
+			if (d) d.style.cssText = style; 
 			d = $(this.id + ":upload");
-			if (d) d.style = style;
+			if (d) d.style.cssText = style;
 		}
 	},
 	updateClassName: function (o, newName, defaultClass) {
@@ -106,9 +92,10 @@
 			}
 		return context;
 	},
-	renderLabel: function () {
-		var context = this.getContext();
-		var markup = ProgressBar.Pollers[this.id]['label'];
+	renderLabel: function (markup, context) {
+		if (!context) {
+			context = this.getContext();
+		}
 		var html = markup.invoke('getContent', context).join('');
 		$(this.id + ":remain").innerHTML = $(this.id + ":complete").innerHTML = html;
 	},
@@ -138,12 +125,12 @@
 		return (this.getMode() == "ajax");
 	}, 
 	setValue: function (val) {
+		val = "" + val;
 		var p = val;
 		if (val != null) {
 			if (val.indexOf("%") < 0)
 				val = val + "%";
 		}
-		
 		if ( parseFloat(p) <  parseFloat(this.getMinValue())) {
 			if (!this.isAjaxMode()) { 
 				this.forceState("initial",null);




More information about the richfaces-svn-commits mailing list