| /* |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * 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.android.ide.common.rendering.api; |
| |
| /** |
| * Scene result class. This is an immutable class. |
| * <p/> |
| * This cannot be allocated directly, instead use |
| * {@link Status#createResult()}, |
| * {@link Status#createResult(String, Throwable)}, |
| * {@link Status#createResult(String)} |
| * {@link Status#createResult(Object)} |
| */ |
| public class Result { |
| |
| private final Status mStatus; |
| private final String mErrorMessage; |
| private final Throwable mThrowable; |
| private Object mData; |
| |
| /** |
| * Scene Status enum. |
| * <p/>This indicates the status of all scene actions. |
| */ |
| public enum Status { |
| SUCCESS, |
| NOT_IMPLEMENTED, |
| ERROR_TIMEOUT, |
| ERROR_LOCK_INTERRUPTED, |
| ERROR_INFLATION, |
| ERROR_VIEWGROUP_NO_CHILDREN, |
| ERROR_NOT_INFLATED, |
| ERROR_RENDER, |
| ERROR_ANIM_NOT_FOUND, |
| ERROR_NOT_A_DRAWABLE, |
| ERROR_REFLECTION, |
| ERROR_UNKNOWN; |
| |
| private Result mResult; |
| |
| /** |
| * Returns a {@link Result} object with this status. |
| * @return an instance of SceneResult; |
| */ |
| public Result createResult() { |
| // don't want to get generic error that way. |
| assert this != ERROR_UNKNOWN; |
| |
| if (mResult == null) { |
| mResult = new Result(this); |
| } |
| |
| return mResult; |
| } |
| |
| /** |
| * Returns a {@link Result} object with this status, and the given data. |
| * @return an instance of SceneResult; |
| * |
| * @see Result#getData() |
| */ |
| public Result createResult(Object data) { |
| Result res = createResult(); |
| |
| if (data != null) { |
| res = res.getCopyWithData(data); |
| } |
| |
| return res; |
| } |
| |
| /** |
| * Returns a {@link #ERROR_UNKNOWN} result with the given message and throwable |
| * @param errorMessage the error message |
| * @param throwable the throwable |
| * @return an instance of SceneResult. |
| */ |
| public Result createResult(String errorMessage, Throwable throwable) { |
| return new Result(this, errorMessage, throwable); |
| } |
| |
| /** |
| * Returns a {@link #ERROR_UNKNOWN} result with the given message |
| * @param errorMessage the error message |
| * @return an instance of SceneResult. |
| */ |
| public Result createResult(String errorMessage) { |
| return new Result(this, errorMessage, null /*throwable*/); |
| } |
| } |
| |
| /** |
| * Creates a {@link Result} object with the given SceneStatus. |
| * |
| * @param status the status. Must not be null. |
| */ |
| private Result(Status status) { |
| this(status, null, null); |
| } |
| |
| /** |
| * Creates a {@link Result} object with the given SceneStatus, and the given message |
| * and {@link Throwable} |
| * |
| * @param status the status. Must not be null. |
| * @param errorMessage an optional error message. |
| * @param t an optional exception. |
| */ |
| private Result(Status status, String errorMessage, Throwable t) { |
| assert status != null; |
| mStatus = status; |
| mErrorMessage = errorMessage; |
| mThrowable = t; |
| } |
| |
| private Result(Result result) { |
| mStatus = result.mStatus; |
| mErrorMessage = result.mErrorMessage; |
| mThrowable = result.mThrowable; |
| } |
| |
| /** |
| * Returns a copy of the current result with the added (or replaced) given data |
| * @param data the data bundle |
| * |
| * @return returns a new SceneResult instance. |
| */ |
| public Result getCopyWithData(Object data) { |
| Result r = new Result(this); |
| r.mData = data; |
| return r; |
| } |
| |
| |
| /** |
| * Returns whether the status is successful. |
| * <p> |
| * This is the same as calling <code>getStatus() == SceneStatus.SUCCESS</code> |
| * @return <code>true</code> if the status is successful. |
| */ |
| public boolean isSuccess() { |
| return mStatus == Status.SUCCESS; |
| } |
| |
| /** |
| * Returns the status. This is never null. |
| */ |
| public Status getStatus() { |
| return mStatus; |
| } |
| |
| /** |
| * Returns the error message. This is only non-null when {@link #getStatus()} returns |
| * {@link Status#ERROR_UNKNOWN} |
| */ |
| public String getErrorMessage() { |
| return mErrorMessage; |
| } |
| |
| /** |
| * Returns the exception. This is only non-null when {@link #getStatus()} returns |
| * {@link Status#ERROR_UNKNOWN} |
| */ |
| public Throwable getException() { |
| return mThrowable; |
| } |
| |
| /** |
| * Returns the optional data bundle stored in the result object. |
| * @return the data bundle or <code>null</code> if none have been set. |
| */ |
| public Object getData() { |
| return mData; |
| } |
| } |