package frame.util; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.TreeSet; import org.apache.log4j.Logger; public class MapTree implements Iterable { protected static Logger logger; protected TreeSet itemList; protected Map itemMap; static { logger = Logger.getLogger(MapTree.class); } public MapTree() { itemList = new TreeSet(); itemMap = new HashMap(); } public void add(String key, T item) { if (key == null) { key = "empty"; } key = key.toLowerCase(); if (itemMap.containsKey(key)) { logger.error("duplicate " + this.getClass().getName() + " key: " + key); return; } itemMap.put(key, item); itemList.add(item); } public T get(String key) { if (key == null) { key = "empty"; } key = key.toLowerCase(); return itemMap.get(key); } public T remove(String key) { if (key == null) { return null; } T obj = itemMap.get(key.toLowerCase()); if (obj != null) { itemMap.remove(key); itemList.remove(obj); } return obj; } public TreeSet getItemList() { return itemList; } public boolean isEmpty() { return itemList.isEmpty(); } public int size() { return itemList.size(); } public boolean containsKey(String key) { if (key == null) { return false; } key = key.toLowerCase(); return itemMap.containsKey(key); } @Override public Iterator iterator() { return itemList.iterator(); } public void clear() { itemList.clear(); itemMap.clear(); } public String toString(String separator) { ContentBuilder builder = new ContentBuilder(separator); for (String key: itemMap.keySet()) { builder.append(key); } return builder.toString(); } }