package oraculum.droid.provider; import java.util.List; import oraculum.droid.util.ParserUtils; import oraculum.droid.util.ValidationError; import android.app.SearchManager; import android.content.ContentValues; import android.net.Uri; import android.provider.BaseColumns; public class DroidHDContract { /** * Special value for {@link SyncColumns#UPDATED} indicating that an entry * has never been updated, or doesn't exist yet. */ public static final long UPDATED_NEVER = -2; /** * Special value for {@link SyncColumns#UPDATED} indicating that the last * update time is unknown, usually when inserted from a local file source. */ public static final long UPDATED_UNKNOWN = -1; public interface SyncColumns { /** Last time this entry was updated or synchronized. */ String UPDATED = "updated"; } interface ClientesColumns { String cliente_id = "cliente_id"; String cliente_nome = "nome"; String cliente_tel = "tel"; String cliente_tel2 = "tel2"; String cliente_email = "email"; String cliente_end = "end"; String cliente_num = "num"; String cliente_comp = "comp"; String cliente_bairro = "bairro"; String cliente_cidade = "cidade"; String cliente_estado = "estado"; String cliente_cep = "cep"; } public static final String CONTENT_AUTHORITY = "oraculum.droid"; public static final Uri BASE_CONTENT_URI = Uri.parse("content://" + CONTENT_AUTHORITY); private static final String PATH_CLIENTES = "clientes"; public static final String PATH_AT = "at"; public static final String PATH_BETWEEN = "between"; public static final String PATH_NEW = "new"; public static final String PATH_SEARCH = "search"; public static final String PATH_SEARCH_SUGGEST = "search_suggest_query"; public static class Clientes implements ClientesColumns, SyncColumns, BaseColumns { public String _id; public String nome; public String tel; public String tel2; public String email; public String end; public String num; public String comp; public String bairro; public String cidade; public String estado; public String cep; public static final Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon().appendPath(PATH_CLIENTES).build(); public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.oraculum.clientes"; public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.oraculum.clientes"; public static final String SEARCH_SNIPPET = "search_snippet"; /** Count of {@link Sessions} inside given block. */ public static final String CLIENTES_COUNT = "sessions_count"; /** * Flag indicating that at least one {@link Sessions#SESSION_ID} inside * this block has {@link Sessions#SESSION_STARRED} set. */ public static final String CONTAINS_STARRED = "contains_starred"; // TODO: shortcut primary track to offer sub-sorting here /** Default "ORDER BY" clause. */ public static final String DEFAULT_SORT = ClientesColumns.cliente_nome + " COLLATE NOCASE ASC"; /** Build {@link Uri} for requested {@link #_id}. */ public static Uri buildClienteUri(String clienteId) { return CONTENT_URI.buildUpon().appendPath(clienteId).build(); } public static Uri buildClientesAtDirUri(long time) { return CONTENT_URI.buildUpon().appendPath(PATH_AT).appendPath(String.valueOf(time)) .build(); } public static Uri buildSearchUri(String query) { return CONTENT_URI.buildUpon().appendPath(PATH_SEARCH).appendPath(query).build(); } public static boolean isSearchUri(Uri uri) { List<String> pathSegments = uri.getPathSegments(); return pathSegments.size() >= 2 && PATH_SEARCH.equals(pathSegments.get(1)); } public static String getClienteId(Uri uri) { return uri.getPathSegments().get(1); } public static boolean isNewUri(Uri uri) { List<String> pathSegments = uri.getPathSegments(); return PATH_NEW.equals(pathSegments.get(1)); } public static String getSearchQuery(Uri uri) { return uri.getPathSegments().get(2); } /** * Generate a {@link #SESSION_ID} that will always match the requested * {@link Sessions} details. */ public static String generateClienteId(String nome) { return ParserUtils.sanitizeId(nome); } public static class SearchSuggest { public static final Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon().appendPath(PATH_SEARCH_SUGGEST).build(); public static final String DEFAULT_SORT = SearchManager.SUGGEST_COLUMN_TEXT_1 + " COLLATE NOCASE ASC"; } public boolean isValid() throws ValidationError { ValidationError error = new ValidationError(); if ("".equals(nome)) error.addMessage("Nome é obrigatório"); if (error.getLength() > 0) throw error; return true; } public ContentValues toContentValues() { ContentValues vals = new ContentValues(); vals.put(Clientes.cliente_id, this._id); vals.put(Clientes.cliente_nome, this.nome); vals.put(Clientes.cliente_tel, this.tel); vals.put(Clientes.cliente_tel2, this.tel2); vals.put(Clientes.cliente_email, this.email); vals.put(Clientes.cliente_end, this.end); vals.put(Clientes.cliente_num, this.num); vals.put(Clientes.cliente_comp, this.comp); vals.put(Clientes.cliente_bairro, this.bairro); vals.put(Clientes.cliente_cidade, this.cidade); vals.put(Clientes.cliente_estado, this.estado); vals.put(Clientes.cliente_cep, this.cep); return vals; } } }