/*******************************************************************************
* Copyright (c) 2007, 2013 David Green 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:
* David Green - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.wikitext.ui.registry;
import java.text.MessageFormat;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
import org.eclipse.mylyn.wikitext.parser.markup.MarkupLanguage;
import org.eclipse.mylyn.wikitext.util.ServiceLocator;
/**
* A service locator that uses the {@link WikiTextPlugin} to resolve markup languages
*
* @author David Green
*/
public class EclipseServiceLocator extends ServiceLocator {
public EclipseServiceLocator(ClassLoader classLoader) {
super(classLoader);
}
@Override
public MarkupLanguage getMarkupLanguage(String languageName) throws IllegalArgumentException {
if (languageName == null) {
throw new IllegalArgumentException();
}
MarkupLanguage markupLanguage = WikiTextExtensionPointReader.instance().getMarkupLanguage(languageName);
if (markupLanguage == null) {
try {
// dispatch to super in case we've been given a fully qualified class name
markupLanguage = super.getMarkupLanguage(languageName);
} catch (IllegalArgumentException e) {
// specified language not found.
// create a useful error message
StringBuilder buf = new StringBuilder();
for (String name : new TreeSet<>(WikiTextExtensionPointReader.instance().getMarkupLanguageNames())) {
if (buf.length() != 0) {
buf.append(", "); //$NON-NLS-1$
}
buf.append('\'');
buf.append(name);
buf.append('\'');
}
throw new IllegalArgumentException(MessageFormat.format(Messages.getString("EclipseServiceLocator.1"), //$NON-NLS-1$
languageName, buf.length() == 0 ? Messages.getString("EclipseServiceLocator.2") //$NON-NLS-1$
: MessageFormat.format(Messages.getString("EclipseServiceLocator.3"), buf))); //$NON-NLS-1$
}
}
return markupLanguage;
}
@Override
public Set<MarkupLanguage> getAllMarkupLanguages() {
Set<MarkupLanguage> markupLanguages = new HashSet<>();
for (String languageName : WikiTextExtensionPointReader.instance().getMarkupLanguageNames()) {
MarkupLanguage markupLanguage = getMarkupLanguage(languageName);
if (markupLanguage != null) {
markupLanguages.add(markupLanguage);
}
}
return markupLanguages;
}
}