Android Open Source - android-memento Immutable Uri Matcher






From Project

Back to project page android-memento.

License

The source code is released under:

Apache License

If you think the Android project android-memento listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * android-memento-lib https://github.com/twofortyfouram/android-memento
 * Copyright 2014 two forty four a.m. LLC
 *//from   ww  w  .  jav  a 2 s . co  m
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the
 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.twofortyfouram.memento.provider;

import com.twofortyfouram.assertion.Assertions;

import net.jcip.annotations.Immutable;

import android.content.UriMatcher;
import android.net.Uri;
import android.support.annotation.NonNull;

/**
 * Wraps Android's {@link UriMatcher} in an effectively immutable container class, making the
 * {@link UriMatcher} thread-safe.
 */
@Immutable
public final class ImmutableUriMatcher {
    /*
     * The only real purpose of this class is to put the UriMatcher into a final field, thus safely
     * publishing it to other threads. This is necessary, because the AbstractSqliteContentProvider
     * lazily initializes its UriMatcher in onCreate(). Because UriMatcher is a mutable object, it
     * needs to be put into a final field to be safely published to all the different threads that
     * might interact with the ContentProvider.
     */

    /**
     * {@link UriMatcher} wrapped by this class.
     */
    @NonNull
    private final UriMatcher mUriMatcher;

    /**
     * @param matcher UriMatcher to be wrapped by this class. This object cannot be modified after
     *                being passed to this constructor, as that would mutate the internal state of
     *                {@link ImmutableUriMatcher} making it no longer effectively immutable (and
     *                therefore
     *                no longer thread-safe).
     */
    public ImmutableUriMatcher(@NonNull final UriMatcher matcher) {
        Assertions.assertNotNull(matcher, "matcher"); //$NON-NLS-1$
        mUriMatcher = matcher;
    }

    /**
     * Try to match against the path in {@code uri}.
     *
     * @param uri The uri whose path we will match against.
     * @return The code for the matched node
     * or -1 if there is no matched node.
     */
    public int match(@NonNull final Uri uri) {
        Assertions.assertNotNull(uri, "uri"); //$NON-NLS-1$
        return mUriMatcher.match(uri);
    }

}




Java Source Code List

com.twofortyfouram.memento.debug.provider.SqliteContentProviderImpl.java
com.twofortyfouram.memento.debug.provider.SqliteOpenHelperImpl.java
com.twofortyfouram.memento.debug.provider.SqliteUriMatcherImpl.java
com.twofortyfouram.memento.debug.provider.TableOneContract.java
com.twofortyfouram.memento.provider.ContentChangeNotificationQueueTest.java
com.twofortyfouram.memento.provider.ContentChangeNotificationQueue.java
com.twofortyfouram.memento.provider.ContentProviderOperationServiceTest.java
com.twofortyfouram.memento.provider.ContentProviderOperationService.java
com.twofortyfouram.memento.provider.ContentProviderUtilTest.java
com.twofortyfouram.memento.provider.ContentProviderUtil.java
com.twofortyfouram.memento.provider.ImmutableUriMatcherTest.java
com.twofortyfouram.memento.provider.ImmutableUriMatcher.java
com.twofortyfouram.memento.provider.sqlite.AbstractSqliteContentProviderIntegrationTest.java
com.twofortyfouram.memento.provider.sqlite.AbstractSqliteContentProviderTest.java
com.twofortyfouram.memento.provider.sqlite.AbstractSqliteContentProvider.java
com.twofortyfouram.memento.provider.sqlite.SqliteColumnBuilderTest.java
com.twofortyfouram.memento.provider.sqlite.SqliteColumnBuilder.java
com.twofortyfouram.memento.provider.sqlite.SqliteIndexBuilderTest.java
com.twofortyfouram.memento.provider.sqlite.SqliteIndexBuilder.java
com.twofortyfouram.memento.provider.sqlite.SqliteOpenHelperCompat.java
com.twofortyfouram.memento.provider.sqlite.SqliteStorageClass.java
com.twofortyfouram.memento.provider.sqlite.SqliteTableBuilderTest.java
com.twofortyfouram.memento.provider.sqlite.SqliteTableBuilder.java
com.twofortyfouram.memento.provider.sqlite.SqliteUriMatchTest.java
com.twofortyfouram.memento.provider.sqlite.SqliteUriMatch.java
com.twofortyfouram.memento.provider.sqlite.SqliteUriMatcher.java