blob: 56cb648796396f86ec7bfe71eb5c9cd1dfcadc20 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ltk.internal.core.refactoring;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.expressions.EvaluationResult;
import org.eclipse.core.expressions.Expression;
import org.eclipse.core.expressions.ExpressionConverter;
import org.eclipse.core.expressions.ExpressionTagNames;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.participants.IParticipantDescriptorFilter;
import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
public class ParticipantDescriptor {
private IConfigurationElement fConfigurationElement;
private boolean fEnabled;
private static final String ID= "id"; //$NON-NLS-1$
private static final String NAME= "name"; //$NON-NLS-1$
private static final String CLASS= "class"; //$NON-NLS-1$
private static final String PROCESS_ON_CANCEL= "processOnCancel"; //$NON-NLS-1$
public ParticipantDescriptor(IConfigurationElement element) {
fConfigurationElement= element;
fEnabled= true;
}
public String getId() {
return fConfigurationElement.getAttribute(ID);
}
public String getName() {
return fConfigurationElement.getAttribute(NAME);
}
public IStatus checkSyntax() {
if (fConfigurationElement.getAttribute(ID) == null) {
return new Status(IStatus.ERROR, RefactoringCorePlugin.getPluginId(), IStatus.ERROR,
RefactoringCoreMessages.ParticipantDescriptor_error_id_missing, null);
}
if (fConfigurationElement.getAttribute(NAME) == null) {
return new Status(IStatus.ERROR, RefactoringCorePlugin.getPluginId(), IStatus.ERROR,
Messages.format( RefactoringCoreMessages.ParticipantDescriptor_error_name_missing, getId()),
null);
}
if (fConfigurationElement.getAttribute(CLASS) == null) {
return new Status(IStatus.ERROR, RefactoringCorePlugin.getPluginId(), IStatus.ERROR,
Messages.format( RefactoringCoreMessages.ParticipantDescriptor_error_class_missing, getId()),
null);
}
return new Status(IStatus.OK, RefactoringCorePlugin.getPluginId(), IStatus.OK,
RefactoringCoreMessages.ParticipantDescriptor_correct, null);
}
public boolean matches(IEvaluationContext context, IParticipantDescriptorFilter filter, RefactoringStatus status) throws CoreException {
IConfigurationElement[] elements= fConfigurationElement.getChildren(ExpressionTagNames.ENABLEMENT);
if (elements.length == 0)
return false;
Assert.isTrue(elements.length == 1);
Expression exp= ExpressionConverter.getDefault().perform(elements[0]);
if (!convert(exp.evaluate(context)))
return false;
if (filter != null && !filter.select(fConfigurationElement, status))
return false;
return true;
}
public RefactoringParticipant createParticipant() throws CoreException {
return (RefactoringParticipant)fConfigurationElement.createExecutableExtension(CLASS);
}
public boolean isEnabled() {
return fEnabled;
}
public void disable() {
fEnabled= false;
}
public boolean processOnCancel() {
String attr= fConfigurationElement.getAttribute(PROCESS_ON_CANCEL);
if (attr == null)
return false;
return Boolean.valueOf(attr).booleanValue();
}
private boolean convert(EvaluationResult eval) {
if (eval == EvaluationResult.FALSE)
return false;
return true;
}
public String toString() {
return "name= " + getName() + (isEnabled() ? " (enabled)" : " (disabled)") + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
"\nid= " + getId() + //$NON-NLS-1$
"\nclass= " + fConfigurationElement.getAttribute(CLASS); //$NON-NLS-1$
}
}