package org.gscript.data;
import java.util.List;
import android.content.UriMatcher;
import android.net.Uri;
public class ContentUri {
static final String HISTORY_AUTHORITY = "org.gscript.history";
static final String LIBRARY_AUTHORITY = "org.gscript.library";
static final String SCHEDULE_AUTHORITY = "org.gscript.schedule";
static final String CONTENT_SCHEME = "content://";
static final String HISTORY_BASE_PATH = "history";
static final String LIBRARY_BASE_PATH = "library";
static final String ITEM_ATTRIBUTES_BASE_PATH = "attributes";
static final String ITEM_CONDITIONS_BASE_PATH = "conditions";
static final String SCHEDULE_BASE_PATH = "schedule";
static final int MAX_SUBPATHS = 100;
public static final int MATCH_HISTORY = 0;
public static final int MATCH_HISTORY_ITEM = MATCH_HISTORY + 1;
public static final int MATCH_SCHEDULE = 20;
public static final int MATCH_SCHEDULE_ITEM = MATCH_SCHEDULE + 1;
public static final int MATCH_LIBRARY = 40;
public static final int MATCH_LIBRARY_ITEM = MATCH_LIBRARY + 1;
public static final int MATCH_LIBRARY_PATH = MATCH_LIBRARY + 2;
public static final int MATCH_ITEM_ATTRIBS = 60;
public static final int MATCH_ITEM_ATTRIBS_PATH = MATCH_ITEM_ATTRIBS + 1;
public static final int MATCH_ITEM_CONDITIONS = 80;
public static final int MATCH_ITEM_CONDITIONS_PATH = MATCH_ITEM_CONDITIONS + 1;
public static final String QUERY_FLAGS = "flags";
public static final Uri URI_HISTORY = Uri.parse(CONTENT_SCHEME
+ HISTORY_AUTHORITY + "/" + HISTORY_BASE_PATH);
public static final Uri URI_SCHEDULE = Uri.parse(CONTENT_SCHEME
+ SCHEDULE_AUTHORITY + "/" + SCHEDULE_BASE_PATH);
public static final Uri URI_LIBRARY = Uri.parse(CONTENT_SCHEME
+ LIBRARY_AUTHORITY + "/" + LIBRARY_BASE_PATH);
public static final Uri URI_ITEM_ATTRIBUTES = Uri.parse(CONTENT_SCHEME
+ LIBRARY_AUTHORITY + "/" + ITEM_ATTRIBUTES_BASE_PATH);
public static final Uri URI_ITEM_CONDITIONS = Uri.parse(CONTENT_SCHEME
+ LIBRARY_AUTHORITY + "/" + ITEM_CONDITIONS_BASE_PATH);
public static final Uri URI_LIBRARY_PATH(int library, String path) {
return URI_LIBRARY_PATH(library, path, 0);
}
public static final Uri URI_LIBRARY_PATH(int library, String path, int flags) {
if (!path.startsWith("/"))
path = "/" + path;
String flagsQuery = (flags != 0) ? "?" + QUERY_FLAGS + "=" + flags : "";
Uri query = Uri.parse(CONTENT_SCHEME + LIBRARY_AUTHORITY + "/"
+ LIBRARY_BASE_PATH + "/" + library + "/path" + path
+ flagsQuery);
return query;
}
public static final Uri URI_ITEM_ATTRIBS_PATH(int library, String path) {
if (!path.startsWith("/"))
path = "/" + path;
Uri query = Uri.parse(CONTENT_SCHEME + LIBRARY_AUTHORITY + "/"
+ ITEM_ATTRIBUTES_BASE_PATH + "/" + library + path);
return query;
}
public static final Uri URI_ITEM_CONDITIONS_PATH(int library, String path) {
if (!path.startsWith("/"))
path = "/" + path;
Uri query = Uri.parse(CONTENT_SCHEME + LIBRARY_AUTHORITY + "/"
+ ITEM_CONDITIONS_BASE_PATH + "/" + library + path);
return query;
}
public static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
static {
/* history uris */
MATCHER.addURI(HISTORY_AUTHORITY, HISTORY_BASE_PATH, MATCH_HISTORY);
MATCHER.addURI(HISTORY_AUTHORITY, HISTORY_BASE_PATH + "/#",
MATCH_HISTORY_ITEM);
/* schedule uris */
MATCHER.addURI(SCHEDULE_AUTHORITY, SCHEDULE_BASE_PATH, MATCH_SCHEDULE);
MATCHER.addURI(SCHEDULE_AUTHORITY, SCHEDULE_BASE_PATH + "/#",
MATCH_SCHEDULE_ITEM);
/* library uris */
MATCHER.addURI(LIBRARY_AUTHORITY, LIBRARY_BASE_PATH, MATCH_LIBRARY);
MATCHER.addURI(LIBRARY_AUTHORITY, LIBRARY_BASE_PATH + "/#",
MATCH_LIBRARY_ITEM);
MATCHER.addURI(LIBRARY_AUTHORITY, ITEM_ATTRIBUTES_BASE_PATH,
MATCH_ITEM_ATTRIBS);
MATCHER.addURI(LIBRARY_AUTHORITY, ITEM_CONDITIONS_BASE_PATH,
MATCH_ITEM_CONDITIONS);
/* library root path uri */
MATCHER.addURI(LIBRARY_AUTHORITY, LIBRARY_BASE_PATH + "/#/path/",
MATCH_LIBRARY_PATH);
/* library/attrib/conditions subpath uris */
StringBuilder subpath = new StringBuilder(MAX_SUBPATHS * 2);
for (int subpaths = 0; subpaths < MAX_SUBPATHS; ++subpaths) {
subpath.append("/*");
MATCHER.addURI(LIBRARY_AUTHORITY, LIBRARY_BASE_PATH + "/#/path"
+ subpath, MATCH_LIBRARY_PATH);
MATCHER.addURI(LIBRARY_AUTHORITY, ITEM_ATTRIBUTES_BASE_PATH + "/#"
+ subpath, MATCH_ITEM_ATTRIBS_PATH);
MATCHER.addURI(LIBRARY_AUTHORITY, ITEM_CONDITIONS_BASE_PATH + "/#"
+ subpath, MATCH_ITEM_CONDITIONS_PATH);
}
}
public static class LibraryPathSegments {
public String base = LIBRARY_BASE_PATH;
public int id = -1;
public String path = "/";
public static LibraryPathSegments parse(Uri uri) {
List<String> segments = uri.getPathSegments();
LibraryPathSegments segment = new LibraryPathSegments();
if (segments != null && segments.size() >= 2) {
segment.base = segments.get(0);
segment.id = Integer.valueOf(segments.get(1));
if (segment.base.equals(LIBRARY_BASE_PATH)) {
segment.path = uri.getPath()
.replaceFirst(
"/" + segment.base + "/" + segment.id
+ "/path", "");
} else {
segment.path = uri.getPath().replaceFirst(
"/" + segment.base + "/" + segment.id, "");
}
}
return segment;
}
}
}