package classes.holonControlUnit; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import classes.Holon; import classes.holonControlUnit.messages.NeighborhoodMsg; public class HierarchyControlUnit { private HolonControlUnit hcu; private ArrayList subHolons; private ArrayList physicalNeighbors; private ArrayList virtualNeighbors; public HierarchyControlUnit(HolonControlUnit hcu) { this.hcu = hcu; this.subHolons = new ArrayList(); this.physicalNeighbors = new ArrayList(); this.virtualNeighbors = new ArrayList(); // if(h.getParent() != null) // this.virtualNeighbors.addAll(h.getParent().childHolons); // System.out.println("created hcu for holon "+h.name); // System.out.println("\tsuperholon"+(h.getParent() != null ? h.getParent().name : "")); // System.out.println("\tsubholons"+h.childHolons.toString()); // System.out.println("\tvirtual neighbors"+this.virtualNeighbors.toString()); // System.out.println("\tphysical neighbors"+this.physicalNeighbors.toString()); } public ArrayList getPhysicalNeighbors() { return physicalNeighbors; } public void setPhysicalNeighbors(ArrayList physicalNeighbors) { this.physicalNeighbors = physicalNeighbors; } public void addPhysicalNeighbor(String physicalNeighbor) { this.physicalNeighbors.add(physicalNeighbor); } public ArrayList getVirtualNeighbors() { return virtualNeighbors; } public void setVirtualNeighbors(ArrayList virtualNeighbors) { this.virtualNeighbors = virtualNeighbors; } public void addSubHolon(String subHolon) { // System.out.println("Holon "+this.hcu.getHolon().getUniqueID()+" adds sub-holon "+subHolon); //propagate new virtual neighbor for all subholons ArrayList list = new ArrayList(); list.add(subHolon); String body = this.hcu.getCommunicator().getGson().toJson(new NeighborhoodMsg(NeighborhoodMsg.Type.NEW_VIRTUAL_NEIGHBOR, list)); // System.out.println("list: "+list.toString()+" body "+body); for(String sub : this.subHolons) { this.hcu.getCommunicator().sendMsg(sub, CommunicationModule.MessageType.NEIGHBORHOOD, body); } if(this.subHolons.size() > 0) { body = this.hcu.getCommunicator().getGson().toJson(new NeighborhoodMsg(NeighborhoodMsg.Type.NEW_VIRTUAL_NEIGHBOR, this.subHolons)); this.hcu.getCommunicator().sendMsg(subHolon, CommunicationModule.MessageType.NEIGHBORHOOD, body); } this.subHolons.add(subHolon); } public void removeSubHolon(String subHolon) { if(!this.subHolons.remove(subHolon)) System.err.println("Could not remove sub holon "+subHolon); ArrayList list = new ArrayList(); list.add(subHolon); String body = this.hcu.getCommunicator().getGson().toJson(new NeighborhoodMsg(NeighborhoodMsg.Type.REMOVE_VIRTUAL_NEIGHBOR, list)); for(String sub : this.subHolons) { this.hcu.getCommunicator().sendMsg(sub, CommunicationModule.MessageType.NEIGHBORHOOD, body); } } public ArrayList getSubHolons() { return this.subHolons; } public void addVirtualNeighbor(String virtualNeighbor) { this.virtualNeighbors.add(virtualNeighbor); // System.out.println("Holon "+this.hcu.getHolon().getUniqueID()+" add virtual neighbor"+virtualNeighbor); } public void addVirtualNeighbors(ArrayList virtualNeighbor) { this.virtualNeighbors.addAll(virtualNeighbor); // System.out.println("Holon "+this.hcu.getHolon().getUniqueID()+" add virtual neighbor"+virtualNeighbor); } public void removeVirtualNeighbor(String virtualNeighbor) { this.virtualNeighbors.remove(virtualNeighbor); } public void removeVirtualNeighbors(ArrayList virtualNeighbor) { this.virtualNeighbors.removeAll(virtualNeighbor); } }