blob: aae393d0f95c36d95a4d64c8f217a9dbe05f6ee0 [file] [log] [blame]
/*******************************************************************************
* 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.repository;
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);
}
}