// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.fixAddresses.gui; import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.List; import javax.swing.JTable; import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer; import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress; import org.openstreetmap.josm.plugins.fixAddresses.OSMStreet; public class AddressEditSelectionEvent extends ActionEvent { /** * */ private static final long serialVersionUID = -93034483427803409L; private JTable streetTable; private JTable unresolvedAddressTable; private JTable incompleteAddressTable; private AddressEditContainer addressContainer; private List<OSMAddress> unresolvedCache; private List<OSMAddress> incompleteCache; /** * Creates a new 'AddressEditSelectionEvent'. * @param source The event source. * @param selStreet The street table component. * @param unresolvedAddresses The unresolved addresses table component. * @param incomplete The incomplete addresses table component. * @param container The address container instance holding the entities for streets and addresses. */ public AddressEditSelectionEvent(Object source, JTable selStreet, JTable unresolvedAddresses, JTable incompleteAddresses, AddressEditContainer container) { super(source, -1, ""); this.streetTable = selStreet; this.unresolvedAddressTable = unresolvedAddresses; this.incompleteAddressTable = incompleteAddresses; this.addressContainer = container; } /** * Gets the street table component. * @return the street table component */ public JTable getStreetTable() { return streetTable; } /** * Gets the 'unresolved addresses' table component. * @return the 'unresolved addresses' table component */ public JTable getUnresolvedAddressTable() { return unresolvedAddressTable; } /** * @return the incompleteAddressTable */ protected JTable getIncompleteAddressTable() { return incompleteAddressTable; } /** * Gets the address container. * * @return the address container */ public AddressEditContainer getAddressContainer() { return addressContainer; } /** * Gets the selected street of the street table. * @return the selected street of the street table */ public OSMStreet getSelectedStreet() { if (streetTable != null && addressContainer != null && addressContainer.getStreetList() != null) { int selRows = streetTable.getSelectedRow(); if (selRows < 0 || selRows >= addressContainer.getNumberOfStreets()) { return null; } return addressContainer.getStreetList().get(selRows); } return null; } /** * Checks for addresses. * * @return true, if successful */ public boolean hasAddresses() { return hasIncompleteAddresses() || hasUnresolvedAddresses(); } /** * Checks for incomplete addresses. * * @return true, if successful */ public boolean hasIncompleteAddresses() { return getSelectedIncompleteAddresses() != null; } /** * Checks for unresolved addresses. * * @return true, if successful */ public boolean hasUnresolvedAddresses() { return getSelectedUnresolvedAddresses() != null; } /** * Checks for addresses with guesses. * * @return true, if successful */ public boolean hasAddressesWithGuesses() { if (hasIncompleteAddresses()) { for (OSMAddress addr : getSelectedIncompleteAddresses()) { if (addr.hasGuesses()) { return true; } } } if (hasUnresolvedAddresses()) { for (OSMAddress addr : getSelectedUnresolvedAddresses()) { if (addr.hasGuesses()) { return true; } } } return false; } /** * Gets the list containing the selected items of the 'unresolved addresses ' table. * @return the list containing the selected items of the 'unresolved addresses ' table */ public List<OSMAddress> getSelectedUnresolvedAddresses() { if (unresolvedAddressTable != null && addressContainer != null && unresolvedCache == null) { int[] selRows = unresolvedAddressTable.getSelectedRows(); unresolvedCache = new ArrayList<>(); for (int i = 0; i < selRows.length; i++) { if (selRows[i] >= 0 && selRows[i] < addressContainer.getNumberOfUnresolvedAddresses()) { unresolvedCache.add(addressContainer.getUnresolvedAddresses().get(selRows[i])); } } return unresolvedCache; } else { return unresolvedCache; } } /** * Gets the selected incomplete addresses. * * @return the selected incomplete addresses */ public List<OSMAddress> getSelectedIncompleteAddresses() { if (incompleteAddressTable != null && addressContainer != null && incompleteCache == null) { int[] selRows = incompleteAddressTable.getSelectedRows(); incompleteCache = new ArrayList<>(); for (int i = 0; i < selRows.length; i++) { if (selRows[i] >= 0 && selRows[i] < addressContainer.getNumberOfIncompleteAddresses()) { incompleteCache.add(addressContainer.getIncompleteAddresses().get(selRows[i])); } } return incompleteCache; } else { return incompleteCache; // equals null, if no data is present } } }