152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee/* 252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * Copyright (C) 2011 The Android Open Source Project 352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * 452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * Licensed under the Apache License, Version 2.0 (the "License"); 552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * you may not use this file except in compliance with the License. 652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * You may obtain a copy of the License at 752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * 852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * http://www.apache.org/licenses/LICENSE-2.0 952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * 1052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * Unless required by applicable law or agreed to in writing, software 1152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * distributed under the License is distributed on an "AS IS" BASIS, 1252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * See the License for the specific language governing permissions and 1452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * limitations under the License 1552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee */ 1652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjeepackage com.android.providers.contacts.util; 1752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee 1852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjeeimport android.content.UriMatcher; 1952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjeeimport android.net.Uri; 2052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee 2152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee/** 2252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * Implementation of {@link TypedUriMatcher}. 2352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * 2452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * @param <T> the type of the URI 2552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee */ 2652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjeepublic class TypedUriMatcherImpl<T extends UriType> implements TypedUriMatcher<T> { 2752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee private final String mAuthority; 2852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee private final T[] mValues; 2952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee private final T mNoMatchUriType; 3052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee private final UriMatcher mUriMatcher; 3152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee 3252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee public TypedUriMatcherImpl(String authority, T[] values) { 3352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee mAuthority = authority; 3452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee mValues = values; 3552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 3652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee T candidateNoMatchUriType = null; 3752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee for (T value : values) { 3852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee String path = value.path(); 3952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee if (path != null) { 4052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee addUriType(path, value); 4152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee } else { 4252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee candidateNoMatchUriType = value; 4352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee } 4452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee } 4552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee this.mNoMatchUriType = candidateNoMatchUriType; 4652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee } 4752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee 4852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee private void addUriType(String path, T value) { 4952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee mUriMatcher.addURI(mAuthority, path, value.ordinal()); 5052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee } 5152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee 5252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee @Override 5352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee public T match(Uri uri) { 5452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee int match = mUriMatcher.match(uri); 5552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee if (match == UriMatcher.NO_MATCH) { 5652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee return mNoMatchUriType; 5752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee } 5852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee return mValues[match]; 5952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee } 6052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee} 61