// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.fixAddresses.gui; import static org.openstreetmap.josm.tools.I18n.tr; import static org.openstreetmap.josm.tools.I18n.trc; import java.util.Collections; import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer; import org.openstreetmap.josm.plugins.fixAddresses.IOSMEntity; import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress; /** * Provides a table model to show unresolved addresses. * * @author Oliver Wieland <oliver.wieland@online.de> * */ public class UnresolvedAddressesTableModel extends AddressEditTableModel { private static final int NUMBER_OF_COLUMNS = 5; private static final String[] COLUMN_NAMES = new String[] {tr("Street"), tr("Number"), trc("address", "City" /* fix #8140 */), tr("Postcode"), tr("Name") }; private static final Class<?>[] COLUMN_CLASSES = new Class<?>[] { String.class, String.class, String.class, String.class, String.class }; /** * */ private static final long serialVersionUID = 424009321818130586L; public UnresolvedAddressesTableModel(AddressEditContainer addressContainer) { super(addressContainer); } @Override public int getColumnCount() { return NUMBER_OF_COLUMNS; } @Override public String getColumnName(int column) { return COLUMN_NAMES[column]; } @Override public int getRowCount() { if (addressContainer == null || addressContainer.getUnresolvedAddresses() == null) { return 0; } return addressContainer.getNumberOfUnresolvedAddresses(); } @Override public Object getValueAt(int row, int column) { OSMAddress aNode = (OSMAddress) getEntityOfRow(row); if (aNode == null) { return null; } switch (column) { case 0: return aNode.getStreetName(); case 1: return aNode.getHouseNumber(); case 2: return aNode.getCity(); case 3: return aNode.getPostalCode(); case 4: return aNode.getName(); default: throw new RuntimeException("Invalid column index: " + column); } } @Override public Class<?> getColumnClass(int arg0) { return COLUMN_CLASSES[arg0]; } @Override public boolean isCellEditable(int row, int column) { return false; } @Override public IOSMEntity getEntityOfRow(int row) { if (addressContainer == null || addressContainer.getUnresolvedAddresses() == null) { return null; } if (row < 0 || row >= addressContainer.getNumberOfUnresolvedAddresses()) { return null; } return addressContainer.getUnresolvedAddresses().get(row); } @Override public int getRowOfEntity(IOSMEntity entity) { if (addressContainer == null || addressContainer.getUnresolvedAddresses() == null) { return -1; } return addressContainer.getUnresolvedAddresses().indexOf(entity); } @Override protected void sortByColumn(int column, boolean ascending) { if (addressContainer.getNumberOfUnresolvedAddresses() == 0) return; Collections.sort(addressContainer.getUnresolvedAddresses(), new UnresolvedAddressModelSorter(column, ascending)); } /** * Internal class StreetModelSorter. */ static class UnresolvedAddressModelSorter extends ColumnSorter<OSMAddress> { UnresolvedAddressModelSorter(int column, boolean asc) { super(column, asc); } @Override public int compare(OSMAddress arg0, OSMAddress arg1) { int cc = 0; switch (getColumn()) { case 0: cc = arg0.getStreetName().compareTo(arg1.getStreetName()); break; case 1: cc = arg0.getHouseNumber().compareTo(arg1.getHouseNumber()); break; case 2: cc = arg0.getCity().compareTo(arg1.getCity()); break; case 3: cc = arg0.getPostalCode().compareTo(arg1.getPostalCode()); break; case 4: cc = arg0.getName().compareTo(arg1.getName()); break; default: throw new RuntimeException("Invalid column index: " + getColumn()); } if (!isAscending()) { cc = -cc; } return cc; } } }