KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > mountainminds > eclemma > internal > ui > actions > ContextualLaunchableTester


1 /*******************************************************************************
2  * Copyright (c) 2006 Mountainminds GmbH & Co. KG
3  * This software is provided under the terms of the Eclipse Public License v1.0
4  * See http://www.eclipse.org/legal/epl-v10.html.
5  *
6  * $Id: ContextualLaunchableTester.java 217 2007-01-15 09:24:36Z mtnminds $
7  ******************************************************************************/

8 package com.mountainminds.eclemma.internal.ui.actions;
9
10 import java.util.Arrays JavaDoc;
11 import java.util.HashMap JavaDoc;
12 import java.util.Map JavaDoc;
13
14 import org.eclipse.core.expressions.EvaluationContext;
15 import org.eclipse.core.expressions.EvaluationResult;
16 import org.eclipse.core.expressions.Expression;
17 import org.eclipse.core.expressions.ExpressionConverter;
18 import org.eclipse.core.expressions.ExpressionTagNames;
19 import org.eclipse.core.expressions.IEvaluationContext;
20 import org.eclipse.core.expressions.PropertyTester;
21 import org.eclipse.core.runtime.CoreException;
22 import org.eclipse.core.runtime.IConfigurationElement;
23 import org.eclipse.core.runtime.Platform;
24 import org.eclipse.debug.core.ILaunchManager;
25
26 import com.mountainminds.eclemma.internal.ui.EclEmmaUIPlugin;
27
28 /**
29  * This property tester checks whether the "coverage" launch mode is possible
30  * for the current selection. The expression defined for the shortcut enablement
31  * has changed for different Eclipse versions. Therefore the implementation of
32  * the property tester delegates to the expression defined for the corresponding
33  * launch shortcut expression for the "run" mode.
34  *
35  * @author Marc R. Hoffmann
36  * @version $Revision: 217 $
37  */

38 public class ContextualLaunchableTester extends PropertyTester {
39   
40   /** Cache for expressions maps launch shortcut ids to Expression objects. */
41   private Map JavaDoc expressions = new HashMap JavaDoc();
42
43   public boolean test(Object JavaDoc receiver, String JavaDoc property, Object JavaDoc[] args, Object JavaDoc expectedValue) {
44     String JavaDoc delegateShortcutID = (String JavaDoc) args[0];
45     Expression expr = (Expression) expressions.get(delegateShortcutID);
46     if (expr == null) {
47       expr = createEnablementExpression(delegateShortcutID);
48       expressions.put(delegateShortcutID, expr);
49     }
50     try {
51       return expr.evaluate(createContext(receiver)) != EvaluationResult.FALSE;
52     } catch (CoreException ce) {
53       EclEmmaUIPlugin.log(ce);
54       return false;
55     }
56   }
57   
58   private IEvaluationContext createContext(Object JavaDoc selection) {
59     IEvaluationContext context = new EvaluationContext(null, selection);
60     context.addVariable("selection", selection); //$NON-NLS-1$
61
return context;
62   }
63   
64   
65   private Expression createEnablementExpression(String JavaDoc delegateShortcutID) {
66     IConfigurationElement element = findEnablementConfiguration(delegateShortcutID);
67     if (element != null) {
68       try {
69         return ExpressionConverter.getDefault().perform(element);
70       } catch (CoreException ce) {
71         EclEmmaUIPlugin.log(ce);
72       }
73     }
74     return Expression.FALSE;
75   }
76   
77   private IConfigurationElement findEnablementConfiguration(String JavaDoc delegateShortcutID) {
78     IConfigurationElement[] configs =
79         Platform.getExtensionRegistry().getConfigurationElementsFor("org.eclipse.debug.ui.launchShortcuts"); //$NON-NLS-1$
80
for (int i = 0; i < configs.length; i++) {
81       if (!delegateShortcutID.equals(configs[i].getAttribute("id"))) continue; //$NON-NLS-1$
82
String JavaDoc modes = configs[i].getAttribute("modes"); //$NON-NLS-1$
83
if (modes == null) continue;
84       if (!Arrays.asList(modes.split("\\W")).contains(ILaunchManager.RUN_MODE)) continue; //$NON-NLS-1$
85
IConfigurationElement[] launch = configs[i].getChildren("contextualLaunch"); //$NON-NLS-1$
86
if (launch.length != 1) continue;
87       IConfigurationElement[] enablement = launch[0].getChildren(ExpressionTagNames.ENABLEMENT);
88       if (enablement.length == 1) return enablement[0];
89     }
90     return null;
91   }
92
93 }
94
Popular Tags