Author: abelevich
Date: 2009-02-12 08:38:38 -0500 (Thu, 12 Feb 2009)
New Revision: 12637
Removed:
trunk/ui/pickList/src/main/java/org/richfaces/utils/
Modified:
trunk/ui/pickList/src/main/java/org/richfaces/component/UIPickList.java
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListControlsHelper.java
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java
Log:
https://jira.jboss.org/jira/browse/RF-6137,
https://jira.jboss.org/jira/browse/RF-6136
Modified: trunk/ui/pickList/src/main/java/org/richfaces/component/UIPickList.java
===================================================================
--- trunk/ui/pickList/src/main/java/org/richfaces/component/UIPickList.java 2009-02-12
13:14:38 UTC (rev 12636)
+++ trunk/ui/pickList/src/main/java/org/richfaces/component/UIPickList.java 2009-02-12
13:38:38 UTC (rev 12637)
@@ -20,25 +20,18 @@
*/
package org.richfaces.component;
+import javax.el.ValueExpression;
+import javax.faces.application.Application;
import javax.faces.component.NamingContainer;
import javax.faces.component.UIComponent;
import javax.faces.component.UISelectMany;
import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
-public abstract class UIPickList extends UISelectMany{
- private String listClass;
- private String controlClass;
- private String moveControlsVerticalAlign;
+import org.ajax4jsf.util.ELUtils;
+
+public abstract class UIPickList extends UISelectMany {
- public abstract String getMoveControlsVerticalAlign();
- public abstract void setMoveControlsVerticalAlign(String moveControlsVerticalAlign);
-
- public abstract int getSize();
- public abstract void setSize(int size);
-
- public abstract boolean isDisabled();
- public abstract void setDisabled(boolean disabled);
-
/**
* Get base clietntId of this component ( withowt iteration part )
*
@@ -70,6 +63,59 @@
return (_baseClientId);
}
+
+
+ @Override
+ public Converter getConverter() {
+
+ Converter converter = super.getConverter();
+ if(converter == null) {
+ converter = getConverterForValue(FacesContext.getCurrentInstance());
+ }
+
+ return converter;
+ }
+
+ private Converter getConverterForType(FacesContext context, Class <?> type) {
+
+ if (!Object.class.equals(type) && type != null) {
+ Application application = context.getApplication();
+ return application.createConverter(type);
+ }
+
+ return null;
+ }
+
+ private static final Converter noOpConverter = new Converter() {
+
+ public Object getAsObject(FacesContext context, UIComponent component,
+ String value) {
+ return value;
+ }
+
+ public String getAsString(FacesContext context, UIComponent component,
+ Object value) {
+ return (String) value;
+ }
+
+ };
+
+ public Converter getConverterForValue(FacesContext context) {
+ Converter converter = null;
+ ValueExpression expression = this.getValueExpression("value");
+
+ if (expression != null) {
+ Class<?> containerClass = ELUtils.getContainerClass(context, expression);
+
+ converter = getConverterForType(context, containerClass);
+ if (converter == null && String.class.equals(containerClass)) {
+ converter = noOpConverter;
+ }
+ }
+
+ return converter;
+ }
+
private String _baseClientId = null;
public abstract String getControlClass();
@@ -78,4 +124,13 @@
public abstract String getListClass();
public abstract void setListClass(String listClass);
+ public abstract String getMoveControlsVerticalAlign();
+ public abstract void setMoveControlsVerticalAlign(String moveControlsVerticalAlign);
+
+ public abstract int getSize();
+ public abstract void setSize(int size);
+
+ public abstract boolean isDisabled();
+ public abstract void setDisabled(boolean disabled);
+
}
Modified:
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListControlsHelper.java
===================================================================
---
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListControlsHelper.java 2009-02-12
13:14:38 UTC (rev 12636)
+++
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListControlsHelper.java 2009-02-12
13:38:38 UTC (rev 12637)
@@ -40,13 +40,21 @@
public class PickListControlsHelper extends ListShuttleControlsHelper {
private static final String REMOVE_ALL_TITLE = "removeAllTitle";
+
private static final String REMOVE_TITLE = "removeTitle";
+
private static final String COPY_TITLE = "copyTitle";
+
private static final String COPY_ALL_TITLE = "copyAllTitle";
- public final static String BUNDLE_COPY_ALL_LABEL =
"RICH_PICK_LIST_COPY_ALL_LABEL";
- public final static String BUNDLE_COPY_LABEL =
"RICH_PICK_LIST_COPY_LABEL";
- public final static String BUNDLE_REMOVE_ALL_LABEL =
"RICH_PICK_LIST_REMOVE_ALL_LABEL";
- public final static String BUNDLE_REMOVE_LABEL =
"RICH_PICK_LIST_REMOVE_LABEL";
+
+ public static final String BUNDLE_COPY_ALL_LABEL =
"RICH_PICK_LIST_COPY_ALL_LABEL";
+
+ public static final String BUNDLE_COPY_LABEL =
"RICH_PICK_LIST_COPY_LABEL";
+
+ public static final String BUNDLE_REMOVE_ALL_LABEL =
"RICH_PICK_LIST_REMOVE_ALL_LABEL";
+
+ public static final String BUNDLE_REMOVE_LABEL =
"RICH_PICK_LIST_REMOVE_LABEL";
+
private final static String FACET_COPY_ALL = "copyAllControl";
private final static String FACET_REMOVE_ALL = "removeAllControl";
Modified: trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java
===================================================================
---
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java 2009-02-12
13:14:38 UTC (rev 12636)
+++
trunk/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java 2009-02-12
13:38:38 UTC (rev 12637)
@@ -21,9 +21,9 @@
package org.richfaces.renderkit;
import java.io.IOException;
+import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
@@ -34,8 +34,6 @@
import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
-import javax.faces.component.UISelectMany;
-import javax.faces.component.UISelectOne;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
@@ -52,478 +50,661 @@
import org.ajax4jsf.renderkit.HeaderResourcesRendererBase;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
import org.ajax4jsf.util.SelectUtils;
-import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.richfaces.component.UIPickList;
import org.richfaces.component.util.HtmlUtil;
-import org.richfaces.utils.PickListUtils;
public class PickListRenderer extends HeaderResourcesRendererBase {
- private static final String HIDDEN_SUFFIX = "valueKeeper";
- private static Log logger = LogFactory.getLog(PickListRenderer.class);
- protected static final OrderingComponentRendererBase.ControlsHelper[] SHUTTLE_HELPERS
= PickListControlsHelper.HELPERS;
- protected final static String SHOW_LABELS_ATTRIBUTE_NAME =
"showButtonsLabel";
+ private static Log logger = LogFactory.getLog(PickListRenderer.class);
+
+ private static final String HIDDEN_SUFFIX = "valueKeeper";
+
private static final String MESSAGE_BUNDLE_NAME =
PickListRenderer.class.getPackage().getName() + ".pickList";
+
+ private static final String SHOW_LABELS_ATTRIBUTE_NAME =
"showButtonsLabel";
+
+ private static final OrderingComponentRendererBase.ControlsHelper[] SHUTTLE_HELPERS =
PickListControlsHelper.HELPERS;
+
private boolean isSelectedList;
+
private boolean isAvailableList;
+
+
+ protected List<SelectItem> selectItemsForSelectedList(FacesContext
facesContext, UIComponent uiComponent, List<SelectItem> selectItemList,
List<Object> lookupList) {
+
+ List<SelectItem> selectItemForSelectedValues = new
ArrayList<SelectItem>();
+
+ for (Object lookupItem: lookupList) {
+
+ for (SelectItem selectItem: selectItemList) {
+
+ if(selectItem instanceof SelectItemGroup) {
- protected List<SelectItem> selectItemsForSelectedList(FacesContext
facesContext, UIComponent uiComponent, List<SelectItem> selectItemList,
- Converter converter, List<SelectItem> lookupList) {
- List<SelectItem> selectItemForSelectedValues = new ArrayList<SelectItem>();
+ SelectItem[] items = ((SelectItemGroup) selectItem).getSelectItems();
+ for (int j = 0; j < items.length; j++) {
+ if(lookupItem.equals(items[j].getValue())) {
+ selectItemForSelectedValues.add(items[j]);
+ }
+ }
+
+ } else {
+
+ if (lookupItem.equals(selectItem.getValue())) {
+ selectItemForSelectedValues.add(selectItem);
+ }
+
+ }
+
+ }
+
+ }
+
+ return selectItemForSelectedValues;
+ }
+
+ protected List<Object> getValuesList(UIPickList pickList) {
+
+ List <Object> valuesList = new ArrayList<Object>();
+
+ Object value = pickList.getValue();
- for (Iterator<SelectItem> i2 = lookupList.iterator(); i2.hasNext();) {
- Object value = i2.next();
- for (Iterator<SelectItem> i = selectItemList.iterator(); i.hasNext();) {
- SelectItem selectItem = i.next();
- String itemStrValue = PickListUtils.getConvertedStringValue(facesContext, uiComponent,
converter, selectItem.getValue());
- if (value.equals(itemStrValue)) {
- selectItemForSelectedValues.add(selectItem);
+ if(null == value || "".equals(value)) {
+ return valuesList;
+ }
+
+ if(value.getClass().isArray()) {
+ int len = Array.getLength(value);
+
+ for (int i = 0; i < len; i++) {
+
+ Object localValue = Array.get(value, i);
+ if(localValue != null) {
+ valuesList.add(localValue);
+ }
+
+ }
+
+ return valuesList;
+ } else if(value instanceof List) {
+ List <?> list = (List<?>) value;
+
+ for (Object item: list) {
+ valuesList.add(item);
+ }
+
+ return valuesList;
+
+ } else {
+ throw new IllegalArgumentException("Error: value of UIPickList component is not
of type Array or List");
}
- }
- }
- return selectItemForSelectedValues;
+
}
- protected List selectItemsForAvailableList(FacesContext facesContext, UIComponent
uiComponent, List<SelectItem> selectItemList,
- List<SelectItem> selectItemsForSelectedList, Converter converter) {
- Collection collection = CollectionUtils.subtract(selectItemList,
selectItemsForSelectedList);
- return new ArrayList<SelectItem>(collection);
+ protected List <SelectItem> selectItemsForAvailableList(FacesContext
facesContext, UIComponent uiComponent, List<SelectItem> selectItemList,
+ List<SelectItem> selectItemsForSelectedList) {
+
+ List <SelectItem> processItems = new ArrayList<SelectItem>();
+
+ for(SelectItem item: selectItemList) {
+
+ if(item instanceof SelectItemGroup) {
+
+ SelectItem items[] = ((SelectItemGroup)item).getSelectItems();
+ for (int i = 0; i < items.length; i++) {
+ processItems.add(items[i]);
+ }
+
+ } else {
+ processItems.add(item);
+ }
+
+ }
+
+ for (SelectItem selectItem: selectItemsForSelectedList) {
+ processItems.remove(selectItem);
+ }
+
+ return processItems;
+
}
- protected List getSelectItemsList(FacesContext context, UIComponent component) {
- return SelectUtils.getSelectItems(context, component);
+ protected List <SelectItem> getSelectItemsList(FacesContext context,
UIComponent component) {
+ return SelectUtils.getSelectItems(context, component);
}
public PickListRenderer() {
- super();
+ super();
}
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");
- }
+ 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 <String, String[]> paramValuesMap =
context.getExternalContext().getRequestParameterValuesMap();
+
+ if (picklist.isDisabled()) {
+ return;
+ }
+
+ if (paramValuesMap.containsKey(hiddenClientId)) {
+
+ String[] valuesInline = (String[]) paramValuesMap.get(hiddenClientId);
- String hiddenClientId = picklist.getClientId(context) + HIDDEN_SUFFIX;
- Map paramValuesMap = context.getExternalContext().getRequestParameterValuesMap();
-
- if (picklist.isDisabled()) {
- 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[] {});
- }
+ 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[] {});
+ }
+
}
private static boolean isTrue(Object obj) {
- if (!(obj instanceof Boolean)) {
- return false;
- }
- return ((Boolean) obj).booleanValue();
+
+ 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 {
- throw new ConverterException("Unsupported component class " +
component.getClass().getName());
- }
-
+
+ Object convertedValue = null;
+
+ if(component instanceof UIPickList) {
+ UIPickList pickList = (UIPickList)component;
+ convertedValue = SelectUtils.getConvertedUISelectManyValue(context, pickList,
(String[]) submittedValue);
+ }
+
+ return convertedValue;
}
+
+ private void encodeRows(FacesContext context, UIPickList pickList, boolean source)
throws IOException {
+
+ List <SelectItem> selectItemsList = SelectUtils.getSelectItems(context,
pickList);
- private void encodeRows(FacesContext context, UIComponent component, boolean source)
throws IOException {
- List selectItemsList = SelectUtils.getSelectItems(context, component);
-
- Converter converter = PickListUtils.findUISelectManyConverterFailsafe(context,
component);
- List lookupList = PickListUtils.getValuesList(component, context, converter);
- List selectItemsForSelectedValues = selectItemsForSelectedList(context, component,
selectItemsList, converter, lookupList);
- List selectItemsForAvailableList = selectItemsForAvailableList(context, component,
selectItemsList, selectItemsForSelectedValues, converter);
- isSelectedList = !selectItemsForSelectedValues.isEmpty();
- isAvailableList = !selectItemsForAvailableList.isEmpty();
-
- List selectItemList = null;
- if (source) {
- selectItemList = selectItemsForAvailableList;
- } else {
- selectItemList = selectItemsForSelectedValues;
- }
-
- int i = 0;
- for (Iterator it = selectItemList.iterator(); it.hasNext();) {
- i++;
- SelectItem selectItem = (SelectItem) it.next();
- if (selectItem instanceof SelectItemGroup) {
- SelectItem[] items = ((SelectItemGroup) selectItem).getSelectItems();
- for (int j = 0; j < items.length; j++) {
- encodeItem(context, component, converter, items[i], source, "group:" +
Integer.toString(j));
+ Converter converter = pickList.getConverter();
+
+ List <Object> values = getValuesList(pickList); //
PickListUtils.getValuesList(context, pickList, converter);
+
+ List <SelectItem> selectItemsForSelectedValues =
selectItemsForSelectedList(context, pickList, selectItemsList, values);
+ List <SelectItem> selectItemsForAvailableList =
selectItemsForAvailableList(context, pickList, selectItemsList,
selectItemsForSelectedValues);
+
+ isSelectedList = !selectItemsForSelectedValues.isEmpty();
+ isAvailableList = !selectItemsForAvailableList.isEmpty();
+
+ List <SelectItem> selectItemList = null;
+
+ if (source) {
+ selectItemList = selectItemsForAvailableList;
+ } else {
+ selectItemList = selectItemsForSelectedValues;
}
- } else {
- encodeItem(context, component, converter, selectItem, source, Integer.toString(i));
- }
- }
+
+ if(selectItemList != null) {
+
+ SelectItem [] itemsList = selectItemList.toArray(new
SelectItem[selectItemList.size()]);
+
+ for (int i = 0; i < itemsList.length; i++) {
+
+ SelectItem selectItem = itemsList[i];
+
+ if (selectItem instanceof SelectItemGroup) {
+
+ SelectItem[] items = ((SelectItemGroup) selectItem).getSelectItems();
+ for (int j = 0; j < items.length; j++) {
+ encodeItem(context, pickList, converter, items[j], source, "group:" +
j);
+ }
+
+ } else {
+
+ encodeItem(context, pickList, converter, selectItem, source,
Integer.toString(i));
+
+ }
+
+ }
+
+ }
+
}
public void encodeItem(FacesContext context, UIComponent component, Converter
converter, SelectItem selectItem, boolean source, String suff)
throws IOException {
- ResponseWriter writer = context.getResponseWriter();
- writer.startElement(HTML.TR_ELEMENT, component);
- String clientId = component.getClientId(context);
- if (source) {
- clientId += ":source:";
- }
- String id = clientId + ":" + suff;
- writer.writeAttribute("id", id, null);
+ ResponseWriter writer = context.getResponseWriter();
+ writer.startElement(HTML.TR_ELEMENT, component);
+
+ String clientId = component.getClientId(context);
+
+ if (source) {
+ clientId += ":source:";
+ }
+
+ String id = clientId + ":" + suff;
+
+ writer.writeAttribute("id", id, null);
- StringBuffer rowClassName = new StringBuffer();
- StringBuffer cellClassName = new StringBuffer();
- if (source) {
- rowClassName.append("rich-picklist-source-row");
- cellClassName.append("rich-picklist-source-cell");
- } else {
- rowClassName.append("rich-picklist-target-row");
- cellClassName.append("rich-picklist-target-cell");
- }
+ StringBuffer rowClassName = new StringBuffer();
+ StringBuffer cellClassName = new StringBuffer();
- writer.writeAttribute("class", rowClassName.toString(), null);
- writer.startElement(HTML.td_ELEM, component);
- Object width = component.getAttributes().get("width");
- writer.writeAttribute(HTML.class_ATTRIBUTE, cellClassName, null);
+ if (source) {
+
+ rowClassName.append("rich-picklist-source-row");
+ cellClassName.append("rich-picklist-source-cell");
+
+ } else {
+
+ rowClassName.append("rich-picklist-target-row");
+ cellClassName.append("rich-picklist-target-cell");
+
+ }
- if (width != null) {
- writer.writeAttribute("style", "width: " +
HtmlUtil.qualifySize(width.toString()), null);
- }
+ writer.writeAttribute("class", rowClassName.toString(), null);
+ writer.startElement(HTML.td_ELEM, component);
+ writer.writeAttribute(HTML.class_ATTRIBUTE, cellClassName, null);
+
+ Object width = component.getAttributes().get("width");
+ if (width != null) {
+ writer.writeAttribute("style", "width: " +
HtmlUtil.qualifySize(width.toString()), null);
+ }
- encodeSpacer(context, component, writer);
+ encodeSpacer(context, component, writer);
- boolean escape = isTrue(component.getAttributes().get("escape"));
- if (escape) {
- writer.writeText(selectItem.getLabel(), null);
- } else {
- writer.write(selectItem.getLabel());
- }
+ boolean escape = isTrue(component.getAttributes().get("escape"));
+ if (escape) {
+ writer.writeText(selectItem.getLabel(), null);
+ } else {
+ writer.write(selectItem.getLabel());
+ }
+
+ String itemValue = converter != null ? converter.getAsString(context, component,
selectItem.getValue()) : "";
+
+ encodeItemValue(context, component, writer, id, itemValue);
+
+ writer.endElement(HTML.td_ELEM);
+ writer.endElement(HTML.TR_ELEMENT);
- String itemValue = PickListUtils.getConvertedStringValue(context, component, converter,
selectItem.getValue());
- encodeItemValue(context, component, writer, id, itemValue);
- writer.endElement(HTML.td_ELEM);
- writer.endElement(HTML.TR_ELEMENT);
-
}
- public void encodeTargetRows(FacesContext context, UIComponent component) throws
IOException {
- encodeRows(context, component, false);
+ public void encodeTargetRows(FacesContext context, UIPickList pickList) throws
IOException {
+ encodeRows(context, pickList, false);
}
- public void encodeSourceRows(FacesContext context, UIComponent component) throws
IOException {
- encodeRows(context, component, true);
+ public void encodeSourceRows(FacesContext context, UIPickList pickList) throws
IOException {
+ encodeRows(context, pickList, true);
}
private void encodeItemValue(FacesContext context, UIComponent component,
ResponseWriter writer, String id, String itemValue) throws IOException { //rowKey = i
- writer.startElement(HTML.INPUT_ELEM, component);
- writer.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_HIDDEN, null);
- writer.writeAttribute(HTML.NAME_ATTRIBUTE, id, null);
+ writer.startElement(HTML.INPUT_ELEM, component);
+ writer.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_HIDDEN, null);
+ writer.writeAttribute(HTML.NAME_ATTRIBUTE, id, null);
- StringBuffer value = new StringBuffer();
+ StringBuffer value = new StringBuffer();
- value.append(itemValue);
- writer.writeAttribute(HTML.value_ATTRIBUTE, value.toString(), null);
- writer.writeAttribute(HTML.id_ATTRIBUTE, id + "StateInput", null);
- writer.endElement(HTML.INPUT_ELEM);
+ value.append(itemValue);
+
+ writer.writeAttribute(HTML.value_ATTRIBUTE, value.toString(), null);
+ writer.writeAttribute(HTML.id_ATTRIBUTE, id + "StateInput", null);
+ writer.endElement(HTML.INPUT_ELEM);
+
}
protected void encodeSpacer(FacesContext context, UIComponent component,
ResponseWriter writer) throws IOException {
- writer.startElement(HTML.IMG_ELEMENT, component);
- writer.writeAttribute(HTML.src_ATTRIBUTE,
getResource("/org/richfaces/renderkit/html/images/spacer.gif").getUri(context,
null), null);
- writer.writeAttribute(HTML.alt_ATTRIBUTE, " ", null);
- writer.writeAttribute(HTML.style_ATTRIBUTE, "width:1px;height:1px;", null);
- writer.endElement(HTML.IMG_ELEMENT);
+ writer.startElement(HTML.IMG_ELEMENT, component);
+
+ writer.writeAttribute(HTML.src_ATTRIBUTE,
getResource("/org/richfaces/renderkit/html/images/spacer.gif").getUri(context,
null), null);
+ writer.writeAttribute(HTML.alt_ATTRIBUTE, " ", null);
+ writer.writeAttribute(HTML.style_ATTRIBUTE, "width:1px;height:1px;", null);
+
+ writer.endElement(HTML.IMG_ELEMENT);
}
- public void encodeHiddenField(FacesContext context, UIComponent component) throws
IOException {
- ResponseWriter writer = context.getResponseWriter();
- Converter converter = PickListUtils.findUISelectManyConverterFailsafe(context,
component);
- List lookupList = PickListUtils.getValuesList(component, context, converter);
- encodeHiddenField(context, component, lookupList, writer);
+ public void encodeHiddenField(FacesContext context, UIPickList pickList) throws
IOException {
+
+ Converter converter = pickList.getConverter();
+ List <String> lookupList = new ArrayList<String>();
+
+ if(converter != null) {
+ List <Object> values = getValuesList(pickList);
+ for(Object value: values) {
+ lookupList.add(converter.getAsString(context, pickList, value));
+ }
+ }
+
+ encodeHiddenField(context, pickList, lookupList);
+
}
- private void encodeHiddenField(FacesContext context, UIComponent component, List
lookupList, ResponseWriter writer) throws IOException {
- String hiddenFieldCliendId = component.getClientId(context) + HIDDEN_SUFFIX;
- writer.startElement(HTML.INPUT_ELEM, component);
- writer.writeAttribute(HTML.TYPE_ATTR, "hidden", "type");
- writer.writeAttribute(HTML.id_ATTRIBUTE, hiddenFieldCliendId, "id");
- writer.writeAttribute("name", hiddenFieldCliendId, null);
- StringBuffer sb = new StringBuffer();
- int n = 0;
+ private void encodeHiddenField(FacesContext context, UIComponent component, List
<String> lookupList) throws IOException {
- for (Iterator i = lookupList.iterator(); i.hasNext();) {
- if (n > 0) {
- sb.append(",");
- }
- String value = (String) i.next();
- sb.append(value);
- n++;
- }
+ String hiddenFieldCliendId = component.getClientId(context) + HIDDEN_SUFFIX;
+
+ ResponseWriter writer = context.getResponseWriter();
- writer.writeAttribute(HTML.value_ATTRIBUTE, sb.toString(), null);
- writer.endElement(HTML.INPUT_ELEM);
+ writer.startElement(HTML.INPUT_ELEM, component);
+ writer.writeAttribute(HTML.TYPE_ATTR, "hidden", "type");
+ writer.writeAttribute(HTML.id_ATTRIBUTE, hiddenFieldCliendId, "id");
+ writer.writeAttribute("name", hiddenFieldCliendId, null);
+
+ StringBuffer sb = new StringBuffer();
+
+ int n = 0;
+
+ for (Iterator <String> i = lookupList.iterator(); i.hasNext();) {
+
+ if (n > 0) {
+ sb.append(",");
+ }
+
+ String value = i.next();
+ sb.append(value);
+ n++;
+
+ }
+
+ writer.writeAttribute(HTML.value_ATTRIBUTE, sb.toString(), null);
+ writer.endElement(HTML.INPUT_ELEM);
+
}
protected Class<? extends UIComponent> getComponentClass() {
- return UIPickList.class;
+ return UIPickList.class;
}
public String getAsEventHandler(FacesContext context, UIComponent component, String
attributeName) {
- String event = (String) component.getAttributes().get(attributeName);
- ScriptString result = JSReference.NULL;
+
+ String event = (String) component.getAttributes().get(attributeName);
+ ScriptString result = JSReference.NULL;
- if (event != null) {
- event = event.trim();
- if (event.length() != 0) {
- JSFunctionDefinition function = new JSFunctionDefinition();
- function.addParameter("event");
- function.addToBody(event);
- result = function;
- }
- }
+ if (event != null) {
+
+ event = event.trim();
+
+ if (event.length() != 0) {
+
+ JSFunctionDefinition function = new JSFunctionDefinition();
+ function.addParameter("event");
+ function.addToBody(event);
+
+ result = function;
+ }
+
+ }
- return ScriptUtils.toScript(result);
+ return ScriptUtils.toScript(result);
+
}
public String getColumnClassesAsJSArray(FacesContext context, UIComponent component)
{
- return ScriptUtils.toScript(getClassesAsList(context, component,
"columnClasses"));
+ return ScriptUtils.toScript(getClassesAsList(context, component,
"columnClasses"));
}
public String getRowClassesAsJSArray(FacesContext context, UIComponent component) {
- return ScriptUtils.toScript(getClassesAsList(context, component,
"rowClasses"));
+ return ScriptUtils.toScript(getClassesAsList(context, component,
"rowClasses"));
}
- protected List getClassesAsList(FacesContext context, UIComponent component, String
attr) {
- String value = (String) ((UIComponent) component).getAttributes().get(attr);
- if (value != null && (value.length() != 0)) {
- return Arrays.asList(value.split(","));
- }
- return null;
+ protected List <String> getClassesAsList(FacesContext context, UIComponent
component, String attr) {
+ String value = (String) ((UIComponent) component).getAttributes().get(attr);
+
+ if (value != null && (value.length() != 0)) {
+ return Arrays.asList(value.split(","));
+ }
+
+ return null;
}
public void encodePickListControlsFacets(FacesContext context, UIComponent component)
throws IOException {
- String clientId = component.getClientId(context);
- ResponseWriter writer = context.getResponseWriter();
- boolean enable = false;
+ String clientId = component.getClientId(context);
+ boolean enable = false;
+
+ ResponseWriter writer = context.getResponseWriter();
+
- for (int i = 0; i < SHUTTLE_HELPERS.length; i++) {
- OrderingComponentRendererBase.ControlsHelper helper = SHUTTLE_HELPERS[i];
- boolean isDisabled =
helper.getButtonStyleClass().equals(PickListControlsHelper.DISABLED_STYLE_PREF);
- if
(helper.getBundlePropertyName().equals(PickListControlsHelper.BUNDLE_REMOVE_ALL_LABEL)) {
- enable = isSelectedList;
- if(enable != isDisabled) {
- enable = true;
- } else {
- enable = false;
- }
- } else if
(helper.getBundlePropertyName().equals(PickListControlsHelper.BUNDLE_COPY_ALL_LABEL)) {
- enable = isAvailableList;
- if(enable != isDisabled) {
- enable = true;
- } else {
- enable = false;
- }
- } else {
- if (helper.getButtonStyleClass().equals(PickListControlsHelper.DISABLED_STYLE_PREF)) {
- enable = true;
- } else {
- enable = false;
- }
- }
- encodeControlFacet(context, component, SHUTTLE_HELPERS[i], clientId, writer, enable,
"rich-list-picklist-button", " rich-picklist-control");
- }
+ for (int i = 0; i < SHUTTLE_HELPERS.length; i++) {
+
+ OrderingComponentRendererBase.ControlsHelper helper = SHUTTLE_HELPERS[i];
+
+ boolean isDisabled =
helper.getButtonStyleClass().equals(PickListControlsHelper.DISABLED_STYLE_PREF);
+
+ if
(helper.getBundlePropertyName().equals(PickListControlsHelper.BUNDLE_REMOVE_ALL_LABEL)) {
+
+ enable = isSelectedList;
+ enable = enable != isDisabled ? true : false;
+
+ } else if
(helper.getBundlePropertyName().equals(PickListControlsHelper.BUNDLE_COPY_ALL_LABEL)) {
+
+ enable = isAvailableList;
+ enable = enable != isDisabled ? true : false;
+
+ } else {
+
+ if
(helper.getButtonStyleClass().equals(PickListControlsHelper.DISABLED_STYLE_PREF)) {
+ enable = true;
+ } else {
+ enable = false;
+ }
+
+ }
+
+ encodeControlFacet(context, component, SHUTTLE_HELPERS[i], clientId, writer,
enable, "rich-list-picklist-button", " rich-picklist-control");
+ }
+
}
protected void encodeControlFacet(FacesContext context, UIComponent component,
OrderingComponentRendererBase.ControlsHelper helper, String clientId,
- ResponseWriter writer, boolean enabled, String baseStyle, String baseControlStyle)
throws IOException {
- renderDefaultControl(context, component, writer, helper, clientId, enabled, baseStyle,
baseControlStyle);
+ ResponseWriter writer, boolean enabled, String baseStyle, String baseControlStyle)
throws IOException {
+
+ renderDefaultControl(context, component, writer, helper, clientId, enabled,
baseStyle, baseControlStyle);
+
}
protected ClassLoader getCurrentLoader(Object fallbackClass) {
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
- if (loader == null) {
+
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+
+ if (loader == null) {
loader = fallbackClass.getClass().getClassLoader();
}
+
return loader;
+
}
protected String findLocalisedLabel(FacesContext context, String propertyId, String
bundleName) {
- String label = null;
- Locale locale = null;
- String userBundleName = null;
- ResourceBundle bundle = null;
+ String label = null;
+ Locale locale = null;
+ String userBundleName = null;
+ ResourceBundle bundle = null;
- UIViewRoot viewRoot = context.getViewRoot();
- if ( viewRoot != null) {
- locale = viewRoot.getLocale();
- } else {
- locale = Locale.getDefault();
- }
+ UIViewRoot viewRoot = context.getViewRoot();
+ if ( viewRoot != null) {
+ locale = viewRoot.getLocale();
+ } else {
+ locale = Locale.getDefault();
+ }
- if(locale != null) {
- try {
- if( null != (userBundleName = context.getApplication().getMessageBundle())) {
- bundle = ResourceBundle.getBundle(userBundleName,locale,
getCurrentLoader(userBundleName));
- if (bundle != null) {
- label = bundle.getString(propertyId);
- }
- }
- } catch (MissingResourceException e) {
- if (logger.isDebugEnabled()) {
- logger.debug("Can't find bundle properties file " + userBundleName +
" " + locale.getLanguage() + " " + locale.getCountry()) ;
- }
- }
+ if(locale != null) {
+
+ try {
+
+ if( null != (userBundleName = context.getApplication().getMessageBundle())) {
+ bundle = ResourceBundle.getBundle(userBundleName,locale,
getCurrentLoader(userBundleName));
+
+ if (bundle != null) {
+ label = bundle.getString(propertyId);
+ }
+ }
+
+ } catch (MissingResourceException e) {
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Can't find bundle properties file " + userBundleName +
" " + locale.getLanguage() + " " + locale.getCountry()) ;
+ }
+
+ }
+
if(label == null && bundleName != null) {
- try {
- bundle = ResourceBundle.getBundle(bundleName ,locale, getCurrentLoader(bundleName));
- if (bundle != null) {
- label = bundle.getString(propertyId);
- }
- } catch (MissingResourceException e) {
- if (logger.isDebugEnabled()) {
- logger.debug("Can't find bundle properties file " + bundleName +
" " + locale.getLanguage() + " " + locale.getCountry()) ;
+
+ try {
+
+ bundle = ResourceBundle.getBundle(bundleName ,locale, getCurrentLoader(bundleName));
+ if (bundle != null) {
+ label = bundle.getString(propertyId);
}
-
- }
- }
- }
+
+ } catch (MissingResourceException e) {
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Can't find bundle properties file " + bundleName +
" " + locale.getLanguage() + " " + locale.getCountry()) ;
+ }
+
+ }
+ }
+
+ }
- return label;
+ return label;
}
protected void renderDefaultControl(FacesContext context, UIComponent component,
ResponseWriter writer,
- OrderingComponentRendererBase.ControlsHelper helper, String clientId, boolean enabled,
String baseStyle,
- String baseControlStyle) throws IOException {
- UIComponent facet = component.getFacet(getAltAttribbute(helper));
- boolean useFacet = (facet != null && facet.isRendered());
+ OrderingComponentRendererBase.ControlsHelper helper, String clientId, boolean
enabled, String baseStyle,
+ String baseControlStyle) throws IOException {
+
+ UIComponent facet = component.getFacet(getAltAttribbute(helper));
+
+ boolean useFacet = (facet != null && facet.isRendered());
- String customEvent = null;
- Map attributes = component.getAttributes();
+ String customEvent = null;
+
+ Map<String,Object> attributes = component.getAttributes();
- if (helper.customEvent != null) {
- customEvent = (String) attributes.get(helper.customEvent);
- }
+ if (helper.customEvent != null) {
+ customEvent = (String) attributes.get(helper.customEvent);
+ }
- String styleFromAttribute = (String) attributes.get(helper.styleFromAttribute);
- String baseStyleLight = baseStyle.concat("-light");
- String baseStylePress = baseStyle.concat("-press");
- String currentStyle = baseControlStyle + helper.getStyleClassName();
+ String styleFromAttribute = (String) attributes.get(helper.styleFromAttribute);
+ String baseStyleLight = baseStyle.concat("-light");
+ String baseStylePress = baseStyle.concat("-press");
+ String currentStyle = baseControlStyle + helper.getStyleClassName();
- if (styleFromAttribute != null) {
- currentStyle = styleFromAttribute.concat(currentStyle);
- }
+ if (styleFromAttribute != null) {
+ currentStyle = styleFromAttribute.concat(currentStyle);
+ }
+
+ String controlId = clientId + helper.getIdSuffix();
+ writer.startElement(HTML.DIV_ELEM, component);
+ writer.writeAttribute(HTML.id_ATTRIBUTE, controlId, null); // FIXME:
+ writer.writeAttribute(HTML.class_ATTRIBUTE, currentStyle, null);
+
+ String style = enabled ? "display:block;" : "display:none;";
+
+ writer.writeAttribute(HTML.style_ATTRIBUTE, style, null);
- writer.startElement(HTML.DIV_ELEM, component);
- String controlId = clientId + helper.getIdSuffix();
- writer.writeAttribute(HTML.id_ATTRIBUTE, controlId, null); // FIXME:
- writer.writeAttribute(HTML.class_ATTRIBUTE, currentStyle, null);
- String style = null;
+ if (!useFacet) {
+
+ writer.startElement(HTML.DIV_ELEM, component);
+ writer.writeAttribute(HTML.class_ATTRIBUTE, baseStyle + helper.getButtonStyleClass(),
null);
- if (enabled) {
- style = "display:block;";
- } else {
- style = "display:none;";
- }
+ if (helper.enable) {
+ writer.writeAttribute(HTML.onmouseover_ATTRIBUTE, "this.className='" +
baseStyleLight + "'", null);
+ writer.writeAttribute(HTML.onmousedown_ATTRIBUTE, "this.className='" +
baseStylePress + "'", null);
+ writer.writeAttribute(HTML.onmouseup_ATTRIBUTE, "this.className='" +
baseStyle + "'", null);
+ writer.writeAttribute(HTML.onmouseout_ATTRIBUTE, "this.className='" +
baseStyle + "'", null);
+ }
- writer.writeAttribute(HTML.style_ATTRIBUTE, style, null);
+ if (!helper.enable) {
+ //writer.writeAttribute(HTML.DISABLED_ATTR, "disabled", null);
+ //writer.writeAttribute(HTML.class_ATTRIBUTE, baseStyle + "-a-disabled",
null);
+ //writer.startElement(HTML.a_ELEMENT, component);
+ } else {
+ writer.startElement(HTML.a_ELEMENT, component);
+ writer.writeAttribute(HTML.id_ATTRIBUTE, controlId + "link", null); //
FIXME:
+ writer.writeAttribute(HTML.onclick_ATTRIBUTE, "return false;", null);
+
+ writer.writeAttribute(HTML.class_ATTRIBUTE, baseStyle + "-selection",
null);
+ writer.writeAttribute(HTML.onblur_ATTRIBUTE,
"Richfaces.Control.onblur(this);", null);
+ writer.writeAttribute(HTML.onfocus_ATTRIBUTE,
"Richfaces.Control.onfocus(this);", null);
+ }
- if (!useFacet) {
- writer.startElement(HTML.DIV_ELEM, component);
- writer.writeAttribute(HTML.class_ATTRIBUTE, baseStyle +
helper.getButtonStyleClass(), null);
+ writer.startElement(HTML.DIV_ELEM, component);
+ writer.writeAttribute(HTML.class_ATTRIBUTE, baseStyle + "-content", null);
+ }
- if (helper.enable) {
- writer.writeAttribute(HTML.onmouseover_ATTRIBUTE, "this.className='" +
baseStyleLight + "'", null);
- writer.writeAttribute(HTML.onmousedown_ATTRIBUTE, "this.className='" +
baseStylePress + "'", null);
- writer.writeAttribute(HTML.onmouseup_ATTRIBUTE, "this.className='" +
baseStyle + "'", null);
- writer.writeAttribute(HTML.onmouseout_ATTRIBUTE, "this.className='" +
baseStyle + "'", null);
- }
+ if (customEvent != null) {
+ writer.writeAttribute(HTML.onclick_ATTRIBUTE, customEvent, null);
+ }
- if (!helper.enable) {
- //writer.writeAttribute(HTML.DISABLED_ATTR, "disabled", null);
- //writer.writeAttribute(HTML.class_ATTRIBUTE, baseStyle + "-a-disabled",
null);
- //writer.startElement(HTML.a_ELEMENT, component);
- } else {
- writer.startElement(HTML.a_ELEMENT, component);
- writer.writeAttribute(HTML.id_ATTRIBUTE, controlId + "link", null); //
FIXME:
- writer.writeAttribute(HTML.onclick_ATTRIBUTE, "return false;", null);
+ if (useFacet) {
+ renderChild(context, facet);
+ } else {
- writer.writeAttribute(HTML.class_ATTRIBUTE, baseStyle + "-selection", null);
- writer.writeAttribute(HTML.onblur_ATTRIBUTE,
"Richfaces.Control.onblur(this);", null);
- writer.writeAttribute(HTML.onfocus_ATTRIBUTE,
"Richfaces.Control.onfocus(this);", null);
- }
+ writer.startElement(HTML.IMG_ELEMENT, component);
+ writer.writeAttribute(HTML.class_ATTRIBUTE, "rich-picklist-control-img",
null);
+ writer.writeAttribute(HTML.alt_ATTRIBUTE,
component.getAttributes().get(helper.getTitle()), null);
+ writer.writeAttribute(HTML.src_ATTRIBUTE,
getResource(helper.getImageURI()).getUri(context, null), null);
+ writer.endElement(HTML.IMG_ELEMENT);
- writer.startElement(HTML.DIV_ELEM, component);
- writer.writeAttribute(HTML.class_ATTRIBUTE, baseStyle + "-content",
null);
- }
+ if (getUtils().isBooleanAttribute(component, SHOW_LABELS_ATTRIBUTE_NAME)) {
+ String label = (String) attributes.get(helper.getLabelAttributeName());
+ if (label == null || label.equals("")) {
+ label = findLocalisedLabel(context, helper.getBundlePropertyName(),
MESSAGE_BUNDLE_NAME);
+ }
- if (customEvent != null) {
- writer.writeAttribute(HTML.onclick_ATTRIBUTE, customEvent, null);
- }
-
- if (useFacet) {
- renderChild(context, facet);
- } else {
- writer.startElement(HTML.IMG_ELEMENT, component);
- writer.writeAttribute(HTML.class_ATTRIBUTE, "rich-picklist-control-img",
null);
- writer.writeAttribute(HTML.alt_ATTRIBUTE,
component.getAttributes().get(helper.getTitle()), null);
- writer.writeAttribute(HTML.src_ATTRIBUTE,
getResource(helper.getImageURI()).getUri(context, null), null);
- writer.endElement(HTML.IMG_ELEMENT);
-
- if (getUtils().isBooleanAttribute(component, SHOW_LABELS_ATTRIBUTE_NAME)) {
- String label = (String) attributes.get(helper.getLabelAttributeName());
- if (label == null || label.equals("")) {
- label = findLocalisedLabel(context, helper.getBundlePropertyName(),
MESSAGE_BUNDLE_NAME);
+ if (label == null || label.equals("")) {
+ label = helper.getDefaultText();
+ }
+
+ writer.write(label);
+ }
}
- if (label == null || label.equals("")) {
- label = helper.getDefaultText();
+ if (!useFacet) {
+ writer.endElement(HTML.DIV_ELEM);
+
+ if (helper.enable) {
+ writer.endElement(HTML.a_ELEMENT);
+ }
+
+ writer.endElement(HTML.DIV_ELEM);
}
- writer.write(label);
- }
+
+ writer.endElement(HTML.DIV_ELEM);
}
- if (!useFacet) {
- writer.endElement(HTML.DIV_ELEM);
- if (helper.enable) {
- writer.endElement(HTML.a_ELEMENT);
- }
- writer.endElement(HTML.DIV_ELEM);
- }
- writer.endElement(HTML.DIV_ELEM);
- }
-
private String getAltAttribbute(
OrderingComponentRendererBase.ControlsHelper helper) {
+
return helper.getFacetName() != null ? helper.getFacetName() : " ";
+
}
public void reRenderScript(FacesContext context, UIComponent component) throws
IOException {
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
- Set <String> areas = ajaxContext.getAjaxRenderedAreas();
- String clientId = component.getClientId(context);
- if (ajaxContext.isAjaxRequest() && areas.contains(clientId)){
- areas.add(clientId + "script");
+
+ AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
+
+ Set <String> areas = ajaxContext.getAjaxRenderedAreas();
+ String clientId = component.getClientId(context);
+
+ if (ajaxContext.isAjaxRequest() && areas.contains(clientId)){
+ areas.add(clientId + "script");
}
+
}
+
}