blob: aa37e131e50f6f5e99f5dcf30e33703f7f3e7df7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003 International Business Machines Corp. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.core.internal.expressions;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.expressions.IPropertyTester;
import org.osgi.framework.Bundle;
public class PropertyTesterDescriptor implements IPropertyTester {
private IConfigurationElement fConfigElement;
private String fNamespace;
private String fProperties;
private static final String PROPERTIES= "properties"; //$NON-NLS-1$
private static final String NAMESPACE= "namespace"; //$NON-NLS-1$
private static final String CLASS= "class"; //$NON-NLS-1$
public PropertyTesterDescriptor(IConfigurationElement element) throws CoreException {
fConfigElement= element;
fNamespace= fConfigElement.getAttribute(NAMESPACE);
if (fNamespace == null) {
throw new CoreException(new Status(IStatus.ERROR, ExpressionPlugin.getPluginId(),
IStatus.ERROR,
ExpressionMessages.getString("PropertyTesterDescriptor.no_namespace"), //$NON-NLS-1$
null));
}
StringBuffer buffer= new StringBuffer(","); //$NON-NLS-1$
String properties= element.getAttribute(PROPERTIES);
if (properties == null) {
throw new CoreException(new Status(IStatus.ERROR, ExpressionPlugin.getPluginId(),
IStatus.ERROR,
ExpressionMessages.getString("PropertyTesterDescritpri.no_properties"), //$NON-NLS-1$
null));
}
for (int i= 0; i < properties.length(); i++) {
char ch= properties.charAt(i);
if (!Character.isWhitespace(ch))
buffer.append(ch);
}
buffer.append(',');
fProperties= buffer.toString();
}
public PropertyTesterDescriptor(IConfigurationElement element, String namespace, String properties) {
fConfigElement= element;
fNamespace= namespace;
fProperties= properties;
}
public String getProperties() {
return fProperties;
}
public String getNamespace() {
return fNamespace;
}
public IConfigurationElement getConfigurationElement() {
return fConfigElement;
}
public boolean handles(String namespace, String property) {
return fNamespace.equals(namespace) && fProperties.indexOf("," + property + ",") != -1; //$NON-NLS-1$//$NON-NLS-2$
}
public boolean isInstantiated() {
return false;
}
public boolean isDeclaringPluginActive() {
Bundle fBundle= Platform.getBundle(fConfigElement.getDeclaringExtension().getNamespace());
return fBundle.getState() == Bundle.ACTIVE;
}
public IPropertyTester instantiate() throws CoreException {
return (IPropertyTester)fConfigElement.createExecutableExtension(CLASS);
}
public boolean test(Object receiver, String method, Object[] args, Object expectedValue) {
Assert.isTrue(false, "Method should never be called"); //$NON-NLS-1$
return false;
}
}