// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.opendata.core.layers;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.openstreetmap.josm.Main;
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.gui.layer.OsmDataLayer;
public class OdOsmDataLayer extends OsmDataLayer implements OdLayer {
private final OdDataLayer dataLayer;
public OdOsmDataLayer(OdDataLayer dataLayer, DataSet data, String name) {
super(data, name, null);
this.dataLayer = dataLayer;
}
public final void removeForbiddenTags() {
if (dataLayer != null && dataLayer.handler != null && dataLayer.handler.hasForbiddenTags()) {
Main.worker.submit(new Runnable() {
@Override
public void run() {
data.clearSelection();
for (Iterator<OsmPrimitive> it = data.allPrimitives().iterator(); it.hasNext();) {
OsmPrimitive p = it.next();
if (dataLayer.handler.isForbidden(p)) {
data.addSelected(p);
List<Node> nodes = null;
if (p instanceof Way) {
nodes = ((Way) p).getNodes();
}
if (nodes != null) {
for (Node n : nodes) {
List<OsmPrimitive> refferingAllowedWays = new ArrayList<>();
for (OsmPrimitive referrer : n.getReferrers()) {
if (referrer instanceof Way && !dataLayer.handler.isForbidden(referrer)) {
refferingAllowedWays.add(referrer);
}
}
if (refferingAllowedWays.isEmpty()) {
data.addSelected(n);
}
}
}
}
}
Collection<OsmPrimitive> sel = data.getSelected();
if (!sel.isEmpty()) {
Main.main.menu.purge.actionPerformed(null);
}
}
});
}
}
@Override
public OdDataLayer getDataLayer() {
return dataLayer;
}
}