public List<Resource> getChildren(Resource parent, boolean includeDeleted) {
    Cursor cursor =
        getReadableDatabase()
            .rawQuery(
                "SELECT name, href, type, content_type, lastmodified "
                    + "FROM files "
                    + "WHERE parent=? "
                    + (!includeDeleted ? "AND flags != " + Resource.DELETED + " " : "")
                    + "ORDER BY type DESC, name ASC",
                new String[] {parent.getHref()});

    List<Resource> resources = new ArrayList<Resource>();

    while (cursor.moveToNext()) {
      Resource resource = new Resource();
      resource.setName(cursor.getString(0));
      resource.setHref(cursor.getString(1));
      resource.setType(ResourceType.valueOf(cursor.getString(2)));
      resource.setContentType(cursor.getString(3));
      resource.setLastModificationDate(new Date(cursor.getLong(4)));
      resources.add(resource);
    }

    return resources;
  }
  public Resource getResource(String baseURI) {
    Cursor cursor =
        getReadableDatabase()
            .rawQuery(
                "SELECT name, href, type, content_type, lastmodified FROM files WHERE href=?",
                new String[] {baseURI});

    if (!cursor.moveToNext()) {
      return null;
    }

    Resource resource = new Resource();
    resource.setName(cursor.getString(0));
    resource.setHref(cursor.getString(1));
    resource.setType(ResourceType.valueOf(cursor.getString(2)));
    resource.setContentType(cursor.getString(3));
    resource.setLastModificationDate(new Date(cursor.getLong(4)));

    return resource;
  }
  public List<Resource> getAllResources() {
    Cursor cursor =
        getReadableDatabase()
            .rawQuery(
                "SELECT name, href, type, content_type, lastmodified, flags FROM files",
                new String[] {});

    List<Resource> resources = new ArrayList<Resource>();

    while (cursor.moveToNext()) {
      Resource resource = new Resource();
      resource.setName(cursor.getString(0));
      resource.setHref(cursor.getString(1));
      resource.setType(ResourceType.valueOf(cursor.getString(2)));
      resource.setContentType(cursor.getString(3));
      resource.setLastModificationDate(new Date(cursor.getLong(4)));
      resource.setFlags(cursor.getInt(5));
      resources.add(resource);
    }

    return resources;
  }
  public Resource getParent(Resource resource) {
    Cursor cursor =
        getReadableDatabase()
            .rawQuery(
                "SELECT p.name, p.href, p.type, p.content_type, p.lastmodified "
                    + "FROM files AS c "
                    + "INNER JOIN files AS p "
                    + "ON c.parent = p.href "
                    + "WHERE c.href=?",
                new String[] {resource.getHref()});

    if (!cursor.moveToNext()) {
      return null;
    }

    Resource parent = new Resource();
    parent.setName(cursor.getString(0));
    parent.setHref(cursor.getString(1));
    parent.setType(ResourceType.valueOf(cursor.getString(2)));
    parent.setContentType(cursor.getString(3));
    parent.setLastModificationDate(new Date(cursor.getLong(4)));

    return parent;
  }