package org.dodgybits.shuffle.android.persistence.provider;
import android.net.Uri;
import android.provider.BaseColumns;
public class ProjectProvider extends AbstractCollectionProvider {
public static final String PROJECT_TABLE_NAME = "project";
public static final String UPDATE_INTENT = "org.dodgybits.shuffle.android.PROJECT_UPDATE";
private static final String AUTHORITY = Shuffle.PACKAGE+".projectprovider";
static final int PROJECT_TASKS = 203;
static final int ACTIVE_PROJECTS = 204;
private static final String URL_COLLECTION_NAME = "projects";
public ProjectProvider() {
super(
AUTHORITY, // authority
URL_COLLECTION_NAME, // collectionNamePlural
PROJECT_TABLE_NAME, // tableName
UPDATE_INTENT, // update intent action
Projects.NAME, // primary key
BaseColumns._ID, // id field
Projects.CONTENT_URI,// content URI
BaseColumns._ID, // fields...
Projects.NAME,
Projects.DEFAULT_CONTEXT_ID,
Projects.PARALLEL,
Projects.ARCHIVED,
ShuffleTable.TRACKS_ID,
ShuffleTable.MODIFIED_DATE,
ShuffleTable.DELETED,
ShuffleTable.ACTIVE
);
makeSearchable(Projects._ID, Projects.NAME, Projects.NAME, Projects.NAME);
uriMatcher.addURI(AUTHORITY, "projectTasks", PROJECT_TASKS);
String idField = "p._id";
String tables = "project p, task t";
String restrictions = "t.projectId = p._id and t.deleted = 0";
restrictionBuilders.put(PROJECT_TASKS,
new CustomElementFilterRestrictionBuilder(
tables, restrictions, idField));
groupByBuilders.put(PROJECT_TASKS,
new StandardGroupByBuilder("p._id"));
elementInserters.put(COLLECTION_MATCH_ID, new ProjectInserter());
setDefaultSortOrder(Projects.DEFAULT_SORT_ORDER);
uriMatcher.addURI(AUTHORITY, "activeProjects", ACTIVE_PROJECTS);
restrictionBuilders.put(ACTIVE_PROJECTS,
new CustomElementFilterRestrictionBuilder("project p", "p.deleted = 0", idField));
}
/**
* Projects table
*/
public static final class Projects implements ShuffleTable {
public static final String ARCHIVED = "archived";
/**
* The content:// style URL for this table
*/
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + URL_COLLECTION_NAME);
public static final Uri PROJECT_TASKS_CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/projectTasks");
public static final Uri ACTIVE_PROJECTS = Uri.parse("content://" + AUTHORITY + "/activeProjects");
public static final String DEFAULT_CONTEXT_ID = "defaultContextId";
/**
* The default sort order for this table
*/
public static final String DEFAULT_SORT_ORDER = "name DESC";
public static final String NAME = "name";
public static final String PARALLEL = "parallel";
public static final String TASK_COUNT = "count";
/**
* Projection for all the columns of a project.
*/
public static final String[] FULL_PROJECTION = new String[] {
_ID,
NAME,
DEFAULT_CONTEXT_ID,
TRACKS_ID,
MODIFIED_DATE,
PARALLEL,
ARCHIVED,
DELETED,
ACTIVE
};
/**
* Projection for fetching the task count for each project.
*/
public static final String[] FULL_TASK_PROJECTION = new String[] {
_ID,
TASK_COUNT,
};
}
private class ProjectInserter extends ElementInserterImpl {
public ProjectInserter() {
super(Projects.NAME);
}
}
}