Ignore:
Timestamp:
2010-11-07T17:21:51+01:00 (14 years ago)
Author:
oliverw
Message:

Check for associated address interpolations.

Location:
applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses
Files:
4 edited

Legend:

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

    r24093 r24115  
    4141                super.setOsmObject(osmObject);
    4242               
     43                OsmUtils.getValuesFromAddressInterpolation(this);
     44               
    4345                String streetNameViaRel = OsmUtils.getAssociatedStreet(this.osmObject);
    4446                if (!StringUtils.isNullOrEmpty(streetNameViaRel)) {
     
    99101         */
    100102        public boolean hasStreetName() {
    101                 return TagUtils.hasAddrStreetTag(osmObject);
     103                return TagUtils.hasAddrStreetTag(osmObject) || hasDerivedValue(TagUtils.ADDR_STREET_TAG);
    102104        }
    103105       
     
    187189                        String val = guessedValues.get(tag);
    188190                        if (!StringUtils.isNullOrEmpty(val)) {
    189                                 setOSMTag(tag, val);
     191                                setOSMTag(tag, val);                           
    190192                        }
    191193                }
     194                guessedValues.clear();
    192195        }
    193196
     
    206209         */
    207210        public boolean hasPostCode() {
    208                 return TagUtils.hasAddrPostcodeTag(osmObject);
     211                return hasTag(TagUtils.ADDR_POSTCODE_TAG);
    209212        }
    210213       
     
    231234         * Checks for city tag.
    232235         *
    233          * @return true, if successful
     236         * @return true, if a city tag is present or available via referrer.
    234237         */
    235238        public boolean hasCity() {
    236                 return TagUtils.hasAddrCityTag(osmObject);
     239                return hasTag(TagUtils.ADDR_CITY_TAG);
    237240        }
    238241       
     
    242245         */
    243246        public String getState() {
    244                 if (!TagUtils.hasAddrStateTag(osmObject)) {
    245                         return MISSING_TAG;
    246                 }
    247                 return TagUtils.getAddrStateValue(osmObject);
    248         }
    249 
    250         /**
    251          * Gets the name of the state associated with this address.
     247                return getTagValueWithGuess(TagUtils.ADDR_STATE_TAG);
     248        }
     249       
     250        /**
     251         * Checks for state tag.
     252         *
     253         * @return true, if a state tag is present or available via referrer.
     254         */
     255        public boolean hasState() {
     256                return hasTag(TagUtils.ADDR_STATE_TAG);
     257        }
     258
     259        /**
     260         * Gets the name of the country associated with this address.
    252261         * @return
    253262         */
    254263        public String getCountry() {
    255                 if (!TagUtils.hasAddrCountryTag(osmObject)) {
    256                         return MISSING_TAG;
    257                 }
    258                 return TagUtils.getAddrCountryValue(osmObject);
    259         }
    260        
    261         /**
    262          * Removes all addresss related tags from the node or way.
     264                return getTagValueWithGuess(TagUtils.ADDR_COUNTRY_TAG);
     265        }
     266       
     267        /**
     268         * Checks for country tag.
     269         *
     270         * @return true, if a country tag is present or available via referrer.
     271         */
     272        public boolean hasCountry() {
     273                return hasTag(TagUtils.ADDR_COUNTRY_TAG);
     274        }
     275       
     276        /**
     277         * Removes all address-related tags from the node or way.
    263278         */
    264279        public void removeAllAddressTags() {
     
    269284                removeOSMTag(TagUtils.ADDR_STATE_TAG);
    270285                removeOSMTag(TagUtils.ADDR_STREET_TAG);
     286        }
     287       
     288        /**
     289         * Checks if the associated OSM object has the given tag or if the tag is available via a referrer.
     290         *
     291         * @param tag the tag to look for.
     292         * @return true, if there is a value for the given tag.
     293         */
     294        public boolean hasTag(String tag) {
     295                if (StringUtils.isNullOrEmpty(tag)) return false;
     296               
     297                return TagUtils.hasTag(osmObject, tag) || hasDerivedValue(tag);
    271298        }
    272299       
     
    403430       
    404431        /**
     432         * Returns true, if this instance has derived values from any referrer.
     433         * @return
     434         */
     435        public boolean hasDerivedValues() {
     436                return derivedValues.size() > 0;
     437        }
     438       
     439        /**
    405440         * Gets the derived value for the given tag.
    406441         * @param tag The tag to get the derived value for.
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OSMEntityBase.java

    r24090 r24115  
    2626import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2727import org.openstreetmap.josm.data.osm.Way;
     28import org.openstreetmap.josm.tools.CheckParameterUtil;
    2829
    2930/**
     
    5657         */
    5758        protected void setOsmObject(OsmPrimitive osmObject) {
     59                CheckParameterUtil.ensureParameterNotNull(osmObject, "osmObject");
    5860                this.osmObject = osmObject;
    5961        }
     
    6466         */
    6567        public static void addChangedListener(IAddressEditContainerListener listener) {
     68                CheckParameterUtil.ensureParameterNotNull(listener, "listener");
    6669                containerListeners.add(listener);
    6770        }
     
    7275         */
    7376        public static void removeChangedListener(IAddressEditContainerListener listener) {
     77                CheckParameterUtil.ensureParameterNotNull(listener, "listener");
    7478                containerListeners.remove(listener);
    7579        }
     
    7983         */
    8084        protected static void fireEntityChanged(IOSMEntity entity) {
     85                CheckParameterUtil.ensureParameterNotNull(entity, "entity");
    8186                for (IAddressEditContainerListener listener : containerListeners) {
    8287                        listener.entityChanged(entity);
     
    8994         */
    9095        public void addCommandListener(ICommandListener listener) {
     96                CheckParameterUtil.ensureParameterNotNull(listener, "listener");
    9197                cmdListeners.add(listener);
    9298        }
     
    97103         */
    98104        public void removeCommandListener(ICommandListener listener) {
     105                CheckParameterUtil.ensureParameterNotNull(listener, "listener");
    99106                cmdListeners.remove(listener);
    100107        }
     
    104111         *
    105112         * @param source the entity that issued the command.
    106          * @param cmd the command to execute.
    107          */
    108         protected void fireCommandIssued(Command cmd) {
     113         * @param command the command to execute.
     114         */
     115        protected void fireCommandIssued(Command command) {
     116                CheckParameterUtil.ensureParameterNotNull(command, "command");
    109117                if (cmdListeners.size() == 0) {
    110118                        throw new RuntimeException("Object has no TX context: " + this);
     
    112120               
    113121                for (ICommandListener l : cmdListeners) {
    114                         l.commandIssued(this, cmd);
     122                        l.commandIssued(this, command);
    115123                }
    116124        }       
     
    154162         */
    155163        protected void setOSMTag(String tag, String newValue) {
     164                CheckParameterUtil.ensureParameterNotNull(tag, "tag");         
    156165                if (StringUtils.isNullOrEmpty(tag)) return;
    157166               
     
    170179         */
    171180        protected void removeOSMTag(String tag) {
     181                CheckParameterUtil.ensureParameterNotNull(tag, "tag");
    172182                setOSMTag(tag, null); // a value of null removes the tag
    173183        }
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/OsmUtils.java

    r24028 r24115  
    118118                return null;
    119119        }
     120       
     121        /**
     122         * Gets the tag values from an address interpolation ref, if present.
     123         *
     124         * @param address the address
     125         * @return the values from address interpolation
     126         */
     127        public static boolean getValuesFromAddressInterpolation(OSMAddress address) {
     128                if (address == null) return false;
     129               
     130                OsmPrimitive osmAddr = address.getOsmObject();
     131               
     132                for (OsmPrimitive osm : osmAddr.getReferrers()) {
     133                        if (osm instanceof Way) {
     134                                Way w = (Way) osm;
     135                                if (TagUtils.hasAddrInterpolationTag(w)) {                                     
     136                                        applyDerivedValue(address, w, TagUtils.ADDR_POSTCODE_TAG);
     137                                        applyDerivedValue(address, w, TagUtils.ADDR_CITY_TAG);
     138                                        applyDerivedValue(address, w, TagUtils.ADDR_COUNTRY_TAG);
     139                                        applyDerivedValue(address, w, TagUtils.ADDR_STREET_TAG);
     140                                        return true;
     141                                }
     142                        }
     143                }
     144               
     145                return false;
     146        }
     147
     148        private static void applyDerivedValue(OSMAddress address, Way w, String tag) {
     149                if (!address.hasTag(tag) && TagUtils.hasTag(w, tag)) {                                         
     150                        address.setDerivedValue(tag, w.get(tag));
     151                }
     152        }
    120153}
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/TagUtils.java

    r24104 r24115  
    2727 */
    2828public final class TagUtils {
     29       
     30        /**
     31         * Checks if the given OSM object has a (non-empty) value for the given tag.
     32         *
     33         * @param osm the osm object to inspect.
     34         * @param tag the tag to look for.
     35         * @return true, if osm object has a non-empty value for this tag
     36         */
     37        public static boolean hasTag(OsmPrimitive osm, String tag) {
     38                return osm != null && !StringUtils.isNullOrEmpty(osm.get(tag));
     39        }
    2940       
    3041        /**
Note: See TracChangeset for help on using the changeset viewer.