150d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono/*
250d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono * Copyright (C) 2015 The Android Open Source Project
350d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono *
450d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono * Licensed under the Apache License, Version 2.0 (the "License");
550d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono * you may not use this file except in compliance with the License.
650d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono * You may obtain a copy of the License at
750d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono *
850d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono *      http://www.apache.org/licenses/LICENSE-2.0
950d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono *
1050d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono * Unless required by applicable law or agreed to in writing, software
1150d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono * distributed under the License is distributed on an "AS IS" BASIS,
1250d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1350d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono * See the License for the specific language governing permissions and
1450d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono * limitations under the License.
1550d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono */
1650d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono
1750d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hironopackage com.android.mtp;
1850d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono
199e8a4fa78f5b9e3964dca84ad4047210d35c4013Daichi Hironoimport java.util.Objects;
206a5ea7eae8a70bced97ceef051c965c27cb642caDaichi Hironoimport static com.android.mtp.MtpDatabaseConstants.DocumentType;
219e8a4fa78f5b9e3964dca84ad4047210d35c4013Daichi Hirono
2250d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono/**
2350d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono * Static utilities for ID.
2450d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono */
25e5323b7493f2bc1537d7e6b2d4595d69fd01d72eDaichi Hironoclass Identifier {
2611bd3cbd2d4934ba9f5b8b4087954d8f68106192Daichi Hirono    final int mDeviceId;
2711bd3cbd2d4934ba9f5b8b4087954d8f68106192Daichi Hirono    final int mStorageId;
2811bd3cbd2d4934ba9f5b8b4087954d8f68106192Daichi Hirono    final int mObjectHandle;
2947eb192b2704e27272ca94a95680cac40b6bff3fDaichi Hirono    final String mDocumentId;
306a5ea7eae8a70bced97ceef051c965c27cb642caDaichi Hirono    final @DocumentType int mDocumentType;
31e5323b7493f2bc1537d7e6b2d4595d69fd01d72eDaichi Hirono
326a5ea7eae8a70bced97ceef051c965c27cb642caDaichi Hirono    Identifier(int deviceId, int storageId, int objectHandle, String documentId,
336a5ea7eae8a70bced97ceef051c965c27cb642caDaichi Hirono            @DocumentType int documentType) {
34e5323b7493f2bc1537d7e6b2d4595d69fd01d72eDaichi Hirono        mDeviceId = deviceId;
35e5323b7493f2bc1537d7e6b2d4595d69fd01d72eDaichi Hirono        mStorageId = storageId;
36e5323b7493f2bc1537d7e6b2d4595d69fd01d72eDaichi Hirono        mObjectHandle = objectHandle;
3747eb192b2704e27272ca94a95680cac40b6bff3fDaichi Hirono        mDocumentId = documentId;
386a5ea7eae8a70bced97ceef051c965c27cb642caDaichi Hirono        mDocumentType = documentType;
39e5323b7493f2bc1537d7e6b2d4595d69fd01d72eDaichi Hirono    }
40e5323b7493f2bc1537d7e6b2d4595d69fd01d72eDaichi Hirono
4111bd3cbd2d4934ba9f5b8b4087954d8f68106192Daichi Hirono    @Override
4211bd3cbd2d4934ba9f5b8b4087954d8f68106192Daichi Hirono    public boolean equals(Object obj) {
4311bd3cbd2d4934ba9f5b8b4087954d8f68106192Daichi Hirono        if (!(obj instanceof Identifier))
4411bd3cbd2d4934ba9f5b8b4087954d8f68106192Daichi Hirono            return false;
456a5ea7eae8a70bced97ceef051c965c27cb642caDaichi Hirono        final Identifier other = (Identifier) obj;
4611bd3cbd2d4934ba9f5b8b4087954d8f68106192Daichi Hirono        return mDeviceId == other.mDeviceId && mStorageId == other.mStorageId &&
4719aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono                mObjectHandle == other.mObjectHandle && mDocumentId.equals(other.mDocumentId);
4811bd3cbd2d4934ba9f5b8b4087954d8f68106192Daichi Hirono    }
4911bd3cbd2d4934ba9f5b8b4087954d8f68106192Daichi Hirono
5011bd3cbd2d4934ba9f5b8b4087954d8f68106192Daichi Hirono    @Override
5111bd3cbd2d4934ba9f5b8b4087954d8f68106192Daichi Hirono    public int hashCode() {
529e8a4fa78f5b9e3964dca84ad4047210d35c4013Daichi Hirono        return Objects.hash(mDeviceId, mStorageId, mObjectHandle, mDocumentId);
5350d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono    }
5419aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono
5519aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono    @Override
5619aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono    public String toString() {
5719aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        final StringBuilder builder = new StringBuilder();
5819aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append("Identifier { ");
5919aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono
6019aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append("mDeviceId: ");
6119aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append(mDeviceId);
6219aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append(", ");
6319aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono
6419aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append("mStorageId: ");
6519aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append(mStorageId);
6619aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append(", ");
6719aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono
6819aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append("mObjectHandle: ");
6919aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append(mObjectHandle);
7019aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append(", ");
7119aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono
7219aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append("mDocumentId: ");
7319aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append(mDocumentId);
7419aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append(", ");
7519aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono
7619aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append("mDocumentType: ");
7719aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append(mDocumentType);
7819aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        builder.append(" }");
7919aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono        return builder.toString();
8019aa93249edc5dac01025456ce3bb1881f1b11d1Daichi Hirono    }
8150d17aa871d9ca645a8e7af64df8866b85aee245Daichi Hirono}
82