[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