浏览代码

fixed Import of Mapping

jascha Bohne 7 年之前
父节点
当前提交
05f2a2db9d

+ 33 - 4
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/graphs/MappingGraphManager.java

@@ -80,7 +80,7 @@ public class MappingGraphManager extends GraphManager implements EdgeCreatedList
 		mergeGraph(underlay, UNDERLAY, UNDERLAYER_MOVE_Y);
 		mergeGraph(operator, OPERATOR, OPERATOR_MOVE_Y);
 		autoMapSourcesAndSinks(underlay, operator);
-
+		
 		view.getCamera().resetView();
 	}
 
@@ -96,10 +96,13 @@ public class MappingGraphManager extends GraphManager implements EdgeCreatedList
 				resetCapacity(n);
 			}
 		}
+		
+		// recreates mapping edges from saved Attributes
+		autoMapLoadedEdgeAttributes(underlay, operator);
 
 		// recreates every mapping edge to properly calculate capacities
 		for (Edge e : g.getEdgeSet()) {
-			if ((boolean) e.getAttribute(ATTRIBUTE_KEY_MAPPING)) {
+			if (e.getAttribute(ATTRIBUTE_KEY_MAPPING) != null &&(boolean) e.getAttribute(ATTRIBUTE_KEY_MAPPING)) {
 				createEdge(e.getSourceNode().getId(), e.getTargetNode().getId());
 			}
 		}
@@ -377,6 +380,12 @@ public class MappingGraphManager extends GraphManager implements EdgeCreatedList
 		e = getGraph().addEdge(newID, operatorNode, underlayNode, true);
 		Debug.out("Created an directed edge with Id " + newID + " from " + operatorNode + " to " + underlayNode);
 
+		//adds an Attribute for loading Edges from file
+		GraphHelper.propagateAttribute(this.g, underlayNode, "mappingEdge", newID);
+		underlay.getGraph().getNode(underlayNode.getId().substring(8)).addAttribute("mappingEdge", newID);
+		GraphHelper.propagateAttribute(this.g, operatorNode, "mappingEdge", newID);
+		operator.getGraph().getNode(operatorNode.getId().substring(8)).addAttribute("mappingEdge", newID);
+
 		e.addAttribute("ui.class", UI_CLASS_MAPPING);
 		e.addAttribute(ATTRIBUTE_KEY_MAPPING, true);
 
@@ -531,10 +540,18 @@ public class MappingGraphManager extends GraphManager implements EdgeCreatedList
 	public void deleteEdge(final String id) {
 		Edge e = g.getEdge(id);
 		if ((boolean) e.getAttribute(ATTRIBUTE_KEY_MAPPING)) {
-			Node operatorNode = e.getSourceNode();
+			Node operatorNode = e.getSourceNode();		
 			Node underlayNode = e.getTargetNode();
+			
+			//delete mapping attriute
+			GraphHelper.propagateAttribute(this.g, underlayNode, "mappingEdge", null);
+			underlay.getGraph().getNode(underlayNode.getId().substring(8)).removeAttribute("mappingEdge");
+			GraphHelper.propagateAttribute(this.g, operatorNode, "mappingEdge", null);
+			operator.getGraph().getNode(operatorNode.getId().substring(8)).removeAttribute("mappingEdge");
+			
 			removeMapping(underlayNode, operatorNode);
 			super.deleteEdge(id);
+			
 		}
 	}
 
@@ -604,4 +621,16 @@ public class MappingGraphManager extends GraphManager implements EdgeCreatedList
 		return result;
 	}
 
-}
+	private void autoMapLoadedEdgeAttributes(GraphManager underlay2, GraphManager operator2) {
+		for (Node operatorNode : getOperatorNodeSet()) {
+			for (Node underlayNode : getUnderlayNodeSet()) {
+				String identifier = operatorNode.getAttribute("mappingEdge");
+				if (identifier != null && identifier.equals(underlayNode.getAttribute("mappingEdge"))) {
+					createEdge(operatorNode.getId(), underlayNode.getId());
+				}
+			}
+		}
+	}
+
+}
+

