/****************************************************************************** * Copyright (c) 2011 GitHub Inc. * 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: * Kevin Sawicki (GitHub Inc.) - initial API and implementation *****************************************************************************/ package org.eclipse.egit.github.core.util; import static org.eclipse.egit.github.core.client.IGitHubConstants.CHARSET_ISO_8859_1; import static org.eclipse.egit.github.core.client.IGitHubConstants.HOST_DEFAULT; import static org.eclipse.egit.github.core.client.IGitHubConstants.SUFFIX_GIT; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Map; import java.util.Map.Entry; import org.eclipse.egit.github.core.IRepositoryIdProvider; /** * URL utilities */ public abstract class UrlUtils { /** * Create SSH URL used for repository remote configs * * @param repository * @return URL */ public static String createRemoteSshUrl(IRepositoryIdProvider repository) { return createRemoteSshUrl(repository, HOST_DEFAULT); } /** * Create SSH URL used for repository remote configs * * @param repository * @param host * @return URL */ public static String createRemoteSshUrl(IRepositoryIdProvider repository, String host) { return "git@" + host + ":" + repository.generateId() + SUFFIX_GIT; //$NON-NLS-1$ //$NON-NLS-2$ } /** * Create HTTPS URL used for repository remote configs * * @param repository * @param user * @return URL */ public static String createRemoteHttpsUrl(IRepositoryIdProvider repository, String user) { return createRemoteHttpsUrl(repository, HOST_DEFAULT, user); } /** * Create HTTPS URL used for repository remote configs * * @param repository * @param host * @param user * @return URL */ public static String createRemoteHttpsUrl(IRepositoryIdProvider repository, String host, String user) { return "https://" + user + "@" + host + "/" + repository.generateId() //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + SUFFIX_GIT; } /** * Create read-only URL used for repository remote configs * * @param repository * @return URL */ public static String createRemoteReadOnlyUrl( IRepositoryIdProvider repository) { return createRemoteReadOnlyUrl(repository, HOST_DEFAULT); } /** * Create read-only URL used for repository remote configs * * @param repository * @param host * @return URL */ public static String createRemoteReadOnlyUrl( IRepositoryIdProvider repository, String host) { return "git://" + host + "/" + repository.generateId() + SUFFIX_GIT; //$NON-NLS-1$ //$NON-NLS-2$ } /** * URL-encode value using 'ISO-8859-1' character set * * @param value * @return encoded value */ public static String encode(final String value) { try { return URLEncoder.encode(value, CHARSET_ISO_8859_1); } catch (UnsupportedEncodingException e) { throw new IllegalArgumentException(e); } } /** * URL-decode value using 'ISO-8859-1' character set * * @param value * @return encoded value */ public static String decode(final String value) { try { return URLDecoder.decode(value, CHARSET_ISO_8859_1); } catch (UnsupportedEncodingException e) { throw new IllegalArgumentException(e); } } /** * Add encoded parameter to URI * * @param name * @param value * @param uri */ public static void addParam(final String name, final String value, final StringBuilder uri) { if (uri.length() > 0) uri.append('&'); uri.append(encode(name)).append('='); if (value != null) uri.append(encode(value)); } /** * Add request parameters to URI * * @param params * @param uri */ public static void addParams(final Map<String, String> params, final StringBuilder uri) { if (params == null || params.isEmpty()) return; for (Entry<String, String> param : params.entrySet()) addParam(param.getKey(), param.getValue(), uri); } /** * Get parameter value with name * * @param uri * @param name * @return value or null if not found in URI query */ public static String getParam(final URI uri, final String name) { final String query = uri.getRawQuery(); if (query == null || query.length() == 0) return null; final String[] params = query.split("&"); //$NON-NLS-1$ for (String param : params) { final String[] parts = param.split("="); //$NON-NLS-1$ if (parts.length != 2) continue; if (!name.equals(parts[0])) continue; return decode(parts[1]); } return null; } }