All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.equinox.p2.query.ExpressionQuery Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (c) 2009, 2010 Cloudsmith 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:
 *     Cloudsmith Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.equinox.p2.query;


import java.util.Iterator;
import org.eclipse.equinox.internal.p2.metadata.expression.*;
import org.eclipse.equinox.p2.metadata.expression.*;
import org.eclipse.equinox.p2.metadata.index.IIndexProvider;
import org.eclipse.equinox.p2.metadata.index.IQueryWithIndex;

/**
 * A query that evaluates using an iterator as input and produces a new iterator.
 * @since 2.0
 */
public class ExpressionQuery implements IQueryWithIndex {
	private final IContextExpression expression;
	private final Class elementClass;

	public ExpressionQuery(Class elementClass, IExpression expression, Object... parameters) {
		this.elementClass = elementClass;
		this.expression = ExpressionUtil.getFactory(). contextExpression(expression, parameters);
	}

	public ExpressionQuery(Class matchingClass, String expression, Object... parameters) {
		this(matchingClass, ExpressionUtil.parseQuery(expression), parameters);
	}

	public Class getElementClass() {
		return elementClass;
	}

	public IQueryResult perform(IIndexProvider indexProvider) {
		return new QueryResult(expression.iterator(expression.createContext(elementClass, indexProvider)));
	}

	public IQueryResult perform(Iterator iterator) {
		return new QueryResult(expression.iterator(expression.createContext(elementClass, iterator)));
	}

	public IContextExpression getExpression() {
		return expression;
	}

	public static  Class getElementClass(IQuery query) {
		@SuppressWarnings("unchecked")
		Class elementClass = (Class) Object.class;
		if (query instanceof ExpressionMatchQuery)
			elementClass = ((ExpressionMatchQuery) query).getMatchingClass();
		else if (query instanceof ExpressionQuery)
			elementClass = ((ExpressionQuery) query).getElementClass();
		return elementClass;
	}

	public static  IContextExpression createExpression(IQuery query) {
		IExpressionFactory factory = ExpressionUtil.getFactory();
		IExpression expr = query.getExpression();
		Object[] parameters;
		if (expr == null) {
			expr = factory.toExpression(query);
			if (query instanceof IMatchQuery)
				expr = factory.select(ExpressionFactory.EVERYTHING, factory.lambda(ExpressionFactory.THIS, expr));
			parameters = new Object[0];
		} else {
			if (expr instanceof MatchExpression) {
				MatchExpression matchExpr = (MatchExpression) expr;
				parameters = matchExpr.getParameters();
				expr = factory.select(ExpressionFactory.EVERYTHING, factory.lambda(ExpressionFactory.THIS, matchExpr.operand));
			} else if (expr instanceof ContextExpression) {
				ContextExpression contextExpr = (ContextExpression) expr;
				parameters = contextExpr.getParameters();
				expr = contextExpr.operand;
			} else
				parameters = new Object[0];
		}
		return factory.contextExpression(expr, parameters);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy