/*******************************************************************************
* Copyright (c) 2009, 2010 Progress Software 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
******************************************************************************/
package org.fusesource.tools.core.ui.url.urlchooser;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.PlatformUI;
/**
* To change this template use File | Settings | File Templates.
*/
public class DefaultURLChooserPrefHandler {
private static DefaultURLChooserPrefHandler urlChooserPrefHandler = null;
private IPreferenceStore store = PlatformUI.getPreferenceStore();
private DefaultURLChooserPrefHandler() {
}
public static DefaultURLChooserPrefHandler getInstance() {
if (urlChooserPrefHandler == null) {
urlChooserPrefHandler = new DefaultURLChooserPrefHandler();
}
return urlChooserPrefHandler;
}
public URL[] getURLs(String context) {
List urls = _getURLs(context);
return (URL[]) urls.toArray(new URL[urls.size()]);
}
private List _getURLs(String context) {
return _getURLs(getURLStrings(context));
}
private List _getURLs(Set urlSet) {
List urls = new ArrayList(urlSet.size());
for (Iterator iterator = urlSet.iterator(); iterator.hasNext();) {
try {
urls.add(new URL((String) iterator.next()));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
return urls;
}
private Set getURLStrings(String context) {
String prevHistory = store.getString(context);
StringTokenizer tokenizer = new StringTokenizer(prevHistory, ",");
Set urlSet = new LinkedHashSet();
while (tokenizer.hasMoreTokens()) {
urlSet.add(tokenizer.nextToken());
}
return urlSet;
}
public void addURL(String context, URL url) {
Set urlsSet = getURLStrings(context);
List urls = _getURLs(urlsSet);
String urlString = url.toString();
if (urlsSet.contains(urlString)) {
if (urls.indexOf(url) == 0) {
return;// url passed is already at beginnning of list
}
urls.remove(url);
}
urls.add(0, url);
addToPrefStore(context, urls);
}
private void addToPrefStore(String context, List urlList) {
String commaSeparatedURLs = getCommaSeperatedURLs(urlList);
store.putValue(context, commaSeparatedURLs);
}
private String getCommaSeperatedURLs(List urlList) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < urlList.size(); i++) {
URL url = (URL) urlList.get(i);
buffer.append(url.toString());
if (i != (urlList.size() - 1)) {
buffer.append(",");
}
}
return buffer.toString();
}
/**
* removes the url from the list of urls stored against the passed context
*
* @param context
* @param url
*/
public void removeURL(String context, URL url) {
List list = _getURLs(context);
list.remove(url);
store.setValue(context, getCommaSeperatedURLs(list));
}
}