Browse Source

incomplete Autosave over Edit-Tab

Jessey Widhalm 7 years ago
parent
commit
2e0729ab1c

+ 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]}

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

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

+ 64 - 5
src/ui/controller/Control.java

@@ -1,6 +1,7 @@
 package ui.controller;
 
 import java.awt.event.ActionListener;
+import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 
@@ -26,8 +27,10 @@ public class Control {
 	private final GlobalController globalController;
 	private final StoreController storeController;
 	private final LoadController loadController;
+	private final AutoSaveController autoSaveController;
 	private SimulationManager simulationManager;
-
+	private String autoPath = "";
+	
 	public Control(Model model) {
 		this.MODEL = model;
 
@@ -40,7 +43,16 @@ public class Control {
 		this.loadController = new LoadController(MODEL, categoryController, canvasController, objectController,
 				multiPurposeController);
 		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 */
@@ -84,12 +96,29 @@ public class Control {
 
 	/* Operations for Canvas */
 
-	public void AddEdgeOnCanvas(CpsEdge edge) {
+	public void AddEdgeOnCanvas(CpsEdge edge){
 		canvasController.addEdgeOnCanvas(edge);
+		try {
+			autoSave();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+	private void autoSave() throws IOException {
+		autoSaveController.increaseAutoSaveNr();
+		storeController.writeJSONFile(autoPath+autoSaveController.getAutoSaveNr());
 	}
 
 	public void removeEdgesOnCanvas(CpsEdge edge) {
 		canvasController.removeEdgesOnCanvas(edge);
+		try {
+			autoSave();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 	}
 
 	public void setSelecteEdge(CpsEdge edge) {
@@ -98,6 +127,12 @@ public class Control {
 
 	public void addObjectCanvas(CpsObject object) {
 		canvasController.addNewObject(object);
+		try {
+			autoSave();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 	}
 
 	public void setSelectedObjectID(int id) {
@@ -106,6 +141,12 @@ public class Control {
 
 	public void delCanvasObject(CpsObject obj) {
 		canvasController.deleteObjectOnCanvas(obj);
+		try {
+			autoSave();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 	}
 
 	/* Operations for Objects and Elements */
@@ -117,11 +158,11 @@ public class Control {
 		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);
 	}
 
-	public void deleteElementCanvas(HolonObject obj, HolonElement ele) {
+	public void deleteElementCanvas(HolonObject obj, HolonElement ele){
 		objectController.deleteElement(obj, ele);
 	}
 
@@ -164,6 +205,24 @@ public class Control {
 	public void setCanvas(MyCanvas can){
 		simulationManager.setCanvas(can);
 	}
+	
+	public String getUndoSave(){
+		autoSaveController.decreaseAutoSaveNr();
+		return autoPath+(autoSaveController.getAutoSaveNr());
+	}
+	
+	public String getRedoSave(){
+		autoSaveController.increaseAutoSaveNr();
+		return autoPath+(autoSaveController.getAutoSaveNr());
+	}
+	
+//	public void increaseAutoSaveNr(){
+//		autoSaveController.increaseAutoSaveNr();
+//	}
+//	
+//	public void decreaseAutoSaveNr(){
+//		autoSaveController.decreaseAutoSaveNr();
+//	}
 
 	/**
 	 * Getter for Model

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

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

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

@@ -61,7 +61,6 @@ import classes.HolonObject;
 import classes.HolonSwitch;
 import classes.HolonTransformer;
 import ui.controller.Control;
-import ui.controller.SimulationManager;
 import ui.model.Model;;
 
 public class GUI<E> implements CategoryListener {
@@ -179,6 +178,8 @@ public class GUI<E> implements CategoryListener {
 	private int xBTHIS;
 	private CpsObject temp = null;
 	private final JButton btnTest = new JButton("test");
+	private final JMenuItem mntmUndo = new JMenuItem("Undo");
+	private final JMenuItem mntmRedo = new JMenuItem("Redo");
 
 	/**
 	 * Create the application.
@@ -202,7 +203,31 @@ public class GUI<E> implements CategoryListener {
 		frmCyberPhysical = new JFrame();
 		frmCyberPhysical.setTitle("Cyber Physical Systems Model");
 		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);
 
@@ -219,6 +244,10 @@ public class GUI<E> implements CategoryListener {
 
 		menuBar.add(mnNewMenu_1);
 
+		mnNewMenu_1.add(mntmUndo);
+
+		mnNewMenu_1.add(mntmRedo);
+
 		menuBar.add(mnNewMenu_2);
 
 		menuBar.add(mnNewMenu_3);
@@ -953,6 +982,82 @@ 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();
+						}
+					}
+					unitGraph.empty();
+					tree.repaint();
+
+				} 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();
+						}
+					}
+					unitGraph.empty();
+					tree.repaint();
+
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+
+		});
+
 		timePanel = new TimePanel(model, controller);
 		timePanel.setBorder(null);
 		((JSlider) (timePanel.getComponent(1))).addChangeListener(new ChangeListener() {

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

@@ -14,6 +14,7 @@ import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
 import java.awt.geom.Line2D;
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Timer;
 import java.util.TimerTask;
@@ -462,8 +463,6 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 
 			e = new CpsEdge(n, tempCps);
 
-			// n.AddConnection(e);
-			// tempCps.AddConnection(e);
 			controller.AddEdgeOnCanvas(e);
 			System.out.println("node ID: " + n.getID());
 		}