// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.opendata.modules.fr.paris.datasets;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.openstreetmap.josm.data.coor.EastNorth;
import org.openstreetmap.josm.data.osm.DataSet;
import org.openstreetmap.josm.data.osm.Node;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.Way;
import org.openstreetmap.josm.plugins.opendata.core.OdConstants;
import org.openstreetmap.josm.plugins.opendata.core.datasets.fr.FrenchShpHandler;
public class ParisShpHandler extends FrenchShpHandler {
public final Map<String, Node> nodeMap = new HashMap<>();
protected OsmPrimitive dataPrimitive;
protected Way closedWay;
protected List<Way> ways;
public List<Node> nodes;
public ParisShpHandler() {
setDbfCharset(Charset.forName(OdConstants.CP850));
}
private Node getNode(EastNorth en, String key) {
Node n = nodeMap.get(key);
/*if (n == null) {
for (Node node : nodes.values()) {
if (node.getEastNorth().equalsEpsilon(en, 0.0000001)) {
return node;
}
}
}*/
return n;
}
protected Node createOrGetNode(DataSet ds, EastNorth en) {
String key = en.getX()+"/"+en.getY();
Node n = getNode(en, key);
if (n == null) {
n = new Node(en);
nodeMap.put(key, n);
ds.addPrimitive(n);
}
return n;
}
protected final void initFeaturesPrimitives(Set<OsmPrimitive> featurePrimitives) {
dataPrimitive = null;
closedWay = null;
ways = new ArrayList<>();
nodes = new ArrayList<>();
for (OsmPrimitive p : featurePrimitives) {
if (p.hasKeys()) {
dataPrimitive = p;
}
if (p instanceof Way) {
Way w = (Way) p;
ways.add(w);
if (w.isClosed()) {
closedWay = w;
}
} else if (p instanceof Node) {
nodes.add((Node) p);
}
}
}
protected final void removePrimitives(DataSet result) {
for (Way w : ways) {
w.setNodes(null);
result.removePrimitive(w);
}
for (Node n : nodes) {
result.removePrimitive(n);
}
}
}