// 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;
public class IncompleteAddressesTableModel extends AddressEditTableModel {
/**
*
*/
private static final long serialVersionUID = -5951629033395186324L;
// TODO: Add "state" column, if required
private static final int NUMBER_OF_COLUMNS = 5;
private static final String[] COLUMN_NAMES = new String[] {
tr("Country"), trc("address", "City" /* fix #8140 */), tr("Postcode"), tr("Street"), tr("Number")};
private static final Class<?>[] COLUMN_CLASSES = new Class<?>[] {
String.class, String.class, String.class, String.class, String.class, String.class};
/**
* Instantiates a new incomplete addresses table model.
*
* @param addressContainer the address container used for display
*/
public IncompleteAddressesTableModel(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.getIncompleteAddresses() == null) {
return 0;
}
return addressContainer.getNumberOfIncompleteAddresses();
}
@Override
public Object getValueAt(int row, int column) {
OSMAddress aNode = (OSMAddress) getEntityOfRow(row);
if (aNode == null) {
return null;
}
switch (column) {
case 0:
return aNode.getCountry();
case 1:
return aNode.getCity();
case 2:
return aNode.getPostalCode();
case 3:
return aNode.getStreetName();
case 4:
return aNode.getHouseNumber();
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.getIncompleteAddresses() == null) {
return null;
}
if (row < 0 || row >= addressContainer.getNumberOfIncompleteAddresses()) {
return null;
}
return addressContainer.getIncompleteAddresses().get(row);
}
@Override
public int getRowOfEntity(IOSMEntity entity) {
if (addressContainer == null || addressContainer.getIncompleteAddresses() == null) {
return -1;
}
return addressContainer.getIncompleteAddresses().indexOf(entity);
}
@Override
protected void sortByColumn(int column, boolean ascending) {
if (addressContainer.getNumberOfIncompleteAddresses() == 0) return;
Collections.sort(addressContainer.getIncompleteAddresses(),
new IncompleteAddressModelSorter(column, ascending));
}
/**
* Internal class StreetModelSorter.
*/
static class IncompleteAddressModelSorter extends ColumnSorter<OSMAddress> {
/**
* Instantiates a new incomplete address model sorter.
*
* @param column the column to sort
* @param asc sort ascending
*/
IncompleteAddressModelSorter(int column, boolean asc) {
super(column, asc);
}
@Override
public int compare(OSMAddress arg0, OSMAddress arg1) {
int cc = 0;
switch (getColumn()) {
case 0:
cc = arg0.getCountry().compareTo(arg1.getCountry());
break;
case 1:
cc = arg0.getCity().compareTo(arg1.getCity());
break;
case 2:
cc = arg0.getPostalCode().compareTo(arg1.getPostalCode());
break;
case 3:
cc = arg0.getStreetName().compareTo(arg1.getStreetName());
break;
case 4:
cc = arg0.getHouseNumber().compareTo(arg1.getHouseNumber());
break;
default:
throw new RuntimeException("Invalid column index: " + getColumn());
}
if (!isAscending()) {
cc = -cc;
}
return cc;
}
}
}