/**
   * Sets internal model for this combo. If comboModelField is set, this method is useless (combo
   * model is automatically read from YModel).
   *
   * @param data the collection of POJOs
   */
  public void setComboModel(Collection data) {
    this.originalComboModel = data;
    int i = 0;
    if (addEmpty) {
      items = new YListItem[data.size() + 1];
      items[0] = emptyItem;
      i = 1;
    } else {
      items = new YListItem[data.size()];
    }
    Iterator it = data.iterator();
    while (it.hasNext()) {
      YListItem comboItem = new YListItem();
      if (formatter != null) {
        comboItem.setFormatter(formatter);
      }
      comboItem.setItemModel(it.next());
      items[i++] = comboItem;
    }
    if (sort) {
      Arrays.sort(items, YCoreToolkit.LEXICAL_COMPARATOR);
    }

    super.setModel(new DefaultComboBoxModel(items));
  }
 /**
  * Gets selected item for view model.
  *
  * @see #setModelField(String)
  * @return the value or null if no item is selected
  */
 public Object getModelValue() {
   if (!forceListItem) {
     return this.editorField.getText();
   } else {
     Object item = super.getSelectedItem();
     if (item == null || item == emptyItem || !(item instanceof YListItem)) {
       return null;
     } else {
       YListItem comboItem = (YListItem) super.getSelectedItem();
       if (modelField == null) {
         return comboItem.getItemModel();
       } else {
         return YCoreToolkit.getBeanValue(comboItem.getItemModel(), modelField);
       }
     }
   }
 }
 /**
  * Sets model value from view model. Finds matching item from the combo box and sets it selected.
  *
  * @param obj the view model value
  * @see #setModelField(String)
  */
 public void setModelValue(Object obj) throws YException {
   this.settingModelValue = true;
   try {
     if (obj == null) {
       this.setSelectedIndex(-1);
     } else {
       if (!forceListItem) {
         this.editorField.setText(obj.toString());
       } else {
         // searching corresponding item in list:
         if (items == null) {
           throw new YException("Combo model for YComboBox is not set.");
         } else {
           for (int i = 0; i < this.items.length; i++) {
             YListItem item = (YListItem) items[i];
             if (!(item == emptyItem)) {
               if (this.modelField == null) {
                 if (obj.equals(item.getItemModel())) {
                   this.setSelectedItem(item);
                 }
               } else {
                 Object value = YCoreToolkit.getBeanValue(item.getItemModel(), modelField);
                 if (obj.equals(value)) {
                   this.setSelectedItem(item);
                 }
               }
             }
           }
         }
       }
     }
     if (forceListItem && getSelectedItem() != null) {
       // this fixes caret position in the editor...
       this.editorField.setText(getSelectedItem().toString());
       this.editorField.setCaretPosition(0);
     }
   } finally {
     settingModelValue = false;
   }
 }