package ui.model; import java.util.ArrayList; import java.util.HashMap; import classes.AbstractCanvasObject; import classes.Edge; import classes.Node; import classes.GroupNode; import classes.HolonObject; import classes.HolonSwitch; import ui.model.DecoratedCable.CableState; /** * For DecoratedState And VisualRepresentationalState * @author Tom * */ public class MinimumModel { private ArrayList holonObjectList = new ArrayList(); private ArrayList cableList = new ArrayList(); private ArrayList nodeList = new ArrayList(); private ArrayList switchList = new ArrayList(); //-->Only for Visual: private ArrayList uppderNodeList = new ArrayList(); private HashMap inGroupObjects = new HashMap<>(); HashMap> inGroupEdges = new HashMap>(); //<-- public HashMap> getInGroupEdges() { return inGroupEdges; } public MinimumModel(ArrayList abstractObjectList, ArrayList edgeList) {// Constructor because of old Model for (AbstractCanvasObject aCps : abstractObjectList) { if (aCps instanceof HolonObject) { holonObjectList.add((HolonObject) aCps); } else if (aCps instanceof Node) nodeList.add((Node) aCps); else if (aCps instanceof HolonSwitch) switchList.add((HolonSwitch) aCps); else if(aCps instanceof GroupNode) { addUpperObjects((GroupNode)aCps); uppderNodeList.add((GroupNode)aCps); } } for (Edge edge : edgeList) { this.cableList.add(new IntermediateCableWithState(edge, CableState.Working)); AbstractCanvasObject objectA = edge.getA(); AbstractCanvasObject objectB = edge.getB(); if(inGroupObjects.containsKey(objectA) || inGroupObjects.containsKey(objectB)){ ArrayList list = new ArrayList(); if(inGroupObjects.containsKey(objectA)) { list.add(inGroupObjects.get(objectA)); } if(inGroupObjects.containsKey(objectB)) { list.add(inGroupObjects.get(objectB)); } inGroupEdges.put(edge, list); } } } private void addUpperObjects(GroupNode aUpperNode) { for(AbstractCanvasObject aCps : aUpperNode.getNodes()) { if (aCps instanceof HolonObject) holonObjectList.add((HolonObject) aCps); else if (aCps instanceof Node) nodeList.add((Node) aCps); else if (aCps instanceof HolonSwitch) switchList.add((HolonSwitch) aCps); else if(aCps instanceof GroupNode) { addUpperObjects((GroupNode)aCps); uppderNodeList.add((GroupNode)aCps); } inGroupObjects.put(aCps, aUpperNode); } } public ArrayList getHolonObjectList() { return holonObjectList; } public void setHolonObjectList(ArrayList holonObjectList) { this.holonObjectList = holonObjectList; } public ArrayList getEdgeList() { return cableList; } public void setEdgeList(ArrayList cableList) { this.cableList = cableList; } public ArrayList getNodeList() { return nodeList; } public void setNodeList(ArrayList nodeList) { this.nodeList = nodeList; } public ArrayList getSwitchList() { return switchList; } public void setSwitchList(ArrayList switchList) { this.switchList = switchList; } public ArrayList getUppderNodeList() { return uppderNodeList; } public HashMap getInGroupObjects() { return inGroupObjects; } public boolean containsPath(ArrayList path) { for(IntermediateCableWithState icws : this.cableList) { for(Edge e : path) { if(e.equals(icws.getModel())) { return true; } AbstractCanvasObject a = e.getA(); AbstractCanvasObject b = e.getB(); if( (a instanceof HolonObject && this.holonObjectList.contains(a)) || (a instanceof HolonSwitch && this.switchList.contains(a)) || (a instanceof Node && this.nodeList.contains(a)) || (b instanceof HolonObject && this.holonObjectList.contains(b)) || (b instanceof HolonSwitch && this.switchList.contains(b)) || (b instanceof Node && this.nodeList.contains(b)) ) { return true; } } } return false; } }