blob: b7187085d9d096c9774bb3ee7069204d295c9de8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2011 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;
import org.eclipse.core.expressions.EvaluationContext;
import org.eclipse.core.expressions.EvaluationResult;
import org.eclipse.core.expressions.Expression;
import org.eclipse.core.expressions.ExpressionConverter;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.wst.common.snippets.core.ISnippetProvider;
public class SnippetContributor {
public static final String ID_EXTENSION_POINT_PROVIDER = SnippetsPlugin.BUNDLE_ID + ".SnippetProvider"; //$NON-NLS-1$
public static final String CLASS = "class"; //$NON-NLS-1$
public static final String PRIORITY = "priority"; //$NON-NLS-1$
public static final String ENABLEMENT = "enablement"; //$NON-NLS-1$
private ISnippetProvider provider;
private IConfigurationElement extPointElement;
// 100 = lowest, 0 = highest
private byte priority = 100;
private boolean initExecuted = false;
public SnippetContributor(IConfigurationElement extPointElement) {
super();
this.extPointElement = extPointElement;
initPriority();
}
private void initPriority() {
if (extPointElement.getAttribute(PRIORITY) != null) {
try {
priority = (byte) Integer.parseInt(extPointElement.getAttribute(PRIORITY));
if (priority < 0 || priority > 100) {
priority = 100;
}
}
catch (NumberFormatException e) {
priority = 100;
Logger.logException(e);
}
}
}
private void initProvider() {
initExecuted = true;
try {
provider = (ISnippetProvider) extPointElement.createExecutableExtension(CLASS);
}
catch (CoreException e) {
Logger.logException(e);
}
}
public boolean isApplicable(Object o) {
IConfigurationElement[] configurationElements = extPointElement.getChildren(ENABLEMENT);
boolean enabled = false;
for (int i = 0; i < configurationElements.length; i++) {
try {
enabled |= testEnablement(configurationElements[i], o);
}
catch (CoreException e) {
// nothing to do testEnablement fails.
return false;
}
}
return enabled;
}
private boolean testEnablement(IConfigurationElement enable, Object o) throws CoreException {
Expression exp = ExpressionConverter.getDefault().perform(enable);
EvaluationContext context = new EvaluationContext(null, o);
context.setAllowPluginActivation(true);
return EvaluationResult.TRUE == exp.evaluate(context);
}
public ISnippetProvider getProvider() {
if (!initExecuted) {
initProvider();
}
return provider;
}
public byte getPriority() {
return priority;
}
public String toString() {
return super.toString() + ":" + extPointElement.getAttribute(CLASS); //$NON-NLS-1$
}
}