blob: 66993d6c1cd12d6357a5a5b53b8e29c5a4054274 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Oracle. 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:
* Oracle - initial API and implementation
*******************************************************************************/
package org.eclipse.jpt.common.core.internal.resource;
import static org.eclipse.jst.common.project.facet.core.internal.FacetedProjectFrameworkJavaPlugin.log;
import org.eclipse.core.expressions.EvaluationContext;
import org.eclipse.core.expressions.EvaluationResult;
import org.eclipse.core.expressions.Expression;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jpt.common.core.JptCommonCorePlugin;
import org.eclipse.jpt.common.core.internal.XPointUtil;
import org.eclipse.jpt.common.core.resource.ResourceLocator;
import org.eclipse.jpt.utility.internal.StringTools;
public class ResourceLocatorConfig
implements Comparable<ResourceLocatorConfig> {
public static final String PROJECT_ENABLEMENT_VARIABLE = "project"; //$NON-NLS-1$
private String id;
private String pluginId;
private String className;
private Priority priority;
private Expression enablementCondition;
ResourceLocatorConfig() {
super();
}
public String getId() {
return this.id;
}
void setId(String id) {
this.id = id;
}
public String getPluginId() {
return this.pluginId;
}
void setPluginId(String pluginId) {
this.pluginId = pluginId;
}
public String getClassName() {
return this.className;
}
void setClassName(String className) {
this.className = className;
}
public Priority getPriority() {
return this.priority;
}
void setPriority(Priority priority) {
this.priority = priority;
}
public Expression getEnablementCondition() {
return this.enablementCondition;
}
void setEnablementCondition(Expression enablementCondition) {
this.enablementCondition = enablementCondition;
}
public ResourceLocator getResourceLocator() {
return XPointUtil.instantiate(
JptCommonCorePlugin.PLUGIN_ID, ResourceLocatorManager.QUALIFIED_EXTENSION_POINT_ID,
this.className, ResourceLocator.class);
}
public boolean isEnabledFor(IProject project) {
EvaluationContext evalContext = new EvaluationContext(null, project);
evalContext.setAllowPluginActivation(true);
evalContext.addVariable(PROJECT_ENABLEMENT_VARIABLE, project);
if (this.enablementCondition != null) {
try {
EvaluationResult evalResult = this.enablementCondition.evaluate(evalContext);
if (evalResult == EvaluationResult.FALSE) {
return false;
}
}
catch (CoreException e) {
log(e);
}
}
return true;
}
public int compareTo(ResourceLocatorConfig other) {
return Priority.compare(this.priority, other.priority);
}
public static enum Priority {
/* The lowest priority for a resource locator */
LOWEST(6, "lowest"), //$NON-NLS-1$
/* The second lowest priority for a resource locator */
LOWER(5, "lower"), //$NON-NLS-1$
/* The third lowest priority for a resource locator */
LOW(4, "low"), //$NON-NLS-1$
/* The default priority for a resource locator */
NORMAL(3, "normal"), //$NON-NLS-1$
/* The third highest priority for a resource locator */
HIGH(2, "high"), //$NON-NLS-1$
/* The second highest priority for a resource locator */
HIGHER(1, "higher"), //$NON-NLS-1$
/* The highest priority for a resource locator */
HIGHEST(0, "highest"); //$NON-NLS-1$
public static int compare(Priority priority1, Priority priority2) {
return priority1.value.compareTo(priority2.value);
}
public static Priority get(String literal) {
if (literal == null) {
return NORMAL;
}
for (Priority priority : values()) {
if (StringTools.stringsAreEqual(literal, priority.literal)) {
return priority;
}
}
return null;
}
private Integer value;
private String literal;
private Priority(int value, String literal) {
this.value = Integer.valueOf(value);
this.literal = literal;
}
@Override
public String toString() {
return this.literal;
}
}
}