[richfaces-svn-commits] JBoss Rich Faces SVN: r4528 - in branches/3.1.x/ui/orderingList/src/main/java/org/richfaces: renderkit and 1 other directory.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Wed Dec 5 22:18:27 EST 2007


Author: nbelaevski
Date: 2007-12-05 22:18:27 -0500 (Wed, 05 Dec 2007)
New Revision: 4528

Modified:
   branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingBaseComponent.java
   branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingList.java
   branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java
   branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingListRendererBase.java
Log:
converter enhancements

Modified: branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingBaseComponent.java
===================================================================
--- branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingBaseComponent.java	2007-12-06 02:03:12 UTC (rev 4527)
+++ branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingBaseComponent.java	2007-12-06 03:18:27 UTC (rev 4528)
@@ -14,12 +14,14 @@
 import java.util.Map;
 
 import javax.faces.FacesException;
+import javax.faces.application.Application;
 import javax.faces.application.FacesMessage;
 import javax.faces.component.EditableValueHolder;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIComponentBase;
 import javax.faces.component.UIInput;
 import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
 import javax.faces.convert.ConverterException;
 import javax.faces.el.EvaluationException;
 import javax.faces.el.MethodBinding;
@@ -599,13 +601,17 @@
 		this.activeItemSet = true;
 	}
 	
-	protected Object createContainer(ArrayList data, Class objectClass) {
-		if (objectClass.isArray()) {
-			return data.toArray((Object[]) Array.newInstance(objectClass.getComponentType(), data.size()));
-		} else {
-			data.trimToSize();
-			return data;
+	protected Object createContainer(ArrayList data, Object object) {
+		if (object != null) {
+			Class objectClass = object.getClass();
+			Class componentType = objectClass.getComponentType();
+			if (componentType != null) {
+				return data.toArray((Object[]) Array.newInstance(componentType, data.size()));
+			}
 		}
+		
+		data.trimToSize();
+		return data;
 	}
 
 	public abstract ItemState getItemState();
@@ -615,31 +621,30 @@
 		public boolean isActive();
 	}
 
-//	protected final class SubmittedItemState implements ItemState {
-//
-//		private Object activeItem;
-//		private Set selectionKeys;
-//		
-//		public boolean isActive() {
-//			return activeItemKeys != null && activeItemKeys.contains(getRowKey());
-//		}
-//
-//		public boolean isSelected() {
-//			return selectionKeys != null && selectionKeys.contains(getRowKey());
-//		}
-//
-//		public SubmittedItemState(Set selectionKeys, Set activeItemKeys) {
-//			super();
-//			this.selectionKeys = selectionKeys;
-//			this.activeItemKeys = activeItemKeys;
-//		}
-//	}
+	private Converter getConverterForType(FacesContext context, Class type) {
+		if (!Object.class.equals(type)) {
+			Application application = context.getApplication();
+			return application.createConverter(type);
+		}
+
+		return null;
+	}
 	
-	protected Object getAsObject(String string) {
-		return string;
+	public Converter getConverterForValue(FacesContext context) {
+		ValueBinding binding = this.getValueBinding("value");
+		if (binding != null) {
+			Class type = binding.getType(context);
+			if (type != null) {
+				Class componentType = type.getComponentType();
+				if (componentType != null) {
+					return getConverterForType(context, componentType);
+				} else {
+					//support for generics introspection
+				}
+			}
+		}
+		
+		return null;
 	}
-
-	protected String getAsString(Object object) {
-		return object.toString();
-	}
+	
 }

Modified: branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingList.java
===================================================================
--- branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingList.java	2007-12-06 02:03:12 UTC (rev 4527)
+++ branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingList.java	2007-12-06 03:18:27 UTC (rev 4528)
@@ -454,7 +454,7 @@
 
 				}, null);
 
-				newValue = createContainer(list, previousValue.getClass());
+				newValue = createContainer(list, previousValue);
 			} catch (IOException e) {
 				throw new ConverterException(e.getLocalizedMessage(), e);
 			}

Modified: branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java
===================================================================
--- branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java	2007-12-06 02:03:12 UTC (rev 4527)
+++ branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java	2007-12-06 03:18:27 UTC (rev 4528)
@@ -16,7 +16,6 @@
 import javax.faces.context.ResponseWriter;
 import javax.faces.convert.Converter;
 
-import org.ajax4jsf.javascript.JSFunction;
 import org.ajax4jsf.javascript.JSFunctionDefinition;
 import org.ajax4jsf.javascript.JSReference;
 import org.ajax4jsf.javascript.ScriptString;
