// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.JunctionChecker.util; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.OsmPrimitiveType; import org.openstreetmap.josm.data.osm.Relation; import org.openstreetmap.josm.data.osm.RelationMember; import org.openstreetmap.josm.plugins.JunctionChecker.JunctionCheckerPlugin; import org.openstreetmap.josm.plugins.JunctionChecker.datastructure.Channel; /** * Hilfsklasse zum Umwandeln eines CHannels-Hashsets (welches eine Kreuzung repräsentiert) in eine gültige Relation auf den DigraphLayer Relation wird nur dann erzeugt, wenn sie noch nicht existiert * @author joerg */ public class RelationProducer { private JunctionCheckerPlugin plugin; private HashSet<HashSet<Channel>> storedRelations; public RelationProducer(JunctionCheckerPlugin plugin) { this.plugin = plugin; storedRelations = new HashSet<>(); } public void produceRelation(HashSet<Channel> subset, int n) { if (isProduced(subset)) { return; } LinkedList<OsmPrimitive> ways = new LinkedList<>(); Iterator<Channel> cit = subset.iterator(); while (cit.hasNext()) { Channel c = cit.next(); // System.out.println(c.getWay().getId()); if (!(ways.contains(plugin.getOsmlayer().data.getPrimitiveById(c .getWay().getId(), OsmPrimitiveType.WAY)))) { ways.add(plugin.getOsmlayer().data.getPrimitiveById(c.getWay() .getId(), OsmPrimitiveType.WAY)); } } Main.getLayerManager().setActiveLayer(plugin.getOsmlayer()); plugin.getOsmlayer().data.setSelected(ways); Relation jrelation = new Relation(); jrelation.put("type", "junction"); jrelation.put("n", Integer.toString(n)); for (int i = 0; i < ways.size(); i++) { jrelation.addMember(new RelationMember("part of", ways.get(i))); } plugin.getOsmlayer().data.addPrimitive(jrelation); } private boolean isProduced(HashSet<Channel> subset) { if (storedRelations.contains(subset)) { return true; } else { storedRelations.add(subset); } return false; } }