blob: 943286108bd96fecbd2b7f5bba43c23ef2da9a68 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 SAP AG 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.common.snippets.internal.util;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
import org.eclipse.ui.IEditorPart;
import org.eclipse.wst.common.snippets.core.ISnippetProvider;
import org.eclipse.wst.common.snippets.internal.SnippetContributor;
import org.eclipse.wst.common.snippets.ui.TextSnippetProvider;
public class SnippetProviderManager {
private static ISnippetProvider[] getProviders() {
IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(SnippetContributor.ID_EXTENSION_POINT_PROVIDER);
IExtension[] extensions = extensionPoint.getExtensions();
List providerList = new ArrayList();
for (int i = 0; i < extensions.length; i++) {
IConfigurationElement[] configurationElements = extensions[i].getConfigurationElements();
for (int j = 0; j < configurationElements.length; j++) {
SnippetContributor sc = new SnippetContributor(configurationElements[j]);
if (sc.getProvider() != null) {
providerList.add(sc.getProvider());
}
}
}
return (ISnippetProvider[]) providerList.toArray(new ISnippetProvider[providerList.size()]);
}
public static ISnippetProvider findProvider(String id) {
Assert.isNotNull(id);
ISnippetProvider[] providers = getProviders();
for (int i = 0; i < providers.length; i++) {
if (id.equals(providers[i].getId()))
return providers[i];
}
return new TextSnippetProvider();
}
public static ISnippetProvider getApplicableProvider(IEditorPart targetEditor) {
SnippetContributor applicableContributor = null;
IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(SnippetContributor.ID_EXTENSION_POINT_PROVIDER);
if (extensionPoint != null) {
IExtension[] extensions = extensionPoint.getExtensions();
for (int i = 0; i < extensions.length; i++) {
IConfigurationElement[] configurationElements = extensions[i].getConfigurationElements();
for (int j = 0; j < configurationElements.length; j++) {
SnippetContributor sc = new SnippetContributor(configurationElements[j]);
if (sc.isApplicable(targetEditor)) {
if (applicableContributor == null || applicableContributor.getPriority() > sc.getPriority()) {
applicableContributor = sc;
}
}
}
}
}
if (applicableContributor == null) {
return null;
}
ISnippetProvider provider = applicableContributor.getProvider();
// a null provider is an error condition
if (provider != null) {
provider.setEditor(targetEditor);
}
return provider;
}
}