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