• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package autotest.common.table;
2 
3 import autotest.common.UnmodifiableSublistView;
4 
5 import com.google.gwt.json.client.JSONObject;
6 
7 import java.util.ArrayList;
8 import java.util.Collection;
9 import java.util.Collections;
10 import java.util.List;
11 import java.util.SortedSet;
12 import java.util.TreeSet;
13 
14 /**
15  * Data source that operates from a local array.  Does not support any
16  * filtering.
17  */
18 public class ArrayDataSource<T extends JSONObject> implements DataSource {
19     private class ArrayQuery extends DefaultQuery {
ArrayQuery()20         public ArrayQuery() {
21             super(null);
22         }
23 
24         @Override
getPage(Integer start, Integer maxCount, SortSpec[] sortOn, DataCallback callback)25         public void getPage(Integer start, Integer maxCount, SortSpec[] sortOn,
26                             DataCallback callback) {
27             List<JSONObject> sortedData = new ArrayList<JSONObject>(data);
28             if (sortOn != null) {
29                 Collections.sort(sortedData, new JSONObjectComparator(sortOn));
30             }
31             int startInt = start != null ? start.intValue() : 0;
32             int maxCountInt = maxCount != null ? maxCount.intValue() : data.size();
33             int size = Math.min(maxCountInt, data.size() - startInt);
34             List<JSONObject> subList =
35                 new UnmodifiableSublistView<JSONObject>(sortedData, startInt, size);
36             callback.handlePage(subList);
37         }
38 
39         @Override
getTotalResultCount(DataCallback callback)40         public void getTotalResultCount(DataCallback callback) {
41             callback.handleTotalResultCount(data.size());
42         }
43     }
44 
45     private SortedSet<T> data;
46     private Query theQuery = new ArrayQuery(); // only need one for each instance
47 
48     /**
49      * @param sortKeys keys that will be used to keep items sorted internally. We
50      * do this to ensure we can find and remove items quickly.
51      */
ArrayDataSource(String[] sortKeys)52     public ArrayDataSource(String[] sortKeys) {
53         SortSpec[] sortSpecs = new SortSpec[sortKeys.length];
54         for (int i = 0; i < sortKeys.length; i++) {
55             sortSpecs[i] = new SortSpec(sortKeys[i]);
56         }
57         data = new TreeSet<T>(new JSONObjectComparator(sortSpecs));
58     }
59 
addItem(T item)60     public void addItem(T item) {
61         data.add(item);
62     }
63 
removeItem(T item)64     public void removeItem(T item) {
65         boolean wasPresent = data.remove(item);
66         assert wasPresent;
67     }
68 
clear()69     public void clear() {
70         data.clear();
71     }
72 
getItems()73     public Collection<T> getItems() {
74         return Collections.unmodifiableCollection(data);
75     }
76 
77     @Override
query(JSONObject params, DataCallback callback)78     public void query(JSONObject params, DataCallback callback) {
79         // ignore params since we don't support filtering
80         callback.onQueryReady(theQuery);
81     }
82 }
83