/*******************************************************************************
* Copyright (c) 2009, 2010 Tasktop Technologies 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:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.tests.util;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.eclipse.mylyn.tasks.core.TaskRepository;
/**
* A builder class for constructing {@link TaskRepository task repository} URLs.
*
* @author David Green
* @since 3.5
*/
public class UrlBuilder {
private final StringBuilder buf = new StringBuilder(512);
private UrlBuilder() {
}
public static UrlBuilder build(TaskRepository repository) {
UrlBuilder builder = new UrlBuilder();
String url = repository.getRepositoryUrl();
if (url.endsWith("/")) {
url = url.substring(0, url.length() - 1);
}
return builder.append(url);
}
public UrlBuilder append(String urlSegment) {
buf.append(urlSegment);
return this;
}
public UrlBuilder parameter(String name, Object value) {
return parameter(name, value == null ? null : value.toString());
}
public UrlBuilder parameter(String name, String value) {
int indexOfQ = buf.indexOf("?");
if (indexOfQ == -1) {
buf.append("?");
} else {
buf.append("&");
}
buf.append(name);
buf.append('=');
if (value != null) {
buf.append(encode(value));
}
return this;
}
private String encode(String value) {
try {
return URLEncoder.encode(value, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException(e);
}
}
@Override
public String toString() {
return buf.toString();
}
}