1 /*******************************************************************************
2  * Copyright (c) 2009 - 2010 Cloudsmith Inc. and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     Cloudsmith Inc. - initial API and implementation
13  *******************************************************************************/
14 package org.eclipse.equinox.p2.metadata.expression;
15 
16 /**
17  * A node in the expression tree
18  * @since 2.0
19  * @noimplement This interface is not intended to be implemented directly by clients.
20  * @noextend This interface is not intended to be extended directly by clients.
21  */
22 public interface IExpression {
23 	int TYPE_ALL = 1;
24 	int TYPE_AND = 2;
25 	int TYPE_AT = 3;
26 	int TYPE_EQUALS = 4;
27 	int TYPE_EXISTS = 5;
28 	int TYPE_GREATER = 6;
29 	int TYPE_GREATER_EQUAL = 7;
30 	int TYPE_LAMBDA = 8;
31 	int TYPE_LESS = 9;
32 	int TYPE_LESS_EQUAL = 10;
33 	int TYPE_LITERAL = 11;
34 	int TYPE_MATCHES = 12;
35 	int TYPE_MEMBER = 13;
36 	int TYPE_NOT = 14;
37 	int TYPE_NOT_EQUALS = 15;
38 	int TYPE_OR = 16;
39 	int TYPE_PARAMETER = 17;
40 	int TYPE_VARIABLE = 18;
41 	int TYPE_ARRAY = 20;
42 	int TYPE_ASSIGNMENT = 21;
43 	int TYPE_COLLECT = 22;
44 	int TYPE_CONDITION = 23;
45 	int TYPE_FIRST = 24;
46 	int TYPE_FLATTEN = 25;
47 	int TYPE_FUNCTION = 26;
48 	int TYPE_INTERSECT = 27;
49 	int TYPE_LATEST = 28;
50 	int TYPE_LIMIT = 29;
51 	int TYPE_PIPE = 30;
52 	int TYPE_SELECT = 31;
53 	int TYPE_TRAVERSE = 32;
54 	int TYPE_UNION = 33;
55 	int TYPE_UNIQUE = 34;
56 
57 	/**
58 	 * Let the visitor visit this instance and all expressions that this
59 	 * instance contains.
60 	 * @param visitor The visiting visitor.
61 	 * @return <code>true</code> if the visitor should continue visiting, <code>false</code> otherwise.
62 	 */
accept(IExpressionVisitor visitor)63 	boolean accept(IExpressionVisitor visitor);
64 
65 	/**
66 	 * Evaluate this expression with given context and variables.
67 	 * @param context The evaluation context
68 	 * @return The result of the evaluation.
69 	 */
evaluate(IEvaluationContext context)70 	Object evaluate(IEvaluationContext context);
71 
72 	/**
73 	 * Returns the expression type (see TYPE_xxx constants).
74 	 */
getExpressionType()75 	int getExpressionType();
76 
77 	/**
78 	 * Appends the string representation of this expression to the collector <code>collector</code>.
79 	 */
toString(StringBuffer collector)80 	void toString(StringBuffer collector);
81 
82 	/**
83 	 * Appends the an LDAP filter representation of this expression to the <code>collector</code>.
84 	 * @throws UnsupportedOperationException if the expression contains nodes
85 	 * that cannot be represented in an LDAP filter
86 	 */
toLDAPString(StringBuffer collector)87 	void toLDAPString(StringBuffer collector);
88 }
89