Ignore:
Timestamp:
2010-11-07T19:28:18+01:00 (14 years ago)
Author:
oliverw
Message:
  • Added some convenience methods to AddressEditSelectionEvent
  • Several bugfixes in actions, predominately regarding address selection
  • Added remove address/apply guesses action to toggle dialog
Location:
applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/AddressEditContainer.java

    r24095 r24129  
    422422        public int getNumberOfUnresolvedAddresses() {
    423423                return unresolvedAddresses != null ? unresolvedAddresses.size() : 0;
     424        }
     425       
     426        /**
     427         * Gets the number of invalid (unresolved and/or incomplete) addresses.
     428         *
     429         * @return the number of invalid addresses
     430         */
     431        public int getNumberOfInvalidAddresses() {
     432                return getNumberOfIncompleteAddresses() + getNumberOfUnresolvedAddresses();
    424433        }
    425434       
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OSMAddress.java

    r24115 r24129  
    2424public class OSMAddress extends OSMEntityBase {
    2525        public static final String MISSING_TAG = "?";
     26        public static final String INTERPOLATION_TAG = "...";
     27       
     28        private boolean isPartOfInterpolation;
    2629       
    2730        /** The dictionary containing guessed values. */
     
    4144                super.setOsmObject(osmObject);
    4245               
    43                 OsmUtils.getValuesFromAddressInterpolation(this);
     46                isPartOfInterpolation = OsmUtils.getValuesFromAddressInterpolation(this);
    4447               
    4548                String streetNameViaRel = OsmUtils.getAssociatedStreet(this.osmObject);
     
    5457         */
    5558        public boolean isComplete() {
    56                 return  TagUtils.hasAddrCityTag(osmObject) && TagUtils.hasAddrCountryTag(osmObject) &&
    57                                 TagUtils.hasAddrHousenumberTag(osmObject) && TagUtils.hasAddrPostcodeTag(osmObject) &&
    58                                 TagUtils.hasAddrStateTag(osmObject) &&
    59                                 (TagUtils.hasAddrStreetTag(osmObject) || hasDerivedValue(TagUtils.ADDR_STREET_TAG));
     59                return  hasCity() &&
     60                                hasHouseNumber() &&
     61                                hasPostCode() &&
     62                                hasCity() &&
     63                                hasState() &&
     64                                hasStreetName();
    6065        }
    6166       
     
    218223        public String getHouseNumber() {
    219224                if (!TagUtils.hasAddrHousenumberTag(osmObject)) {
    220                         return MISSING_TAG;
     225                        if (!isPartOfInterpolation) {
     226                                return MISSING_TAG;
     227                        } else {
     228                                return INTERPOLATION_TAG;
     229                        }
    221230                }
    222231                return TagUtils.getAddrHousenumberValue(osmObject);
    223232        }
    224233       
     234        /**
     235         * Checks for house number.
     236         *
     237         * @return true, if successful
     238         */
     239        public boolean hasHouseNumber() {
     240                return TagUtils.hasAddrHousenumberTag(osmObject) || isPartOfInterpolation;
     241        }
     242               
     243        /**
     244         * Checks if this address is part of a address interpolation.
     245         *
     246         * @return true, if is part of interpolation
     247         */
     248        protected boolean isPartOfInterpolation() {
     249                return isPartOfInterpolation;
     250        }
     251
    225252        /**
    226253         * Gets the name of the city associated with this address.
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OsmUtils.java

    r24119 r24129  
    133133                        if (osm instanceof Way) {
    134134                                Way w = (Way) osm;
    135                                 if (TagUtils.hasAddrInterpolationTag(w)) {                                     
     135                                if (TagUtils.hasAddrInterpolationTag(w)) {
     136                                        System.out.println("Found interpolation for " + address);
    136137                                        applyDerivedValue(address, w, TagUtils.ADDR_POSTCODE_TAG);
    137138                                        applyDerivedValue(address, w, TagUtils.ADDR_CITY_TAG);
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AddressEditSelectionEvent.java

    r24114 r24129  
    3434        private AddressEditContainer addressContainer;
    3535       
     36        private List<OSMAddress> unresolvedCache;
     37        private List<OSMAddress> incompleteCache;
     38       
    3639        /**
    3740         * Creates a new 'AddressEditSelectionEvent'.
     
    100103       
    101104        /**
     105         * Checks for addresses.
     106         *
     107         * @return true, if successful
     108         */
     109        public boolean hasAddresses() {
     110                return hasIncompleteAddresses() || hasUnresolvedAddresses();
     111        }
     112       
     113        /**
     114         * Checks for incomplete addresses.
     115         *
     116         * @return true, if successful
     117         */
     118        public boolean hasIncompleteAddresses() {
     119                return getSelectedIncompleteAddresses() != null;
     120        }
     121       
     122        /**
     123         * Checks for unresolved addresses.
     124         *
     125         * @return true, if successful
     126         */
     127        public boolean hasUnresolvedAddresses() {
     128                return getSelectedUnresolvedAddresses() != null;
     129        }
     130       
     131        /**
     132         * Checks for addresses with guesses.
     133         *
     134         * @return true, if successful
     135         */
     136        public boolean hasAddressesWithGuesses() {
     137                if (hasIncompleteAddresses()) {
     138                        for (OSMAddress addr : getSelectedIncompleteAddresses()) {
     139                                if (addr.hasGuesses()) {
     140                                        return true;
     141                                }
     142                        }
     143                }
     144               
     145                if (hasUnresolvedAddresses()) {
     146                        for (OSMAddress addr : getSelectedUnresolvedAddresses()) {
     147                                if (addr.hasGuesses()) {
     148                                        return true;
     149                                }
     150                        }
     151                }
     152               
     153                return false;
     154        }
     155       
     156        /**
    102157         * Gets the list containing the selected items of the 'unresolved addresses ' table.
    103158         * @return
     
    106161                if (unresolvedAddressTable != null &&
    107162                                addressContainer != null &&
    108                                 addressContainer.getUnresolvedAddresses() != null) {
     163                                unresolvedCache == null) {
    109164                       
    110165                        int[] selRows = unresolvedAddressTable.getSelectedRows();
    111166                       
    112                         List<OSMAddress> nodes = new ArrayList<OSMAddress>();
     167                        unresolvedCache = new ArrayList<OSMAddress>();
    113168                        for (int i = 0; i < selRows.length; i++) {
    114169                                if (selRows[i] >= 0 && selRows[i] < addressContainer.getNumberOfUnresolvedAddresses()) {
    115                                         nodes.add(addressContainer.getUnresolvedAddresses().get(selRows[i]));
    116                                 }
    117                         }
    118                         return nodes;
    119                 }
    120                 return null;
     170                                        unresolvedCache.add(addressContainer.getUnresolvedAddresses().get(selRows[i]));
     171                                }
     172                        }
     173                        return unresolvedCache;
     174                } else {
     175                        return unresolvedCache;
     176                }
    121177        }
    122178       
     
    129185                if (incompleteAddressTable != null &&
    130186                                addressContainer != null &&
    131                                 addressContainer.getUnresolvedAddresses() != null) {
     187                                incompleteCache == null) {
    132188                       
    133189                        int[] selRows = incompleteAddressTable.getSelectedRows();
    134190                       
    135                         List<OSMAddress> nodes = new ArrayList<OSMAddress>();
     191                        incompleteCache = new ArrayList<OSMAddress>();
    136192                        for (int i = 0; i < selRows.length; i++) {
    137193                                if (selRows[i] >= 0 && selRows[i] < addressContainer.getNumberOfIncompleteAddresses()) {
    138                                         nodes.add(addressContainer.getIncompleteAddresses().get(selRows[i]));
    139                                 }
    140                         }
    141                         return nodes;
    142                 }
    143                 return null;
     194                                        incompleteCache.add(addressContainer.getIncompleteAddresses().get(selRows[i]));
     195                                }
     196                        }
     197                        return incompleteCache;
     198                } else {
     199                        return incompleteCache; // equals null, if no data is present
     200                }
    144201        }
    145202}
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/IncompleteAddressesDialog.java

    r24114 r24129  
    4141import org.openstreetmap.josm.plugins.fixAddresses.IOSMEntity;
    4242import org.openstreetmap.josm.plugins.fixAddresses.gui.actions.AbstractAddressEditAction;
     43import org.openstreetmap.josm.plugins.fixAddresses.gui.actions.ApplyAllGuessesAction;
     44import org.openstreetmap.josm.plugins.fixAddresses.gui.actions.RemoveAddressTagsAction;
    4345import org.openstreetmap.josm.plugins.fixAddresses.gui.actions.SelectAddressesInMapAction;
    4446
     
    4749        private static final String FIXED_DIALOG_TITLE = tr("Incomplete Addresses");
    4850
    49 
    5051        private AddressEditContainer container;
    5152
    52        
    5353        private SelectAddressesInMapAction selectAction = new SelectAddressesInMapAction();
     54        private ApplyAllGuessesAction applyGuessesAction = new ApplyAllGuessesAction();
     55        private RemoveAddressTagsAction removeTagsAction = new RemoveAddressTagsAction();
    5456       
    5557        private AbstractAddressEditAction[] actions = new AbstractAddressEditAction[]{
    56                         selectAction
     58                        selectAction,
     59                        applyGuessesAction,
     60                        removeTagsAction
    5761        };
    5862
     
    7983                this.add(p);
    8084               
    81                 JPanel buttonPanel = getButtonPanel(5);
     85                JPanel buttonPanel = getButtonPanel(actions.length);
    8286               
    83                 SideButton sb = new SideButton(selectAction);
    84                 buttonPanel.add(sb);
     87                for (int i = 0; i < actions.length; i++) {
     88                        SideButton sb = new SideButton(actions[i]);
     89                        buttonPanel.add(sb);
     90                }
    8591               
    8692                this.add(buttonPanel, BorderLayout.SOUTH);
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/ApplyAllGuessesAction.java

    r24120 r24129  
    9393        @Override
    9494        protected void updateEnabledState(AddressEditSelectionEvent event) {
    95                 setEnabled(event.getSelectedIncompleteAddresses() != null ||
    96                                 event.getSelectedIncompleteAddresses() != null);
     95                setEnabled(event.hasAddressesWithGuesses());
    9796        }
    9897
     
    102101        @Override
    103102        public void addressEditActionPerformed(AddressEditContainer container) {
    104                 if (container == null || container.getUnresolvedAddresses() == null) return;
     103                if (container == null || container.getNumberOfIncompleteAddresses() == 0) return;
    105104               
    106105                List<OSMAddress> addrToFix = container.getUnresolvedAddresses();
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/AssignAddressToStreetAction.java

    r24105 r24129  
    6262        @Override
    6363        public void updateEnabledState(AddressEditSelectionEvent ev) {
    64                 setEnabled(ev.getSelectedStreet() != null && ev.getSelectedUnresolvedAddresses() != null);
     64                setEnabled(ev.getSelectedStreet() != null && ev.hasUnresolvedAddresses());
    6565        }
    6666
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/GuessAddressDataAction.java

    r24105 r24129  
    6161        public void addressEditActionPerformed(AddressEditContainer container) {
    6262                if (container == null) return;
    63                 if (container.getUnresolvedAddresses() == null) return;
     63                if (container.getNumberOfUnresolvedAddresses() == 0) return;
    6464                               
    65                 internalGuessAddresses(container.getIncompleteAddresses());
     65                internalGuessAddresses(container.getAllAddressesToFix());
    6666        }
    6767
     
    7373                if (ev == null || ev.getSelectedUnresolvedAddresses() == null) return;
    7474               
    75                 // guess tags for selected addresses only
    76                 internalGuessAddresses(ev.getSelectedUnresolvedAddresses());           
     75                // guess tags for selected addresses only                               
     76                internalGuessAddresses(ev.getSelectedIncompleteAddresses());
     77                internalGuessAddresses(ev.getSelectedUnresolvedAddresses());
    7778        }
    7879       
     
    8283         */
    8384        private void internalGuessAddresses(List<OSMAddress> nodes) {
     85                if (nodes == null) return;
     86               
    8487                GuessAddressRunnable aft = new GuessAddressRunnable(nodes, tr("Guess street names"));
    8588                aft.addFinishListener(this);
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/RemoveAddressTagsAction.java

    r24105 r24129  
    3030        public void addressEditActionPerformed(AddressEditSelectionEvent ev) {
    3131                beginTransaction(tr("Remove address tags"));
    32                 for (OSMAddress aNode : ev.getSelectedUnresolvedAddresses()) {
    33                         beginObjectTransaction(aNode);
    34                         aNode.removeAllAddressTags();
    35                         finishObjectTransaction(aNode);
     32                if (ev.hasUnresolvedAddresses()) {
     33                        for (OSMAddress aNode : ev.getSelectedUnresolvedAddresses()) {
     34                                beginObjectTransaction(aNode);
     35                                aNode.removeAllAddressTags();
     36                                finishObjectTransaction(aNode);
     37                        }
    3638                }
    37                 finishTransaction();           
     39
     40                if (ev.hasIncompleteAddresses()) {
     41                        for (OSMAddress aNode : ev.getSelectedIncompleteAddresses()) {
     42                                beginObjectTransaction(aNode);
     43                                aNode.removeAllAddressTags();
     44                                finishObjectTransaction(aNode);
     45                        }
     46                        finishTransaction();           
     47                }
    3848        }
    3949
     
    5464                }
    5565               
    56                 setEnabled(event.getSelectedUnresolvedAddresses() != null);
     66                setEnabled(event.hasAddresses());
    5767        }
    5868
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/actions/SelectAddressesInMapAction.java

    r24116 r24129  
    5050        public SelectAddressesInMapAction() {
    5151                // we simply use the existing icon :-|
    52                 super(tr("Select in map"), "selectall", "Selects selected addresses in the map");
     52                super(tr("Select"), "selectall", "Selects selected addresses in the map");
    5353        }
    5454
     
    6060                if (ev == null) return;
    6161               
    62                 if (ev.getSelectedUnresolvedAddresses() != null) {
     62                if (ev.hasUnresolvedAddresses()) {
    6363                        internalSelectAddresses(ev.getSelectedUnresolvedAddresses());
    64                 } else if (ev.getSelectedIncompleteAddresses() != null) {
     64                } else if (ev.hasIncompleteAddresses()) {
    6565                        internalSelectAddresses(ev.getSelectedIncompleteAddresses());
    6666                }
     
    8585        @Override
    8686        protected void updateEnabledState(AddressEditSelectionEvent event) {
    87                 setEnabled(event != null && (event.getSelectedUnresolvedAddresses() != null || event.getSelectedIncompleteAddresses() != null));
     87                setEnabled(event != null && event.hasAddresses());
    8888        }
    8989
Note: See TracChangeset for help on using the changeset viewer.