diff options
author | Tobias Schwarz | 2013-08-23 05:30:13 +0000 |
---|---|---|
committer | Tobias Schwarz | 2013-08-23 05:30:13 +0000 |
commit | 46b8856d2281edfbfe534954dbdd658d699d8a0a (patch) | |
tree | bef0ee45e47ebfd6cc6679f0121129e8b703b06b /target_explorer/plugins/org.eclipse.tcf.te.launch.core/src | |
parent | 3e04f26cf1a0d3fdf2fcecd6e88aed9dc7f5f98b (diff) | |
download | org.eclipse.tcf-46b8856d2281edfbfe534954dbdd658d699d8a0a.tar.gz org.eclipse.tcf-46b8856d2281edfbfe534954dbdd658d699d8a0a.tar.xz org.eclipse.tcf-46b8856d2281edfbfe534954dbdd658d699d8a0a.zip |
Target Explorer: add launch config type unbingding extension point
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.launch.core/src')
3 files changed, 476 insertions, 306 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/bindings/LaunchConfigTypeBindingsManager.java b/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/bindings/LaunchConfigTypeBindingsManager.java index 0102b4af8..c2263a345 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/bindings/LaunchConfigTypeBindingsManager.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/bindings/LaunchConfigTypeBindingsManager.java @@ -28,6 +28,7 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.tcf.te.launch.core.bindings.internal.LaunchConfigTypeBinding; +import org.eclipse.tcf.te.launch.core.bindings.internal.LaunchConfigTypeUnBinding; import org.eclipse.tcf.te.launch.core.bindings.internal.OverwritableLaunchBinding; import org.eclipse.tcf.te.launch.core.lm.interfaces.ILaunchManagerDelegate; import org.eclipse.tcf.te.launch.core.lm.internal.ExtensionPointManager; @@ -42,6 +43,8 @@ import org.eclipse.tcf.te.runtime.extensions.ExtensionPointComparator; public class LaunchConfigTypeBindingsManager { // Map of all launch configuration type bindings by id private final Map<String, LaunchConfigTypeBinding> bindings = new Hashtable<String, LaunchConfigTypeBinding>(); + // Map of all launch configuration type unbindings by id + private final Map<String, LaunchConfigTypeUnBinding> unBindings = new Hashtable<String, LaunchConfigTypeUnBinding>(); /* * Thread save singleton instance creation. @@ -94,10 +97,12 @@ public class LaunchConfigTypeBindingsManager { Assert.isNotNull(selection); LaunchConfigTypeBinding binding = bindings.get(typeId); + LaunchConfigTypeUnBinding unBinding = unBindings.get(typeId); ILaunchConfigurationType launchConfigType = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationType(typeId); return (launchConfigType != null && (selection.getLaunchMode() == null || launchConfigType.supportsMode(selection.getLaunchMode())) && - binding != null && binding.validate(selection) == EvaluationResult.TRUE); + binding != null && binding.validate(selection) == EvaluationResult.TRUE && + (unBinding == null || unBinding.validate(selection) == EvaluationResult.FALSE)); } /** @@ -112,10 +117,12 @@ public class LaunchConfigTypeBindingsManager { Assert.isNotNull(context); LaunchConfigTypeBinding binding = bindings.get(typeId); + LaunchConfigTypeUnBinding unBinding = unBindings.get(typeId); ILaunchConfigurationType launchConfigType = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationType(typeId); return (launchConfigType != null && (mode == null || launchConfigType.supportsMode(mode)) && - binding != null && binding.validate(mode, context) != EvaluationResult.FALSE); + binding != null && binding.validate(mode, context) != EvaluationResult.FALSE && + (unBinding == null || unBinding.validate(mode, context) == EvaluationResult.FALSE)); } /** @@ -173,7 +180,8 @@ public class LaunchConfigTypeBindingsManager { for (IExtension binding : bindings) { IConfigurationElement[] elements = binding.getConfigurationElements(); for (IConfigurationElement element : elements) { - loadBinding(element); + if (!loadBinding(element)) + loadUnBinding(element); } } } @@ -184,11 +192,11 @@ public class LaunchConfigTypeBindingsManager { * * @param element The configuration element. Must not be <code>null</code>. */ - private void loadBinding(IConfigurationElement element) { + private boolean loadBinding(IConfigurationElement element) { Assert.isNotNull(element); if (!element.getName().equals("launchConfigTypeBinding")) { //$NON-NLS-1$ - return; + return false; } String launchConfigTypeId = element.getAttribute("launchConfigTypeId"); //$NON-NLS-1$ @@ -206,15 +214,6 @@ public class LaunchConfigTypeBindingsManager { binding.addLaunchManagerDelegate(new OverwritableLaunchBinding(id, overwrites, modes)); } - IConfigurationElement[] stepperBindings = element.getChildren("stepper"); //$NON-NLS-1$ - for (IConfigurationElement stepperBinding : stepperBindings) { - String id = stepperBinding.getAttribute("id"); //$NON-NLS-1$ - String overwrites = stepperBinding.getAttribute("overwrites"); //$NON-NLS-1$ - String modes = stepperBinding.getAttribute("modes"); //$NON-NLS-1$ - - binding.addStepper(new OverwritableLaunchBinding(id, overwrites, modes)); - } - IConfigurationElement[] stepGroupBindings = element.getChildren("stepGroup"); //$NON-NLS-1$ for (IConfigurationElement stepGroupBinding : stepGroupBindings) { String id = stepGroupBinding.getAttribute("id"); //$NON-NLS-1$ @@ -239,6 +238,45 @@ public class LaunchConfigTypeBindingsManager { binding.addEnablement(expression); } } + + return true; } + + /** + * Load a single launch configuration type unbinding. + * + * @param element The configuration element. Must not be <code>null</code>. + */ + private boolean loadUnBinding(IConfigurationElement element) { + Assert.isNotNull(element); + + if (!element.getName().equals("launchConfigTypeUnBinding")) { //$NON-NLS-1$ + return false; + } + + String launchConfigTypeId = element.getAttribute("launchConfigTypeId"); //$NON-NLS-1$ + if (!unBindings.containsKey(launchConfigTypeId)) { + unBindings.put(launchConfigTypeId, new LaunchConfigTypeUnBinding(launchConfigTypeId)); + } + LaunchConfigTypeUnBinding unBinding = unBindings.get(launchConfigTypeId); + + IConfigurationElement[] enablements = element.getChildren("enablement"); //$NON-NLS-1$ + for (IConfigurationElement enablement : enablements) { + Expression expression = null; + try { + expression = ExpressionConverter.getDefault().perform(enablement); + } catch (CoreException e) { + if (Platform.inDebugMode()) { + e.printStackTrace(); + } + } + + if (expression != null) { + unBinding.addEnablement(expression); + } + } + + return true; + } } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/bindings/internal/LaunchConfigTypeBinding.java b/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/bindings/internal/LaunchConfigTypeBinding.java index fb0d4ae68..dff95ce66 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/bindings/internal/LaunchConfigTypeBinding.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/bindings/internal/LaunchConfigTypeBinding.java @@ -1,292 +1,266 @@ -/*******************************************************************************
- * Copyright (c) 2012 Wind River Systems, Inc. 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:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tcf.te.launch.core.bindings.internal;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.core.expressions.EvaluationContext;
-import org.eclipse.core.expressions.EvaluationResult;
-import org.eclipse.core.expressions.Expression;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.tcf.te.launch.core.activator.CoreBundleActivator;
-import org.eclipse.tcf.te.launch.core.bindings.interfaces.ILaunchBinding;
-import org.eclipse.tcf.te.launch.core.bindings.interfaces.IOverwritableLaunchBinding;
-import org.eclipse.tcf.te.launch.core.selection.interfaces.ILaunchSelection;
-import org.eclipse.tcf.te.launch.core.selection.interfaces.ISelectionContext;
-
-/**
- * Launch configuration type binding implementation.
- */
-public class LaunchConfigTypeBinding {
- // The launch configuration type id
- private final String typeId;
-
- // Lists of sub bindings
- private final List<ILaunchBinding> lmDelegateBindings = new ArrayList<ILaunchBinding>();
- private final List<ILaunchBinding> stepperBindings = new ArrayList<ILaunchBinding>();
- private final List<ILaunchBinding> stepGroupBindings = new ArrayList<ILaunchBinding>();
-
- // The list of enablement expressions
- private final List<Expression> expressions = new ArrayList<Expression>();
-
- /**
- * Constructor.
- *
- * @param typeId The launch configuration type id the binding applies to. Must not be
- * <code>null</code>.
- */
- public LaunchConfigTypeBinding(String typeId) {
- Assert.isNotNull(typeId);
- this.typeId = typeId;
- }
-
- /**
- * Returns the launch configuration type id the binding applies to.
- *
- * @return The launch configuration type id.
- */
- public String getTypeId() {
- return typeId;
- }
-
- /**
- * Returns the launch manager delegate id for the given launch mode.
- *
- * @param mode The launch mode. Must not be <code>null</code>.
- * @return The launch manager delegate id or <code>null</code>.
- */
- public String getLaunchManagerDelegate(String mode) {
- Assert.isNotNull(mode);
-
- ILaunchBinding binding = getBinding(lmDelegateBindings, mode);
- return binding != null ? binding.getId() : null;
- }
-
- /**
- * Adds the given launch manager delegate binding.
- *
- * @param binding The binding. Must not be <code>null</code>.
- */
- public void addLaunchManagerDelegate(IOverwritableLaunchBinding binding) {
- Assert.isNotNull(binding);
- if (!lmDelegateBindings.contains(binding)) {
- lmDelegateBindings.add(binding);
- }
- }
-
- /**
- * Returns the stepper id for the given launch mode.
- *
- * @param mode The launch mode. Must not be <code>null</code>.
- * @return The stepper id or <code>null</code>.
- */
- public String getStepper(String mode) {
- Assert.isNotNull(mode);
-
- ILaunchBinding binding = getBinding(stepperBindings, mode);
- return binding != null ? binding.getId() : null;
- }
-
- /**
- * Adds the given stepper binding.
- *
- * @param binding The binding. Must not be <code>null</code>.
- */
- public void addStepper(IOverwritableLaunchBinding binding) {
- Assert.isNotNull(binding);
- if (!stepperBindings.contains(binding)) {
- stepperBindings.add(binding);
- }
- }
-
- /**
- * Returns the step group id for the given launch mode.
- *
- * @param mode The launch mode. Must not be <code>null</code>.
- *
- * @return The step group id or <code>null</code>.
- */
- public String getStepGroupId(String mode) {
- ILaunchBinding binding = getBinding(stepGroupBindings, mode);
- return binding != null ? binding.getId() : null;
- }
-
- /**
- * Adds the given step group binding.
- *
- * @param binding The binding. Must not be <code>null</code>.
- */
- public void addStepGroup(ILaunchBinding binding) {
- Assert.isNotNull(binding);
- if (!stepGroupBindings.contains(binding)) {
- stepGroupBindings.add(binding);
- }
- }
-
- /**
- * Adds the given enablement expression.
- *
- * @param enablement The enablement expression. Must not be <code>null</code>.
- */
- public void addEnablement(Expression expression) {
- Assert.isNotNull(expression);
- if (!expressions.contains(expression)) {
- expressions.add(expression);
- }
- }
-
- /**
- * Evaluates the enablement expressions with the given launch selection.
- *
- * @param selection The launch selection. Must not be <code>null</code>.
- * @return The result of the enablement expression evaluation.
- */
- public EvaluationResult validate(ILaunchSelection selection) {
- Assert.isNotNull(selection);
-
- EvaluationResult result = EvaluationResult.NOT_LOADED;
-
- EvaluationResult valresult;
- for (ISelectionContext context : selection.getSelectedContexts()) {
- if (context.isPreferredContext()) {
- valresult = validate(selection.getLaunchMode(), context);
- if (valresult == EvaluationResult.FALSE) {
- return EvaluationResult.FALSE;
- }
- else if (valresult != EvaluationResult.NOT_LOADED) {
- result = valresult;
- }
- }
- }
- return result;
- }
-
- /**
- * Evaluates the enablement expressions with the given launch mode and selection context.
- *
- * @param mode The launch mode. Must not be <code>null</code>.
- * @param context The launch selection context or <code>null</code>.
- *
- * @return The result of the enablement expression evaluation.
- */
- public EvaluationResult validate(String mode, ISelectionContext context) {
- EvaluationResult result = context.isPreferredContext() ? EvaluationResult.FALSE : EvaluationResult.NOT_LOADED;
-
- if (expressions.isEmpty()) {
- return EvaluationResult.TRUE;
- }
- EvaluationResult valresult;
- for (Expression expression : expressions) {
- // Set the default variable and "selection" is the selection context
- EvaluationContext evalContext = new EvaluationContext(null, context);
- evalContext.addVariable("context", context.getContext()); //$NON-NLS-1$
- evalContext.addVariable("selection", context.getSelections() != null ? Arrays.asList(context.getSelections()) : Collections.EMPTY_LIST); //$NON-NLS-1$
- evalContext.addVariable("type", context.getType() != null ? context.getType() : ""); //$NON-NLS-1$ //$NON-NLS-2$
- evalContext.addVariable("mode", mode != null ? mode : ""); //$NON-NLS-1$ //$NON-NLS-2$
- // Allow plugin activation
- evalContext.setAllowPluginActivation(true);
- // Evaluate the expression
- try {
- valresult = expression.evaluate(evalContext);
- } catch (CoreException e) {
- valresult = EvaluationResult.FALSE;
-
- if (Platform.inDebugMode()) {
- IStatus status = new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), e.getLocalizedMessage(), e);
- Platform.getLog(CoreBundleActivator.getContext().getBundle()).log(status);
- }
- }
-
- if (valresult == EvaluationResult.TRUE) {
- return EvaluationResult.TRUE;
- }
- if (valresult != EvaluationResult.NOT_LOADED) {
- result = valresult;
- }
- }
-
- return result;
- }
-
- /**
- * Returns the list of bindings valid for the given launch mode.
- *
- * @param bindings The list of available bindings. Must not be <code>null</code>.
- * @param mode The launch mode. Must not be <code>null</code>.
- *
- * @return The list of valid bindings for the given launch mode or an empty list.
- */
- private List<ILaunchBinding> getBindings(List<ILaunchBinding> bindings, String mode) {
- Assert.isNotNull(bindings);
- Assert.isNotNull(mode);
-
- List<ILaunchBinding> candidates = new ArrayList<ILaunchBinding>();
- for (ILaunchBinding binding : bindings) {
- if (binding.isValidLaunchMode(mode)) {
- candidates.add(binding);
- }
- }
-
- return candidates;
- }
-
- /**
- * Returns the resolved binding in case of overwritable bindings.
- *
- * @param bindings The list of available bindings. Must not be <code>null</code>.
- * @param mode The launch mode. Must not be <code>null</code>.
- *
- * @return The resolved binding or <code>null</code>.
- */
- private ILaunchBinding getBinding(List<ILaunchBinding> bindings, String mode) {
- Assert.isNotNull(bindings);
- Assert.isNotNull(mode);
-
- ILaunchBinding binding = null;
-
- List<ILaunchBinding> candidates = getBindings(bindings, mode);
- for (int i = 0; i < candidates.size(); i++) {
- if (binding == null) {
- binding = candidates.get(i);
- }
- for (int j = 0; j < candidates.size(); j++) {
- ILaunchBinding cj = candidates.get(j);
- if (cj instanceof IOverwritableLaunchBinding
- && ((IOverwritableLaunchBinding) cj).overwrites(binding.getId())) {
- binding = cj;
- }
- }
- }
-
- return binding;
- }
-
- /*
- * (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- StringBuffer toString = new StringBuffer();
-
- toString.append("LaunchConfigTypeBinding("); //$NON-NLS-1$
- toString.append(typeId);
- toString.append(")"); //$NON-NLS-1$
-
- return toString.toString();
- }
-}
+/******************************************************************************* + * Copyright (c) 2012 Wind River Systems, Inc. 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: + * Wind River Systems - initial API and implementation + *******************************************************************************/ +package org.eclipse.tcf.te.launch.core.bindings.internal; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.eclipse.core.expressions.EvaluationContext; +import org.eclipse.core.expressions.EvaluationResult; +import org.eclipse.core.expressions.Expression; +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; +import org.eclipse.tcf.te.launch.core.activator.CoreBundleActivator; +import org.eclipse.tcf.te.launch.core.bindings.interfaces.ILaunchBinding; +import org.eclipse.tcf.te.launch.core.bindings.interfaces.IOverwritableLaunchBinding; +import org.eclipse.tcf.te.launch.core.selection.interfaces.ILaunchSelection; +import org.eclipse.tcf.te.launch.core.selection.interfaces.ISelectionContext; + +/** + * Launch configuration type binding implementation. + */ +public class LaunchConfigTypeBinding { + // The launch configuration type id + private final String typeId; + + // Lists of sub bindings + private final List<ILaunchBinding> lmDelegateBindings = new ArrayList<ILaunchBinding>(); + private final List<ILaunchBinding> stepGroupBindings = new ArrayList<ILaunchBinding>(); + + // The list of enablement expressions + private final List<Expression> expressions = new ArrayList<Expression>(); + + /** + * Constructor. + * + * @param typeId The launch configuration type id the binding applies to. Must not be + * <code>null</code>. + */ + public LaunchConfigTypeBinding(String typeId) { + Assert.isNotNull(typeId); + this.typeId = typeId; + } + + /** + * Returns the launch configuration type id the binding applies to. + * + * @return The launch configuration type id. + */ + public String getTypeId() { + return typeId; + } + + /** + * Returns the launch manager delegate id for the given launch mode. + * + * @param mode The launch mode. Must not be <code>null</code>. + * @return The launch manager delegate id or <code>null</code>. + */ + public String getLaunchManagerDelegate(String mode) { + Assert.isNotNull(mode); + + ILaunchBinding binding = getBinding(lmDelegateBindings, mode); + return binding != null ? binding.getId() : null; + } + + /** + * Adds the given launch manager delegate binding. + * + * @param binding The binding. Must not be <code>null</code>. + */ + public void addLaunchManagerDelegate(IOverwritableLaunchBinding binding) { + Assert.isNotNull(binding); + if (!lmDelegateBindings.contains(binding)) { + lmDelegateBindings.add(binding); + } + } + + /** + * Returns the step group id for the given launch mode. + * + * @param mode The launch mode. Must not be <code>null</code>. + * + * @return The step group id or <code>null</code>. + */ + public String getStepGroupId(String mode) { + ILaunchBinding binding = getBinding(stepGroupBindings, mode); + return binding != null ? binding.getId() : null; + } + + /** + * Adds the given step group binding. + * + * @param binding The binding. Must not be <code>null</code>. + */ + public void addStepGroup(ILaunchBinding binding) { + Assert.isNotNull(binding); + if (!stepGroupBindings.contains(binding)) { + stepGroupBindings.add(binding); + } + } + + /** + * Adds the given enablement expression. + * + * @param enablement The enablement expression. Must not be <code>null</code>. + */ + public void addEnablement(Expression expression) { + Assert.isNotNull(expression); + if (!expressions.contains(expression)) { + expressions.add(expression); + } + } + + /** + * Evaluates the enablement expressions with the given launch selection. + * + * @param selection The launch selection. Must not be <code>null</code>. + * @return The result of the enablement expression evaluation. + */ + public EvaluationResult validate(ILaunchSelection selection) { + Assert.isNotNull(selection); + + EvaluationResult result = EvaluationResult.NOT_LOADED; + + EvaluationResult valresult; + for (ISelectionContext context : selection.getSelectedContexts()) { + if (context.isPreferredContext()) { + valresult = validate(selection.getLaunchMode(), context); + if (valresult == EvaluationResult.FALSE) { + return EvaluationResult.FALSE; + } + else if (valresult != EvaluationResult.NOT_LOADED) { + result = valresult; + } + } + } + return result; + } + + /** + * Evaluates the enablement expressions with the given launch mode and selection context. + * + * @param mode The launch mode. Must not be <code>null</code>. + * @param context The launch selection context or <code>null</code>. + * + * @return The result of the enablement expression evaluation. + */ + public EvaluationResult validate(String mode, ISelectionContext context) { + EvaluationResult result = context.isPreferredContext() ? EvaluationResult.FALSE : EvaluationResult.NOT_LOADED; + + if (expressions.isEmpty()) { + return EvaluationResult.TRUE; + } + EvaluationResult valresult; + for (Expression expression : expressions) { + // Set the default variable and "selection" is the selection context + EvaluationContext evalContext = new EvaluationContext(null, context); + evalContext.addVariable("context", context.getContext()); //$NON-NLS-1$ + evalContext.addVariable("selection", context.getSelections() != null ? Arrays.asList(context.getSelections()) : Collections.EMPTY_LIST); //$NON-NLS-1$ + evalContext.addVariable("type", context.getType() != null ? context.getType() : ""); //$NON-NLS-1$ //$NON-NLS-2$ + evalContext.addVariable("mode", mode != null ? mode : ""); //$NON-NLS-1$ //$NON-NLS-2$ + // Allow plugin activation + evalContext.setAllowPluginActivation(true); + // Evaluate the expression + try { + valresult = expression.evaluate(evalContext); + } catch (CoreException e) { + valresult = EvaluationResult.FALSE; + + if (Platform.inDebugMode()) { + IStatus status = new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), e.getLocalizedMessage(), e); + Platform.getLog(CoreBundleActivator.getContext().getBundle()).log(status); + } + } + + if (valresult == EvaluationResult.TRUE) { + return EvaluationResult.TRUE; + } + if (valresult != EvaluationResult.NOT_LOADED) { + result = valresult; + } + } + + return result; + } + + /** + * Returns the list of bindings valid for the given launch mode. + * + * @param bindings The list of available bindings. Must not be <code>null</code>. + * @param mode The launch mode. Must not be <code>null</code>. + * + * @return The list of valid bindings for the given launch mode or an empty list. + */ + private List<ILaunchBinding> getBindings(List<ILaunchBinding> bindings, String mode) { + Assert.isNotNull(bindings); + Assert.isNotNull(mode); + + List<ILaunchBinding> candidates = new ArrayList<ILaunchBinding>(); + for (ILaunchBinding binding : bindings) { + if (binding.isValidLaunchMode(mode)) { + candidates.add(binding); + } + } + + return candidates; + } + + /** + * Returns the resolved binding in case of overwritable bindings. + * + * @param bindings The list of available bindings. Must not be <code>null</code>. + * @param mode The launch mode. Must not be <code>null</code>. + * + * @return The resolved binding or <code>null</code>. + */ + private ILaunchBinding getBinding(List<ILaunchBinding> bindings, String mode) { + Assert.isNotNull(bindings); + Assert.isNotNull(mode); + + ILaunchBinding binding = null; + + List<ILaunchBinding> candidates = getBindings(bindings, mode); + for (int i = 0; i < candidates.size(); i++) { + if (binding == null) { + binding = candidates.get(i); + } + for (int j = 0; j < candidates.size(); j++) { + ILaunchBinding cj = candidates.get(j); + if (cj instanceof IOverwritableLaunchBinding + && ((IOverwritableLaunchBinding) cj).overwrites(binding.getId())) { + binding = cj; + } + } + } + + return binding; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + StringBuffer toString = new StringBuffer(); + + toString.append("LaunchConfigTypeBinding("); //$NON-NLS-1$ + toString.append(typeId); + toString.append(")"); //$NON-NLS-1$ + + return toString.toString(); + } +} diff --git a/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/bindings/internal/LaunchConfigTypeUnBinding.java b/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/bindings/internal/LaunchConfigTypeUnBinding.java new file mode 100644 index 000000000..4597e192a --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/bindings/internal/LaunchConfigTypeUnBinding.java @@ -0,0 +1,158 @@ +/******************************************************************************* + * Copyright (c) 2012 Wind River Systems, Inc. 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: + * Wind River Systems - initial API and implementation + *******************************************************************************/ +package org.eclipse.tcf.te.launch.core.bindings.internal; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.eclipse.core.expressions.EvaluationContext; +import org.eclipse.core.expressions.EvaluationResult; +import org.eclipse.core.expressions.Expression; +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; +import org.eclipse.tcf.te.launch.core.activator.CoreBundleActivator; +import org.eclipse.tcf.te.launch.core.selection.interfaces.ILaunchSelection; +import org.eclipse.tcf.te.launch.core.selection.interfaces.ISelectionContext; + +/** + * Launch configuration type unbinding implementation. + */ +public class LaunchConfigTypeUnBinding { + // The launch configuration type id + private final String typeId; + + // The list of enablement expressions + private final List<Expression> expressions = new ArrayList<Expression>(); + + /** + * Constructor. + * + * @param typeId The launch configuration type id the unbinding applies to. Must not be + * <code>null</code>. + */ + public LaunchConfigTypeUnBinding(String typeId) { + Assert.isNotNull(typeId); + this.typeId = typeId; + } + + /** + * Returns the launch configuration type id the unbinding applies to. + * + * @return The launch configuration type id. + */ + public String getTypeId() { + return typeId; + } + + /** + * Adds the given enablement expression. + * + * @param enablement The enablement expression. Must not be <code>null</code>. + */ + public void addEnablement(Expression expression) { + Assert.isNotNull(expression); + if (!expressions.contains(expression)) { + expressions.add(expression); + } + } + + /** + * Evaluates the enablement expressions with the given launch selection. + * + * @param selection The launch selection. Must not be <code>null</code>. + * @return The result of the enablement expression evaluation. + */ + public EvaluationResult validate(ILaunchSelection selection) { + Assert.isNotNull(selection); + + EvaluationResult result = EvaluationResult.NOT_LOADED; + + EvaluationResult valresult; + for (ISelectionContext context : selection.getSelectedContexts()) { + if (context.isPreferredContext()) { + valresult = validate(selection.getLaunchMode(), context); + if (valresult == EvaluationResult.FALSE) { + return EvaluationResult.FALSE; + } + else if (valresult != EvaluationResult.NOT_LOADED) { + result = valresult; + } + } + } + return result; + } + + /** + * Evaluates the enablement expressions with the given launch mode and selection context. + * + * @param mode The launch mode. Must not be <code>null</code>. + * @param context The launch selection context or <code>null</code>. + * + * @return The result of the enablement expression evaluation. + */ + public EvaluationResult validate(String mode, ISelectionContext context) { + EvaluationResult result = context.isPreferredContext() ? EvaluationResult.FALSE : EvaluationResult.NOT_LOADED; + + if (expressions.isEmpty()) { + return EvaluationResult.TRUE; + } + EvaluationResult valresult; + for (Expression expression : expressions) { + // Set the default variable and "selection" is the selection context + EvaluationContext evalContext = new EvaluationContext(null, context); + evalContext.addVariable("context", context.getContext()); //$NON-NLS-1$ + evalContext.addVariable("selection", context.getSelections() != null ? Arrays.asList(context.getSelections()) : Collections.EMPTY_LIST); //$NON-NLS-1$ + evalContext.addVariable("type", context.getType() != null ? context.getType() : ""); //$NON-NLS-1$ //$NON-NLS-2$ + evalContext.addVariable("mode", mode != null ? mode : ""); //$NON-NLS-1$ //$NON-NLS-2$ + // Allow plugin activation + evalContext.setAllowPluginActivation(true); + // Evaluate the expression + try { + valresult = expression.evaluate(evalContext); + } catch (CoreException e) { + valresult = EvaluationResult.FALSE; + + if (Platform.inDebugMode()) { + IStatus status = new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), e.getLocalizedMessage(), e); + Platform.getLog(CoreBundleActivator.getContext().getBundle()).log(status); + } + } + + if (valresult == EvaluationResult.TRUE) { + return EvaluationResult.TRUE; + } + if (valresult != EvaluationResult.NOT_LOADED) { + result = valresult; + } + } + + return result; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + StringBuffer toString = new StringBuffer(); + + toString.append("LaunchConfigTypeUnBinding("); //$NON-NLS-1$ + toString.append(typeId); + toString.append(")"); //$NON-NLS-1$ + + return toString.toString(); + } +} |