package au.com.acpfg.xml.query;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.ListModel;
import javax.swing.SwingConstants;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import org.knime.core.node.defaultnodesettings.SettingsModelStringArray;
import au.com.acpfg.xml.query.XMLQueryEntry.ResultsType;
/**
* Stores the list of XMLQueryEntry objects to be displayed in the configure dialog
*
* @author andrew.cassin
*
*/
public class MyQueryEntryListModel implements ListModel {
private ArrayList<XMLQueryEntry> m_items;
private Vector<ListDataListener> m_listeners;
public MyQueryEntryListModel() {
m_items = new ArrayList<XMLQueryEntry>();
m_listeners = new Vector<ListDataListener>();
}
public MyQueryEntryListModel(String[] xqe_serialised_array) {
m_items = new ArrayList<XMLQueryEntry>();
for (String xqes : xqe_serialised_array) {
XMLQueryEntry xqe = new XMLQueryEntry(xqes);
m_items.add(xqe);
}
m_listeners = new Vector<ListDataListener>();
}
protected void signalAppend(Object o) {
int last_item_idx = getSize() - 1;
ListDataEvent ev = new ListDataEvent(o, ListDataEvent.INTERVAL_ADDED, last_item_idx, last_item_idx);
for (ListDataListener l : m_listeners) {
l.intervalAdded(ev);
}
}
protected void signalRemove(XMLQueryEntry xqe, int idx) {
ListDataEvent ev = new ListDataEvent(xqe, ListDataEvent.INTERVAL_REMOVED, idx, idx+1);
for (ListDataListener l : m_listeners) {
l.intervalRemoved(ev);
}
}
public void add(XMLQueryEntry xqe) {
assert(xqe != null);
m_items.add(xqe);
signalAppend(xqe);
}
@Override
public void addListDataListener(ListDataListener arg0) {
m_listeners.add(arg0);
}
@Override
public Object getElementAt(int index) {
return m_items.get(index);
}
@Override
public int getSize() {
return m_items.size();
}
public void remove(XMLQueryEntry xqe) {
assert(xqe != null);
int idx = m_items.indexOf(xqe);
if (idx < 0)
return;
m_items.remove(idx);
signalRemove(xqe, idx);
}
/**
* Computes a SettingsModel which is suitable for the list of queries set by the user, with
* the specified SettingsModel key (which must not be <code>null</code>).
* @param key
* @return
*/
public String[] getStringArrayValue() {
String[] vec = new String[getSize()];
for (int i=0; i<vec.length; i++) {
vec[i] = getElementAt(i).toString();
}
return vec;
}
@Override
public void removeListDataListener(ListDataListener arg0) {
m_listeners.remove(arg0);
}
}