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