Bläddra i källkod

Merge branch 'Ohne_Drag_and_Drop' of https://git.tk.informatik.tu-darmstadt.de/carlos.garcia/praktikum-holons into Ohne_Drag_and_Drop

dominik.rieder 8 år sedan
förälder
incheckning
bcfec4268f

BIN
.gradle/2.2.1/taskArtifacts/cache.properties.lock


BIN
.gradle/2.2.1/taskArtifacts/fileHashes.bin


BIN
.gradle/2.2.1/taskArtifacts/fileSnapshots.bin


BIN
.gradle/2.2.1/taskArtifacts/outputFileStates.bin


BIN
.gradle/2.2.1/taskArtifacts/taskArtifacts.bin


+ 1 - 0
0

@@ -0,0 +1 @@
+{"CVSE5":["CVS",1,"Original",1,100.0,1],"CVSE6":["CVS",2,"Power",1,100.0,1],"CVSE7":["CVS",2,"Zero",10,100.0,1],"CVSE8":["CVS",2,"Rehab",10,100.0,1],"CVSE9":["CVS",2,"The Doctor",40,100.0,1],"CVSE10":["CVS",2,"Original",1,100.0,1],"CVSE1":["CVS",1,"Power",1,100.0,1],"CVSE2":["CVS",1,"Zero",10,100.0,1],"CVSE3":["CVS",1,"Rehab",10,100.0,1],"CVSE4":["CVS",1,"The Doctor",40,100.0,1],"CVSO1":["HolonObject","Power Plant","Power Plant",1,"\/Images\/power-plant.png",169,130],"ID":4,"CVSO2":["HolonObject","Power Plant","Power Plant",2,"\/Images\/power-plant.png",158,242],"CVSO3":["CpsNode","Node","Node",3,"\/Images\/node.png",311,187],"CG":["Energy","Building","Component"],"CGE5":["Energy","Power Plant","Original",1,100.0],"CGE4":["Energy","Power Plant","The Doctor",40,100.0],"CGE3":["Energy","Power Plant","Rehab",10,100.0],"CGE2":["Energy","Power Plant","Zero",10,100.0],"CGE1":["Energy","Power Plant","Power",1,100.0],"CGO4":["HolonSwitch","Component","Switch","\/Images\/switch-on.png"],"CGO3":["HolonTransformer","Component","Transformer","\/Images\/transformer-1.png"],"CGO2":["HolonObject","Building","House","\/Images\/home-2.png"],"EDGE1":[1,2,100.0,12400.0],"CGO1":["HolonObject","Energy","Power Plant","\/Images\/power-plant.png"],"EDGE2":[3,2,100.0,0.0]}

+ 33 - 0
src/ui/controller/AutoSaveController.java

@@ -0,0 +1,33 @@
+package ui.controller;
+
+import ui.model.Model;
+
+public class AutoSaveController {
+	private Model MODEL;
+	private int numberOfSaves = 20;
+	private int autoSaveNr, tmp = 0;
+	public AutoSaveController(Model model) {
+		this.MODEL = model;
+	}
+	
+	public void increaseAutoSaveNr(){
+		 autoSaveNr = MODEL.getAutoSaveNr()+1;
+		 tmp = MODEL.getAutoSaveNr();
+		if(autoSaveNr > numberOfSaves){
+			autoSaveNr = 0;
+		}
+		MODEL.setAutoSaveNr(autoSaveNr);
+	}
+	
+	public void decreaseAutoSaveNr() {
+		 autoSaveNr = MODEL.getAutoSaveNr()-1;
+		if(autoSaveNr < 0){
+			autoSaveNr = numberOfSaves;
+		}
+		MODEL.setAutoSaveNr(autoSaveNr);
+	}
+	
+	public int getAutoSaveNr(){
+		return MODEL.getAutoSaveNr();
+	}
+}

+ 78 - 6
src/ui/controller/Control.java

@@ -1,6 +1,7 @@
 package ui.controller;
 package ui.controller;
 
 
 import java.awt.event.ActionListener;
 import java.awt.event.ActionListener;
+import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 
 
