[richfaces-svn-commits] JBoss Rich Faces SVN: r5066 - trunk/sandbox/ui/pickList/src/main/java/org/richfaces/renderkit.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Fri Dec 28 08:57:16 EST 2007


Author: abelevich
Date: 2007-12-28 08:57:16 -0500 (Fri, 28 Dec 2007)
New Revision: 5066

Modified:
   trunk/sandbox/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java
Log:
add decode method

Modified: trunk/sandbox/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java
===================================================================
--- trunk/sandbox/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java	2007-12-28 13:01:15 UTC (rev 5065)
+++ trunk/sandbox/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java	2007-12-28 13:57:16 UTC (rev 5066)
@@ -6,12 +6,17 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
+import javax.faces.component.EditableValueHolder;
 import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectMany;
+import javax.faces.component.UISelectOne;
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
 import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
 import javax.faces.model.SelectItem;
 import javax.faces.model.SelectItemGroup;
 
@@ -60,87 +65,59 @@
 		return SelectUtils.getSelectItems(context, component);
 	}
 	
-	private void encodeSelect(FacesContext facesContext, UIComponent uiComponent, String clientId, boolean disabled,
-	             		int size, List selectItemsToDisplay, Converter converter, ResponseWriter writer) throws IOException {
+	public void decode(FacesContext context, UIComponent component) {
+		
+		UIPickList picklist = (UIPickList)component; 
+		
+	    if (!(picklist instanceof EditableValueHolder)) {
+	    	throw new IllegalArgumentException("Component " + picklist.getClientId(context)  + " is not an EditableValueHolder");
+	    }
+
+	    String hiddenClientId = picklist.getClientId(context) + HIDDEN_SUFFIX;
+	    Map paramValuesMap = context.getExternalContext().getRequestParameterValuesMap();
+
+	    if (isDisabledOrReadOnly(picklist)) {
+	    	return;
+	    }
+
+	    if (paramValuesMap.containsKey(hiddenClientId)) {
+	    	String[] valuesInline = (String[]) paramValuesMap.get(hiddenClientId);
+
+	            if (valuesInline[0].trim().equals("")) {
+	                ((EditableValueHolder) picklist).setSubmittedValue(new String[] {});
+	            } else {
+	                String[] reqValues = valuesInline[0].split(",");
+	                ((EditableValueHolder) picklist).setSubmittedValue(reqValues);
+	            }
+	    } else {
+	    	((EditableValueHolder) picklist).setSubmittedValue(new String[] {});
+	    }
+	}
 	
-		writer.startElement("select", uiComponent);
-		writer.writeAttribute("id", clientId, "id");
-		writer.writeAttribute("name", clientId, null);
-		writer.writeAttribute("multiple", "true", null);
+	private boolean isDisabledOrReadOnly(UIPickList picklist) {		
+		return picklist.isDisplayValueOnly() || isTrue(picklist.getAttributes().get("disabled"));
+	}
 	
-		if (size == 0) {
-			writer.writeAttribute("size", Integer.toString(selectItemsToDisplay.size()), null);
+	private static boolean isTrue(Object obj) {
+		if (!(obj instanceof Boolean)) {
+			return false;
+		}        
+	    return ((Boolean) obj).booleanValue();
+	}
+	
+	@Override
+	public Object getConvertedValue(FacesContext context, UIComponent component, Object submittedValue) 
+			throws ConverterException {
+		
+		if ((component instanceof UISelectMany) && (submittedValue instanceof String[])) {
+			return SelectUtils.getConvertedUISelectManyValue(context,(UISelectMany)component, (String [])submittedValue);
+		} else if ((component instanceof UISelectOne) && (submittedValue instanceof String)) {
+			return SelectUtils.getConvertedUIInputValue(context, (UISelectOne)component, (String)submittedValue);
 		} else {
-			writer.writeAttribute("size", Integer.toString(size), null);
-		}
-		if (disabled) {
-			writer.writeAttribute(HTML.DISABLED_ATTR, Boolean.TRUE, null);
-		}
+			throw new IllegalArgumentException("Unsupported component class " + component.getClass().getName());
+	    }
 	
-		renderSelectOptions(facesContext, uiComponent, converter, Collections.EMPTY_SET, selectItemsToDisplay);
-		writer.writeText("", null);
-		writer.endElement("select");
 	}
-	
-	public void renderSelectOptions(FacesContext context, UIComponent component, Converter converter, Set lookupSet,
-             								List selectItemList) throws IOException {
-		 ResponseWriter writer = context.getResponseWriter();
-				
-		 for (Iterator it = selectItemList.iterator(); it.hasNext();) {
-			 SelectItem selectItem = (SelectItem) it.next();
-				
-			 if (selectItem instanceof SelectItemGroup) {
-				 writer.startElement("optgroup", component);
-				 writer.writeAttribute("label", selectItem.getLabel(), null);
-				 SelectItem[] selectItems = ((SelectItemGroup) selectItem).getSelectItems();
-				 renderSelectOptions(context, component, converter, lookupSet, Arrays.asList(selectItems));
-				 writer.endElement("optgroup");
-			} else {
-				String itemStrValue = PickListUtils.getConvertedStringValue(context, component, converter, selectItem.getValue());
-				writer.write('\t');
-				writer.startElement("option", component);
-				
-				if (itemStrValue != null) {
-					writer.writeAttribute(HTML.value_ATTRIBUTE, itemStrValue, null);
-				}
-				
-				if (lookupSet.contains(itemStrValue))
-				{  //TODO/FIX: we always compare the String vales, better fill lookupSet with Strings only when useSubmittedValue==true, else use the real item value Objects
-					writer.writeAttribute("selected", "selected", null);
-				}
-				
-				boolean disabled = selectItem.isDisabled();
-				if (disabled) {
-					writer.writeAttribute(HTML.DISABLED_ATTR, HTML.DISABLED_ATTR, null);
-				}
-				
-				String labelClass;
-				boolean componentDisabled = ((Boolean)component.getAttributes().get("disabled")).booleanValue();
-				
-				if (componentDisabled || disabled) {
-					labelClass = (String) component.getAttributes().get("disabledClass");
-				} else {
-					labelClass = (String) component.getAttributes().get("enabled");
-				}
-				
-				if (labelClass != null) {
-					writer.writeAttribute("class", labelClass, "labelClass");
-				}
-							
-				Boolean booleanValue = (Boolean)component.getAttributes().get("escape");
-				boolean escape = booleanValue != null ? booleanValue.booleanValue():true;   //default is to escape
-								
-				if (escape) {
-					writer.writeText(selectItem.getLabel(), null);
-				} else {
-					writer.write(selectItem.getLabel());
-				}
-				
-				writer.endElement("option");
-			}
-		}
-	}
-	
 	 @Override
 	protected void doEncodeEnd(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException {
 
@@ -196,6 +173,84 @@
 		 writer.endElement(HTML.TR_ELEMENT);
 		 writer.endElement("table");
 	 }
+	 
+	 private void encodeSelect(FacesContext facesContext, UIComponent uiComponent, String clientId, boolean disabled,
+      		int size, List selectItemsToDisplay, Converter converter, ResponseWriter writer) throws IOException {
+
+		writer.startElement("select", uiComponent);
+		writer.writeAttribute("id", clientId, "id");
+		writer.writeAttribute("name", clientId, null);
+		writer.writeAttribute("multiple", "true", null);
+		
+		if (size == 0) {
+			writer.writeAttribute("size", Integer.toString(selectItemsToDisplay.size()), null);
+		} else {
+			writer.writeAttribute("size", Integer.toString(size), null);
+		}
+		if (disabled) {
+			writer.writeAttribute(HTML.DISABLED_ATTR, Boolean.TRUE, null);
+		}
+		
+		renderSelectOptions(facesContext, uiComponent, converter, Collections.EMPTY_SET, selectItemsToDisplay);
+		writer.writeText("", null);
+		writer.endElement("select");
+	 }
+	 
+	public void renderSelectOptions(FacesContext context, UIComponent component, Converter converter, Set lookupSet,
+					List selectItemList) throws IOException {
+		ResponseWriter writer = context.getResponseWriter();
+		
+		for (Iterator it = selectItemList.iterator(); it.hasNext();) {
+			SelectItem selectItem = (SelectItem) it.next();
+		
+			if (selectItem instanceof SelectItemGroup) {
+				writer.startElement("optgroup", component);
+				writer.writeAttribute("label", selectItem.getLabel(), null);
+				SelectItem[] selectItems = ((SelectItemGroup) selectItem).getSelectItems();
+				renderSelectOptions(context, component, converter, lookupSet, Arrays.asList(selectItems));
+				writer.endElement("optgroup");
+			} else {
+				String itemStrValue = PickListUtils.getConvertedStringValue(context, component, converter, selectItem.getValue());
+				writer.write('\t');
+				writer.startElement("option", component);
+				
+				if (itemStrValue != null) {
+					writer.writeAttribute(HTML.value_ATTRIBUTE, itemStrValue, null);
+				}
+		
+				if (lookupSet.contains(itemStrValue)) {  //TODO/FIX: we always compare the String vales, better fill lookupSet with Strings only when useSubmittedValue==true, else use the real item value Objects
+					writer.writeAttribute("selected", "selected", null);
+				}
+		
+				boolean disabled = selectItem.isDisabled();
+				if (disabled) {
+					writer.writeAttribute(HTML.DISABLED_ATTR, HTML.DISABLED_ATTR, null);
+				}
+		
+				boolean componentDisabled = isTrue(component.getAttributes().get("disabled"));
+				String labelClass = null;
+				if (componentDisabled || disabled) {
+					labelClass = (String) component.getAttributes().get("disabledClass");
+				} else {
+					labelClass = (String) component.getAttributes().get("enabled");
+				}
+		
+				if (labelClass != null) {
+					writer.writeAttribute("class", labelClass, "labelClass");
+				}
+		
+				boolean escape = isTrue(component.getAttributes().get("escape"));
+					
+				if (escape) {
+					writer.writeText(selectItem.getLabel(), null);
+				} else {
+					writer.write(selectItem.getLabel());
+				}
+		
+				writer.endElement("option");
+			}
+		}
+	}
 	
 	 private void encodeSwapButton(FacesContext facesContext, UIComponent uiComponent, String javaScriptFunction, 
 			 	  String text,ResponseWriter writer) throws IOException {
@@ -230,7 +285,7 @@
 		 writer.endElement(HTML.INPUT_ELEM);
 
 	}
-	 
+		 
 	protected Class<? extends UIComponent> getComponentClass() {
 		return UIPickList.class;
 	}	




More information about the richfaces-svn-commits mailing list