package GKA.Controler;
import java.io.File;
import GKA.GUI.GKAWindow;
import GKA.Graph.GKAGraphInterface;
import GKA.Graph.GraphType;
public class MainControler {
private static GKAWindow mainWindow;
private static GKAGraphInterface graph;
private static boolean minimumSpanningTree = false;
private static boolean mstHeuristic = false;
private static boolean nearestNeighbour = false;
public static void main(String[] args) {
mainWindow = new GKAWindow();
newDirectedGraph();
mainWindow.repaint();
}
public static void newGraph(File file){
minimumSpanningTree = false;
mstHeuristic = false;
nearestNeighbour = false;
GKAGraphInterface.newGraph(file);
MainControler.graph = GKAGraphInterface.newGraph(file);
graph.addMessageReceiver(mainWindow);
graph.setLayout();
mainWindow.showMainPanel(graph);
mainWindow.pack();
sendMessage("New Graph was build.");
}
public static void newGraph(GKAGraphInterface graph){
minimumSpanningTree = false;
mstHeuristic = false;
nearestNeighbour = false;
MainControler.graph = graph;
graph.addMessageReceiver(mainWindow);
graph.setLayout();
mainWindow.showMainPanel(graph);
mainWindow.pack();
sendMessage("New Graph was build.");
}
public static void newDirectedGraph(){
minimumSpanningTree = false;
mstHeuristic = false;
nearestNeighbour = false;
MainControler.graph = GKAGraphInterface.newGraph(GraphType.Directed);
graph.addMessageReceiver(mainWindow);
graph.addEdge("v1", "v2",null,null);
graph.addEdge("v1", "v2",null,null);
graph.setLayout();
mainWindow.showMainPanel(graph);
mainWindow.pack();
sendMessage("New Directed Graph was build.");
}
public static void newDirectedWeightedGraph(){
minimumSpanningTree = false;
mstHeuristic = false;
nearestNeighbour = false;
MainControler.graph = GKAGraphInterface.newGraph(GraphType.DirectedWeighted);
graph.addMessageReceiver(mainWindow);
graph.addVertex("v1");
graph.addVertex("v2");
graph.addEdge("v1", "v2",null,1.0);
graph.addEdge("v1", "v2",null,1.0);
graph.setLayout();
mainWindow.showMainPanel(graph);
mainWindow.pack();
sendMessage("New Directed Graph was build.");
}
public static void newUndirectedGraph(){
minimumSpanningTree = false;
mstHeuristic = false;
nearestNeighbour = false;
MainControler.graph = GKAGraphInterface.newGraph(GraphType.Undirected);
graph.addVertex("v3");
graph.addVertex("v4");
graph.addEdge("v3", "v4",null,null);
graph.addEdge("v3", "v4",null,null);
graph.setLayout();
mainWindow.showMainPanel(graph);
mainWindow.pack();
sendMessage("New Directed Graph was build.");
}
public static void newUndirectedWeigthedGraph(){
minimumSpanningTree = false;
mstHeuristic = false;
nearestNeighbour = false;
MainControler.graph = GKAGraphInterface.newGraph(GraphType.UndirectedWeighted);
graph.addMessageReceiver(mainWindow);
graph.addVertex("v3");
graph.addVertex("v4");
graph.addEdge("v3", "v4",null,1.0);
graph.addEdge("v3", "v4",null,1.0);
graph.setLayout();
mainWindow.showMainPanel(graph);
mainWindow.pack();
sendMessage("New Directed Graph was build.");
}
public static void sendMessage(String msg){
if (mainWindow != null)
mainWindow.sendMessage(msg);
}
public static void addVertex(String vertexName) {
graph.addVertex(vertexName);
}
public static void showGraph() {
System.out.println(graph.toString());
}
public static void setLayout(){
graph.setLayout();
}
public static boolean removeVertex(String vertexName) {
return graph.removeVertex(vertexName);
}
public static boolean removeEdge(String source, String target) {
return graph.removeEdge(source, target);
}
public static boolean addEdge(String source, String target, String edgeName, Double edgeWeight) {
return graph.addEdge(source, target, edgeName, edgeWeight);
}
public static GKAGraphInterface getGraph() {
return graph;
}
public static void saveGraph(File file, boolean decreapted){
graph.saveGraph(file, decreapted);
}
public static void shortesPathBroad(String source, String target){
graph.resetColor();
graph.colorEdge(graph.shortesPathBroad(source, target));
}
public static void dijkstra(String source, String target){
graph.resetColor();
graph.colorEdge(graph.dijkstra(source, target));
}
public static void floydWarschall(String source, String target) {
graph.resetColor();
graph.colorEdge(graph.floydWarschall(source, target));
}
public static void fordFulkerson(String source, String target) {
graph.resetColor();
graph.fordFulkerson(source, target);
}
public static void edmondKarp(String source, String target) {
graph.resetColor();
graph.edmondKarp(source, target);
}
public static void minimumSpanningTree() {
GKAGraphInterface tmpGraph = null;
if(minimumSpanningTree){
minimumSpanningTree = false;
tmpGraph = graph;
}else{
minimumSpanningTree = true;
tmpGraph = graph.getMinimumSpanningTree().getMinimumSpanningTree();
}
tmpGraph.addMessageReceiver(mainWindow);
tmpGraph.setLayout();
mainWindow.showMainPanel(tmpGraph);
mainWindow.pack();
}
public static void mstHeuristic(String startNode) {
GKAGraphInterface tmpGraph = null;
if(mstHeuristic){
mstHeuristic = false;
tmpGraph = graph;
}else{
mstHeuristic = true;
tmpGraph = graph.getMSTHeuristic(startNode).getTour();
}
tmpGraph.addMessageReceiver(mainWindow);
tmpGraph.setLayout();
mainWindow.showMainPanel(tmpGraph);
mainWindow.pack();
}
public static void nearestNeighbour(String startNode)
{
GKAGraphInterface tmpGraph = null;
if(nearestNeighbour)
{
nearestNeighbour = false;
tmpGraph = graph;
}else
{
nearestNeighbour = true;
tmpGraph = graph.getNearestNeighbour(startNode).getNearestNeighbourTour();
}
tmpGraph.addMessageReceiver(mainWindow);
tmpGraph.setLayout();
mainWindow.showMainPanel(tmpGraph);
mainWindow.pack();
}
}