public static String getItemDirID(final Uri uri) { return getItemDirID("", uri); }
protected void appendParentReference(Uri uri, ContentValues insertValues) { if (UriUtils.hasParent(uri) && !insertValues.containsKey(UriUtils.getParentId(uri) + "_id")) { insertValues.put(UriUtils.getParentColumnName(uri) + "_id", UriUtils.getParentId(uri)); } } }
public static boolean isDir(final String rootPath, final Uri uri) { return !isItem(rootPath, uri); }
public static UriUtils from(Uri uri) { UriUtils utils = new UriUtils(); final List<String> segs = uri.getPathSegments(); String parent = ""; for (int i = 0; i < segs.size(); i++) { String currentSeg = segs.get(i); if (isNumeric(currentSeg)) { final int children = Integer.parseInt(currentSeg); for (int l = 0; l < children; l++) { mappedIds.put(parent, currentSeg); } } else { parent = currentSeg; } } return utils; }
final StringBuilder tableName = new StringBuilder(UriUtils.getItemDirID(uri)); builder.setTables(tableName.toString()); Map<String, String> autoproj = null; if (UriUtils.isItem(uri)) { String where = ID + "=" + uri.getLastPathSegment(); logger.logAppendWhere(where); builder.appendWhere(where); } else if (UriUtils.hasParent(uri)) { StringBuilder escapedWhere = new StringBuilder(); DatabaseUtils.appendEscapedSQLString(escapedWhere, UriUtils.getParentId(uri)); String where = UriUtils.getParentColumnName(uri) + ID + "=" + escapedWhere.toString(); logger.logAppendWhere(where); builder.appendWhere(where);
public static String getParentId(Uri uri) { if (hasParent(uri)) { if (!isNumberedEntryWithinCollection(uri)) { return uri.getPathSegments().get((uri.getPathSegments().size() - 1) - 1); } return uri.getPathSegments().get((uri.getPathSegments().size() - 1) - 2); } return ""; }
@Test public void testChangingRootOfQuery() { Uri uri = Uri.parse("content://test.com/root/item/1"); assertTrue(UriUtils.isItem("root", uri)); assertEquals("item", UriUtils.getItemDirID("root", uri)); uri = Uri.parse("content://test.com/root/root2/item/1"); assertTrue(UriUtils.isItem("root/root2", uri)); assertEquals("item", UriUtils.getItemDirID("root/root2", uri)); }
@Test public void testGenericItemWithinCollectionQuery() { final Uri uri = Uri.parse("content://test.com/item/1"); assertTrue(UriUtils.isNumberedEntryWithinCollection(uri)); assertEquals("item", UriUtils.getItemDirID(uri)); }
@Test public void testGettingRowIds() { Uri uri = Uri.parse("content://test.com"); Map<String, String> result = UriUtils.from(uri).getMappedIds(); assertTrue(result.size() == 0); uri = Uri.parse("content://test.com/parent"); result = UriUtils.from(uri).getMappedIds(); assertTrue(result.size() == 0); uri = Uri.parse("content://test.com/parent/1"); result = UriUtils.from(uri).getMappedIds(); assertEquals(result.size(),1); assertTrue(result.containsKey("parent")); assertEquals("1", result.get("parent")); uri = Uri.parse("content://test.com/parent/1/child"); result = UriUtils.from(uri).getMappedIds(); assertTrue(result.size() == 1); assertTrue(result.containsKey("parent")); assertEquals("1", result.get("parent")); uri = Uri.parse("content://test.com/parent/1/child/6"); result = UriUtils.from(uri).getMappedIds(); assertTrue(result.size() == 2); assertTrue(result.containsKey("parent") && result.containsKey("child")); assertEquals("1", result.get("parent")); assertEquals("6", result.get("child")); }
public static boolean isDir(final Uri uri) { return isDir("", uri); }
public static String getParentColumnName(Uri uri) { if (hasParent(uri)) { if (!isNumberedEntryWithinCollection(uri)) { return uri.getPathSegments().get((uri.getPathSegments().size() - 1) - 2); } return uri.getPathSegments().get((uri.getPathSegments().size() - 1) - 3); } return ""; }
@Test public void testGettingParentDetails(){ Uri uri = Uri.parse("content://test.com"); assertEquals("",UriUtils.getParentColumnName(uri)); assertEquals("",UriUtils.getParentId(uri)); assertEquals(false,UriUtils.hasParent(uri)); uri = Uri.parse("content://test.com/parent/1/child"); assertEquals("parent",UriUtils.getParentColumnName(uri)); assertEquals("1",UriUtils.getParentId(uri)); assertEquals(true,UriUtils.hasParent(uri)); uri = Uri.parse("content://test.com/parent/1/child/6"); assertEquals("parent",UriUtils.getParentColumnName(uri)); assertEquals("1",UriUtils.getParentId(uri)); assertEquals(true,UriUtils.hasParent(uri)); uri = Uri.parse("content://test.com/parent/1/child/6/subchild"); assertEquals("child",UriUtils.getParentColumnName(uri)); assertEquals("6",UriUtils.getParentId(uri)); assertEquals(true,UriUtils.hasParent(uri)); uri = Uri.parse("content://test.com/parent/1/child/6/subchild/3"); assertEquals("child",UriUtils.getParentColumnName(uri)); assertEquals("6",UriUtils.getParentId(uri)); assertEquals(true,UriUtils.hasParent(uri)); } }
@Override protected int updateInTransaction(Uri uri, ContentValues values, String selection, String[] selectionArgs) { ContentValues insertValues = (values != null) ? new ContentValues(values) : new ContentValues(); int rowsAffected = getWritableDatabase().update(UriUtils.getItemDirID(uri), insertValues, selection, selectionArgs); if (rowsAffected > 0) { notifyUriChange(uri); } return rowsAffected; }
public static boolean isItem(final Uri uri) { return isItem("", uri); }
@Override protected int deleteInTransaction(Uri uri, String selection, String[] selectionArgs) { SQLiteDatabase database = getWritableDatabase(); int count = database.delete(UriUtils.getItemDirID(uri), selection, selectionArgs); notifyUriChange(uri); return count; }
public static String getItemDirID(final String rootPath, final Uri uri) { final List<String> segments = uri.getPathSegments(); if (isItem(rootPath, uri)) { return segments.get(segments.size() - 2); } return uri.getLastPathSegment(); }
public long insert(Uri uri, ContentValues values) { ContentValues insertValues = (values != null) ? new ContentValues(values) : new ContentValues(); final String table = UriUtils.getItemDirID(uri); final Constraint constraint = metaInfo.getFirstConstraint(table, insertValues); appendParentReference(uri, insertValues); long rowId = -1; if (constraint != null) { rowId = tryUpdateWithConstraint(table, constraint, insertValues); } else { if (Log.Provider.warningLoggingEnabled()) { Log.Provider.w("No constrain against URI: " + uri); } } if (rowId <= 0) { rowId = dbHelper.getWritableDatabase().insert(table, null, insertValues); } // According to http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insert(java.lang.String,%20java.lang.String,%20android.content.ContentValues) // only -1 indicates an error, and returning 0 is valid and has been seen. if (rowId != -1) { return rowId; } throw new SQLException("Failed to insert row into " + uri); }