package de.gaalop.gui;
import de.gaalop.Plugin;
import javax.swing.*;
import javax.swing.event.ListDataListener;
import java.util.*;
/**
* ComboBox Model
*/
public class PluginModel<T extends Plugin> implements ComboBoxModel {
private List<T> plugins;
private int selected = 0;
private Class<T> clazz;
public PluginModel(Class<T> clazz, Set<T> pluginSet) {
plugins = new ArrayList<T>(pluginSet);
Collections.sort(plugins, PluginComparator.INSTANCE);
this.clazz = clazz;
}
@Override
public void setSelectedItem(Object anItem) {
T ourItem = clazz.cast(anItem);
selected = plugins.indexOf(ourItem);
}
@Override
public Object getSelectedItem() {
if (selected < 0 || selected >= plugins.size()) {
return null;
} else {
return plugins.get(selected);
}
}
@Override
public int getSize() {
return plugins.size();
}
@Override
public Object getElementAt(int index) {
return plugins.get(index);
}
@Override
public void addListDataListener(ListDataListener l) {
}
@Override
public void removeListDataListener(ListDataListener l) {
}
}
enum PluginComparator implements Comparator<Plugin> {
INSTANCE;
@Override
public int compare(Plugin o1, Plugin o2) {
return o1.getName().compareToIgnoreCase(o2.getName());
}
}