13652b361896defff06be1f37c5200f27c7610b97Neil Fuller/*
23652b361896defff06be1f37c5200f27c7610b97Neil Fuller * Copyright (C) 2017 The Android Open Source Project
33652b361896defff06be1f37c5200f27c7610b97Neil Fuller *
43652b361896defff06be1f37c5200f27c7610b97Neil Fuller * Licensed under the Apache License, Version 2.0 (the "License");
53652b361896defff06be1f37c5200f27c7610b97Neil Fuller * you may not use this file except in compliance with the License.
63652b361896defff06be1f37c5200f27c7610b97Neil Fuller * You may obtain a copy of the License at
73652b361896defff06be1f37c5200f27c7610b97Neil Fuller *
83652b361896defff06be1f37c5200f27c7610b97Neil Fuller *      http://www.apache.org/licenses/LICENSE-2.0
93652b361896defff06be1f37c5200f27c7610b97Neil Fuller *
103652b361896defff06be1f37c5200f27c7610b97Neil Fuller * Unless required by applicable law or agreed to in writing, software
113652b361896defff06be1f37c5200f27c7610b97Neil Fuller * distributed under the License is distributed on an "AS IS" BASIS,
123652b361896defff06be1f37c5200f27c7610b97Neil Fuller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133652b361896defff06be1f37c5200f27c7610b97Neil Fuller * See the License for the specific language governing permissions and
143652b361896defff06be1f37c5200f27c7610b97Neil Fuller * limitations under the License.
153652b361896defff06be1f37c5200f27c7610b97Neil Fuller */
163652b361896defff06be1f37c5200f27c7610b97Neil Fuller
173652b361896defff06be1f37c5200f27c7610b97Neil Fullerpackage com.android.timezone.distro;
183652b361896defff06be1f37c5200f27c7610b97Neil Fuller
193652b361896defff06be1f37c5200f27c7610b97Neil Fuller/**
203652b361896defff06be1f37c5200f27c7610b97Neil Fuller * Information about a staged time zone distro operation.
213652b361896defff06be1f37c5200f27c7610b97Neil Fuller */
223652b361896defff06be1f37c5200f27c7610b97Neil Fullerpublic class StagedDistroOperation {
233652b361896defff06be1f37c5200f27c7610b97Neil Fuller
243652b361896defff06be1f37c5200f27c7610b97Neil Fuller    private static final StagedDistroOperation UNINSTALL_STAGED =
253652b361896defff06be1f37c5200f27c7610b97Neil Fuller            new StagedDistroOperation(true /* isUninstall */, null /* stagedVersion */);
263652b361896defff06be1f37c5200f27c7610b97Neil Fuller
273652b361896defff06be1f37c5200f27c7610b97Neil Fuller    public final boolean isUninstall;
283652b361896defff06be1f37c5200f27c7610b97Neil Fuller    public final DistroVersion distroVersion;
293652b361896defff06be1f37c5200f27c7610b97Neil Fuller
303652b361896defff06be1f37c5200f27c7610b97Neil Fuller    private StagedDistroOperation(boolean isUninstall, DistroVersion distroVersion) {
313652b361896defff06be1f37c5200f27c7610b97Neil Fuller        this.isUninstall = isUninstall;
323652b361896defff06be1f37c5200f27c7610b97Neil Fuller        this.distroVersion = distroVersion;
333652b361896defff06be1f37c5200f27c7610b97Neil Fuller    }
343652b361896defff06be1f37c5200f27c7610b97Neil Fuller
353652b361896defff06be1f37c5200f27c7610b97Neil Fuller    public static StagedDistroOperation install(DistroVersion distroVersion) {
363652b361896defff06be1f37c5200f27c7610b97Neil Fuller        if (distroVersion == null) {
373652b361896defff06be1f37c5200f27c7610b97Neil Fuller            throw new NullPointerException("distroVersion==null");
383652b361896defff06be1f37c5200f27c7610b97Neil Fuller        }
393652b361896defff06be1f37c5200f27c7610b97Neil Fuller        return new StagedDistroOperation(false /* isUninstall */, distroVersion);
403652b361896defff06be1f37c5200f27c7610b97Neil Fuller    }
413652b361896defff06be1f37c5200f27c7610b97Neil Fuller
423652b361896defff06be1f37c5200f27c7610b97Neil Fuller    public static StagedDistroOperation uninstall() {
433652b361896defff06be1f37c5200f27c7610b97Neil Fuller        return UNINSTALL_STAGED;
443652b361896defff06be1f37c5200f27c7610b97Neil Fuller    }
453652b361896defff06be1f37c5200f27c7610b97Neil Fuller
463652b361896defff06be1f37c5200f27c7610b97Neil Fuller    @Override
473652b361896defff06be1f37c5200f27c7610b97Neil Fuller    public boolean equals(Object o) {
483652b361896defff06be1f37c5200f27c7610b97Neil Fuller        if (this == o) {
493652b361896defff06be1f37c5200f27c7610b97Neil Fuller            return true;
503652b361896defff06be1f37c5200f27c7610b97Neil Fuller        }
513652b361896defff06be1f37c5200f27c7610b97Neil Fuller        if (o == null || getClass() != o.getClass()) {
523652b361896defff06be1f37c5200f27c7610b97Neil Fuller            return false;
533652b361896defff06be1f37c5200f27c7610b97Neil Fuller        }
543652b361896defff06be1f37c5200f27c7610b97Neil Fuller
553652b361896defff06be1f37c5200f27c7610b97Neil Fuller        StagedDistroOperation that = (StagedDistroOperation) o;
563652b361896defff06be1f37c5200f27c7610b97Neil Fuller
573652b361896defff06be1f37c5200f27c7610b97Neil Fuller        if (isUninstall != that.isUninstall) {
583652b361896defff06be1f37c5200f27c7610b97Neil Fuller            return false;
593652b361896defff06be1f37c5200f27c7610b97Neil Fuller        }
603652b361896defff06be1f37c5200f27c7610b97Neil Fuller        return distroVersion != null ? distroVersion.equals(that.distroVersion)
613652b361896defff06be1f37c5200f27c7610b97Neil Fuller                : that.distroVersion == null;
623652b361896defff06be1f37c5200f27c7610b97Neil Fuller    }
633652b361896defff06be1f37c5200f27c7610b97Neil Fuller
643652b361896defff06be1f37c5200f27c7610b97Neil Fuller    @Override
653652b361896defff06be1f37c5200f27c7610b97Neil Fuller    public int hashCode() {
663652b361896defff06be1f37c5200f27c7610b97Neil Fuller        int result = (isUninstall ? 1 : 0);
673652b361896defff06be1f37c5200f27c7610b97Neil Fuller        result = 31 * result + (distroVersion != null ? distroVersion.hashCode() : 0);
683652b361896defff06be1f37c5200f27c7610b97Neil Fuller        return result;
693652b361896defff06be1f37c5200f27c7610b97Neil Fuller    }
703652b361896defff06be1f37c5200f27c7610b97Neil Fuller
713652b361896defff06be1f37c5200f27c7610b97Neil Fuller    @Override
723652b361896defff06be1f37c5200f27c7610b97Neil Fuller    public String toString() {
733652b361896defff06be1f37c5200f27c7610b97Neil Fuller        return "StagedDistroOperation{" +
743652b361896defff06be1f37c5200f27c7610b97Neil Fuller                "isUninstall=" + isUninstall +
753652b361896defff06be1f37c5200f27c7610b97Neil Fuller                ", distroVersion=" + distroVersion +
763652b361896defff06be1f37c5200f27c7610b97Neil Fuller                '}';
773652b361896defff06be1f37c5200f27c7610b97Neil Fuller    }
783652b361896defff06be1f37c5200f27c7610b97Neil Fuller}
79