package net.juniper.contrail.sandesh; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.TreeSet; public class SandeshObjectList<T> { private Collection<T> list; final Class<T> typeParameterClass; public SandeshObjectList(Class<T> typeParameterClass) { list = new ArrayList<T>(); this.typeParameterClass = typeParameterClass; } public SandeshObjectList(Class<T> typeParameterClass, boolean sort) { if (sort == true) { // no comparator provided, sort by natural order list = new TreeSet<T>(); } else { list = new ArrayList<T>(); } this.typeParameterClass = typeParameterClass; } public SandeshObjectList(Class<T> typeParameterClass, Comparator<? super T> comparator) { list = new TreeSet<T>(comparator); this.typeParameterClass = typeParameterClass; } public void add(T obj) { list.add(obj); } public void remove(T obj) { list.remove(obj); } public int size() { return list.size(); } public void writeObject(StringBuilder s, String tag, DetailLevel detail, int identifier) { if (list.size() == 0) { return; } s.append("<") .append(tag) .append(" type=\"list\" identifier=\"") .append(identifier) .append("\">") ; s.append("<list type=\"struct\" size=\"") .append(list.size()) .append("\">"); for (T obj: list) { if (obj instanceof SandeshObject) { ((SandeshObject)obj).writeObject(s, detail, 1); } else { s.append("<ElemInfo type=\"struct\" identifier=\"1\">") .append("<Element type=\"string\" identifier=\"1\">") .append(obj.toString()) .append("</Element>") .append("</ElemInfo>"); } } s.append("</list>") .append("</") .append(tag) .append(">"); } }