// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.fixAddresses; import java.util.HashMap; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.Way; public final class OsmFactory { private static HashMap<String, OSMAddress> addressCache = new HashMap<>(); private OsmFactory() { // Hide default constructor for utilities classes } /** * Creates an address node from an OSM node, if possible. * @param node OSM node * @return created address */ public static OSMAddress createNode(Node node) { if (TagUtils.isAddress(node)) { String aid = "" + node.getId(); OSMAddress aNode = lookup(aid); if (aNode == null) { aNode = new OSMAddress(node); addressCache.put(aid, aNode); } else { aNode.setOsmObject(node); } return aNode; } return null; } /** * Creates an node entity from an OSM way, if possible. * @param way OSM way * @return The new node instance or null; if given way is inappropriate. */ public static IOSMEntity createNodeFromWay(Way way) { if (TagUtils.hasHighwayTag(way)) { return new OSMStreetSegment(way); } // Check for building with address if (way.isClosed() && TagUtils.hasBuildingTag(way) && TagUtils.isAddress(way)) { String aid = "" + way.getId(); OSMAddress aNode = lookup(aid); if (aNode == null) { aNode = new OSMAddress(way); addressCache.put(aid, aNode); } else { aNode.setOsmObject(way); } return aNode; } return null; } private static OSMAddress lookup(String aid) { if (addressCache.containsKey(aid)) { return addressCache.get(aid); } return null; } }