Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: e09adb91c372b74c1becaa3458c2cad082e12cde (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*******************************************************************************
 * Copyright (c) 2000, 2008 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.core.expressions;

import org.eclipse.core.runtime.CoreException;

/**
 * An evaluation context is used to manage a set of objects needed during
 * XML expression evaluation. A context has a parent context, can manage
 * a set of named variables and has a default variable. The default variable
 * is used during XML expression evaluation if no explicit variable is
 * referenced.
 * <p>
 * This interface is not intended to be implemented by clients. Clients
 * are allowed to instantiate <code>EvaluationContext</code>.
 * </p>
 *
 * @since 3.0
 *
 * @noimplement This interface is not intended to be implemented by clients.
 * @noextend This interface is not intended to be extended by clients.
 */
public interface IEvaluationContext {

	/**
	 * Represents the value used by variables that exist but are not defined
	 * in a evaluation context. When tested by the 'with' expression, <code>false</code>
	 * will be returned.
	 *
	 * @since 3.4
	 */
	Object UNDEFINED_VARIABLE = new Object();

	/**
	 * Returns the parent context or <code>null</code> if
	 * this is the root of the evaluation context hierarchy.
	 *
	 * @return the parent evaluation context or <code>null</code>
	 */
	IEvaluationContext getParent();

	/**
	 * Returns the root evaluation context.
	 *
	 * @return the root evaluation context
	 */
	IEvaluationContext getRoot();

	/**
	 * Specifies whether this evaluation context allows activation
	 * of plug-ins for testers used in the expression tree. To actual
	 * trigger the plug-in loading this flag has to be set to <code>
	 * true</code> and the actual test expression must have the
	 * attribute <code>forcePluginActivation</code> set to <code>
	 * true</code> as well.
	 *
	 * @param value whether this evaluation context allows plug-in activation
	 * @since 3.2
	 */
	void setAllowPluginActivation(boolean value);

	/**
	 * Returns whether this evaluation context supports plug-in
	 * activation. If not set via {@link #setAllowPluginActivation(boolean)}
	 * the parent value is returned. If no parent is set <code>false</code>
	 * is returned.
	 *
	 * @return whether plug-in activation is supported or not
	 * @since 3.2
	 */
	boolean getAllowPluginActivation();

	/**
	 * Returns the default variable.
	 *
	 * @return the default variable or <code>null</code> if
	 *  no default variable is managed.
	 */
	Object getDefaultVariable();

	/**
	 * Adds a new named variable to this context. If a variable
	 * with the name already exists the new one overrides the
	 * existing one.
	 *
	 * @param name the variable's name
	 * @param value the variable's value
	 */
	void addVariable(String name, Object value);

	/**
	 * Removes the variable managed under the given name
	 * from this evaluation context.
	 *
	 * @param name the variable's name
	 * @return the currently stored value or <code>null</code> if
	 *  the variable doesn't exist
	 */
	Object removeVariable(String name);

	/**
	 * Returns the variable managed under the given name.
	 *
	 * @param name the variable's name
	 * @return the variable's value or <code>null</code> if the content
	 *  doesn't manage a variable with the given name
	 */
	Object getVariable(String name);

	/**
	 * Resolves a variable for the given name and arguments. This
	 * method can be used to dynamically resolve variable such as
	 * plug-in descriptors, resources, etc. The method is used
	 * by the <code>resolve</code> expression.
	 *
	 * @param name the variable to resolve
	 * @param args an object array of arguments used to resolve the
	 *  variable
	 * @return the variable's value or <code>null</code> if no variable
	 *  can be resolved for the given name and arguments
	 * @exception CoreException if an errors occurs while resolving
	 *  the variable
	 */
	Object resolveVariable(String name, Object[] args) throws CoreException;
}

Back to the top