blob: f6da40030240caac6d8ea214516b70b14414d004 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2010 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* EclipseSource - ongoing development
*******************************************************************************/
package org.eclipse.equinox.internal.p2.ui;
import java.util.Collection;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.equinox.p2.query.*;
/**
* ElementQueryDescriptor represents everything needed to run a query, including
* the object to be queried, the query to use, and the query result. It can optionally
* wrap the query results in a UI element.
*
* @since 3.4
*/
public class ElementQueryDescriptor {
private IQuery<Object> query;
private Collector<Object> collector;
private IQueryable<Object> queryable;
private ElementWrapper wrapper;
/**
* Creates an ElementQueryDescriptor to represent a Query, its collector the queryable
* on which it will run.
*/
public ElementQueryDescriptor(IQueryable<?> queryable, IQuery<?> query, Collector<?> collector) {
this(queryable, query, collector, null);
}
/**
* Creates an ElementQueryDescriptor to represent a Query, its collector the queryable
* on which it will run, and the transformer used to transform the results.
*/
@SuppressWarnings("unchecked")
public ElementQueryDescriptor(IQueryable<?> queryable, IQuery<?> query, Collector<?> collector, ElementWrapper wrapper) {
this.query = (IQuery<Object>) query;
this.collector = (Collector<Object>) collector;
this.queryable = (IQueryable<Object>) queryable;
this.wrapper = wrapper;
}
/**
* Performs the query returning a collection of results.
* @param monitor
*/
public Collection<?> performQuery(IProgressMonitor monitor) {
Collector<Object> results = this.collector;
// If the query is completely described, perform it
if (query != null && collector != null && queryable != null)
results.addAll(this.queryable.query(this.query, monitor));
else if (results == null)
results = new Collector<>();
// Let the wrapper analyze the results, even if we didn't perform the query.
// This allows the wrapper to modify the results with explanations.
if (wrapper != null)
return wrapper.getElements(results);
return results.toUnmodifiableSet();
}
public boolean hasCollector() {
return this.collector != null;
}
public boolean hasQueryable() {
return this.queryable != null;
}
public boolean hasQuery() {
return this.query != null;
}
}