package ui.controller; import java.util.ArrayList; import java.util.LinkedList; import java.util.ListIterator; import classes.AbstractCpsObject; import classes.CpsEdge; import classes.HolonObject; import classes.HolonSwitch; import ui.model.MinimumModel; import ui.model.MinimumNetwork; public class CalculataModel { public static ArrayList calculateNetworks(MinimumModel minModel, int Iteration){ ArrayList listOfNetworks = new ArrayList(); while(!minModel.getHolonObjectList().isEmpty()) { //lookAt the first holonObject and find his neighbors HolonObject lookAtObject = minModel.getHolonObjectList().get(0); //delete out of list minModel.getHolonObjectList().remove(0); //create a new Network MinimumNetwork actualNetwork = new MinimumNetwork(new ArrayList(), new ArrayList()); actualNetwork.getHolonObjectList().add(lookAtObject); //create List of neighbors LinkedList neighbors = new LinkedList(); populateListOfNeighbors(minModel, lookAtObject, actualNetwork, neighbors); while(!neighbors.isEmpty()) { AbstractCpsObject lookAtNeighbor = neighbors.getFirst(); if(lookAtNeighbor instanceof HolonObject) { actualNetwork.getHolonObjectList().add((HolonObject) lookAtNeighbor); minModel.getHolonObjectList().remove(lookAtNeighbor); } //When HolonSwitch Check if closed if(!(lookAtNeighbor instanceof HolonSwitch) || ((HolonSwitch)lookAtNeighbor).getState(Iteration)) { populateListOfNeighbors(minModel, lookAtNeighbor, actualNetwork, neighbors); } neighbors.removeFirst(); } listOfNetworks.add(actualNetwork); } return listOfNetworks; } private static void populateListOfNeighbors(MinimumModel minModel, AbstractCpsObject lookAtObject, MinimumNetwork actualNetwork, LinkedList neighbors) { ListIterator iter = minModel.getEdgeList().listIterator(); while(iter.hasNext()) { CpsEdge lookAtEdge = iter.next(); if(lookAtEdge.isConnectedTo(lookAtObject)) { iter.remove(); actualNetwork.getEdgeList().add(lookAtEdge); //Add neighbar AbstractCpsObject edgeNeighbor; if(lookAtEdge.getA().equals(lookAtObject)) { edgeNeighbor = lookAtEdge.getB(); }else { edgeNeighbor = lookAtEdge.getA(); } if(!neighbors.contains(edgeNeighbor)) { neighbors.add(edgeNeighbor); } } } } public static void calculateDecNetworkModel(MinimumNetwork actualNetwork) { } }