HierarchyControlUnit.java 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package classes.holonControlUnit;
  2. import java.util.ArrayList;
  3. import java.util.HashSet;
  4. import java.util.Set;
  5. import classes.Holon;
  6. import classes.holonControlUnit.messages.NeighborhoodMsg;
  7. public class HierarchyControlUnit {
  8. private HolonControlUnit hcu;
  9. private ArrayList<String> subHolons;
  10. private ArrayList<String> physicalNeighbors;
  11. private ArrayList<String> virtualNeighbors;
  12. public HierarchyControlUnit(HolonControlUnit hcu) {
  13. this.hcu = hcu;
  14. this.subHolons = new ArrayList();
  15. this.physicalNeighbors = new ArrayList();
  16. this.virtualNeighbors = new ArrayList();
  17. // if(h.getParent() != null)
  18. // this.virtualNeighbors.addAll(h.getParent().childHolons);
  19. // System.out.println("created hcu for holon "+h.name);
  20. // System.out.println("\tsuperholon"+(h.getParent() != null ? h.getParent().name : ""));
  21. // System.out.println("\tsubholons"+h.childHolons.toString());
  22. // System.out.println("\tvirtual neighbors"+this.virtualNeighbors.toString());
  23. // System.out.println("\tphysical neighbors"+this.physicalNeighbors.toString());
  24. }
  25. public ArrayList<String> getPhysicalNeighbors() {
  26. return physicalNeighbors;
  27. }
  28. public void setPhysicalNeighbors(ArrayList<String> physicalNeighbors) {
  29. this.physicalNeighbors = physicalNeighbors;
  30. }
  31. public void addPhysicalNeighbor(String physicalNeighbor) {
  32. this.physicalNeighbors.add(physicalNeighbor);
  33. }
  34. public ArrayList<String> getVirtualNeighbors() {
  35. return virtualNeighbors;
  36. }
  37. public void setVirtualNeighbors(ArrayList<String> virtualNeighbors) {
  38. this.virtualNeighbors = virtualNeighbors;
  39. }
  40. public void addSubHolon(String subHolon) {
  41. // System.out.println("Holon "+this.hcu.getHolon().getUniqueID()+" adds sub-holon "+subHolon);
  42. //propagate new virtual neighbor for all subholons
  43. ArrayList<String> list = new ArrayList();
  44. list.add(subHolon);
  45. String body = this.hcu.getCommunicator().getGson().toJson(new NeighborhoodMsg(NeighborhoodMsg.Type.NEW_VIRTUAL_NEIGHBOR, list));
  46. // System.out.println("list: "+list.toString()+" body "+body);
  47. for(String sub : this.subHolons) {
  48. this.hcu.getCommunicator().sendMsg(sub, CommunicationModule.MessageType.NEIGHBORHOOD, body);
  49. }
  50. if(this.subHolons.size() > 0) {
  51. body = this.hcu.getCommunicator().getGson().toJson(new NeighborhoodMsg(NeighborhoodMsg.Type.NEW_VIRTUAL_NEIGHBOR, this.subHolons));
  52. this.hcu.getCommunicator().sendMsg(subHolon, CommunicationModule.MessageType.NEIGHBORHOOD, body);
  53. }
  54. this.subHolons.add(subHolon);
  55. }
  56. public void removeSubHolon(String subHolon) {
  57. if(!this.subHolons.remove(subHolon))
  58. System.err.println("Could not remove sub holon "+subHolon);
  59. ArrayList<String> list = new ArrayList();
  60. list.add(subHolon);
  61. String body = this.hcu.getCommunicator().getGson().toJson(new NeighborhoodMsg(NeighborhoodMsg.Type.REMOVE_VIRTUAL_NEIGHBOR, list));
  62. for(String sub : this.subHolons) {
  63. this.hcu.getCommunicator().sendMsg(sub, CommunicationModule.MessageType.NEIGHBORHOOD, body);
  64. }
  65. }
  66. public ArrayList<String> getSubHolons() {
  67. return this.subHolons;
  68. }
  69. public void addVirtualNeighbor(String virtualNeighbor) {
  70. this.virtualNeighbors.add(virtualNeighbor);
  71. // System.out.println("Holon "+this.hcu.getHolon().getUniqueID()+" add virtual neighbor"+virtualNeighbor);
  72. }
  73. public void addVirtualNeighbors(ArrayList<String> virtualNeighbor) {
  74. this.virtualNeighbors.addAll(virtualNeighbor);
  75. // System.out.println("Holon "+this.hcu.getHolon().getUniqueID()+" add virtual neighbor"+virtualNeighbor);
  76. }
  77. public void removeVirtualNeighbor(String virtualNeighbor) {
  78. this.virtualNeighbors.remove(virtualNeighbor);
  79. }
  80. public void removeVirtualNeighbors(ArrayList<String> virtualNeighbor) {
  81. this.virtualNeighbors.removeAll(virtualNeighbor);
  82. }
  83. }