package org.openstack.atlas.service.domain.pojos; import org.openstack.atlas.service.domain.entities.Node; import org.openstack.atlas.service.domain.entities.NodeCondition; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; public class NodeMap { private Map<Integer, Node> nodeHashMap; public NodeMap() { nodeHashMap = new HashMap<Integer, Node>(); } public NodeMap(Collection<Node> nodes){ nodeHashMap = new HashMap<Integer,Node>(); for(Node node: nodes){ nodeHashMap.put(node.getId(), node); } } public boolean containsKey(Integer id){ return nodeHashMap.containsKey(id); } public void addNode(Node n) { nodeHashMap.put(n.getId(), n); } public Set<Integer> getIds() { return new HashSet<Integer>(nodeHashMap.keySet()); } public static List<Integer> setToSortedList(Set<Integer> ids){ ArrayList arrayList = new ArrayList(); for(Integer id : ids){ arrayList.add(id); } Collections.sort(arrayList); return arrayList; } public static Set<Integer> listToSet(List<Integer> ids){ return new HashSet<Integer>(ids); } public List<Node> getNodesList(Set<Integer>ids){ List<Node> out=new ArrayList<Node>(); for(Integer id : setToSortedList(ids)) { if(nodeHashMap.containsKey(id)){ out.add(nodeHashMap.get(id)); } } return out; } public Set<Integer> nodesInConditionAfterDelete(NodeCondition condition,Set<Integer> doomedIds){ Set<Integer> out = new HashSet<Integer>(); Set<Integer> nodesThatWillSurvive = getIds(); nodesThatWillSurvive.removeAll(doomedIds); for(Integer id: nodesThatWillSurvive){ if(nodeHashMap.get(id).getCondition().equals(condition)) { out.add(id); } } return out; } public Set<Integer> idsThatAreNotInThisMap(Set<Integer> ids){ Set<Integer> idSet = new HashSet<Integer>(ids); idSet.removeAll(getIds()); return idSet; } public void clearMap(){ nodeHashMap = new HashMap<Integer,Node>(); } }