public static List<ClientSelectItem> getClientSelectItems(
     FacesContext facesContext,
     AbstractSelectManyComponent select,
     Iterator<SelectItem> selectItems) {
   List<ClientSelectItem> clientSelectItems = new ArrayList<ClientSelectItem>();
   Object object = select.getValue();
   List values;
   if (object == null) {
     values = new ArrayList();
   } else if (object instanceof List) {
     values = (List) object;
   } else if (object instanceof Object[]) {
     values = Arrays.asList((Object[]) object);
   } else {
     throw new IllegalArgumentException(
         "Value expression must evaluate to either a List or Object[]");
   }
   int count = values.size();
   // TODO: Deal with SelectItemGroups
   while (selectItems.hasNext()) {
     SelectItem selectItem = selectItems.next();
     boolean selected;
     int sortOrder;
     if (values.contains(
         selectItem
             .getValue())) { // TODO: this requires value#equals() to be overridden. Redo with
                             // comparators?
       selected = true;
       sortOrder = values.indexOf(selectItem.getValue());
     } else {
       selected = false;
       sortOrder = count;
     }
     ClientSelectItem clientSelectItem =
         SelectHelper.generateClientSelectItem(
             facesContext, select, selectItem, sortOrder, selected);
     clientSelectItems.add(clientSelectItem);
     if (!selected) {
       count++;
     }
   }
   Collections.sort(clientSelectItems, clientSelectItemComparator);
   return clientSelectItems;
 }
 public void encodeItems(
     FacesContext facesContext, UIComponent component, List<ClientSelectItem> clientSelectItems)
     throws IOException {
   SelectHelper.encodeItems(
       facesContext, component, clientSelectItems, HtmlConstants.SPAN_ELEM, ITEM_CSS);
 }
 public String getSelectInputLabel(FacesContext facesContext, UIComponent component) {
   return SelectHelper.getSelectInputLabel(facesContext, component);
 }
 public List<ClientSelectItem> getConvertedSelectItems(
     FacesContext facesContext, UIComponent component) {
   return SelectHelper.getConvertedSelectItems(facesContext, component);
 }