package jcircus.newfrontendmethod; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Vector; public class FrontEndMapping { private HashMap > map; //FrontEndCounter fec; public FrontEndMapping () { map = new LinkedHashMap > (); //fec = new FrontEndCounter (); } public FrontEndMapping (FrontEndMapping fem) { map = new LinkedHashMap > (); map.putAll(fem.getMap()); //fec = new FrontEndCounter (); } public HashMap > getMap () { return this.map; } public void put (String channel, Vector vec) { this.map.put (channel, vec); } public void put (String channel, FrontEndCounter fec) { Integer x = getMax (this.get(channel)); Vector vec = new Vector (); vec.addElement(fec.get(channel)); this.put(channel, vec); } public Vector get (String channel) { if (!this.map.containsKey (channel)) { return new Vector (); } return this.map.get(channel); } private static Object [] withoutDuplicates (Object [] keys1, Object [] keys2) { Vector keysall = new Vector (); //new Object [keys1.length + keys2.length]; for (int i = 0; i < keys1.length; i++) { keysall.addElement(keys1 [i]); } for (int i = 0; i < keys2.length; i++) { if (!keysall.contains (keys2 [i])) keysall.addElement(keys2 [i]); } return keysall.toArray(); } private Integer getMax (Vector vec1) { int aux = -1; if (vec1.size() == 0) return 0; Object [] o = vec1.toArray(); for (int i = 0; i < vec1.size(); i++) { if (aux < (Integer) o [i]) { aux = (Integer) o [i]; } } return aux; } private static Integer getMin (Vector vec1) { int aux = 1000000; //FLAG INICIAL... ADMITIMOS QUE NÃO HÁ UM NÚMERO DE FRONT-ENDS MAIOR DO QUE ESSE Object [] o = vec1.toArray(); for (int i = 0; i < vec1.size(); i++) { if (aux > (Integer) o [i]) { aux = (Integer) o [i]; } } return aux; } public static Vector build (Integer size, Integer initial) { Vector vec = new Vector (); for (int i = 0; i < size; i++) { vec.addElement(i + initial); } return vec; } private static Vector join (Vector vec1, Vector vec2) { int size = vec1.size() + vec2.size(); Integer x = getMin (vec1); Vector vecfinal = new Vector (); for (int i = x; i < size + x; i++) { vecfinal.addElement(new Integer (i)); } return vecfinal; } public static FrontEndMapping mergeFrontEndMappings (FrontEndMapping fem1, FrontEndMapping fem2, Vector channelSet) { FrontEndMapping fem = new FrontEndMapping (); Object [] keys1 = fem1.getMap().keySet().toArray(); Object [] keys2 = fem2.getMap().keySet().toArray(); Object [] keysall = withoutDuplicates (keys1, keys2); for (int i = 0; i < keysall.length; i++) { Vector x1 = fem1.get((String) keysall [i]); Vector x2 = fem2.get((String) keysall [i]); if (channelSet.contains((String)keysall [i])) { Vector x3 = FrontEndMapping.join (x1, x2); //x1.addAll(x2); fem.put((String)keysall [i], x3); } else { fem.put((String)keysall [i], (x1.size() > x2.size())? x1 : x2); } } return fem; } public void updateMapping (String channel, Vector frontends) { if (this.map.containsKey(channel)) { this.map.remove(channel); } this.map.put(channel, frontends); } }