package eu.doppel_helix.netbeans.mantisintegration.query; import biz.futureware.mantisconnect.ObjectRef; import eu.doppel_helix.netbeans.mantisintegration.issue.MantisIssue; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.math.BigInteger; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.SwingUtilities; import javax.swing.table.AbstractTableModel; import org.openide.util.WeakListeners; public class QueryListModel extends AbstractTableModel implements PropertyChangeListener { private List<MantisIssue> issues = new ArrayList<>(); private final Map<BigInteger,PropertyChangeListener> listener = new HashMap<>(); public void setIssues(Collection<MantisIssue> issues) { assert SwingUtilities.isEventDispatchThread(); for(MantisIssue mi: this.issues) { PropertyChangeListener pcl = listener.get(mi.getId()); if(pcl != null) { mi.removePropertyChangeListener(pcl); } } this.issues = new ArrayList<>(issues); for (MantisIssue mi : this.issues) { PropertyChangeListener pcl = WeakListeners.propertyChange(this, mi); mi.addPropertyChangeListener(pcl); } fireTableDataChanged(); } public MantisIssue getIssue(int pos) { return issues.get(pos); } @Override public int getRowCount() { return issues.size(); } @Override public int getColumnCount() { return 9; } @Override public Class<?> getColumnClass(int columnIndex) { switch(columnIndex) { case 0: return BigInteger.class; case 1: return Integer.class; case 2: return String.class; case 3: return ObjectRef.class; case 4: return ObjectRef.class; case 5: return ObjectRef.class; case 6: return Calendar.class; case 7: return String.class; case 8: return MantisIssue.class; default: return null; } } @Override public Object getValueAt(int rowIndex, int columnIndex) { MantisIssue mi = getIssue(rowIndex); switch(columnIndex) { case 0: return mi.getId(); case 1: return mi.getNoteCount(); case 2: return mi.getCategory(); case 3: return mi.getSeverity(); case 4: return mi.getPriority(); case 5: return mi.getStatus(); case 6: return mi.getLast_updated(); case 7: return mi.getSummary(); case 8: return mi; default: return null; } } @Override public void propertyChange(PropertyChangeEvent evt) { this.fireTableDataChanged(); } }