12fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav/*
22fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav * Copyright (C) 2013 The Android Open Source Project
32fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav *
42fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav * Licensed under the Apache License, Version 2.0 (the "License");
52fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav * you may not use this file except in compliance with the License.
62fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav * You may obtain a copy of the License at
72fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav *
82fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav *      http://www.apache.org/licenses/LICENSE-2.0
92fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav *
102fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav * Unless required by applicable law or agreed to in writing, software
112fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav * distributed under the License is distributed on an "AS IS" BASIS,
122fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav * See the License for the specific language governing permissions and
142fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav * limitations under the License.
152fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav */
162fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
172fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslavpackage android.print;
182fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
19c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport android.annotation.NonNull;
202fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslavimport android.os.Parcel;
212fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslavimport android.os.Parcelable;
22fdb2b7644fc8b0ef968b5c7a2345c17a58287fd9Philip P. Moltmann
23fdb2b7644fc8b0ef968b5c7a2345c17a58287fd9Philip P. Moltmannimport com.android.internal.util.Preconditions;
242fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
252fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslavimport java.util.UUID;
262fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
272fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav/**
282fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav * This class represents the id of a print job.
292fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav */
302fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslavpublic final class PrintJobId implements Parcelable {
31fdb2b7644fc8b0ef968b5c7a2345c17a58287fd9Philip P. Moltmann    private final @NonNull String mValue;
322fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
332fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    /**
342fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     * Creates a new instance.
352fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     *
362fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     * @hide
372fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     */
382fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    public PrintJobId() {
392fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        this(UUID.randomUUID().toString());
402fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    }
412fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
422fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    /**
432fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     * Creates a new instance.
442fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     *
452fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     * @param value The internal value.
462fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     *
472fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     * @hide
482fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     */
49fdb2b7644fc8b0ef968b5c7a2345c17a58287fd9Philip P. Moltmann    public PrintJobId(@NonNull String value) {
502fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        mValue = value;
512fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    }
522fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
532fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    @Override
542fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    public int hashCode() {
552fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        final int prime = 31;
562fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        int result = 1;
57fdb2b7644fc8b0ef968b5c7a2345c17a58287fd9Philip P. Moltmann        result = prime * result + mValue.hashCode();
582fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        return result;
592fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    }
602fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
612fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    @Override
622fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    public boolean equals(Object obj) {
632fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        if (this == obj) {
642fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav            return true;
652fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        }
662fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        if (obj == null) {
672fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav            return false;
682fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        }
692fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        if (getClass() != obj.getClass()) {
702fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav            return false;
712fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        }
722fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        PrintJobId other = (PrintJobId) obj;
73fdb2b7644fc8b0ef968b5c7a2345c17a58287fd9Philip P. Moltmann        if (!mValue.equals(other.mValue)) {
742fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav            return false;
752fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        }
762fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        return true;
772fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    }
782fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
792fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    @Override
802fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    public void writeToParcel(Parcel parcel, int flags) {
812fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        parcel.writeString(mValue);
822fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    }
832fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
842fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    @Override
852fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    public int describeContents() {
862fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        return 0;
872fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    }
882fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
892fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    /**
902fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     * Flattens this id to a string.
912fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     *
922fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     * @return The flattened id.
932fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     *
942fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     * @hide
952fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     */
96c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    public @NonNull String flattenToString() {
972fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        return mValue;
982fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    }
992fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
1002fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    /**
1012fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     * Unflattens a print job id from a string.
1022fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     *
103c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann     * @param string The string.
1042fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     * @return The unflattened id, or null if the string is malformed.
1052fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     *
1062fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     * @hide
1072fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav     */
108fdb2b7644fc8b0ef968b5c7a2345c17a58287fd9Philip P. Moltmann    public static @NonNull PrintJobId unflattenFromString(@NonNull String string) {
1092fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        return new PrintJobId(string);
1102fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    }
1112fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
1122fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    public static final Parcelable.Creator<PrintJobId> CREATOR =
1132fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav            new Parcelable.Creator<PrintJobId>() {
1142fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        @Override
1152fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        public PrintJobId createFromParcel(Parcel parcel) {
116fdb2b7644fc8b0ef968b5c7a2345c17a58287fd9Philip P. Moltmann            return new PrintJobId(Preconditions.checkNotNull(parcel.readString()));
1172fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        }
1182fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav
1192fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        @Override
1202fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        public PrintJobId[] newArray(int size) {
1212fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav            return new PrintJobId[size];
1222fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav        }
1232fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav    };
1242fbd2a7f070f246ddafd9de94efa9a98861e9136Svetoslav}
125