blob: 82508a16bd120f4abdfc1a84fe9793278617c3bf [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2008 Steffen Pingel and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Steffen Pingel - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.trac.core;
import java.net.MalformedURLException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.mylyn.commons.net.AbstractWebLocation;
import org.eclipse.mylyn.internal.trac.core.client.ITracClient;
import org.eclipse.mylyn.internal.trac.core.client.ITracClient.Version;
import org.eclipse.mylyn.internal.trac.core.client.TracException;
import org.eclipse.mylyn.internal.trac.core.client.TracLoginException;
import org.eclipse.mylyn.internal.trac.core.client.TracWebClient;
import org.eclipse.mylyn.internal.trac.core.client.TracXmlRpcClient;
/**
* @author Steffen Pingel
*/
public class TracClientFactory {
public static ITracClient createClient(AbstractWebLocation location, Version version) {
if (version == Version.TRAC_0_9) {
return new TracWebClient(location, version);
} else if (version == Version.XML_RPC) {
return new TracXmlRpcClient(location, version);
}
// fall-back to XML_RPC in case the repository information is incomplete
return new TracXmlRpcClient(location, Version.XML_RPC);
}
/**
* Tries all supported access types for <code>location</code> and returns the corresponding version if successful;
* throws an exception otherwise.
* <p>
* Order of the tried access types: XML-RPC, Trac 0.9
*/
public static Version probeClient(AbstractWebLocation location) throws MalformedURLException, TracException {
try {
ITracClient repository = new TracXmlRpcClient(location, Version.XML_RPC);
repository.validate(new NullProgressMonitor());
return Version.XML_RPC;
} catch (TracException e) {
try {
ITracClient repository = new TracWebClient(location, Version.TRAC_0_9);
repository.validate(new NullProgressMonitor());
return Version.TRAC_0_9;
} catch (TracLoginException e2) {
throw e;
} catch (TracException e2) {
}
}
throw new TracException();
}
}