+ 4 - 19
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/io/GraphMLExporter.java

@@ -94,15 +94,15 @@ public class GraphMLExporter {
 
 		return fileName;
 	}
-	
-	
+
+
 	public void exportMapping(MyGraph g){
 		Stage stage = Main.getInstance().getPrimaryStage();
 		String fileName;
 		FileChooser fileChooser = new FileChooser();
 		fileChooser.setTitle("Saving graph");
-		fileChooser.setInitialFileName("*.graphmlSub");
-		ExtensionFilter standard = new ExtensionFilter("GraphML Mapping underlay Files", "*.graphmlSub");
+		fileChooser.setInitialFileName("*.graphmlMap");
+		ExtensionFilter standard = new ExtensionFilter("GraphML Mapping underlay Files", "*.graphmlMap");
 		fileChooser.getExtensionFilters().add(standard);
 		fileChooser.getExtensionFilters().add(new ExtensionFilter("all Files", "*.*"));
 		fileChooser.setSelectedExtensionFilter(standard);
@@ -113,20 +113,5 @@ public class GraphMLExporter {
 				writeGraph(g, fileName, false);
 			}
 		} catch (NullPointerException e) {}
-		fileChooser = new FileChooser();
-		fileChooser.setTitle("Saving graph");
-		fileChooser.setInitialFileName("*.graphmlMap"
-				+ "");
-		standard = new ExtensionFilter("GraphML Mapping Files", "*.graphmlMap");
-		fileChooser.getExtensionFilters().add(standard);
-		fileChooser.getExtensionFilters().add(new ExtensionFilter("all Files", "*.*"));
-		fileChooser.setSelectedExtensionFilter(standard);
-		try {
-			fileName = fileChooser.showSaveDialog(stage).getPath();
-			Main.getInstance().getGraphManager().setCurrentPath(fileName);
-			if (fileName != null) {
-				writeGraph(g, fileName, true);
-			}
-		} catch (NullPointerException e) {}
 	}
 }

+ 40 - 49
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/GraphDisplayManager.java

@@ -3,6 +3,8 @@ package de.tu_darmstadt.informatik.tk.scopviz.ui;
 import java.awt.Dimension;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
 
 import org.apache.commons.math3.exception.NullArgumentException;
 import org.graphstream.graph.Edge;
@@ -22,7 +24,9 @@ import javafx.beans.property.SimpleBooleanProperty;
 import javafx.event.EventHandler;
 import javafx.scene.input.ScrollEvent;
 import javafx.scene.layout.Pane;
+import javafx.stage.FileChooser;
 import javafx.stage.Stage;
