package krasa.grepconsole.filter;
import com.intellij.execution.filters.InputFilter;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
import krasa.grepconsole.filter.support.FilterState;
import krasa.grepconsole.filter.support.GrepProcessor;
import krasa.grepconsole.model.GrepExpressionItem;
import krasa.grepconsole.model.Profile;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class GrepInputFilter extends AbstractGrepFilter implements InputFilter {
public GrepInputFilter(Project project) {
super(project);
}
public GrepInputFilter(Profile profile, List<GrepProcessor> grepProcessors) {
super(profile, grepProcessors);
}
@Override
public List<Pair<String, ConsoleViewContentType>> applyFilter(String s,
ConsoleViewContentType consoleViewContentType) {
FilterState state = super.filter(s, -1);
return prepareResult(state);
}
@Override
protected boolean continueFiltering(FilterState state) {
return !state.isMatchesSomething();
}
private List<Pair<String, ConsoleViewContentType>> prepareResult(FilterState state) {
Pair<String, ConsoleViewContentType> result = null;
if (state != null) {
if (state.isExclude()) {
result = new Pair<>(null, null);
}
}
if (result == null) {
return null;// input is not changed
} else {
return Arrays.asList(result);
}
}
@Override
protected void initProcessors() {
grepProcessors = new ArrayList<>();
if (profile.isEnabledInputFiltering()) {
boolean inputFilterExists = false;
for (GrepExpressionItem grepExpressionItem : profile.getAllGrepExpressionItems()) {
grepProcessors.add(createProcessor(grepExpressionItem));
if (grepExpressionItem.isInputFilter()) {
inputFilterExists = true;
}
}
if (!inputFilterExists) {
grepProcessors.clear();
}
}
}
@Override
protected boolean shouldAdd(GrepExpressionItem item) {
throw new UnsupportedOperationException();
}
}