// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.JunctionChecker.junctionchecking; import java.util.ArrayList; import org.openstreetmap.josm.plugins.JunctionChecker.datastructure.Channel; import org.openstreetmap.josm.plugins.JunctionChecker.datastructure.ChannelDiGraph; /** * identifiziert die Ein/Ausgänge des übergebenden Teilgraphen. JPrepare setzt die Knotengrade von Vorgänger/nachfolgerknoten der übergebenden Knoten * @author joerg */ public class JPrepare { private final ArrayList<Channel> entries; private final ArrayList<Channel> exits; private ArrayList<Channel> vertices; public JPrepare(ChannelDiGraph digraph) { entries = new ArrayList<>(); exits = new ArrayList<>(); } public void jPrepare(ArrayList<Channel> vertices) { this.vertices = vertices; entries.clear(); exits.clear(); /*TODO: kann weg? digraph.ereaseChannelsInDegree(); digraph.ereaseChannelsOutDegree(); digraph.ereaseChannelsSubgraph(); */ for (int i = 0; i < vertices.size(); i++) { vertices.get(i).setSubgraph(true); } for (int i = 0; i < vertices.size(); i++) { for (int j = 0; j < vertices.get(i).getPredChannels().size(); j++) { if (vertices.get(i).getPredChannels().get(j).isSubgraph() == false) { if (!entries.contains(vertices.get(i))) { entries.add(vertices.get(i)); } } else { vertices.get(i).countupIndegree(); //log.trace(vertices.get(i).toString()); } } for (int j = 0; j < vertices.get(i).getLeadsTo().size(); j++) { if (vertices.get(i).getLeadsTo().get(j).getToChannel().isSubgraph() == false) { if (!exits.contains(vertices.get(i))) { exits.add(vertices.get(i)); } } else { vertices.get(i).countupOutdegree(); } } } } public void resetSubgraph() { for (int i = 0; i < vertices.size(); i++) { vertices.get(i).setSubgraph(false); vertices.get(i).setIndegree(0); vertices.get(i).setOutdegree(0); } } /** * gibt die Anzahl der gefundenen Eingänge zurück */ public ArrayList<Channel> getEntries() { return entries; } /** * gibt die Anzahl der gefundenen Ausgänge zurück */ public ArrayList<Channel> getExits() { return exits; } }