// 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;
/**
* @author joerg
*/
public class JCheck {
private int exnr;
private String result = "";
public boolean jCheck(ArrayList<Channel> entries, ArrayList<Channel> exits,
int n) {
for (int i = 0; i < exits.size(); i++) {
exits.get(i).setEnnrZero();
}
if (!(entries.size() == exits.size() && exits.size() == n)) {
result = "Rule 1 broken: " + entries.size() + " entries but "
+ exits.size() + " exits and n=" + n;
return false;
}
for (int i = 0; i < entries.size(); i++) {
if (!(entries.get(i).getIndegree() + entries.get(i).getOutdegree() >= 2)) {
result = "rule 4 broken: indegree from entrynode with ID: "
+ entries.get(i).getNewid() + ": "
+ entries.get(i).getIndegree() + " OutDegree: "
+ entries.get(i).getOutdegree();
return false;
}
exnr = 0;
for (int j = 0; j < exits.size(); j++) {
if (!(exits.get(j).getIndegree() + exits.get(j).getOutdegree() >= 2)) {
result = "Rule 4 broken, indegree from exitnode with ID: "
+ exits.get(j).getNewid() + ": "
+ exits.get(j).getIndegree() + " and outdegree: "
+ exits.get(j).getOutdegree();
//log.debug(exits.get(j).toString());
return false;
}
if (entries.get(i).getReachableNodes().contains(exits.get(j))) {
exnr++;
exits.get(j).increaseEnnr();
}
if (exits.get(j).equals(entries.get(i))) {
result = "Rule 2 broken: node with ID: "
+ "entries.get(i).getNode().getId()"
+ "is both entry and exit node";
return false;
}
}
}
if (!(exnr >= n - 1)) {
result = "Rule 1 broken";
return false;
}
for (int i = 0; i < exits.size(); i++) {
if (!(exits.get(i).getEnnr() >= (n - 1))) {
result = "Rule 1 broken, exit node with ID "
+ exits.get(i).getNewid() + "can only reached from "
+ exits.get(i).getEnnr() + " entries.";
return false;
}
}
result = "Jcheck erfolgreich bestanden";
return true;
}
/**
* gibt das Ergebnis des JChecks in Form als Satz mit Informationen zurück
*/
public String getResult() {
return result;
}
}