package com.towel.swing.combo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.ComboBoxModel;
import javax.swing.event.ListDataListener;
import com.towel.bean.DefaultFormatter;
import com.towel.bean.Formatter;
public class ObjectComboBoxModel<T> implements ComboBoxModel {
private List<T> data;
private T selectedItem;
private Formatter formatter;
private Map<Object, T> map = new HashMap<Object, T>();
public ObjectComboBoxModel() {
data = new ArrayList<T>();
formatter = new DefaultFormatter();
}
public void setFormatter(Formatter formatter) {
if (formatter == null) {
System.out
.println("Formatter can't be null. A default one will be set.");
formatter = new DefaultFormatter();
}
this.formatter = formatter;
map.clear();
for (T t : data)
map.put(formatter.format(t), t);
}
public void add(T obj) {
data.add(obj);
map.put(formatter.format(obj), obj);
}
public void clear() {
data.clear();
map.clear();
}
public void setData(List<T> list) {
data = list;
map.clear();
for (T t : data)
map.put(formatter.format(t), t);
}
public T getSelectedObject() {
return selectedItem;
}
@Override
public Object getSelectedItem() {
return formatter.format(selectedItem);
}
@Override
public void setSelectedItem(Object arg0) {
selectedItem = map.get(arg0);
}
public void setSelectedObject(T obj) {
selectedItem = obj;
}
@Override
public Object getElementAt(int arg0) {
return formatter.format(data.get(arg0));
}
@Override
public int getSize() {
return data.size();
}
@Override
public void addListDataListener(ListDataListener l) {
}
@Override
public void removeListDataListener(ListDataListener l) {
}
}