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