|
@@ -19,10 +19,15 @@ import ui.model.Model;
|
|
|
import ui.view.MyCanvas;
|
|
|
import ui.view.TimePanel;
|
|
|
|
|
|
-
|
|
|
+/**
|
|
|
+ * The Class represents the controller in the model, controller view Pattern.
|
|
|
+ *
|
|
|
+ * @author Gruppe14
|
|
|
+ *
|
|
|
+ */
|
|
|
public class Control {
|
|
|
|
|
|
- private Model MODEL;
|
|
|
+ private Model model;
|
|
|
|
|
|
private ActionListener actionListener;
|
|
|
|
|
@@ -38,23 +43,29 @@ public class Control {
|
|
|
private SimulationManager simulationManager;
|
|
|
private String autoPath = "";
|
|
|
|
|
|
+ /**
|
|
|
+ * Constructor.
|
|
|
+ *
|
|
|
+ * @param model
|
|
|
+ * the Model
|
|
|
+ */
|
|
|
public Control(Model model) {
|
|
|
- this.MODEL = model;
|
|
|
-
|
|
|
- this.multiPurposeController = new MultiPurposeController(MODEL);
|
|
|
- this.categoryController = new CategoryController(MODEL, multiPurposeController);
|
|
|
- this.objectController = new ObjectController(MODEL, multiPurposeController);
|
|
|
- this.canvasController = new CanvasController(MODEL, multiPurposeController);
|
|
|
- this.globalController = new GlobalController(MODEL);
|
|
|
- this.storeController = new StoreController(MODEL);
|
|
|
- this.loadController = new LoadController(MODEL, categoryController, canvasController, objectController,
|
|
|
+ this.model = model;
|
|
|
+
|
|
|
+ this.multiPurposeController = new MultiPurposeController(model);
|
|
|
+ this.categoryController = new CategoryController(model, multiPurposeController);
|
|
|
+ this.objectController = new ObjectController(model, multiPurposeController);
|
|
|
+ this.canvasController = new CanvasController(model, multiPurposeController);
|
|
|
+ this.globalController = new GlobalController(model);
|
|
|
+ this.storeController = new StoreController(model);
|
|
|
+ this.loadController = new LoadController(model, categoryController, canvasController, objectController,
|
|
|
multiPurposeController);
|
|
|
- this.simulationManager = new SimulationManager(MODEL);
|
|
|
- this.autoSaveController = new AutoSaveController(MODEL);
|
|
|
- this.consoleController = new ConsoleController(MODEL);
|
|
|
+ this.simulationManager = new SimulationManager(model);
|
|
|
+ this.autoSaveController = new AutoSaveController(model);
|
|
|
+ this.consoleController = new ConsoleController(model);
|
|
|
autoPath = System.getProperty("user.home") + "/HolonGUI/Autosave/";
|
|
|
File dest = new File(autoPath);
|
|
|
- deleteDirectory(dest);
|
|
|
+ //deleteDirectory(dest);
|
|
|
dest.mkdirs();
|
|
|
try {
|
|
|
autoSave();
|
|
@@ -64,6 +75,12 @@ public class Control {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Delete a Directory.
|
|
|
+ *
|
|
|
+ * @param path
|
|
|
+ * to delete
|
|
|
+ */
|
|
|
public void deleteDirectory(File path) {
|
|
|
if (path.exists()) {
|
|
|
File[] files = path.listFiles();
|
|
@@ -80,58 +97,148 @@ public class Control {
|
|
|
|
|
|
/* Operations for searching */
|
|
|
|
|
|
- public AbstractCpsObject searchByID(int ID) {
|
|
|
- return multiPurposeController.searchByID(ID);
|
|
|
+ /**
|
|
|
+ * Search for Object by ID.
|
|
|
+ *
|
|
|
+ * @param id the id of the Object
|
|
|
+ * @return the CpsObject
|
|
|
+ */
|
|
|
+ public AbstractCpsObject searchByID(int id) {
|
|
|
+ return multiPurposeController.searchByID(id);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Search for Object in a Category.
|
|
|
+ *
|
|
|
+ * @param category
|
|
|
+ * name of the Category
|
|
|
+ * @param object
|
|
|
+ * Name of the Object
|
|
|
+ * @return The Object
|
|
|
+ */
|
|
|
public AbstractCpsObject searchCategoryObject(String category, String object) {
|
|
|
return multiPurposeController.searchCatObj(multiPurposeController.searchCat(category), object);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * search for category.
|
|
|
+ *
|
|
|
+ * @param cat name of the Category
|
|
|
+ * @return the Category
|
|
|
+ */
|
|
|
public Category searchCategory(String cat) {
|
|
|
return multiPurposeController.searchCat(cat);
|
|
|
}
|
|
|
|
|
|
/* Operations for Categories and Objects */
|
|
|
+
|
|
|
+ /**
|
|
|
+ * init default category and objects.
|
|
|
+ */
|
|
|
public void resetCategorys() {
|
|
|
categoryController.initCategories();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Adds New Category into Model.
|
|
|
+ *
|
|
|
+ * @param cat
|
|
|
+ * name of the new Category
|
|
|
+ */
|
|
|
public void addCategory(String cat) {
|
|
|
categoryController.addNewCategory(cat);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Add new Holon Object to a Category.
|
|
|
+ *
|
|
|
+ * @param cat
|
|
|
+ * Category
|
|
|
+ * @param obj
|
|
|
+ * New Object Name
|
|
|
+ * @param ele Array of Elements
|
|
|
+ * @param img
|
|
|
+ * the image Path
|
|
|
+ */
|
|
|
public void addObject(Category cat, String obj, ArrayList<HolonElement> ele, String img) {
|
|
|
categoryController.addNewHolonObject(cat, obj, ele, img);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Add new Holon Transformer to a Category.
|
|
|
+ *
|
|
|
+ * @param cat
|
|
|
+ * Category
|
|
|
+ * @param obj
|
|
|
+ * New Object Name
|
|
|
+ */
|
|
|
public void addTransformer(Category cat, String obj) {
|
|
|
categoryController.addNewHolonTransformer(cat, obj, "/Images/transformer-1.png");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Add new Holon Switch to a Category.
|
|
|
+ *
|
|
|
+ * @param cat
|
|
|
+ * Category
|
|
|
+ * @param obj
|
|
|
+ * New Object Name
|
|
|
+ */
|
|
|
public void addSwitch(Category cat, String obj) {
|
|
|
categoryController.addNewHolonSwitch(cat, obj, "/Images/switch-on.png");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * delete a given Category.
|
|
|
+ *
|
|
|
+ * @param cat
|
|
|
+ * the Category
|
|
|
+ */
|
|
|
public void deleteCategory(String cat) {
|
|
|
categoryController.deleteCategory(cat);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Delete an Object from a Category.
|
|
|
+ *
|
|
|
+ * @param cat
|
|
|
+ * the Category
|
|
|
+ * @param obj
|
|
|
+ * the Object
|
|
|
+ */
|
|
|
public void delObjectCategory(String cat, String obj) {
|
|
|
categoryController.deleteObject(cat, obj);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * deletes a selectedObject.
|
|
|
+ *
|
|
|
+ * @param obj
|
|
|
+ * Cpsobject
|
|
|
+ */
|
|
|
public void deleteSelectedObject(AbstractCpsObject obj) {
|
|
|
objectController.deleteSelectedObject(obj);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * add an Object to selectedObject.
|
|
|
+ *
|
|
|
+ * @param obj
|
|
|
+ * AbstractCpsobject
|
|
|
+ */
|
|
|
public void addSelectedObject(AbstractCpsObject obj) {
|
|
|
objectController.addSelectedObject(obj);
|
|
|
}
|
|
|
|
|
|
/* Operations for Canvas */
|
|
|
|
|
|
- public void AddEdgeOnCanvas(CpsEdge edge) {
|
|
|
+ /**
|
|
|
+ * Add an edge to the Canvas.
|
|
|
+ *
|
|
|
+ * @param edge
|
|
|
+ * the edge
|
|
|
+ */
|
|
|
+ public void addEdgeOnCanvas(CpsEdge edge) {
|
|
|
canvasController.addEdgeOnCanvas(edge);
|
|
|
try {
|
|
|
autoSave();
|
|
@@ -141,6 +248,12 @@ public class Control {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Removes an Edge from the Canvas.
|
|
|
+ *
|
|
|
+ * @param edge
|
|
|
+ * the edge to remove
|
|
|
+ */
|
|
|
public void removeEdgesOnCanvas(CpsEdge edge) {
|
|
|
canvasController.removeEdgesOnCanvas(edge);
|
|
|
try {
|
|
@@ -151,10 +264,22 @@ public class Control {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Set the selected Edge.
|
|
|
+ *
|
|
|
+ * @param edge
|
|
|
+ * that is selected
|
|
|
+ */
|
|
|
public void setSelecteEdge(CpsEdge edge) {
|
|
|
- MODEL.setSelectedEdge(edge);
|
|
|
+ model.setSelectedEdge(edge);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Add a new Object.
|
|
|
+ *
|
|
|
+ * @param object
|
|
|
+ * the Object
|
|
|
+ */
|
|
|
public void addObjectCanvas(AbstractCpsObject object) {
|
|
|
canvasController.addNewObject(object);
|
|
|
if (!(object instanceof CpsNode)) {
|
|
@@ -167,10 +292,22 @@ public class Control {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Returns the ID of the selected Object 0 = no Object is selected.
|
|
|
+ *
|
|
|
+ * @param id
|
|
|
+ * the ID of the selected Object
|
|
|
+ */
|
|
|
public void setSelectedObjectID(int id) {
|
|
|
objectController.setSelectedObjectID(id);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Deletes an CpsObject on the Canvas and its connections.
|
|
|
+ *
|
|
|
+ * @param obj
|
|
|
+ * AbstractCpsObject
|
|
|
+ */
|
|
|
public void delCanvasObject(AbstractCpsObject obj) {
|
|
|
canvasController.deleteObjectOnCanvas(obj);
|
|
|
try {
|
|
@@ -182,71 +319,187 @@ public class Control {
|
|
|
}
|
|
|
|
|
|
/* Operations for Objects and Elements */
|
|
|
- public void addElementCanvasObject(int ID, String ele, int amount, float energy) {
|
|
|
- objectController.addNewElementIntoCanvasObject(ID, ele, amount, energy);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Add a new Element into a Object on the Canvas.
|
|
|
+ *
|
|
|
+ * @param id
|
|
|
+ * the Object ID
|
|
|
+ * @param ele
|
|
|
+ * the Name of the Element
|
|
|
+ * @param amount
|
|
|
+ * the Amount
|
|
|
+ * @param energy
|
|
|
+ * the Energy
|
|
|
+ */
|
|
|
+ public void addElementCanvasObject(int id, String ele, int amount, float energy) {
|
|
|
+ objectController.addNewElementIntoCanvasObject(id, ele, amount, energy);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Add a new Element into a Object in Category.
|
|
|
+ *
|
|
|
+ * @param catName
|
|
|
+ * the Category
|
|
|
+ * @param objName
|
|
|
+ * the Object
|
|
|
+ * @param eleName
|
|
|
+ * the Element Name
|
|
|
+ * @param amount
|
|
|
+ * the amount
|
|
|
+ * @param energy
|
|
|
+ * the Energy
|
|
|
+ */
|
|
|
public void addElementCategoryObject(String catName, String objName, String eleName, int amount, float energy) {
|
|
|
objectController.addNewElementIntoCategoryObject(catName, objName, eleName, amount, energy);
|
|
|
}
|
|
|
|
|
|
- public void deleteElementCanvas(int id, int elementId) {
|
|
|
- objectController.deleteElementInCanvas(id, elementId);
|
|
|
+ /**
|
|
|
+ * deletes a Element from a given Canvas Object.
|
|
|
+ *
|
|
|
+ * @param id
|
|
|
+ * the ID
|
|
|
+ * @param elementid
|
|
|
+ * the Element ID
|
|
|
+ */
|
|
|
+ public void deleteElementCanvas(int id, int elementid) {
|
|
|
+ objectController.deleteElementInCanvas(id, elementid);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * deletes a Element from a given Object.
|
|
|
+ *
|
|
|
+ * @param obj
|
|
|
+ * the Oject
|
|
|
+ * @param ele
|
|
|
+ * the Element
|
|
|
+ */
|
|
|
public void deleteElementCanvas(HolonObject obj, HolonElement ele) {
|
|
|
objectController.deleteElement(obj, ele);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Sets the ClipboardObjects.
|
|
|
+ *
|
|
|
+ * @param list
|
|
|
+ * Array of Objects
|
|
|
+ */
|
|
|
public void setClipboardObjects(ArrayList<AbstractCpsObject> list) {
|
|
|
- MODEL.setClipboradObjects(list);
|
|
|
+ model.setClipboradObjects(list);
|
|
|
}
|
|
|
|
|
|
/* Global Operations */
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Returns SCALE.
|
|
|
+ *
|
|
|
+ * @return SCALE
|
|
|
+ */
|
|
|
public int getScale() {
|
|
|
return globalController.getScale();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Returns SCALE Divided by 2.
|
|
|
+ *
|
|
|
+ * @return SCALE Divided by 2
|
|
|
+ */
|
|
|
public int getScaleDiv2() {
|
|
|
return globalController.getScaleDiv2();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Changes the value of SCALE and SCALEDIV2.
|
|
|
+ *
|
|
|
+ * @param s
|
|
|
+ * Scale
|
|
|
+ */
|
|
|
public void setScale(int s) {
|
|
|
globalController.setScale(s);
|
|
|
}
|
|
|
|
|
|
- public void setCurIteration(int cur_it) {
|
|
|
- globalController.setCurIteration(cur_it);
|
|
|
+ /**
|
|
|
+ * sets the current Iteration.
|
|
|
+ *
|
|
|
+ * @param curit
|
|
|
+ * the current Iteration
|
|
|
+ */
|
|
|
+ public void setCurIteration(int curit) {
|
|
|
+ globalController.setCurIteration(curit);
|
|
|
}
|
|
|
|
|
|
- /* Operations for Loading and Storing */
|
|
|
+ /**
|
|
|
+ * Writes the current State of the Modelling into a JSON File which can be
|
|
|
+ * loaded.
|
|
|
+ *
|
|
|
+ * @param path
|
|
|
+ * the Path
|
|
|
+ *
|
|
|
+ * @throws IOException
|
|
|
+ * exception
|
|
|
+ */
|
|
|
public void saveFile(String path) throws IOException {
|
|
|
storeController.writeSaveFile(path);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Reads the the JSON File and load the state into the Model.
|
|
|
+ *
|
|
|
+ * @param path
|
|
|
+ * the Path
|
|
|
+ * @throws IOException
|
|
|
+ * exception
|
|
|
+ */
|
|
|
public void loadFile(String path) throws IOException {
|
|
|
loadController.readJSON(path);
|
|
|
}
|
|
|
|
|
|
- ////////// etc
|
|
|
+ /**
|
|
|
+ * Init the CategoryListener.
|
|
|
+ *
|
|
|
+ * @param catLis
|
|
|
+ * the CategoryListener
|
|
|
+ */
|
|
|
public void initListener(CategoryListener catLis) {
|
|
|
categoryController.addCategoryListener(catLis);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * calculates the flow of the edges and the supply for objects for the
|
|
|
+ * current Timestep.
|
|
|
+ */
|
|
|
public void calculateStateForCurrentTimeStep() {
|
|
|
simulationManager.reset();
|
|
|
- simulationManager.calculateStateForTimeStep(MODEL.getCurIteration());
|
|
|
+ simulationManager.calculateStateForTimeStep(model.getCurIteration());
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * calculates the flow of the edges and the supply for objects.
|
|
|
+ *
|
|
|
+ * @param x
|
|
|
+ * current Iteration
|
|
|
+ */
|
|
|
public void calculateStateForTimeStep(int x) {
|
|
|
simulationManager.reset();
|
|
|
simulationManager.calculateStateForTimeStep(x);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Set the Canvas.
|
|
|
+ *
|
|
|
+ * @param can
|
|
|
+ * the Canvas
|
|
|
+ */
|
|
|
public void setCanvas(MyCanvas can) {
|
|
|
simulationManager.setCanvas(can);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * make an autosave.
|
|
|
+ *
|
|
|
+ * @throws IOException
|
|
|
+ * Exception
|
|
|
+ */
|
|
|
public void autoSave() throws IOException {
|
|
|
autoSaveController.increaseAutoSaveNr();
|
|
|
storeController.writeCanvasFile(autoPath + autoSaveController.getAutoSaveNr());
|
|
@@ -255,6 +508,11 @@ public class Control {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Returns the undo save.
|
|
|
+ *
|
|
|
+ * @return the undo save
|
|
|
+ */
|
|
|
public String getUndoSave() {
|
|
|
autoSaveController.decreaseAutoSaveNr();
|
|
|
if (!new File(autoPath + (autoSaveController.getAutoSaveNr())).exists()) {
|
|
@@ -263,6 +521,11 @@ public class Control {
|
|
|
return autoPath + (autoSaveController.getAutoSaveNr());
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Returns the redo save.
|
|
|
+ *
|
|
|
+ * @return the redo save
|
|
|
+ */
|
|
|
public String getRedoSave() {
|
|
|
autoSaveController.increaseAutoSaveNr();
|
|
|
if (!new File(autoPath + (autoSaveController.getAutoSaveNr())).exists()) {
|
|
@@ -271,10 +534,19 @@ public class Control {
|
|
|
return autoPath + (autoSaveController.getAutoSaveNr());
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Copy all Selected Objects.
|
|
|
+ */
|
|
|
public void copyObjects() {
|
|
|
canvasController.copyObjects();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Paste all Selected Objects.
|
|
|
+ *
|
|
|
+ * @param point
|
|
|
+ * the mouse Position
|
|
|
+ */
|
|
|
public void pasteObjects(Point point) {
|
|
|
canvasController.pasteObjects(point);
|
|
|
try {
|
|
@@ -285,6 +557,9 @@ public class Control {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Cut all Selected Objects.
|
|
|
+ */
|
|
|
public void cutObjects() {
|
|
|
canvasController.cutObjects();
|
|
|
try {
|
|
@@ -296,20 +571,25 @@ public class Control {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Getter for Model
|
|
|
+ * Getter for Model.
|
|
|
*
|
|
|
- * @return
|
|
|
+ * @return the Model
|
|
|
*/
|
|
|
public Model getModel() {
|
|
|
- return MODEL;
|
|
|
+ return model;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * get the Simulation Manager.
|
|
|
+ *
|
|
|
+ * @return the Simulation Manager
|
|
|
+ */
|
|
|
public SimulationManager getSimManager() {
|
|
|
return simulationManager;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Getter for selected CpsObject
|
|
|
+ * Getter for selected CpsObject.
|
|
|
*
|
|
|
* @param text
|
|
|
* String the Text
|
|
@@ -321,17 +601,16 @@ public class Control {
|
|
|
* bold or not
|
|
|
* @param italic
|
|
|
* italic or not
|
|
|
- * @param ln
|
|
|
+ * @param nl
|
|
|
* new line or not
|
|
|
*
|
|
|
- * @return selected CpsObject
|
|
|
*/
|
|
|
public void addTextToConsole(String text, Color color, int p, boolean bold, boolean italic, boolean nl) {
|
|
|
consoleController.addTextToConsole(text, color, p, bold, italic, nl);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Print Text on the console in black and font size 12
|
|
|
+ * Print Text on the console in black and font size 12.
|
|
|
*
|
|
|
* @param text
|
|
|
* String the Text
|
|
@@ -341,22 +620,27 @@ public class Control {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Clears the console
|
|
|
+ * Clears the console.
|
|
|
*/
|
|
|
public void clearConsole() {
|
|
|
consoleController.clearConsole();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @return sets the timerSpeed
|
|
|
+ * Set the timerSpeed.
|
|
|
+ *
|
|
|
+ * @param t
|
|
|
+ * interval in ms
|
|
|
*/
|
|
|
public void setTimerSpeed(int t) {
|
|
|
globalController.setTimerSpeed(t);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @param isSimulation
|
|
|
- * boolean for for isSimulation
|
|
|
+ * Set if its simulating or not.
|
|
|
+ *
|
|
|
+ * @param b
|
|
|
+ * isSimulation
|
|
|
*/
|
|
|
public void setIsSimulation(boolean b) {
|
|
|
globalController.setIsSimulation(b);
|