package org.activityinfo.geoadmin.merge;
import java.util.List;
import javax.swing.tree.TreePath;
import org.activityinfo.geoadmin.ImportSource;
import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
import com.google.common.collect.Lists;
public class MergeTreeTableModel extends DefaultTreeTableModel {
public static final int ACTION_COLUMN = 2;
private List<TreeColumn> columns = Lists.newArrayList();
public MergeTreeTableModel(MergeNode root, final ImportSource source) {
super(root);
columns.add(new TreeColumn("Entity") {
@Override
public Object getValue(MergeNode node) {
if (node.getEntity() == null) {
return null;
}
return node.getEntity().getName();
}
});
columns.add(new TreeColumn("Entity Code") {
@Override
public Object getValue(MergeNode node) {
if (node.getEntity() == null) {
return null;
}
return node.getEntity().getCode();
}
});
columns.add(new TreeColumn("Action") {
@Override
public Object getValue(MergeNode node) {
return node.getAction();
}
@Override
public void setValue(MergeNode node, Object value) {
node.setAction((MergeAction) value);
}
});
for (int ai = 0; ai != source.getAttributeCount(); ++ai) {
final int attributeIndex = ai;
columns.add(new TreeColumn(source.getAttributeNames()[ai]) {
@Override
public Object getValue(MergeNode node) {
if (node.getFeature() == null) {
return null;
} else {
return node.getFeature().getAttributeValue(
attributeIndex);
}
}
});
}
}
@Override
public int getColumnCount() {
return columns.size();
}
@Override
public String getColumnName(int column) {
return columns.get(column).getName();
}
@Override
public boolean isCellEditable(Object node, int column) {
MergeNode mergeNode = (MergeNode) node;
return mergeNode.isLeaf() && column == ACTION_COLUMN;
}
@Override
public Object getValueAt(Object node, int column) {
return columns.get(column).getValue((MergeNode) node);
}
@Override
public void setValueAt(Object value, Object node, int column) {
columns.get(column).setValue((MergeNode) node, value);
super.setValueAt(value, node, column);
}
public void fireNodeChanged(MergeNode node) {
modelSupport.firePathChanged(new TreePath(getPathToRoot(node)));
}
}