blob: 43fe13410488d6fcbbed9c1e0223ebaf027057ac [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 Jingwen Ou 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:
* Jingwen Ou - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.sandbox.ui.hyperlinks;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.mylyn.commons.core.StatusHandler;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
/**
* A manager that returns registered IResourceHyperlinkExtension
*
* @author Jingwen Ou
*/
public class ResourceHyperlinkExtensions {
public static class RegisteredResourceHyperlinkExtension {
private final IResourceHyperlinkExtension extension;
private final String fileType;
private final String generatedPrefix;
private RegisteredResourceHyperlinkExtension(IResourceHyperlinkExtension extension, String fileType,
String generatedPrefix) {
this.extension = extension;
this.fileType = fileType;
this.generatedPrefix = generatedPrefix;
}
public IResourceHyperlinkExtension getExtension() {
return extension;
}
public String getFileType() {
return fileType;
}
public String getGeneratedPrefix() {
return generatedPrefix;
}
}
private static Map<String, RegisteredResourceHyperlinkExtension> extensionByFileType = new HashMap<String, RegisteredResourceHyperlinkExtension>();
private static boolean initialized = false;
public static void addResourceHyperlinkExtension(String fileType, String generatedPrefix,
IResourceHyperlinkExtension extension) {
Assert.isNotNull(fileType);
RegisteredResourceHyperlinkExtension previous = extensionByFileType.put(fileType,
new RegisteredResourceHyperlinkExtension(extension, fileType, generatedPrefix));
if (previous != null) {
StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN,
"Duplicate resourceHyperlinkExtension fileType=" + fileType, null));
}
}
public static IResourceHyperlinkExtension getResourceHyperlinkExtension(String fileType) {
init();
RegisteredResourceHyperlinkExtension resourceHyperlinkExtension = extensionByFileType.get(fileType);
return resourceHyperlinkExtension == null ? null : resourceHyperlinkExtension.getExtension();
}
public static String getGeneratedPrefix(String fileType) {
init();
RegisteredResourceHyperlinkExtension resourceHyperlinkExtension = extensionByFileType.get(fileType);
return resourceHyperlinkExtension == null ? null : resourceHyperlinkExtension.getGeneratedPrefix();
}
public static String getDefaultPrefix() {
return getGeneratedPrefix("default");
}
public static List<IResourceHyperlinkExtension> getResourceHyperlinkExtensions() {
init();
List<IResourceHyperlinkExtension> resourceHyperlinkExtensions = new ArrayList<IResourceHyperlinkExtension>(
extensionByFileType.size());
for (RegisteredResourceHyperlinkExtension resourceHyperlinkExtension : extensionByFileType.values()) {
resourceHyperlinkExtensions.add(resourceHyperlinkExtension.getExtension());
}
return resourceHyperlinkExtensions;
}
private static void init() {
if (!initialized) {
initialized = true;
ResourceHyperlinkExtensionReader.initExtensions();
}
}
}