| /******************************************************************************* |
| * Copyright (c) 2003, 2011 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.wst.server.core.internal; |
| |
| import org.eclipse.core.expressions.*; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.wst.server.core.IModuleArtifact; |
| import org.eclipse.wst.server.core.model.ModuleArtifactAdapterDelegate; |
| import org.osgi.framework.Bundle; |
| /** |
| * |
| */ |
| public class ModuleArtifactAdapter { |
| private IConfigurationElement element; |
| private Expression fContextualLaunchExpr = null; |
| private ModuleArtifactAdapterDelegate delegate; |
| |
| /** |
| * ModuleArtifactAdapter constructor comment. |
| * |
| * @param element a configuration element |
| */ |
| public ModuleArtifactAdapter(IConfigurationElement element) { |
| super(); |
| this.element = element; |
| } |
| |
| /** |
| * Returns the id of this ModuleArtifactAdapter. |
| * |
| * @return an id |
| */ |
| public String getId() { |
| return element.getAttribute("id"); |
| } |
| |
| /** |
| * Returns the relative priority of this adapter. |
| * |
| * @return a priority |
| */ |
| public int getPriority() { |
| try { |
| return Integer.parseInt(element.getAttribute("priority")); |
| } catch (Exception e) { |
| return 0; |
| } |
| } |
| |
| /** |
| * Returns true if the plugin that loaded this class has been loaded. |
| * |
| * @return boolean |
| */ |
| public boolean isPluginActivated() { |
| String name = element.getDeclaringExtension().getContributor().getName(); |
| return Platform.getBundle(name).getState() == Bundle.ACTIVE; |
| } |
| |
| /** |
| * Returns an expression that represents the enablement logic for the |
| * contextual launch element of this launch shortcut description or |
| * <code>null</code> if none. |
| * @return an evaluatable expression or <code>null</code> |
| * @throws CoreException if the configuration element can't be |
| * converted. Reasons include: (a) no handler is available to |
| * cope with a certain configuration element or (b) the XML |
| * expression tree is malformed. |
| */ |
| public Expression getContextualLaunchEnablementExpression() throws CoreException { |
| if (fContextualLaunchExpr == null) { |
| IConfigurationElement[] elements = element.getChildren(ExpressionTagNames.ENABLEMENT); |
| IConfigurationElement enablement = elements.length > 0 ? elements[0] : null; |
| |
| if (enablement != null) |
| fContextualLaunchExpr = ExpressionConverter.getDefault().perform(enablement); |
| } |
| return fContextualLaunchExpr; |
| } |
| |
| /** |
| * Evaluate the given expression within the given context and return |
| * the result. Returns <code>true</code> iff result is either TRUE or NOT_LOADED. |
| * This allows optimistic inclusion of shortcuts before plugins are loaded. |
| * Returns <code>false</code> if exp is <code>null</code>. |
| * |
| * @param exp the enablement expression to evaluate or <code>null</code> |
| * @param context the context of the evaluation. Usually, the |
| * user's selection. |
| * @return the result of evaluating the expression |
| * @throws CoreException |
| */ |
| protected boolean evalEnablementExpression(IEvaluationContext context, Expression exp) throws CoreException { |
| return (exp != null) ? ((exp.evaluate(context)) != EvaluationResult.FALSE) : false; |
| } |
| |
| /** |
| * @return an Evaluation context with default variable = selection |
| */ |
| /*protected IEvaluationContext createContext(Object obj) { |
| List list = null; |
| IWorkbenchWindow window = DebugUIPlugin.getActiveWorkbenchWindow(); |
| if (window != null) { |
| IWorkbenchPage page = window.getActivePage(); |
| if (page != null) { |
| IWorkbenchPart activePart = page.getActivePart(); |
| if (activePart instanceof IEditorPart) { |
| list = new ArrayList(); |
| list.add(((IEditorPart)activePart).getEditorInput()); |
| } else if (activePart != null) { |
| IWorkbenchPartSite site = activePart.getSite(); |
| if (site != null) { |
| ISelectionProvider selectionProvider = site.getSelectionProvider(); |
| if (selectionProvider != null) { |
| ISelection selection = selectionProvider.getSelection(); |
| if (selection instanceof IStructuredSelection) { |
| list = ((IStructuredSelection)selection).toList(); |
| } |
| } |
| } |
| } |
| } |
| } |
| // create a default evaluation context with default variable |
| // of the user selection or editor input |
| if (list == null) { |
| list = Collections.EMPTY_LIST; |
| } |
| IEvaluationContext context = new EvaluationContext(null, list); |
| context.addVariable("selection", list); //$NON-NLS-1$ |
| |
| return context; |
| }*/ |
| |
| /** |
| * Returns true if enabled for the given object. |
| * |
| * @param obj an object |
| * @return <code>true</code> if enabled |
| * @throws CoreException if anything goes wrong |
| */ |
| public boolean isEnabled(Object obj) throws CoreException { |
| IEvaluationContext context = new EvaluationContext(null, obj); |
| context.addVariable("selection", obj); |
| return evalEnablementExpression(context, getContextualLaunchEnablementExpression()); |
| } |
| |
| public ModuleArtifactAdapterDelegate getDelegate() { |
| if (delegate == null) { |
| try { |
| delegate = (ModuleArtifactAdapterDelegate) element.createExecutableExtension("class"); |
| } catch (Throwable t) { |
| if (Trace.SEVERE) { |
| Trace.trace(Trace.STRING_SEVERE, "Could not create delegate" + toString(), t); |
| } |
| } |
| } |
| return delegate; |
| } |
| |
| public boolean isDelegateLoaded() { |
| return (delegate != null); |
| } |
| |
| /** |
| * Returns the module artifacts. |
| * |
| * @param obj an object |
| * @return the module artifact, or <code>null</code> |
| */ |
| public IModuleArtifact[] getModuleArtifacts(Object obj) { |
| try { |
| return getDelegate().getModuleArtifacts(obj); |
| } catch (Exception e) { |
| if (Trace.SEVERE) { |
| Trace.trace(Trace.STRING_SEVERE, "Error calling delegate " + toString(), e); |
| } |
| return null; |
| } |
| } |
| |
| /** |
| * Return a string representation of this object. |
| * |
| * @return a string |
| */ |
| public String toString() { |
| return "ModuleArtifactAdapter[" + getId() + "]"; |
| } |
| } |