Author: nbelaevski
Date: 2008-03-30 15:12:42 -0400 (Sun, 30 Mar 2008)
New Revision: 7437
Added:
trunk/ui/columns/src/main/java/org/richfaces/iterator/package-info.java
trunk/ui/core/src/main/java/org/ajax4jsf/ajax/package-info.java
trunk/ui/functions/src/main/java/org/richfaces/function/package-info.java
trunk/ui/pickList/src/main/java/org/richfaces/utils/
trunk/ui/pickList/src/main/java/org/richfaces/utils/PickListUtils.java
Removed:
trunk/ui/pickList/src/main/java/org/richfaces/picklist/
Modified:
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java
Log:
package-info.java added, new utility classes got their packages refactored
Added: trunk/ui/columns/src/main/java/org/richfaces/iterator/package-info.java
===================================================================
--- trunk/ui/columns/src/main/java/org/richfaces/iterator/package-info.java
(rev 0)
+++ trunk/ui/columns/src/main/java/org/richfaces/iterator/package-info.java 2008-03-30
19:12:42 UTC (rev 7437)
@@ -0,0 +1,4 @@
+/**
+ * Implementation of iterators for various iterative types
+ */
+package org.richfaces.iterator;
Added: trunk/ui/core/src/main/java/org/ajax4jsf/ajax/package-info.java
===================================================================
--- trunk/ui/core/src/main/java/org/ajax4jsf/ajax/package-info.java
(rev 0)
+++ trunk/ui/core/src/main/java/org/ajax4jsf/ajax/package-info.java 2008-03-30 19:12:42
UTC (rev 7437)
@@ -0,0 +1,4 @@
+/**
+ * AJAX utility classes
+ */
+package org.ajax4jsf.ajax;
Added: trunk/ui/functions/src/main/java/org/richfaces/function/package-info.java
===================================================================
--- trunk/ui/functions/src/main/java/org/richfaces/function/package-info.java
(rev 0)
+++ trunk/ui/functions/src/main/java/org/richfaces/function/package-info.java 2008-03-30
19:12:42 UTC (rev 7437)
@@ -0,0 +1,4 @@
+/**
+ * Implementation of RichFaces functions library
+ */
+package org.richfaces.function;
Modified: trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java
===================================================================
---
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java 2008-03-30
18:57:00 UTC (rev 7436)
+++
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java 2008-03-30
19:12:42 UTC (rev 7437)
@@ -33,7 +33,7 @@
import org.apache.commons.collections.CollectionUtils;
import org.richfaces.component.UIPickList;
import org.richfaces.component.util.HtmlUtil;
-import org.richfaces.picklist.util.PickListUtils;
+import org.richfaces.utils.PickListUtils;
public class PickListRenderer extends HeaderResourcesRendererBase {
Added: trunk/ui/pickList/src/main/java/org/richfaces/utils/PickListUtils.java
===================================================================
--- trunk/ui/pickList/src/main/java/org/richfaces/utils/PickListUtils.java
(rev 0)
+++ trunk/ui/pickList/src/main/java/org/richfaces/utils/PickListUtils.java 2008-03-30
19:12:42 UTC (rev 7437)
@@ -0,0 +1,160 @@
+package org.richfaces.utils;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectMany;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.model.SelectItem;
+
+import org.ajax4jsf.util.SelectUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class PickListUtils {
+
+ private static final Log log = LogFactory.getLog(PickListUtils.class);
+
+ public static Converter findUISelectManyConverter(FacesContext context, UISelectMany
component) {
+
+ Converter converter = component.getConverter();
+ if (converter != null) {
+ return converter;
+ }
+
+ ValueExpression ve = component.getValueExpression("value");
+ if (ve == null) {
+ return null;
+ }
+
+ Class valueType = ve.getType(context.getELContext());
+ if (valueType == null) {
+ return null;
+ }
+
+ if (List.class.isAssignableFrom(valueType)) {
+ List selectItems = SelectUtils.getSelectItems(context, component);
+ if (selectItems != null && selectItems.size() > 0) {
+ SelectItem selectItem = (SelectItem) selectItems.get(0);
+ Class listComponentType = selectItem.getValue().getClass();
+ if (!(String.class.equals(listComponentType))) {
+ try {
+ return context.getApplication().createConverter(listComponentType);
+ } catch (FacesException e) {
+ log.error("No Converter for type " + listComponentType.getName() + "
found", e);
+ return null;
+ }
+ }
+ }
+ return null;
+ }
+
+ if (!valueType.isArray()) {
+ throw new IllegalArgumentException("ValueBinding for UISelectMany : must be of
type List or Array");
+ }
+
+ Class arrayComponentType = valueType.getComponentType();
+ if (String.class.equals(arrayComponentType))
+ return null;
+ if (Object.class.equals(arrayComponentType))
+ return null;
+
+ try {
+ return context.getApplication().createConverter(arrayComponentType);
+ } catch (FacesException e) {
+ log.error("No Converter for type " + arrayComponentType.getName() + "
found", e);
+ return null;
+ }
+ }
+
+ public static Converter findUISelectManyConverterFailsafe(FacesContext facesContext,
UIComponent uiComponent) {
+ Converter converter;
+ try {
+ converter = findUISelectManyConverter(facesContext, (UISelectMany) uiComponent);
+ } catch (FacesException e) {
+ log.error("Error finding Converter for component with id " +
uiComponent.getClientId(facesContext), e);
+ converter = null;
+ }
+ return converter;
+ }
+
+ public static List getValuesList(UIComponent uiComponent, FacesContext facesContext,
Converter converter) {
+ List lookupList = null;
+ if (uiComponent instanceof UISelectMany) {
+ UISelectMany uiSelectMany = (UISelectMany) uiComponent;
+ lookupList = getSelectValuesList(facesContext, uiComponent, converter,
uiSelectMany);
+ }
+ return lookupList;
+ }
+
+ public static List getSelectValuesList(FacesContext context, UIComponent component,
Converter converter, UISelectMany uiSelectMany) {
+ Object selectedValues = uiSelectMany.getValue();
+ return internalSelectValuesList(context, component, converter, uiSelectMany,
selectedValues);
+ }
+
+ private static List internalSelectValuesList(FacesContext context, UIComponent
component, Converter converter, UISelectMany uiSelectMany, Object values) {
+ List valuesList = new ArrayList();
+
+ if (values == null || "".equals(values)) {
+
+ return valuesList;
+
+ } else if (values instanceof Object[]) {
+
+ Object[] ar = (Object[]) values;
+ if (ar.length == 0) {
+ return valuesList;
+ }
+ valuesList = new ArrayList();
+ for (int i = 0; i < ar.length; i++) {
+ valuesList.add(getConvertedStringValue(context, component, converter, ar[i]));
+ }
+ return valuesList;
+
+ } else if (values.getClass().isArray()) {
+
+ int len = Array.getLength(values);
+ valuesList = new ArrayList();
+ for (int i = 0; i < len; i++) {
+ valuesList.add(getConvertedStringValue(context, component, converter, Array.get(values,
i)));
+ }
+ return valuesList;
+
+ } else if (values instanceof List) {
+
+ List lst = (List) values;
+ if (lst.size() == 0) {
+ return lst;
+ } else {
+ valuesList = new ArrayList();
+ for (Iterator i = lst.iterator(); i.hasNext();) {
+ valuesList.add(getConvertedStringValue(context, component, converter, i.next()));
+ }
+ return valuesList;
+ }
+
+ } else {
+ throw new IllegalArgumentException("Value of UISelectMany component : is not of
type Array or List");
+ }
+ }
+
+ public static String getConvertedStringValue(FacesContext context, UIComponent
component, Converter converter, Object value) {
+ if (converter == null) {
+ if (value == null) {
+ return "";
+ } else if (value instanceof String) {
+ return (String) value;
+ } else {
+ throw new IllegalArgumentException("Value is not String (class=" +
value.getClass().getName() + ", value=" + value + ") and component "
+ + component.getClientId(context) + " does not have a Converter");
+ }
+ }
+ return converter.getAsString(context, component, value);
+ }
+}