19dbdcda5104991cbf344ea5cba1aa58e1af444f3showardpackage autotest.common.table;
29dbdcda5104991cbf344ea5cba1aa58e1af444f3showard
39dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport com.google.gwt.json.client.JSONObject;
49dbdcda5104991cbf344ea5cba1aa58e1af444f3showard
59dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport java.util.AbstractSet;
6b9c6617bdc063b3b4aa760a0a45190ee069139fdshowardimport java.util.Collection;
79dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport java.util.HashMap;
89dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport java.util.Iterator;
99dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport java.util.Map;
109dbdcda5104991cbf344ea5cba1aa58e1af444f3showard
119dbdcda5104991cbf344ea5cba1aa58e1af444f3showard/**
12589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren * Set that hashes JSONObjects by their ID, so that identical objects get
139dbdcda5104991cbf344ea5cba1aa58e1af444f3showard * matched together.
149dbdcda5104991cbf344ea5cba1aa58e1af444f3showard */
159dbdcda5104991cbf344ea5cba1aa58e1af444f3showardpublic class JSONObjectSet<T extends JSONObject> extends AbstractSet<T> {
169dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    protected Map<String, T> backingMap = new HashMap<String, T>();
17589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren
18b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward    public JSONObjectSet() {
19b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward        super();
20b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward    }
21589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren
22b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward    public JSONObjectSet(Collection<T> items) {
23b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward        super();
24b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward        addAll(items);
25b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward    }
26589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren
279dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    protected String getKey(Object obj) {
289dbdcda5104991cbf344ea5cba1aa58e1af444f3showard        return ((JSONObject) obj).get("id").toString();
299dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    }
309dbdcda5104991cbf344ea5cba1aa58e1af444f3showard
319dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    @Override
329dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    public boolean add(T arg0) {
339dbdcda5104991cbf344ea5cba1aa58e1af444f3showard        return backingMap.put(getKey(arg0), arg0) == null;
349dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    }
359dbdcda5104991cbf344ea5cba1aa58e1af444f3showard
369dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    @Override
379dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    public Iterator<T> iterator() {
389dbdcda5104991cbf344ea5cba1aa58e1af444f3showard        return backingMap.values().iterator();
399dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    }
409dbdcda5104991cbf344ea5cba1aa58e1af444f3showard
419dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    @Override
429dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    public boolean remove(Object arg0) {
439dbdcda5104991cbf344ea5cba1aa58e1af444f3showard        return backingMap.remove(getKey(arg0)) != null;
449dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    }
459dbdcda5104991cbf344ea5cba1aa58e1af444f3showard
469dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    @Override
479dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    public boolean contains(Object o) {
489dbdcda5104991cbf344ea5cba1aa58e1af444f3showard        return backingMap.containsKey(getKey(o));
499dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    }
509dbdcda5104991cbf344ea5cba1aa58e1af444f3showard
519dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    @Override
529dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    public int size() {
539dbdcda5104991cbf344ea5cba1aa58e1af444f3showard        return backingMap.size();
549dbdcda5104991cbf344ea5cba1aa58e1af444f3showard    }
55589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren}
56