@@ -33,6 +32,29 @@
  */
 public abstract class OrderingComponentRendererBase extends AbstractRowsRenderer {
 
+	private static final Converter DEFAULT_CONVERTER = new Converter() {
+
+		public Object getAsObject(FacesContext context, UIComponent component,
+				String value) {
+
+			return value;
+		}
+
+		public String getAsString(FacesContext context, UIComponent component,
+				Object value) {
+			if (value instanceof String) {
+				return (String) value;
+			}
+			
+			if (null == value) {
+				return "";
+			}
+			
+			return value.toString();
+		}
+
+	};
+	
 	private static final String ITEM_STATE_VAR_NAME = "itemState";
 
 	protected final static String SHOW_LABELS_ATTRIBUTE_NAME = "showButtonLabels";
@@ -433,28 +455,19 @@
 		return (ItemState) variables.getVariable(ITEM_STATE_VAR_NAME);
 	}
 
-	protected String getAsString(FacesContext context, UIOrderingBaseComponent component, Object object) {
-		if (object instanceof String) {
-			return (String) object;
+	protected Converter getConverter(FacesContext context, UIOrderingBaseComponent component) {
+		Converter converter = component.getConverter();
+
+		if (converter == null) {
+			converter = component.getConverterForValue(context);
 		}
-		if (null == object) {
-			return "null";
+		
+		if (converter == null) {
+			converter = DEFAULT_CONVERTER;
 		}
-		if (null == component.getConverter()) {
-			return object.toString();
-		}
 		
-		return component.getConverter().getAsString(context, component, object);
+		return converter;
 	}
-
-	protected Object getAsObject(FacesContext context, UIOrderingBaseComponent component, String string) {
-		Converter converter = component.getConverter();
-		if (converter != null) {
-			return converter.getAsObject(context, component, string);
-		} else {
-			return string;
-		}
-	}
 	
 	public String getCaptionDisplay(FacesContext context, UIComponent component) {
 		Object caption = component.getAttributes().get(OrderingComponentControlsHelper.ATTRIBUTE_CAPTION_LABEL);

Modified: branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingListRendererBase.java
===================================================================
--- branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingListRendererBase.java	2007-12-06 02:03:12 UTC (rev 4527)
+++ branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingListRendererBase.java	2007-12-06 03:18:27 UTC (rev 4528)
@@ -14,10 +14,13 @@
 import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
+import javax.faces.convert.Converter;
 
+import org.ajax4jsf.component.UIDataAdaptor;
 import org.ajax4jsf.renderkit.ComponentVariables;
 import org.ajax4jsf.renderkit.ComponentsVariableResolver;
 import org.ajax4jsf.renderkit.RendererUtils.HTML;
+import org.richfaces.component.UIOrderingBaseComponent;
 import org.richfaces.component.UIOrderingList;
 import org.richfaces.component.UIOrderingBaseComponent.ItemState;
 
@@ -81,9 +84,32 @@
 		}
 	}
 	
+	private static final class OrderingListRendererTableHolder extends TableHolder {
+
+		private Converter converter;
+
+		public OrderingListRendererTableHolder(UIDataAdaptor table, Converter converter) {
+			super(table);
+
+			this.converter = converter;
+		}
+		
+		public Converter getConverter() {
+			return converter;
+		}
+	}
+	
+	public void encodeRows(FacesContext context, UIComponent component)
+			throws IOException {
+		
+		super.encodeRows(context, component, new OrderingListRendererTableHolder((UIDataAdaptor) component, 
+				getConverter(context, (UIOrderingBaseComponent) component)));
+	}
+	
 	public void encodeOneRow(FacesContext context, TableHolder holder)
 			throws IOException {
 		ResponseWriter writer = context.getResponseWriter();
+		OrderingListRendererTableHolder tableHolder = (OrderingListRendererTableHolder) holder;
 		UIOrderingList table = (UIOrderingList) holder.getTable();
 		String clientId = holder.getTable().getClientId(context);
 		writer.startElement(HTML.TR_ELEMENT, table);
@@ -155,7 +181,7 @@
 					}
 
 					value.append(':');
-					value.append(getAsString(context, table, table.getRowData()));
+					value.append(tableHolder.getConverter().getAsString(context, table, table.getRowData()));
 					
 					writer.writeAttribute(HTML.value_ATTRIBUTE, value.toString(), null);
 					
@@ -184,10 +210,11 @@
 			Object activeItem = null;
 			String[] strings = (String[]) externalContext.getRequestParameterValuesMap().get(clientId);
         	Map map = new LinkedHashMap();
+        	Converter converter = getConverter(context, orderingList);
         	for (int i = 0; i < strings.length; i++) {
 				String string = strings[i];
 				int idx = string.indexOf(':');
-				Object value = getAsObject(context, orderingList, string.substring(idx + 1));
+				Object value = converter.getAsObject(context, orderingList, string.substring(idx + 1));
 				String substring = string.substring(0, idx);
 				
 				idx = substring.length() - 1;




More information about the richfaces-svn-commits mailing list