blob: 8b0899eac1655df10378abbf002c86c38414dad9 [file] [log] [blame]
package com.intellij.openapi.application;
import com.intellij.util.Processor;
import com.intellij.util.QueryExecutor;
import org.jetbrains.annotations.NotNull;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author peter
*/
public abstract class QueryExecutorBase<Result, Params> implements QueryExecutor<Result, Params> {
private final boolean myRequireReadAction;
protected QueryExecutorBase(boolean requireReadAction) {
myRequireReadAction = requireReadAction;
}
protected QueryExecutorBase() {
this(false);
}
@Override
public final boolean execute(@NotNull final Params queryParameters, @NotNull final Processor<Result> consumer) {
final AtomicBoolean toContinue = new AtomicBoolean(true);
final Processor<Result> wrapper = new Processor<Result>() {
@Override
public boolean process(Result result) {
if (!toContinue.get()) {
return false;
}
if (!consumer.process(result)) {
toContinue.set(false);
return false;
}
return true;
}
};
if (myRequireReadAction) {
ApplicationManager.getApplication().runReadAction(new Runnable() {
public void run() {
processQuery(queryParameters, wrapper);
}
});
}
else {
processQuery(queryParameters, wrapper);
}
return toContinue.get();
}
public abstract void processQuery(@NotNull Params queryParameters, @NotNull Processor<Result> consumer);
}