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