+import javafx.stage.FileChooser.ExtensionFilter;
 
 /**
  * This class holds all GraphManagers, provides Functions to add Graphs and get
@@ -407,67 +411,54 @@ public final class GraphDisplayManager {
 	 * accordingly
 	 */
 	public static void readMapping() {
+		//import the root Graph
+		MyGraph g = null;
 		GraphMLImporter reader = new GraphMLImporter();
-		MyGraph g = reader.readGraph(getGraphStringID(count), Main.getInstance().getPrimaryStage());
-		Layer tempLayer = currentLayer;
-
-		// underlay Graph
-		MyGraph tempGraph = new MyGraph(getGraphStringID(count++));
-		count++;
-		for (Node n : g.getNodeSet()) {
-			String id = n.getId();
-			if (id.startsWith(MappingGraphManager.UNDERLAY)) {
-				id = id.substring(MappingGraphManager.UNDERLAY.length());
-				Node tempNode = tempGraph.addNode(id);
-				for (String s : n.getAttributeKeySet()) {
-					tempNode.addAttribute(s, (Object) n.getAttribute(s));
-				}
-			}
+		FileChooser fileChooser = new FileChooser();
+		fileChooser.setTitle("open graph");
+		ExtensionFilter standard = new ExtensionFilter("GraphML Mapping Files", "*.graphmlMap");
+		fileChooser.getExtensionFilters().add(standard);
+		fileChooser.getExtensionFilters().add(new ExtensionFilter("all Files", "*"));
+		fileChooser.setSelectedExtensionFilter(standard);
+		try {
+			String fileName = fileChooser.showOpenDialog(Main.getInstance().getPrimaryStage()).getPath();
+			Main.getInstance().getGraphManager().setCurrentPath(fileName);
+			g =  reader.readGraph(getGraphStringID(count++), fileName);
+			g.getId();
+		} catch (NullPointerException e) {
+			Debug.out("INFORMATION: Mapping loading aborted", 1);
+			return;
 		}
-		for (Edge e : g.getEdgeSet()) {
-			String id = e.getId();
-			if (id.startsWith(MappingGraphManager.UNDERLAY)) {
-				id = id.substring(MappingGraphManager.UNDERLAY.length());
-				Edge tempEdge = tempGraph.addEdge(id,
-						e.getSourceNode().getId().substring(MappingGraphManager.UNDERLAY.length()),
-						e.getTargetNode().getId().substring(MappingGraphManager.UNDERLAY.length()), e.isDirected());
-				for (String s : e.getAttributeKeySet()) {
-					tempEdge.addAttribute(s, (Object) e.getAttribute(s));
-				}
+		
+		
+		//splitting graphs
+		//saving the layer for reuse later
+		Layer tempLayer = currentLayer;
+		
+		//underlay graph
+		LinkedList<MyGraph> graphs = g.getAllSubGraphs();
+		Iterator<MyGraph> graphIter = graphs.iterator();
+		while(graphIter.hasNext()){
+			if(!"UNDERLAY".equalsIgnoreCase(graphIter.next().getAttribute("layer"))){
+				graphIter.remove();
 			}
 		}
-		// TODO get Graphmanager?
+		MyGraph tempGraph = GraphHelper.newMerge(false, graphs.toArray(new MyGraph[0]));
 		currentLayer = Layer.UNDERLAY;
 		addGraph(tempGraph, true);
 		GraphManager und = getGraphManager(Layer.UNDERLAY);
 
 		// operator graph
-		MyGraph tempGraph2 = new MyGraph(getGraphStringID(count++));
-		count++;
-		for (Node n : g.getNodeSet()) {
-			String id = n.getId();
-			if (id.startsWith(MappingGraphManager.OPERATOR)) {
-				id = id.substring(MappingGraphManager.OPERATOR.length());
-				Node tempNode = tempGraph2.addNode(id);
-				for (String s : n.getAttributeKeySet()) {
-					tempNode.addAttribute(s, (Object) n.getAttribute(s));
-				}
-			}
-		}
-		for (Edge e : g.getEdgeSet()) {
-			String id = e.getId();
-			if (id.startsWith(MappingGraphManager.OPERATOR)) {
-				id = id.substring(MappingGraphManager.OPERATOR.length());
-				Edge tempEdge = tempGraph2.addEdge(id,
-						e.getSourceNode().getId().substring(MappingGraphManager.OPERATOR.length()),
-						e.getTargetNode().getId().substring(MappingGraphManager.OPERATOR.length()), e.isDirected());
-				for (String s : e.getAttributeKeySet()) {
-					tempEdge.addAttribute(s, (Object) e.getAttribute(s));
-				}
+		graphs = g.getAllSubGraphs();
+		graphIter = graphs.iterator();
+		while(graphIter.hasNext()){
+			if(!"OPERATOR".equalsIgnoreCase(graphIter.next().getAttribute("layer"))){
+				graphIter.remove();
 			}
 		}
+		tempGraph = GraphHelper.newMerge(false, graphs.toArray(new MyGraph[0]));
 		currentLayer = Layer.OPERATOR;
-		addGraph(tempGraph2, true);
+		addGraph(tempGraph, true);
 		GraphManager op = getGraphManager(Layer.OPERATOR);
 
 		// Mapping graph