diff options
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryStatus.java')
-rw-r--r-- | bundles/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryStatus.java | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/bundles/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryStatus.java b/bundles/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryStatus.java new file mode 100644 index 000000000..ccc465939 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryStatus.java @@ -0,0 +1,155 @@ +/******************************************************************************* + * Copyright (c) 2009 Cloudsmith Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Cloudsmith Inc. - initial API and implementation + *******************************************************************************/ + +package org.eclipse.equinox.internal.p2.transport.ecf; + +import org.eclipse.equinox.internal.p2.repository.DownloadStatus; +import org.eclipse.equinox.p2.core.ProvisionException; + +import java.io.FileNotFoundException; +import java.net.*; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.ecf.core.identity.IDCreateException; +import org.eclipse.ecf.filetransfer.BrowseFileTransferException; +import org.eclipse.ecf.filetransfer.IncomingFileTransferException; +import org.eclipse.osgi.util.NLS; + +/** + * Utility class to transform transport errors into error messages. + * + */ +public class RepositoryStatus { + + public static String codeToMessage(int code, String toDownload) { + switch (code) { + case 400 : + return NLS.bind(Messages.TransportErrorTranslator_400, toDownload); + case 401 : + return NLS.bind(Messages.TransportErrorTranslator_401, toDownload); + case 402 : + return NLS.bind(Messages.TransportErrorTranslator_402, toDownload); + case 403 : + return NLS.bind(Messages.TransportErrorTranslator_403, toDownload); + case 404 : + return NLS.bind(Messages.TransportErrorTranslator_404, toDownload); + case 405 : + return NLS.bind(Messages.TransportErrorTranslator_405, toDownload); + case 406 : + return NLS.bind(Messages.TransportErrorTranslator_406, toDownload); + case 407 : + return NLS.bind(Messages.TransportErrorTranslator_407, toDownload); + case 408 : + return NLS.bind(Messages.TransportErrorTranslator_408, toDownload); + case 409 : + return NLS.bind(Messages.TransportErrorTranslator_409, toDownload); + case 410 : + return NLS.bind(Messages.TransportErrorTranslator_410, toDownload); + case 411 : + return NLS.bind(Messages.TransportErrorTranslator_411, toDownload); + case 412 : + return NLS.bind(Messages.TransportErrorTranslator_412, toDownload); + case 413 : + return NLS.bind(Messages.TransportErrorTranslator_413, toDownload); + case 414 : + return NLS.bind(Messages.TransportErrorTranslator_414, toDownload); + case 415 : + return NLS.bind(Messages.TransportErrorTranslator_415, toDownload); + case 416 : + return NLS.bind(Messages.TransportErrorTranslator_416, toDownload); + case 417 : + return NLS.bind(Messages.TransportErrorTranslator_417, toDownload); + case 418 : + return NLS.bind(Messages.TransportErrorTranslator_418, toDownload); + case 422 : + return NLS.bind(Messages.TransportErrorTranslator_422, toDownload); + case 423 : + return NLS.bind(Messages.TransportErrorTranslator_423, toDownload); + case 424 : + return NLS.bind(Messages.TransportErrorTranslator_424, toDownload); + case 425 : + return NLS.bind(Messages.TransportErrorTranslator_425, toDownload); + case 426 : + return NLS.bind(Messages.TransportErrorTranslator_426, toDownload); + case 449 : + return NLS.bind(Messages.TransportErrorTranslator_449, toDownload); + case 450 : + return NLS.bind(Messages.TransportErrorTranslator_450, toDownload); + + case 500 : + return NLS.bind(Messages.TransportErrorTranslator_500, toDownload); + case 501 : + return NLS.bind(Messages.TransportErrorTranslator_501, toDownload); + case 502 : + return NLS.bind(Messages.TransportErrorTranslator_502, toDownload); + case 503 : + return NLS.bind(Messages.TransportErrorTranslator_503, toDownload); + case 504 : + return NLS.bind(Messages.TransportErrorTranslator_504, toDownload); + case 505 : + return NLS.bind(Messages.TransportErrorTranslator_505, toDownload); + case 506 : + return NLS.bind(Messages.TransportErrorTranslator_506, toDownload); + case 507 : + return NLS.bind(Messages.TransportErrorTranslator_507, toDownload); + case 508 : + return NLS.bind(Messages.TransportErrorTranslator_508, toDownload); + case 510 : + return NLS.bind(Messages.TransportErrorTranslator_510, toDownload); + + default : + return NLS.bind(Messages.TransportErrorTranslator_UnknownErrorCode, Integer.toString(code), toDownload); + } + } + + public static DownloadStatus forStatus(IStatus original, URI toDownload) { + Throwable t = original.getException(); + return forException(t, toDownload); + } + + public static DownloadStatus forException(Throwable t, URI toDownload) { + if (t instanceof FileNotFoundException || (t instanceof IncomingFileTransferException && ((IncomingFileTransferException) t).getErrorCode() == 404)) + return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.ARTIFACT_NOT_FOUND, NLS.bind(Messages.artifact_not_found, toDownload), t); + if (t instanceof ConnectException) + return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, NLS.bind(Messages.TransportErrorTranslator_UnableToConnectToRepository_0, toDownload), t); + if (t instanceof UnknownHostException) + return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_INVALID_LOCATION, NLS.bind(Messages.TransportErrorTranslator_UnknownHost, toDownload), t); + if (t instanceof IDCreateException) { + IStatus status = ((IDCreateException) t).getStatus(); + if (status != null && status.getException() != null) + t = status.getException(); + + return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_INVALID_LOCATION, NLS.bind(Messages.TransportErrorTranslator_MalformedRemoteFileReference, toDownload), t); + } + int code = 0; + + // default to report as read repository error + int provisionCode = ProvisionException.REPOSITORY_FAILED_READ; + + if (t instanceof IncomingFileTransferException) + code = ((IncomingFileTransferException) t).getErrorCode(); + else if (t instanceof BrowseFileTransferException) + code = ((BrowseFileTransferException) t).getErrorCode(); + + // Switch on error codes in the HTTP error code range. + // Note that 404 uses ARTIFACT_NOT_FOUND (as opposed to REPOSITORY_NOT_FOUND, which + // is determined higher up in the calling chain). + if (code == 401) + provisionCode = ProvisionException.REPOSITORY_FAILED_AUTHENTICATION; + else if (code == 404) + provisionCode = ProvisionException.ARTIFACT_NOT_FOUND; + + // Add more specific translation here + + return new DownloadStatus(IStatus.ERROR, Activator.ID, provisionCode, // + code == 0 ? NLS.bind(Messages.io_failedRead, toDownload) // + : codeToMessage(code, toDownload.toString()), t); + } +} |