// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.fixAddresses.gui.actions; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; 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.IOSMEntity; import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress; import org.openstreetmap.josm.plugins.fixAddresses.StringUtils; import org.openstreetmap.josm.plugins.fixAddresses.gui.AddressEditSelectionEvent; import org.openstreetmap.josm.plugins.fixAddresses.gui.AddressEditTableModel; /** * Applies the guessed values for a set of addresses. * @author Oliver Wieland <oliver.wieland@online.de> * */ @SuppressWarnings("serial") public class ApplyAllGuessesAction extends AbstractAddressEditAction implements MouseListener { private String tag; /** * Instantiates a new "apply all guesses" action. */ public ApplyAllGuessesAction(String tag) { super(tr("Apply"), "applyguesses_24", tr("Turns all guesses into the corresponding tag values."), "fixaddresses/applyallguesses"); this.tag = tag; } /** * Instantiates a new "apply all guesses" action. */ public ApplyAllGuessesAction() { this(null); } @Override public void addressEditActionPerformed(AddressEditSelectionEvent ev) { if (ev == null) return; if (ev.getSelectedUnresolvedAddresses() != null) { List<OSMAddress> addrToFix = ev.getSelectedUnresolvedAddresses(); applyGuesses(addrToFix); } if (ev.getSelectedIncompleteAddresses() != null) { List<OSMAddress> addrToFix = ev.getSelectedIncompleteAddresses(); applyGuesses(addrToFix); } } @Override protected void updateEnabledState(AddressEditContainer container) { setEnabled(container != null && container.getNumberOfGuesses() > 0); } /** * Apply guesses. * * @param addrToFix the addr to fix */ private void applyGuesses(List<OSMAddress> addrToFix) { beginTransaction(tr("Applied guessed values")); List<OSMAddress> addrToFixShadow = new ArrayList<>(addrToFix); for (OSMAddress aNode : addrToFixShadow) { beginObjectTransaction(aNode); if (StringUtils.isNullOrEmpty(tag)) { // tag given? aNode.applyAllGuesses(); // no -> apply all guesses } else { // apply guessed values for single tag only aNode.applyGuessForTag(tag); } finishObjectTransaction(aNode); } finishTransaction(); } @Override protected void updateEnabledState(AddressEditSelectionEvent event) { setEnabled(event.hasAddressesWithGuesses()); } @Override public void addressEditActionPerformed(AddressEditContainer container) { if (container == null || container.getNumberOfIncompleteAddresses() == 0) return; List<OSMAddress> addrToFix = container.getUnresolvedAddresses(); applyGuesses(addrToFix); addrToFix = container.getIncompleteAddresses(); applyGuesses(addrToFix); } @Override public void mouseClicked(MouseEvent e) { JTable table = (JTable) e.getSource(); Point p = e.getPoint(); if (e.getClickCount() == 2) { AddressEditTableModel model = (AddressEditTableModel) table.getModel(); if (model != null) { int row = table.rowAtPoint(p); IOSMEntity node = model.getEntityOfRow(row); if (node instanceof OSMAddress) { beginTransaction(tr("Applied guessed values for ") + node.getOsmObject()); beginObjectTransaction(node); OSMAddress aNode = (OSMAddress) node; aNode.applyAllGuesses(); finishObjectTransaction(node); finishTransaction(); } } } } @Override public void mouseEntered(MouseEvent arg0) { } @Override public void mouseExited(MouseEvent arg0) { } @Override public void mousePressed(MouseEvent arg0) { } @Override public void mouseReleased(MouseEvent arg0) { } }