package ui.controller; import java.awt.Color; import java.awt.Point; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import java.util.ArrayList; import Interfaces.CategoryListener; import classes.Category; import classes.CpsEdge; import classes.CpsNode; import classes.CpsObject; import classes.HolonElement; import classes.HolonObject; import classes.Position; import ui.model.Model; import ui.view.MyCanvas; import ui.view.TimePanel; public class Control { private Model MODEL; private ActionListener actionListener; private final ConsoleController consoleController; private final MultiPurposeController multiPurposeController; private final CategoryController categoryController; private final ObjectController objectController; private final CanvasController canvasController; 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; 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); autoPath = System.getProperty("user.home") + "/HolonGUI/Autosave/"; File dest = new File(autoPath); deleteDirectory(dest); dest.mkdirs(); try { autoSave(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public 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(); } } path.delete(); } } /* Operations for searching */ public CpsObject searchByID(int ID) { return multiPurposeController.searchByID(ID); } public CpsObject searchCategoryObject(String category, String object) { return multiPurposeController.searchCatObj(multiPurposeController.searchCat(category), object); } public Category searchCategory(String cat) { return multiPurposeController.searchCat(cat); } /* Operations for Categories and Objects */ public void resetCategorys() { categoryController.initCategories(); } public void addCategory(String cat) { categoryController.addNewCategory(cat); } public void addObject(Category cat, String obj, ArrayList ele, String img) { categoryController.addNewHolonObject(cat, obj, ele, img); } public void addTransformer(Category cat, String obj) { categoryController.addNewHolonTransformer(cat, obj, "/Images/transformer-1.png"); } public void addSwitch(Category cat, String obj) { categoryController.addNewHolonSwitch(cat, obj, "/Images/switch-on.png"); } public void deleteCategory(String cat) { categoryController.deleteCategory(cat); } public void delObjectCategory(String cat, String obj) { categoryController.deleteObject(cat, obj); } public void deleteSelectedObject(CpsObject obj) { objectController.deleteSelectedObject(obj); } public void addSelectedObject(CpsObject obj) { objectController.addSelectedObject(obj); } /* Operations for Canvas */ public void AddEdgeOnCanvas(CpsEdge edge) { canvasController.addEdgeOnCanvas(edge); try { autoSave(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 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) { MODEL.setSelectedEdge(edge); } public void addObjectCanvas(CpsObject object) { canvasController.addNewObject(object); if (!(object instanceof CpsNode)) { try { autoSave(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void setSelectedObjectID(int id) { objectController.setSelectedObjectID(id); } 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 */ public void addElementCanvasObject(int ID, String ele, int amount, float energy) { objectController.addNewElementIntoCanvasObject(ID, ele, amount, 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); } public void deleteElementCanvas(HolonObject obj, HolonElement ele) { objectController.deleteElement(obj, ele); } public void setClipboardObjects(ArrayList list) { MODEL.setClipboradObjects(list); } /* Global Operations */ public int getScale() { return globalController.getScale(); } public int getScaleDiv2() { return globalController.getScaleDiv2(); } public void setScale(int s) { globalController.setScale(s); } public void setCurIteration(int cur_it) { globalController.setCurIteration(cur_it); } /* Operations for Loading and Storing */ public void saveFile(String path) throws IOException { storeController.writeSaveFile(path); } public void loadFile(String path) throws IOException { loadController.readJSON(path); } ////////// etc public void initListener(CategoryListener catLis) { categoryController.addCategoryListener(catLis); } public void calculateStateForCurrentTimeStep() { simulationManager.reset(); simulationManager.calculateStateForTimeStep(MODEL.getCurIteration()); } public void calculateStateForTimeStep(int x) { simulationManager.reset(); simulationManager.calculateStateForTimeStep(x); } public void setCanvas(MyCanvas can) { simulationManager.setCanvas(can); } private void autoSave() throws IOException { autoSaveController.increaseAutoSaveNr(); storeController.writeCanvasFile(autoPath + autoSaveController.getAutoSaveNr()); if (autoSaveController.allowed()) { new File(autoPath + (autoSaveController.getAutoSaveNr() - globalController.getNumbersOfSaves())).delete(); } } 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 copyObjects() { canvasController.copyObjects(); } public void pasteObjects(Point point) { canvasController.pasteObjects(point); try { autoSave(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void cutObjects() { canvasController.cutObjects(); try { autoSave(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * Getter for Model * * @return */ public Model getModel() { return MODEL; } public SimulationManager getSimManager() { return simulationManager; } /** * Getter for selected CpsObject * * @param text * String the Text * @param color * the color of the Text * @param p * size of the Text * @param bold * bold or not * @param italic * italic or not * @param ln * 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 * * @param text * String the Text */ public void addTextToConsole(String text) { consoleController.addTextToConsole(text); } /** * Clears the console */ public void clearConsole() { consoleController.clearConsole(); } /** * @return sets the timerSpeed */ public void setTimerSpeed(int t) { globalController.setTimerSpeed(t); } /** * @param isSimulation * boolean for for isSimulation */ public void setIsSimulation(boolean b) { globalController.setIsSimulation(b); } }