// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.JunctionChecker; import static org.openstreetmap.josm.tools.I18n.tr; import java.io.File; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.mapmode.MapMode; import org.openstreetmap.josm.gui.MapFrame; import org.openstreetmap.josm.gui.layer.Layer; import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent; import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener; import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent; import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent; import org.openstreetmap.josm.gui.layer.OsmDataLayer; import org.openstreetmap.josm.plugins.Plugin; import org.openstreetmap.josm.plugins.PluginInformation; import org.openstreetmap.josm.plugins.JunctionChecker.datastructure.ChannelDiGraph; import org.openstreetmap.josm.plugins.JunctionChecker.reader.ColorSchemeXMLReader; import org.openstreetmap.josm.plugins.JunctionChecker.util.RelationProducer; /** * * This plugins helps to create a channel digraph und check channels in this network if it is a * junction or searches in a subgraph after junctions. * @author Jörg Possin (joerg.possin@uni-muenster.de) */ public class JunctionCheckerPlugin extends Plugin implements LayerChangeListener { private static final String COLORSCHEMEFILTERFILE = "/resources/xml/colorscheme.xml"; private JunctionCheckDialog junctionCheckDialog; private File pathDir; private final RelationProducer relationproducer; //Die benötigten Layer für JOSM private OsmDataLayer osmlayer; //IN diesem Layer sind die Originaldaten gespiechert, aus denen der Channel-Digraph erzeugt wird private ChannelDiGraphLayer channelDigraphLayer; private final ColorSchemeXMLReader cXMLReaderMK; private ChannelDiGraph channelDigraph; private final JunctionCheckerMapMode jcMapMode; private MapMode normalMapMode; public JunctionCheckerPlugin(PluginInformation info) { super(info); jcMapMode = new JunctionCheckerMapMode("junctionchecking", tr("construct channel digraph and search for junctions")); relationproducer = new RelationProducer(this); cXMLReaderMK = new ColorSchemeXMLReader(COLORSCHEMEFILTERFILE); } @Override public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) { jcMapMode.setFrame(newFrame); if (newFrame != null) { junctionCheckDialog = new JunctionCheckDialog(this); newFrame.addToggleDialog(junctionCheckDialog); Main.getLayerManager().addLayerChangeListener(this); } else Main.getLayerManager().removeLayerChangeListener(this); } public void activeLayerChange(Layer oldLayer, Layer newLayer) { if (newLayer instanceof OsmDataLayer) { this.getJunctionCheckDialog().setActivateCreateDigraph(true); this.getJunctionCheckDialog().setActivateJunctionCheckOrSearch(false); if (normalMapMode != null) { Main.map.selectMapMode(normalMapMode); } } else if (newLayer instanceof ChannelDiGraphLayer) { this.getJunctionCheckDialog().setActivateCreateDigraph(false); this.getJunctionCheckDialog().setActivateJunctionCheckOrSearch(true); Main.map.selectMapMode(jcMapMode); } } @Override public void layerOrderChanged(LayerOrderChangeEvent e) { } @Override public void layerAdded(LayerAddEvent e) { } @Override public void layerRemoving(LayerRemoveEvent e) { if (e.getRemovedLayer() == channelDigraphLayer) { channelDigraphLayer = null; this.getJunctionCheckDialog().setActivateJunctionCheckOrSearch(false); return; } else { this.getJunctionCheckDialog().setActivateCreateDigraph(false); } } public ChannelDiGraphLayer getChannelDigraphLayer() { if (channelDigraphLayer == null) { channelDigraphLayer = new ChannelDiGraphLayer(cXMLReaderMK); } return channelDigraphLayer; } public JunctionCheckDialog getJunctionCheckDialog() { return junctionCheckDialog; } public File getPathDir() { return pathDir; } public OsmDataLayer getOsmlayer() { return osmlayer; } public void setOsmlayer(OsmDataLayer osmlayer) { this.osmlayer = osmlayer; } public RelationProducer getRelationProducer() { return relationproducer; } public ChannelDiGraph getChannelDigraph() { return channelDigraph; } public void setChannelDigraph(ChannelDiGraph channelDigraph) { this.channelDigraph = channelDigraph; } public JunctionCheckerMapMode getJcMapMode() { return jcMapMode; } public void setNormalMapMode(MapMode mm) { normalMapMode = mm; } }