CalculataModel.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package ui.controller;
  2. import java.util.ArrayList;
  3. import java.util.LinkedList;
  4. import java.util.ListIterator;
  5. import classes.AbstractCpsObject;
  6. import classes.HolonObject;
  7. import classes.HolonSwitch;
  8. import ui.model.CableWithState;
  9. import ui.model.DecoratedCable.CableState;
  10. import ui.model.DecoratedSwitch;
  11. import ui.model.DecoratedSwitch.SwitchState;
  12. import ui.model.MinimumModel;
  13. import ui.model.MinimumNetwork;
  14. public class CalculataModel {
  15. public static ArrayList<DecoratedSwitch> decorateSwitches(MinimumModel minModel, int iteration) {
  16. ArrayList<DecoratedSwitch> aListOfDecoratedSwitches = new ArrayList<DecoratedSwitch>();
  17. for(HolonSwitch hSwitch: minModel.getSwitchList()) {
  18. aListOfDecoratedSwitches.add(new DecoratedSwitch(hSwitch, hSwitch.getState(iteration) ? SwitchState.Closed : SwitchState.Open));
  19. }
  20. return aListOfDecoratedSwitches;
  21. }
  22. public static ArrayList<MinimumNetwork> calculateNetworks(MinimumModel minModel, int Iteration, ArrayList<CableWithState> leftOver){
  23. //Copy minModel ObjectList
  24. ArrayList<HolonObject> holonObjectList = new ArrayList<HolonObject>();
  25. for(HolonObject holonObject: minModel.getHolonObjectList()) {
  26. holonObjectList.add(holonObject);
  27. }
  28. //Copy minModelEdgeList
  29. ArrayList<CableWithState> edgeList = new ArrayList<CableWithState>();
  30. for(CableWithState cable: minModel.getEdgeList()) {
  31. edgeList.add(cable);
  32. }
  33. ArrayList<MinimumNetwork> listOfNetworks = new ArrayList<MinimumNetwork>();
  34. while(!holonObjectList.isEmpty()) {
  35. //lookAt the first holonObject and find his neighbors
  36. HolonObject lookAtObject = holonObjectList.get(0);
  37. //delete out of list
  38. holonObjectList.remove(0);
  39. //create a new Network
  40. MinimumNetwork actualNetwork = new MinimumNetwork(new ArrayList<HolonObject>(), new ArrayList<CableWithState>());
  41. actualNetwork.getHolonObjectList().add(lookAtObject);
  42. //create List of neighbors
  43. LinkedList<AbstractCpsObject> neighbors = new LinkedList<AbstractCpsObject>();
  44. populateListOfNeighbors(edgeList, lookAtObject, actualNetwork, neighbors);
  45. while(!neighbors.isEmpty()) {
  46. AbstractCpsObject lookAtNeighbor = neighbors.getFirst();
  47. if(lookAtNeighbor instanceof HolonObject) {
  48. actualNetwork.getHolonObjectList().add((HolonObject) lookAtNeighbor);
  49. holonObjectList.remove(lookAtNeighbor);
  50. }
  51. //When HolonSwitch Check if closed
  52. if(!(lookAtNeighbor instanceof HolonSwitch) || ((HolonSwitch)lookAtNeighbor).getState(Iteration)) {
  53. populateListOfNeighbors(edgeList, lookAtNeighbor, actualNetwork, neighbors);
  54. }
  55. neighbors.removeFirst();
  56. }
  57. listOfNetworks.add(actualNetwork);
  58. }
  59. if(leftOver!= null) {
  60. leftOver.clear();
  61. for(CableWithState cable: edgeList) {
  62. leftOver.add(cable);
  63. }
  64. }
  65. return listOfNetworks;
  66. }
  67. private static void populateListOfNeighbors(ArrayList<CableWithState> edgeList, AbstractCpsObject lookAtObject,
  68. MinimumNetwork actualNetwork, LinkedList<AbstractCpsObject> neighbors) {
  69. ListIterator<CableWithState> iter = edgeList.listIterator();
  70. while(iter.hasNext())
  71. {
  72. CableWithState lookAtEdge = iter.next();
  73. if(lookAtEdge.getState() == CableState.Working && lookAtEdge.getModel().isConnectedTo(lookAtObject)) {
  74. iter.remove();
  75. actualNetwork.getEdgeList().add(lookAtEdge);
  76. //Add neighbar
  77. AbstractCpsObject edgeNeighbor;
  78. if(lookAtEdge.getModel().getA().equals(lookAtObject)) {
  79. edgeNeighbor = lookAtEdge.getModel().getB();
  80. }else {
  81. edgeNeighbor = lookAtEdge.getModel().getA();
  82. }
  83. if(!neighbors.contains(edgeNeighbor)) {
  84. neighbors.add(edgeNeighbor);
  85. }
  86. }
  87. }
  88. }
  89. }