/******************************************************************************* * Copyright (C) 2011 Robert Munteanu <robert.munteanu@gmail.com> * * 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 *******************************************************************************/ package com.itsolut.mantis.core; import java.io.IOException; import java.net.MalformedURLException; import java.util.Locale; import org.apache.axis.AxisFault; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.mylyn.internal.provisional.commons.soap.AxisHttpFault; import org.eclipse.mylyn.tasks.core.RepositoryStatus; import org.eclipse.mylyn.tasks.core.TaskRepository; import com.itsolut.mantis.core.exception.MantisLocalException; import com.itsolut.mantis.core.exception.MantisLoginException; import com.itsolut.mantis.core.exception.MantisRemoteException; import com.itsolut.mantis.core.exception.TicketNotFoundException; public class StatusFactory { public Status toStatus( String message, Throwable t, TaskRepository repository) { String actualMessage = message == null ? t.getMessage() : message; if ( t instanceof TicketNotFoundException ) return new Status(IStatus.WARNING, MantisCorePlugin.PLUGIN_ID, actualMessage, t); if ( repository == null) return new Status(IStatus.ERROR, MantisCorePlugin.PLUGIN_ID, actualMessage, t); if ( t instanceof MantisLoginException || ( actualMessage != null && actualMessage.toLowerCase(Locale.ENGLISH).contains("access denied")) ) return new RepositoryStatus(IStatus.ERROR, MantisCorePlugin.PLUGIN_ID, RepositoryStatus.ERROR_PERMISSION_DENIED, actualMessage); if ( t instanceof MantisRemoteException) { if ( t.getCause() instanceof AxisHttpFault ) { AxisHttpFault httpFault = (AxisHttpFault) t.getCause(); switch ( httpFault.getReturnCode() ) { case 404: return RepositoryStatus.createNotFoundError(repository.getUrl(), MantisCorePlugin.PLUGIN_ID); case 403: return new RepositoryStatus(IStatus.ERROR, MantisCorePlugin.PLUGIN_ID, RepositoryStatus.ERROR_PERMISSION_DENIED, "Access denied by server configuration. Please contact your server administrator."); case 401: return new RepositoryStatus(IStatus.ERROR, MantisCorePlugin.PLUGIN_ID, RepositoryStatus.ERROR_PERMISSION_DENIED, "Server requested authentication, but none was given. Please provide HTTP credentials."); case 302: case 301: return RepositoryStatus.createStatus(repository, IStatus.WARNING, MantisCorePlugin.PLUGIN_ID, "Repository moved to " + MantisRepositoryLocations.create(httpFault.getLocation()).getBaseRepositoryLocation() + ", please update the server location."); } } if ( t.getCause() instanceof AxisFault ) { AxisFault fault = (AxisFault) t.getCause(); if ( fault.detail instanceof IOException ) return new RepositoryStatus(IStatus.ERROR, MantisCorePlugin.PLUGIN_ID, RepositoryStatus.ERROR_PERMISSION_DENIED, "IO Error : " + fault.detail.getMessage() + " ."); } if ( ((MantisRemoteException) t).isUnexpected() ) return RepositoryStatus.createInternalError(MantisCorePlugin.PLUGIN_ID, actualMessage, t); return new RepositoryStatus(IStatus.ERROR, MantisCorePlugin.PLUGIN_ID, RepositoryStatus.ERROR_REPOSITORY, actualMessage); } if ( t instanceof MalformedURLException || t.getCause() instanceof MalformedURLException ) return RepositoryStatus.createStatus(repository, RepositoryStatus.ERROR_REPOSITORY_NOT_FOUND, MantisCorePlugin.PLUGIN_ID, t.getMessage()); if ( t instanceof MantisLocalException) return RepositoryStatus.createInternalError(MantisCorePlugin.PLUGIN_ID, actualMessage, t); if ( t instanceof IOException || t.getCause() instanceof IOException ) return new RepositoryStatus(IStatus.ERROR, MantisCorePlugin.PLUGIN_ID, RepositoryStatus.ERROR_IO, actualMessage); return RepositoryStatus.createInternalError(MantisCorePlugin.PLUGIN_ID, actualMessage, t); } }