blob: 515c1d74fd050681001ccbd6d227d39333ae264e [file] [log] [blame]
package org.eclipse.equinox.internal.p2.ql;
import java.util.*;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.equinox.internal.provisional.p2.metadata.query.*;
import org.eclipse.equinox.p2.metadata.query.IQuery;
import org.eclipse.equinox.p2.ql.IQueryContext;
import org.eclipse.equinox.p2.ql.ITranslationSupport;
public class QueryContext implements IQueryContext {
private final IQueryable queryable;
private Map translationSupports;
public QueryContext(IQueryable queryable) {
this.queryable = queryable;
}
public QueryContext(Iterator iterator) {
final IRepeatableIterator repeatable = RepeatableIterator.create(iterator);
this.queryable = new IQueryable() {
public Collector query(IQuery query, IProgressMonitor monitor) {
return query.perform(repeatable.getCopy(), new Collector());
}
};
}
public synchronized ITranslationSupport getTranslationSupport(Locale locale) {
if (translationSupports == null)
translationSupports = new HashMap();
TranslationSupport ts = (TranslationSupport) translationSupports.get(locale);
if (ts == null) {
ts = new TranslationSupport();
ts.setTranslationSource(queryable);
ts.setLocale(locale);
translationSupports.put(locale, ts);
}
return ts;
}
public Iterator iterator() {
final Iterator[] iteratorCatcher = new Iterator[1];
queryable.query(new ContextQuery() {
public Collector perform(Iterator iterator, Collector result) {
iteratorCatcher[0] = iterator;
return null;
}
}, new NullProgressMonitor());
return iteratorCatcher[0];
}
}