1088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkelpackage com.xtremelabs.robolectric.shadows;
2088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
3088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkelimport com.xtremelabs.robolectric.internal.Implementation;
4088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkelimport com.xtremelabs.robolectric.internal.Implements;
5088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
677413b9827f7eb67b44124b61a7b540515a5b865Jan Berkelimport android.database.CursorIndexOutOfBoundsException;
777413b9827f7eb67b44124b61a7b540515a5b865Jan Berkelimport android.database.MatrixCursor;
877413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel
9088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkelimport java.util.ArrayList;
10088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkelimport java.util.List;
11088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
12088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel@Implements(MatrixCursor.class)
13088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkelpublic class ShadowMatrixCursor extends ShadowAbstractCursor {
14088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    private List<Object[]> data = new ArrayList<Object[]>();
15088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
16088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    public void __constructor__(String[] columns) {
17088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel        __constructor__(columns, 0);
18088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    }
19088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
20088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    public void __constructor__(String[] columns, int initialCapacity) {
21088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel        columnNameArray = columns;
22088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    }
23088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
24088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    @Implementation
25088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    public void addRow(Object[] data) {
26088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel        rowCount++;
27088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel        this.data.add(data);
28088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    }
29088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
30088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    @Implementation
31088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    public String getString(int column) {
3277413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel        Object columnValue = get(column);
3377413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel        return columnValue == null ? null : columnValue.toString();
34088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    }
35088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
36088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    @Implementation
37088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    public long getLong(int column) {
3877413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel        Number numberValue = (Number) get(column);
3977413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel        return numberValue == null ? 0 : numberValue.longValue();
40088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    }
41088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
42088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    @Implementation
43088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    public short getShort(int column) {
4477413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel        Number numberValue = (Number) get(column);
4577413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel        return numberValue == null ? 0 : numberValue.shortValue();
46088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    }
47088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
48088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    @Implementation
49088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    public int getInt(int column) {
5077413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel        Number numberValue = (Number) get(column);
5177413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel        return numberValue == null ? 0 : numberValue.intValue();
52088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    }
53088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
54088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    @Implementation
55088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    public float getFloat(int column) {
5677413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel        Number numberValue = (Number) get(column);
5777413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel        return numberValue == null ? 0.0f : numberValue.floatValue();
58088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    }
59088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
60088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    @Implementation
61088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    public double getDouble(int column) {
6277413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel        Number numberValue = (Number) get(column);
6377413b9827f7eb67b44124b61a7b540515a5b865Jan Berkel        return numberValue == null ? 0.0 : numberValue.doubleValue();
64088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    }
65088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
66088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    @Implementation
67dc66632e413d1c9d258bc4755d389694b365740fDiego Garcia    public byte[] getBlob(int column) {
68dc66632e413d1c9d258bc4755d389694b365740fDiego Garcia        return (byte[]) get(column);
69dc66632e413d1c9d258bc4755d389694b365740fDiego Garcia    }
70dc66632e413d1c9d258bc4755d389694b365740fDiego Garcia
71dc66632e413d1c9d258bc4755d389694b365740fDiego Garcia    @Implementation
72088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    public boolean isNull(int column) {
73088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel        return get(column) == null;
74088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    }
75088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel
76088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    private Object get(int column) {
77088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel        if (column < 0 || column >= columnNameArray.length) {
78088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel            throw new CursorIndexOutOfBoundsException(null);
79088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel        }
80088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel        if (currentRowNumber < 0) {
81088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel            throw new CursorIndexOutOfBoundsException("Before first row.");
82088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel        }
83088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel        if (currentRowNumber >= rowCount) {
84088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel            throw new CursorIndexOutOfBoundsException("After last row.");
85088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel        }
86088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel        return data.get(currentRowNumber)[column];
87088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel    }
88088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel}
89