@@ -26,8 +27,10 @@ public class Control {
 	private final GlobalController globalController;
 	private final GlobalController globalController;
 	private final StoreController storeController;
 	private final StoreController storeController;
 	private final LoadController loadController;
 	private final LoadController loadController;
+	private final AutoSaveController autoSaveController;
 	private SimulationManager simulationManager;
 	private SimulationManager simulationManager;
-
+	private String autoPath = "";
+	
 	public Control(Model model) {
 	public Control(Model model) {
 		this.MODEL = model;
 		this.MODEL = model;
 
 
@@ -40,7 +43,16 @@ public class Control {
 		this.loadController = new LoadController(MODEL, categoryController, canvasController, objectController,
 		this.loadController = new LoadController(MODEL, categoryController, canvasController, objectController,
 				multiPurposeController);
 				multiPurposeController);
 		this.simulationManager = new SimulationManager(MODEL);
 		this.simulationManager = new SimulationManager(MODEL);
-
+		this.autoSaveController = new AutoSaveController(MODEL);
+		autoPath = System.getProperty("user.home") + "/HolonGUI/Autosave/";
+		File dest = new File(autoPath);
+		dest.mkdirs();
+		try {
+			autoSave();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 	}
 	}
 
 
 	/* Operations for searching */
 	/* Operations for searching */
@@ -60,6 +72,12 @@ public class Control {
 
 
 	public void addObject(Category cat, String obj, ArrayList<HolonElement> ele, String img) {
 	public void addObject(Category cat, String obj, ArrayList<HolonElement> ele, String img) {
 		categoryController.addNewHolonObject(cat, obj, ele, img);
 		categoryController.addNewHolonObject(cat, obj, ele, img);
+		try {
+			autoSave();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 	}
 	}
 
 
 	public void addTransformer(Category cat, String obj) {
 	public void addTransformer(Category cat, String obj) {
@@ -84,12 +102,24 @@ public class Control {
 
 
 	/* Operations for Canvas */
 	/* Operations for Canvas */
 
 
-	public void AddEdgeOnCanvas(CpsEdge edge) {
+	public void AddEdgeOnCanvas(CpsEdge edge){
 		canvasController.addEdgeOnCanvas(edge);
 		canvasController.addEdgeOnCanvas(edge);
+		try {
+			autoSave();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 	}
 	}
 
 
 	public void removeEdgesOnCanvas(CpsEdge edge) {
 	public void removeEdgesOnCanvas(CpsEdge edge) {
 		canvasController.removeEdgesOnCanvas(edge);
 		canvasController.removeEdgesOnCanvas(edge);
+		try {
+			autoSave();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 	}
 	}
 
 
 	public void setSelecteEdge(CpsEdge edge) {
 	public void setSelecteEdge(CpsEdge edge) {
@@ -98,6 +128,12 @@ public class Control {
 
 
 	public void addObjectCanvas(CpsObject object) {
 	public void addObjectCanvas(CpsObject object) {
 		canvasController.addNewObject(object);
 		canvasController.addNewObject(object);
+		try {
+			autoSave();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 	}
 	}
 
 
 	public void setSelectedObjectID(int id) {
 	public void setSelectedObjectID(int id) {
@@ -106,6 +142,12 @@ public class Control {
 
 
 	public void delCanvasObject(CpsObject obj) {
 	public void delCanvasObject(CpsObject obj) {
 		canvasController.deleteObjectOnCanvas(obj);
 		canvasController.deleteObjectOnCanvas(obj);
+		try {
+			autoSave();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 	}
 	}
 
 
 	/* Operations for Objects and Elements */
 	/* Operations for Objects and Elements */
@@ -117,11 +159,11 @@ public class Control {
 		objectController.addNewElementIntoCategoryObject(catName, objName, eleName, amount, energy);
 		objectController.addNewElementIntoCategoryObject(catName, objName, eleName, amount, energy);
 	}
 	}
 
 
-	public void deleteElementCanvas(int id, String element) {
+	public void deleteElementCanvas(int id, String element){
 		objectController.deleteElementInCanvas(id, element);
 		objectController.deleteElementInCanvas(id, element);
 	}
 	}
 
 
-	public void deleteElementCanvas(HolonObject obj, HolonElement ele) {
+	public void deleteElementCanvas(HolonObject obj, HolonElement ele){
 		objectController.deleteElement(obj, ele);
 		objectController.deleteElement(obj, ele);
 	}
 	}
 
 
@@ -144,7 +186,7 @@ public class Control {
 
 
 	/* Operations for Loading and Storing */
 	/* Operations for Loading and Storing */
 	public void saveFile(String path) throws IOException {
 	public void saveFile(String path) throws IOException {
-		storeController.writeJSONFile(path);
+		storeController.writeSaveFile(path);
 	}
 	}
 
 
 	public void loadFile(String path) throws IOException {
 	public void loadFile(String path) throws IOException {
@@ -164,6 +206,36 @@ public class Control {
 	public void setCanvas(MyCanvas can){
 	public void setCanvas(MyCanvas can){
 		simulationManager.setCanvas(can);
 		simulationManager.setCanvas(can);
 	}
 	}
+	
+
+	private void autoSave() throws IOException {
+		autoSaveController.increaseAutoSaveNr();
+		storeController.writeSaveFile(autoPath+autoSaveController.getAutoSaveNr());
+	}
+	
+	public String getUndoSave(){
+		autoSaveController.decreaseAutoSaveNr();
+		if(!new File(autoPath + (autoSaveController.getAutoSaveNr())).exists()){
+			autoSaveController.increaseAutoSaveNr();
+		}
+		return autoPath+(autoSaveController.getAutoSaveNr());
+	}
+	
+	public String getRedoSave(){
+		autoSaveController.increaseAutoSaveNr();
+		if(!new File(autoPath+(autoSaveController.getAutoSaveNr())).exists()){
+			autoSaveController.decreaseAutoSaveNr();
+		}
+		return autoPath+(autoSaveController.getAutoSaveNr());
+	}
+	
+//	public void increaseAutoSaveNr(){
+//		autoSaveController.increaseAutoSaveNr();
+//	}
+//	
+//	public void decreaseAutoSaveNr(){
+//		autoSaveController.decreaseAutoSaveNr();
+//	}
 
 
 	/**
 	/**
 	 * Getter for Model
 	 * Getter for Model

+ 1 - 1
src/ui/controller/ObjectController.java

@@ -61,7 +61,7 @@ public class ObjectController {
 	public void addNewElementIntoCanvasObject(int id, String element, int amount, float energy) {
 	public void addNewElementIntoCanvasObject(int id, String element, int amount, float energy) {
 		HolonElement ele = new HolonElement(element, amount, energy);
 		HolonElement ele = new HolonElement(element, amount, energy);
 		ele.setSav("CVS");
 		ele.setSav("CVS");
-		ele.setObj(mpC.searchByID(id).getObjName());
+		ele.setObj(Integer.toString(id));
 		addElementIntoCanvasObject((HolonObject) mpC.searchByID(id), ele);
 		addElementIntoCanvasObject((HolonObject) mpC.searchByID(id), ele);
 	}
 	}
 
 

+ 23 - 12
src/ui/controller/StoreController.java

@@ -33,20 +33,23 @@ public class StoreController {
 	 * 
 	 * 
 	 * @throws IOException
 	 * @throws IOException
 	 */
 	 */
-	public void writeJSONFile(String path) throws IOException {
+	public void writeSaveFile(String path) throws IOException {
 
 
 		JSONObject json = new JSONObject();
 		JSONObject json = new JSONObject();
 
 
 		json.put("ID", idCounter.getCounter());
 		json.put("ID", idCounter.getCounter());
 		writeCategory(json);
 		writeCategory(json);
-		writeObjects(json);
-		writeElements(json);
+		writeCategoryObjects(json);
+		writeCanvasObjects(json);
+		writeCategoryElements(json);
+		writeCanvasElements(json);
 		writeEdges(json);
 		writeEdges(json);
 		writeElementGraph(json);
 		writeElementGraph(json);
 
 
 		FileWriter writer = new FileWriter(path);
 		FileWriter writer = new FileWriter(path);
-		writer.write(json.toJSONString());getClass();
-		
+		writer.write(json.toJSONString());
+		getClass();
+
 		writer.flush();
 		writer.flush();
 		writer.close();
 		writer.close();
 	}
 	}
@@ -71,7 +74,7 @@ public class StoreController {
 	 * 
 	 * 
 	 * @param json
 	 * @param json
 	 */
 	 */
-	public void writeObjects(JSONObject json) {
+	public void writeCategoryObjects(JSONObject json) {
 
 
 		JSONArray arr = new JSONArray();
 		JSONArray arr = new JSONArray();
 		int i = 1;
 		int i = 1;
@@ -85,8 +88,12 @@ public class StoreController {
 				json.put("CGO" + i++, arr);
 				json.put("CGO" + i++, arr);
 				arr = new JSONArray();
 				arr = new JSONArray();
 			}
 			}
+	}
 
 
-		i = 1;
+	public void writeCanvasObjects(JSONObject json) {
+
+		JSONArray arr = new JSONArray();
+		int i = 1;
 		for (CpsObject cps : MODEL.getObjectsOnCanvas()) {
 		for (CpsObject cps : MODEL.getObjectsOnCanvas()) {
 			arr.add(getObjectType(cps));
 			arr.add(getObjectType(cps));
 			arr.add(cps.getObjName());
 			arr.add(cps.getObjName());
@@ -97,8 +104,6 @@ public class StoreController {
 			arr.add(cps.getPosition().y);
 			arr.add(cps.getPosition().y);
 			json.put("CVSO" + i++, arr);
 			json.put("CVSO" + i++, arr);
 			arr = new JSONArray();
 			arr = new JSONArray();
-			;
-
 		}
 		}
 	}
 	}
 
 
@@ -107,7 +112,7 @@ public class StoreController {
 	 * 
 	 * 
 	 * @param json
 	 * @param json
 	 */
 	 */
-	public void writeElements(JSONObject json) {
+	public void writeCategoryElements(JSONObject json) {
 
 
 		JSONArray arr = new JSONArray();
 		JSONArray arr = new JSONArray();
 		int i = 1;
 		int i = 1;
@@ -125,12 +130,18 @@ public class StoreController {
 						arr = new JSONArray();
 						arr = new JSONArray();
 					}
 					}
 
 
-		i = 1;
+		
+	}
+	
+	public void writeCanvasElements(JSONObject json) {
+		
+		JSONArray arr = new JSONArray();
+		int i = 1;
 		for (CpsObject cps : MODEL.getObjectsOnCanvas()) {
 		for (CpsObject cps : MODEL.getObjectsOnCanvas()) {
 			if (cps instanceof HolonObject)
 			if (cps instanceof HolonObject)
 				for (HolonElement ele : ((HolonObject) cps).getElements()) {
 				for (HolonElement ele : ((HolonObject) cps).getElements()) {
 					arr.add(ele.getSav());
 					arr.add(ele.getSav());
-					arr.add(cps.getID());
+					arr.add(ele.getObj());
 					arr.add(ele.getEleName());
 					arr.add(ele.getEleName());
 					arr.add(ele.getAmount());
 					arr.add(ele.getAmount());
 					arr.add(ele.getEnergy());
 					arr.add(ele.getEnergy());

+ 9 - 0
src/ui/model/Model.java

@@ -27,6 +27,7 @@ public class Model {
 	private CpsEdge selectedEdge;
 	private CpsEdge selectedEdge;
 
 
 	private int selectedID = 0;
 	private int selectedID = 0;
+	private int autoSaveNr = -1;
 	// eventuell wenn Canvasgröße gewählt werden kann
 	// eventuell wenn Canvasgröße gewählt werden kann
 	private int HEIGHT;
 	private int HEIGHT;
 	private int WIDTH;
 	private int WIDTH;
@@ -317,5 +318,13 @@ public class Model {
 	public void setCvsObjIdx(HashMap<Integer, Integer> cvsObjIdx) {
 	public void setCvsObjIdx(HashMap<Integer, Integer> cvsObjIdx) {
 		this.cvsObjIdx = cvsObjIdx;
 		this.cvsObjIdx = cvsObjIdx;
 	}
 	}
+	
+	public void setAutoSaveNr(int autoSaveNr){
+		this.autoSaveNr = autoSaveNr;
+	}
+	
+	public int getAutoSaveNr(){
+		return autoSaveNr;
+	}
 
 
 }
 }

+ 1 - 9
src/ui/view/AddObjectPopUp.java

@@ -168,15 +168,6 @@ public class AddObjectPopUp extends JDialog {
 						new ImageIcon(filePath).getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH));
 						new ImageIcon(filePath).getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH));
 				if(icon != null)
 				if(icon != null)
 				lblImagePreview.setIcon(icon);
 				lblImagePreview.setIcon(icon);
-			
-				
-//				sourcePath.setText(obj.getImage());
-//				if (sourcePath.getText().startsWith("/Images/")) {
-//					sourcePath
-//							.setText(System.getProperty("user.home") + "/praktikum-holons/res/" + sourcePath.getText());
-//				}
-//				filePath = sourcePath.getText();
-//				selectedFile = new File(sourcePath.getText());
 			}
 			}
 			sourcePath.setBounds(148, 77, 271, 20);
 			sourcePath.setBounds(148, 77, 271, 20);
 			contentPanel.add(sourcePath);
 			contentPanel.add(sourcePath);
@@ -187,6 +178,7 @@ public class AddObjectPopUp extends JDialog {
 			btnAddDefaultElement.addActionListener(new ActionListener() {
 			btnAddDefaultElement.addActionListener(new ActionListener() {
 				public void actionPerformed(ActionEvent arg0) {
 				public void actionPerformed(ActionEvent arg0) {
 					addElement = new AddElementPopUp();
 					addElement = new AddElementPopUp();
+					addElement.setActualCps(obj);
 					addElement.setVisible(true);
 					addElement.setVisible(true);
 					HolonElement hl = addElement.getElement();
 					HolonElement hl = addElement.getElement();
 					addElement(hl);
 					addElement(hl);

+ 107 - 3
src/ui/view/GUI.java

@@ -61,7 +61,6 @@ import classes.HolonObject;
 import classes.HolonSwitch;
 import classes.HolonSwitch;
 import classes.HolonTransformer;
 import classes.HolonTransformer;
 import ui.controller.Control;
 import ui.controller.Control;
-import ui.controller.SimulationManager;
 import ui.model.Model;;
 import ui.model.Model;;
 
 
 public class GUI<E> implements CategoryListener {
 public class GUI<E> implements CategoryListener {
@@ -179,6 +178,8 @@ public class GUI<E> implements CategoryListener {
 	private int xBTHIS;
 	private int xBTHIS;
 	private CpsObject temp = null;
 	private CpsObject temp = null;
 	private final JButton btnTest = new JButton("test");
 	private final JButton btnTest = new JButton("test");
+	private final JMenuItem mntmUndo = new JMenuItem("Undo");
+	private final JMenuItem mntmRedo = new JMenuItem("Redo");
 
 
 	/**
 	/**
 	 * Create the application.
 	 * Create the application.
@@ -202,7 +203,31 @@ public class GUI<E> implements CategoryListener {
 		frmCyberPhysical = new JFrame();
 		frmCyberPhysical = new JFrame();
 		frmCyberPhysical.setTitle("Cyber Physical Systems Model");
 		frmCyberPhysical.setTitle("Cyber Physical Systems Model");
 		frmCyberPhysical.setBounds(100, 100, 1000, 800);
 		frmCyberPhysical.setBounds(100, 100, 1000, 800);
-		frmCyberPhysical.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		// frmCyberPhysical.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		frmCyberPhysical.addWindowListener(new java.awt.event.WindowAdapter() {
+			@Override
+			public void windowClosing(java.awt.event.WindowEvent windowEvent) {
+				if (JOptionPane.showConfirmDialog(frmCyberPhysical, "Are you sure to close this window?",
+						"Really Closing?", JOptionPane.YES_NO_OPTION,
+						JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
+					deleteDirectory(new File(System.getProperty("user.home") + "/HolonGUI/Autosave"));
+					System.exit(0);
+				}
+			}
+
+			private void deleteDirectory(File path) {
+				if (path.exists()) {
+					File[] files = path.listFiles();
+					for (int i = 0; i < files.length; i++) {
+						if (files[i].isDirectory()) {
+							deleteDirectory(files[i]);
+						} else {
+							files[i].delete();
+						}
+					}
+				}
+			}
+		});
 
 
 		frmCyberPhysical.setJMenuBar(menuBar);
 		frmCyberPhysical.setJMenuBar(menuBar);
 
 
@@ -219,6 +244,10 @@ public class GUI<E> implements CategoryListener {
 
 
 		menuBar.add(mnNewMenu_1);
 		menuBar.add(mnNewMenu_1);
 
 
+		mnNewMenu_1.add(mntmUndo);
+
+		mnNewMenu_1.add(mntmRedo);
+
 		menuBar.add(mnNewMenu_2);
 		menuBar.add(mnNewMenu_2);
 
 
 		menuBar.add(mnNewMenu_3);
 		menuBar.add(mnNewMenu_3);
@@ -354,6 +383,7 @@ public class GUI<E> implements CategoryListener {
 							ele.getEnergy());
 							ele.getEnergy());
 					refreshTableHolonElement();
 					refreshTableHolonElement();
 					refreshTableProperties();
 					refreshTableProperties();
+					controller.calculateStateForTimeStep(model.getCurIteration());
 				}
 				}
 			}
 			}
 		});
 		});
@@ -369,6 +399,7 @@ public class GUI<E> implements CategoryListener {
 						controller.deleteElementCanvas(obj.getID(), tempElement.getEleName());
 						controller.deleteElementCanvas(obj.getID(), tempElement.getEleName());
 						refreshTableHolonElement();
 						refreshTableHolonElement();
 						refreshTableProperties();
 						refreshTableProperties();
+						controller.calculateStateForTimeStep(model.getCurIteration());
 					}
 					}
 				}
 				}
 			}
 			}
@@ -461,6 +492,8 @@ public class GUI<E> implements CategoryListener {
 						}
 						}
 						refreshTableProperties();
 						refreshTableProperties();
 						tableModelHolonElement.fireTableDataChanged();
 						tableModelHolonElement.fireTableDataChanged();
+						controller.calculateStateForTimeStep(model.getCurIteration());
+						unitGraph.repaint();
 					}
 					}
 				} catch (Exception e) {
 				} catch (Exception e) {
 
 
@@ -698,7 +731,8 @@ public class GUI<E> implements CategoryListener {
 								"Please select a Category first before adding " + selectedOption + ".");
 								"Please select a Category first before adding " + selectedOption + ".");
 					}
 					}
 					if (selectedNode.getLevel() == 1) {
 					if (selectedNode.getLevel() == 1) {
-						addObjectPopUP = new AddObjectPopUp(false, null, null);
+						CpsObject tmp = new HolonObject("");
+						addObjectPopUP = new AddObjectPopUp(false, tmp, null);
 						addObjectPopUP.setVisible(true);
 						addObjectPopUP.setVisible(true);
 						addObjectPopUP.setController(controller);
 						addObjectPopUP.setController(controller);
 						addObjectPopUP.setCategory(selectedNode.toString());
 						addObjectPopUP.setCategory(selectedNode.toString());
@@ -948,6 +982,76 @@ public class GUI<E> implements CategoryListener {
 			}
 			}
 		});
 		});
 
 
+		mntmUndo.addActionListener(new java.awt.event.ActionListener() {
+
+			@Override
+			public void actionPerformed(java.awt.event.ActionEvent evt) {
+
+				menuUndoActionPerformed(evt);
+
+			}
+
+			private void menuUndoActionPerformed(java.awt.event.ActionEvent evt) {
+				try {
+					controller.loadFile(controller.getUndoSave());
+					canvas.repaint();
+					ArrayList<HolonElement> tempList = new ArrayList<>();
+					for (CpsObject cps : model.getObjectsOnCanvas()) {
+						if (cps instanceof HolonObject) {
+							for (HolonElement h : ((HolonObject) cps).getElements()) {
+								tempList.add(h);
+								unitGraph.repaintWithNewElement(tempList);
+								unitGraph.fillArrayofValue();
+								tempList.remove(0);
+							}
+						} else if (cps instanceof HolonSwitch) {
+							unitGraph.repaintWithNewSwitch((HolonSwitch) cps);
+							unitGraph.fillArrayofBooleans();
+						}
+					}
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+
+		});
+
+		mntmRedo.addActionListener(new java.awt.event.ActionListener() {
+
+			@Override
+			public void actionPerformed(java.awt.event.ActionEvent evt) {
+
+				menuUndoActionPerformed(evt);
+
+			}
+
+			private void menuUndoActionPerformed(java.awt.event.ActionEvent evt) {
+				try {
+					controller.loadFile(controller.getRedoSave());
+					canvas.repaint();
+					ArrayList<HolonElement> tempList = new ArrayList<>();
+					for (CpsObject cps : model.getObjectsOnCanvas()) {
+						if (cps instanceof HolonObject) {
+							for (HolonElement h : ((HolonObject) cps).getElements()) {
+								tempList.add(h);
+								unitGraph.repaintWithNewElement(tempList);
+								unitGraph.fillArrayofValue();
+								tempList.remove(0);
+							}
+						} else if (cps instanceof HolonSwitch) {
+							unitGraph.repaintWithNewSwitch((HolonSwitch) cps);
+							unitGraph.fillArrayofBooleans();
+						}
+					}
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+
+		});
+
 		timePanel = new TimePanel(model, controller);
 		timePanel = new TimePanel(model, controller);
 		timePanel.setBorder(null);
 		timePanel.setBorder(null);
 		((JSlider) (timePanel.getComponent(1))).addChangeListener(new ChangeListener() {
 		((JSlider) (timePanel.getComponent(1))).addChangeListener(new ChangeListener() {

+ 2 - 4
src/ui/view/MyCanvas.java

@@ -14,6 +14,7 @@ import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
 import java.awt.event.MouseMotionListener;
 import java.awt.geom.Line2D;
 import java.awt.geom.Line2D;
 import java.io.File;
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Timer;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.TimerTask;
@@ -283,7 +284,6 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 			x = e.getX();
 			x = e.getX();
 			y = e.getY();
 			y = e.getY();
 			dragging = false;
 			dragging = false;
-			tempCps.setPosition(e.getX() - controller.getScaleDiv2(), e.getY() - controller.getScaleDiv2());
 		}
 		}
 
 
 		// Rightclick List
 		// Rightclick List
@@ -297,6 +297,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		}
 		}
 
 
 		doMark = false;
 		doMark = false;
+		controller.calculateStateForTimeStep(model.getCurIteration());
 		repaint();
 		repaint();
 	}
 	}
 
 
@@ -413,7 +414,6 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 				}
 				}
 				if (newEdge) {
 				if (newEdge) {
 					e = new CpsEdge(cps, tempCps);
 					e = new CpsEdge(cps, tempCps);
-					controller.calculateStateForTimeStep(model.getCurIteration());
 					controller.AddEdgeOnCanvas(e);
 					controller.AddEdgeOnCanvas(e);
 				}
 				}
 			}
 			}
@@ -463,8 +463,6 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 
 
 			e = new CpsEdge(n, tempCps);
 			e = new CpsEdge(n, tempCps);
 
 
-			// n.AddConnection(e);
-			// tempCps.AddConnection(e);
 			controller.AddEdgeOnCanvas(e);
 			controller.AddEdgeOnCanvas(e);
 			System.out.println("node ID: " + n.getID());
 			System.out.println("node ID: " + n.getID());
 		}
 		}

+ 3 - 10
src/ui/view/UnitGraph.java

@@ -175,8 +175,8 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 		g2.setStroke(new BasicStroke(1));
 		g2.setStroke(new BasicStroke(1));
 		g2.drawLine((model.getCurIteration()) * this.getWidth() / (model.getIterations() - 1), 0,
 		g2.drawLine((model.getCurIteration()) * this.getWidth() / (model.getIterations() - 1), 0,
 				(model.getCurIteration()) * this.getWidth() / (model.getIterations() - 1), this.getHeight());
 				(model.getCurIteration()) * this.getWidth() / (model.getIterations() - 1), this.getHeight());
-		
-		//algorithmus
+
+		// algorithmus
 		controller.calculateStateForTimeStep(model.getCurIteration());
 		controller.calculateStateForTimeStep(model.getCurIteration());
 	}
 	}
 
 
@@ -584,14 +584,7 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 			MAXIMUM = he.getEnergy();
 			MAXIMUM = he.getEnergy();
 			he.setGraphPoints((LinkedList<Point>) pointList.clone());
 			he.setGraphPoints((LinkedList<Point>) pointList.clone());
 			for (int i = 0; i < arrayOfFloats.length; i++) {
 			for (int i = 0; i < arrayOfFloats.length; i++) {
-				if (he.getEnergy() >= 0) {
-					he.getEnergyAt()[i] = convertToValueY(
-							getYValueAt_2((int) (i * width / (model.getIterations() - 1))));
-				} else {
-					he.getEnergyAt()[i] = -convertToValueY(
-							getYValueAt_2((int) (i * width / (model.getIterations() - 1))));
-				}
-
+				he.getEnergyAt()[i] = convertToValueY(getYValueAt_2((int) (i * width / (model.getIterations() - 1))));
 			}
 			}
 			arrayOfFloats = he.getEnergyAt();
 			arrayOfFloats = he.getEnergyAt();
 		}
 		}