CalculataModel.java 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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.CpsEdge;
  7. import classes.HolonObject;
  8. import classes.HolonSwitch;
  9. import ui.model.MinimumModel;
  10. import ui.model.MinimumNetwork;
  11. public class CalculataModel {
  12. public static ArrayList<MinimumNetwork> calculateNetworks(MinimumModel minModel, int Iteration){
  13. ArrayList<MinimumNetwork> listOfNetworks = new ArrayList<MinimumNetwork>();
  14. while(!minModel.getHolonObjectList().isEmpty()) {
  15. //lookAt the first holonObject and find his neighbors
  16. HolonObject lookAtObject = minModel.getHolonObjectList().get(0);
  17. //delete out of list
  18. minModel.getHolonObjectList().remove(0);
  19. //create a new Network
  20. MinimumNetwork actualNetwork = new MinimumNetwork(new ArrayList<HolonObject>(), new ArrayList<CpsEdge>());
  21. actualNetwork.getHolonObjectList().add(lookAtObject);
  22. //create List of neighbors
  23. LinkedList<AbstractCpsObject> neighbors = new LinkedList<AbstractCpsObject>();
  24. populateListOfNeighbors(minModel, lookAtObject, actualNetwork, neighbors);
  25. while(!neighbors.isEmpty()) {
  26. AbstractCpsObject lookAtNeighbor = neighbors.getFirst();
  27. if(lookAtNeighbor instanceof HolonObject) {
  28. actualNetwork.getHolonObjectList().add((HolonObject) lookAtNeighbor);
  29. minModel.getHolonObjectList().remove(lookAtNeighbor);
  30. }
  31. //When HolonSwitch Check if closed
  32. if(!(lookAtNeighbor instanceof HolonSwitch) || ((HolonSwitch)lookAtNeighbor).getState(Iteration)) {
  33. populateListOfNeighbors(minModel, lookAtNeighbor, actualNetwork, neighbors);
  34. }
  35. neighbors.removeFirst();
  36. }
  37. listOfNetworks.add(actualNetwork);
  38. }
  39. return listOfNetworks;
  40. }
  41. private static void populateListOfNeighbors(MinimumModel minModel, AbstractCpsObject lookAtObject,
  42. MinimumNetwork actualNetwork, LinkedList<AbstractCpsObject> neighbors) {
  43. ListIterator<CpsEdge> iter = minModel.getEdgeList().listIterator();
  44. while(iter.hasNext())
  45. {
  46. CpsEdge lookAtEdge = iter.next();
  47. if(lookAtEdge.isConnectedTo(lookAtObject)) {
  48. iter.remove();
  49. actualNetwork.getEdgeList().add(lookAtEdge);
  50. //Add neighbar
  51. AbstractCpsObject edgeNeighbor;
  52. if(lookAtEdge.getA().equals(lookAtObject)) {
  53. edgeNeighbor = lookAtEdge.getB();
  54. }else {
  55. edgeNeighbor = lookAtEdge.getA();
  56. }
  57. if(!neighbors.contains(edgeNeighbor)) {
  58. neighbors.add(edgeNeighbor);
  59. }
  60. }
  61. }
  62. }
  63. public static void calculateDecNetworkModel(MinimumNetwork actualNetwork) {
  64. }
  65. }