123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package ui.controller;
- import java.util.ArrayList;
- import java.util.LinkedList;
- import java.util.ListIterator;
- import classes.AbstractCpsObject;
- import classes.HolonObject;
- import classes.HolonSwitch;
- import ui.model.CableWithState;
- import ui.model.CableWithState.CableState;
- import ui.model.DecoratedSwitch;
- import ui.model.DecoratedSwitch.SwitchState;
- import ui.model.MinimumModel;
- import ui.model.MinimumNetwork;
- public class CalculataModel {
- public static ArrayList<DecoratedSwitch> decorateSwitches(MinimumModel minModel, int iteration) {
- ArrayList<DecoratedSwitch> aListOfDecoratedSwitches = new ArrayList<DecoratedSwitch>();
- for(HolonSwitch hSwitch: minModel.getSwitchList()) {
- aListOfDecoratedSwitches.add(new DecoratedSwitch(hSwitch, hSwitch.getState(iteration) ? SwitchState.Closed : SwitchState.Open));
- }
- return aListOfDecoratedSwitches;
- }
- public static ArrayList<MinimumNetwork> calculateNetworks(MinimumModel minModel, int Iteration, ArrayList<CableWithState> leftOver){
- //Copy minModel ObjectList
- ArrayList<HolonObject> holonObjectList = new ArrayList<HolonObject>();
- for(HolonObject holonObject: minModel.getHolonObjectList()) {
- holonObjectList.add(holonObject);
- }
- //Copy minModelEdgeList
- ArrayList<CableWithState> edgeList = new ArrayList<CableWithState>();
- for(CableWithState cable: minModel.getEdgeList()) {
- edgeList.add(cable);
- }
-
- ArrayList<MinimumNetwork> listOfNetworks = new ArrayList<MinimumNetwork>();
- while(!holonObjectList.isEmpty()) {
- //lookAt the first holonObject and find his neighbors
- HolonObject lookAtObject = holonObjectList.get(0);
- //delete out of list
- holonObjectList.remove(0);
- //create a new Network
- MinimumNetwork actualNetwork = new MinimumNetwork(new ArrayList<HolonObject>(), new ArrayList<CableWithState>());
- actualNetwork.getHolonObjectList().add(lookAtObject);
- //create List of neighbors
- LinkedList<AbstractCpsObject> neighbors = new LinkedList<AbstractCpsObject>();
- populateListOfNeighbors(edgeList, lookAtObject, actualNetwork, neighbors);
- while(!neighbors.isEmpty()) {
- AbstractCpsObject lookAtNeighbor = neighbors.getFirst();
- if(lookAtNeighbor instanceof HolonObject) {
- actualNetwork.getHolonObjectList().add((HolonObject) lookAtNeighbor);
- holonObjectList.remove(lookAtNeighbor);
- }
- //When HolonSwitch Check if closed
- if(!(lookAtNeighbor instanceof HolonSwitch) || ((HolonSwitch)lookAtNeighbor).getState(Iteration)) {
- populateListOfNeighbors(edgeList, lookAtNeighbor, actualNetwork, neighbors);
- }
-
- neighbors.removeFirst();
- }
- listOfNetworks.add(actualNetwork);
- }
- if(leftOver!= null) {
- leftOver.clear();
- for(CableWithState cable: edgeList) {
- leftOver.add(cable);
- }
- }
- return listOfNetworks;
- }
- private static void populateListOfNeighbors(ArrayList<CableWithState> edgeList, AbstractCpsObject lookAtObject,
- MinimumNetwork actualNetwork, LinkedList<AbstractCpsObject> neighbors) {
- ListIterator<CableWithState> iter = edgeList.listIterator();
- while(iter.hasNext())
- {
- CableWithState lookAtEdge = iter.next();
- if(lookAtEdge.getState() == CableState.Working && lookAtEdge.getModel().isConnectedTo(lookAtObject)) {
- iter.remove();
- actualNetwork.getEdgeList().add(lookAtEdge);
-
- //Add neighbar
- AbstractCpsObject edgeNeighbor;
- if(lookAtEdge.getModel().getA().equals(lookAtObject)) {
- edgeNeighbor = lookAtEdge.getModel().getB();
-
- }else {
- edgeNeighbor = lookAtEdge.getModel().getA();
- }
- if(!neighbors.contains(edgeNeighbor)) {
- neighbors.add(edgeNeighbor);
- }
- }
- }
- }
-
- }
|