blob: 76de3678fbc5e742505de083ef9f7627b9a7db2f [file] [log] [blame]
/*
* 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.ddmlib;
import java.io.IOException;
/**
* Exception thrown when a transfer using {@link SyncService} doesn't complete.
* <p/>This is different from an {@link IOException} because it's not the underlying connection
* that triggered the error, but the adb transfer protocol that didn't work somehow, or that the
* targets (local and/or remote) were wrong.
*/
public class SyncException extends CanceledException {
private static final long serialVersionUID = 1L;
public enum SyncError {
/** canceled transfer */
CANCELED("Operation was canceled by the user."),
/** Transfer error */
TRANSFER_PROTOCOL_ERROR("Adb Transfer Protocol Error."),
/** unknown remote object during a pull */
NO_REMOTE_OBJECT("Remote object doesn't exist!"),
/** Result code when attempting to pull multiple files into a file */
TARGET_IS_FILE("Target object is a file."),
/** Result code when attempting to pull multiple into a directory that does not exist. */
NO_DIR_TARGET("Target directory doesn't exist."),
/** wrong encoding on the remote path. */
REMOTE_PATH_ENCODING("Remote Path encoding is not supported."),
/** remote path that is too long. */
REMOTE_PATH_LENGTH("Remote path is too long."),
/** error while reading local file. */
FILE_READ_ERROR("Reading local file failed!"),
/** error while writing local file. */
FILE_WRITE_ERROR("Writing local file failed!"),
/** attempting to push a directory. */
LOCAL_IS_DIRECTORY("Local path is a directory."),
/** attempting to push a non-existent file. */
NO_LOCAL_FILE("Local path doesn't exist."),
/** when the target path of a multi file push is a file. */
REMOTE_IS_FILE("Remote path is a file."),
/** receiving too much data from the remove device at once */
BUFFER_OVERRUN("Receiving too much data.");
private final String mMessage;
private SyncError(String message) {
mMessage = message;
}
public String getMessage() {
return mMessage;
}
}
private final SyncError mError;
public SyncException(SyncError error) {
super(error.getMessage());
mError = error;
}
public SyncException(SyncError error, String message) {
super(message);
mError = error;
}
public SyncException(SyncError error, Throwable cause) {
super(error.getMessage(), cause);
mError = error;
}
public SyncError getErrorCode() {
return mError;
}
/**
* Returns true if the sync was canceled by user input.
*/
@Override
public boolean wasCanceled() {
return mError == SyncError.CANCELED;
}
}