/******************************************************************************* * Copyright (c) 2011, IBM Corporation * * 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: * Tomasz Zarna (IBM) - initial implementation *******************************************************************************/ package org.eclipse.egit.core.internal; import java.net.URI; import java.net.URISyntaxException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.egit.core.Activator; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.transport.URIish; import org.eclipse.osgi.util.NLS; /** * This URI like construct used for a Git SCM URL. See * http://maven.apache.org/scm/scm-url-format.html for the format description. */ public class GitURI { // TODO replace with org.eclipse.team.core.ProjectSetCapability.SCHEME_SCM // when we drop support for Galileo private static final String SCHEME_SCM = "scm"; //$NON-NLS-1$ private static final String SCHEME_GIT = "git"; //$NON-NLS-1$ private static final String KEY_PATH = "path"; //$NON-NLS-1$ private static final String KEY_PROJECT = "project"; //$NON-NLS-1$ private static final String KEY_TAG = "tag"; //$NON-NLS-1$ private final URIish repository; private IPath path; private String tag; private String projectName; /** * Construct the {@link GitURI} for the given URI. * * @param uri * the URI in the SCM URL format */ public GitURI(URI uri) { try { if (SCHEME_SCM.equals(uri.getScheme())) { final String ssp = uri.getSchemeSpecificPart(); int indexOfSemicolon = ssp.indexOf(';'); if (indexOfSemicolon < 0) { throw new IllegalArgumentException( NLS.bind(CoreText.GitURI_InvalidSCMURL, new String[] { uri.toString() })); } if (ssp.startsWith(SCHEME_GIT)) { URIish r = new URIish(ssp.substring( SCHEME_GIT.length() + 1, indexOfSemicolon)); IPath p = null; String t = Constants.MASTER; // default String pn = null; String[] params = ssp.substring(indexOfSemicolon) .split(";"); //$NON-NLS-1$ for (String param : params) { if (param.startsWith(KEY_PATH + '=')) { p = new Path( param.substring(param.indexOf('=') + 1)); } else if (param.startsWith(KEY_TAG + '=')) { t = param.substring(param.indexOf('=') + 1); } else if (param.startsWith(KEY_PROJECT + '=')) { pn = param.substring(param.indexOf('=') + 1); } } this.repository = r; this.path = p; this.tag = t; this.projectName = pn; return; } } throw new IllegalArgumentException(NLS.bind( CoreText.GitURI_InvalidSCMURL, new String[] { uri.toString() })); } catch (URISyntaxException e) { Activator.logError(e.getMessage(), e); throw new IllegalArgumentException(NLS.bind( CoreText.GitURI_InvalidURI, new String[] { uri.toString(), e.getMessage() })); } } /** * @return path */ public IPath getPath() { return path; } /** * @return repository */ public URIish getRepository() { return repository; } /** * @return tag */ public String getTag() { return tag; } /** * @return project name */ public String getProjectName() { return projectName; } }