package ui.model; import java.awt.Color; import java.awt.RenderingHints; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import javax.swing.JTable; import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array; import classes.Category; import classes.CpsEdge; import classes.CpsUpperNode; import classes.AbstractCpsObject; import classes.HolonElement; import classes.HolonObject; import classes.HolonSwitch; import interfaces.CategoryListener; import interfaces.GraphListener; import interfaces.ObjectListener; import ui.view.Console; import ui.view.DefaulTable; import ui.view.PropertyTable; import ui.view.DefaulTable; /** * The Class Model is the class where everything is saved. All changes made to * the Data is managed via a controller. * * @author Gruppe14 * */ public class Model { // Canvas Attributes private String imgPath = ""; private int backgroundMode = 0; private int backgroundWidth = 0; private int backgroundHeight = 0; private int canvasX = 1000; private int canvasY = 1000; // Global Variables private static int sCALE = 50; // Picture Scale private static int sCALEdIV2 = sCALE / 2; private static int holonBodysCALE = 100; // Picture Scale private static final int ITERATIONS = 100; private int curIteration = 0; private LinkedList subNetColors = new LinkedList<>(); // ID of the Selected Object private AbstractCpsObject selectedCpsObject = null; private HolonElement selectedHolonElement; private CpsEdge selectedEdge; private ArrayList selectedObjects = new ArrayList(); private ArrayList clipboardObjects = new ArrayList(); private Console console; private HashMap> eleToDelete; // Capacity for Edge private float maxCapacity; // Table for HolonElements --> all cells are editable private JTable tableHolonElement; private ArrayList graphListeners = new ArrayList(); // Iteration Speed private int timerSpeed = 1000; // Simulation boolean private boolean isSimulation = false; private int selectedID = 0; // number of the current autosave private int autoSaveNr = -1; // number of max simultaneous autosaves private int numberOfSaves = 35; /* * Array of all categories in the model. It is set by default with the * categories ENERGY, BUILDINGS and COMPONENTS */ private ArrayList categories; /* * Array of all HolonObj and HolonSwitches, that should be tracked through * out the statistics tab */ private ArrayList trackedObjects; /* * Array of all CpsObjects in our canvas. It is set by default as an empty * list. */ private ArrayList objectsOnCanvas; private HashMap cgIdx; private HashMap cvsObjIdx; /* * Array of all CpsObjects in our canvas. It is set by default as an empty * list. */ private ArrayList edgesOnCanvas; /* * Array for all Listeners */ private List categoryListeners; private List objectListeners; private PropertyTable tableModelHolonElementMulti; private PropertyTable tableModelHolonElementSingle; private DefaulTable tableModelProperties; public String[] colNames = { "Field", "Information" }; /* * Object that runs the Algorithm */ private Object algorithm = null; private int selectedHolonBody; /** * Constructor for the model. It initializes the categories and * objectsOnCanvas by default values. Listeners are also initialized by * default values. */ public Model() { setCategories(new ArrayList()); setObjectsOnCanvas(new ArrayList()); setEdgesOnCanvas(new ArrayList()); setCategoryListeners(new LinkedList()); setObjectListeners(new LinkedList()); setCgIdx(new HashMap()); setCvsObjIdx(new HashMap()); setClipboradObjects(new ArrayList()); setTrackingObj(new ArrayList()); setEleToDelete(new HashMap>()); setSingleTable(new PropertyTable()); setMultiTable(new PropertyTable()); setPropertyTable(new DefaulTable(1000, colNames.length)); getPropertyTable().setColumnIdentifiers(colNames); setTableHolonElement(new JTable()); } /** * Returns all Categories. * * @return the categories */ public ArrayList getCategories() { return categories; } /** * Sets all Categories. * * @param categories * the categories to set */ public void setCategories(ArrayList categories) { this.categories = categories; } /** * Transform the Arraylist of categories into a string of all objectName * with a separation (',') between each name. * * @return String of all names separeted by ',' */ public String toStringCat() { String text = ""; for (int i = 0; i < categories.size(); i++) { if (text == "") { text = categories.get(i).getName(); } else { text = text + ", " + categories.get(i).getName(); } } return text; } /** * Returns all Objects on the Canvas. * * @return the objectsOnCanvas */ public ArrayList getObjectsOnCanvas() { return objectsOnCanvas; } /** * Sets all Objects on the Canvas. * * @param objectsOnCanvas * the objectsOnCanvas to set */ public void setObjectsOnCanvas(ArrayList objectsOnCanvas) { this.objectsOnCanvas = objectsOnCanvas; } /** * Get all Edges on the Canvas. * * @return the objectsOnCanvas */ public ArrayList getEdgesOnCanvas() { return edgesOnCanvas; } /** * Adds an Edge to The Canvas. * * @param edge * the edgesOnCanvas to add */ public void addEdgeOnCanvas(CpsEdge edge) { this.edgesOnCanvas.add(edge); } /** * Remove an edge from the Canvas. * * @param edge * the edge to remove */ public void removeEdgesOnCanvas(CpsEdge edge) { this.edgesOnCanvas.remove(edge); } /** * Sets the edges on the Canvas. * * @param arrayList * the edgesOnCanvas to set */ public void setEdgesOnCanvas(ArrayList arrayList) { this.edgesOnCanvas = arrayList; } /** * Returns the ObjectListener. * * @return the objectListeners */ public List getObjectListeners() { return objectListeners; } /** * Sets the ObjectListener. * * @param linkedList * the objectListeners to set */ public void setObjectListeners(LinkedList linkedList) { this.objectListeners = linkedList; } /** * Returns the CategorieListener. * * @return the categoryListeners */ public List getCategoryListeners() { return categoryListeners; } /** * Sets the CategorieListener. * * @param linkedList * the categoryListeners to set */ public void setCategoryListeners(LinkedList linkedList) { this.categoryListeners = linkedList; } /** * Set the ID of the selected Object 0 = no Object is selected. * * @param id * the ID * */ public void setSelectedObjectID(int id) { this.selectedID = id; } /** * Returns the ID of the selected Object 0 = no Object is selected. * * @return ID */ public int getSelectedObjectID() { return selectedID; } /** * Returns the Selected Cps Object. * * @return selected Cps Object */ public AbstractCpsObject getSelectedCpsObject() { return selectedCpsObject; } /** * Set the Selected Objecs. * * @param selectedCpsObject * Objects that are selected */ public void setSelectedCpsObject(AbstractCpsObject selectedCpsObject) { this.selectedCpsObject = selectedCpsObject; } /** * Returns all selected Objects on the Canvas. * * @return The selected Objects */ public ArrayList getSelectedCpsObjects() { return selectedObjects; } /** * Returns all selected Objects on the Canvas. * * @return The selected Objects */ public void setSelectedCpsObjects(ArrayList arr) { this.selectedObjects = arr; } /** * Returns the Selected Holon Element. * * @return selected Holon Element */ public HolonElement getSelectedHolonElement() { return selectedHolonElement; } /** * Sets the Selecte HolonElement. * * @param selectedHolonElement * that is Selected */ public void setSelectedHolonElement(HolonElement selectedHolonElement) { this.selectedHolonElement = selectedHolonElement; } /** * Returns the sCale (Scale for the Images). * * @return sCALE */ public int getScale() { return sCALE; } /** * Returns sCALEdIV2 (The Scale divided by 2). * * @return sCALEdIV2 */ public int getScaleDiv2() { return sCALEdIV2; } /** * Sets the Image Scale. * * @param scale * for the image */ public void setScale(int scale) { sCALE = scale; sCALEdIV2 = sCALE / 2; } /** * Returns ITERATIONS. * * @return ITERATIONS */ public int getIterations() { return ITERATIONS; } /** * sets the current Iteration. * * @param curIT * the current Iteration */ public void setCurIteration(int curIT) { this.curIteration = curIT; notifyGraphListeners(); } private void notifyGraphListeners() { for (GraphListener gl : graphListeners) { gl.repaintTree(); } } /** * Returns cURiTERATION. * * @return cURiTERATION */ public int getCurIteration() { return curIteration; } /** * Set the selected Edge. * * @param edge * that is selected * */ public void setSelectedEdge(CpsEdge edge) { this.selectedEdge = edge; } /** * Returns the selected Edge. * * @return selectedEdge */ public CpsEdge getSelectedEdge() { return selectedEdge; } /** * Returns the Categorie Index. * * @return the cgIdx */ public HashMap getCgIdx() { return cgIdx; } /** * Sets the Categorie Index. * * @param cgIdx * the cgIdx to set */ public void setCgIdx(HashMap cgIdx) { this.cgIdx = cgIdx; } /** * Returns the CanvasObject Index. * * @return the cvsObjIdx */ public HashMap getCvsObjIdx() { return cvsObjIdx; } /** * Sets the CanvasObject Index. * * @param cvsObjIdx * the cvsObjIdx to set */ public void setCvsObjIdx(HashMap cvsObjIdx) { this.cvsObjIdx = cvsObjIdx; } /** * Sets the auto save Number. * * @param autoSaveNr * the auto save number */ public void setAutoSaveNr(int autoSaveNr) { this.autoSaveNr = autoSaveNr; } /** * Returns the auto save Number. * * @return the auto save Number */ public int getAutoSaveNr() { return autoSaveNr; } /** * Returns the Number of Saves. * * @return the numberOfSaves */ public int getNumberOfSaves() { return numberOfSaves; } /** * Set the Number of Saves. * * @param numberOfSaves * the numberOfSaves to set */ public void setNumberOfSaves(int numberOfSaves) { this.numberOfSaves = numberOfSaves; } /** * Sets the ClipboardObjects. * * @param c * Array of Objects */ public void setClipboradObjects(ArrayList c) { this.clipboardObjects = c; } /** * Returns all Objects in the Clipboard. * * @return Objects in the Clipboard */ public ArrayList getClipboradObjects() { return clipboardObjects; } /** * Sets the console. * * @param console * the console */ public void setConsole(Console console) { this.console = console; } /** * Returns the Console. * * @return console the console */ public Console getConsole() { return console; } /** * @return the maxCapacity */ public float getMaxCapacity() { return maxCapacity; } /** * @param maxCapacity * the maxCapacity to set */ public void setMaxCapacity(float maxCapacity) { this.maxCapacity = maxCapacity; } /** * Sets the Interval in ms between each Iteration. * * @param t * speed for the Iterations */ public void setTimerSpeed(int t) { this.timerSpeed = t; } /** * get the Interval in ms between each Iteration. * * @return timerSpeed speed for the Iterations */ public int getTimerSpeed() { return this.timerSpeed; } /** * Sets the Simulation state (true = simulation, false = modeling). * * @param isSimulation * boolean for for isSimulation */ public void setIsSimulation(boolean isSimulation) { this.isSimulation = isSimulation; } /** * Returns the Simulation state (true = simulation, false = modeling). * * @return isSimulation boolean for for isSimulation */ public boolean getIsSimulation() { return this.isSimulation; } /** * Get Canvas X Size. * * @return the cANVAS_X */ public int getCanvasX() { return canvasX; } /** * Set Canvas X Size. * * @param canvasX * the cANVAS_X to set */ public void setCanvasX(int canvasX) { this.canvasX = canvasX; } /** * get Canvas Y size. * * @return the cANVAS_Y */ public int getCanvasY() { return canvasY; } /** * Set Canvas Y size. * * @param canvasY * the cANVAS_Y to set */ public void setCanvasY(int canvasY) { this.canvasY = canvasY; } /** * get the Algorithm. * * @return the Algorithm */ public Object getAlgorithm() { return algorithm; } /** * Set the Algorithm. * * @param obj * the Algorithm */ public void setAlgorithm(Object obj) { this.algorithm = null; this.algorithm = obj; } /** * Add a SubNetColor. * * @param c * the Color */ public void addSubNetColor(Color c) { this.subNetColors.add(c); } /** * Get the SubNetColors. * * @return SubNetColors */ public LinkedList getSubNetColors() { return this.subNetColors; } public void setTrackingObj(ArrayList toTrack) { trackedObjects = toTrack; } public ArrayList getTrackingObj() { return trackedObjects; } public void addGraphListener(GraphListener gl) { graphListeners.add(gl); } public void setEleToDelete(HashMap> theHash) { this.eleToDelete = theHash; } public HashMap> getEleToDelete() { return this.eleToDelete; } public void setSingleTable(PropertyTable pt) { this.tableModelHolonElementSingle = pt; } public PropertyTable getSingleTable() { return this.tableModelHolonElementSingle; } public PropertyTable getMultiTable() { return this.tableModelHolonElementMulti; } public void setMultiTable(PropertyTable pt) { this.tableModelHolonElementMulti = pt; } public void addObjectsToGraphListeners() { for (GraphListener gl : graphListeners) { gl.addTrackedObject(trackedObjects); gl.repaintTree(); } } public DefaulTable getPropertyTable() { return this.tableModelProperties; } public void setPropertyTable(DefaulTable pt) { this.tableModelProperties = pt; } public JTable getTableHolonElement() { return tableHolonElement; } public void setTableHolonElement(JTable tableHolonElement) { this.tableHolonElement = tableHolonElement; } /** * Sets the HolonBody Scale. * * @param scale * for the HolonBody */ public void setHolonBodyScale(int scale) { holonBodysCALE = scale; } /** * Returns the sCale (Scale for the Images). * * @return sCALE */ public int getHolonBodyScale() { return holonBodysCALE; } /** * Sets the ID of the selected HolonBody * * @param i * int */ public void setSelectedHolonBody(int i) { selectedHolonBody = i; } /** * Returns the ID of the selected HolonBody * * @return selectedHolonBody */ public int getSelectedHolonBody() { return selectedHolonBody; } /** * get all Switches */ public ArrayList getSwitches() { ArrayList switches = new ArrayList<>(); for (AbstractCpsObject obj : getObjectsOnCanvas()) { if (obj instanceof HolonSwitch) { switches.add((HolonSwitch) obj); } else if (obj instanceof CpsUpperNode) { getSwitchesRec(((CpsUpperNode) obj).getNodes(), switches); } } return switches; } /** * get the Amount of Switches help function * * @param objects * objects * @param switches * List of switches */ private ArrayList getSwitchesRec(ArrayList objects, ArrayList switches) { for (AbstractCpsObject obj : objects) { if (obj instanceof HolonSwitch) { switches.add((HolonSwitch) obj); } else if (obj instanceof CpsUpperNode) { getSwitchesRec(((CpsUpperNode) obj).getNodes(), switches); } } return switches; } /** * Returns the Path for the background Image of the Canvas. * * @return imgPath the Path */ public String getCanvasImagePath() { return imgPath; } /** * Returns the mode for the background Image of the Canvas. * * 0 take size of the Image 1 stretch the Image 2 Custom Image size * * @return backgroundMode the mode */ public int getCanvasImageMode() { return backgroundMode; } /** * Returns the Custom width of the background Image of the Canvas. * * @return backgroundWidth the Width */ public int getCanvasImageWidth() { return backgroundWidth; } /** * Returns the Custom height of the background Image of the Canvas. * * @return backgroundHeight the height */ public int getCanvasImageHeight() { return backgroundHeight; } /** * Set the Path for the background Image of the Canvas. * * @param paththe Path */ public void setCanvasImagePath(String path) { imgPath = path; } /** * Set the mode for the background Image of the Canvas. * * 0 take size of the Image, 1 stretch the Image, 2 Custom Image size * * @param backgroundMode the mode */ public void setCanvasImageMode(int mode) { backgroundMode = mode; } /** * Set the Custom width of the background Image of the Canvas. * * @param width the Width */ public void setCanvasImageWidth(int width) { backgroundWidth = width; } /** * Set the Custom height of the background Image of the Canvas. * * @param height the height */ public void setCanvasImageHeight(int height) { backgroundHeight = height; } }