package org.eclipse.dltk.validators.internal.externalchecker.ui;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.dltk.validators.core.IValidator;
import org.eclipse.dltk.validators.core.IValidatorProblem;
import org.eclipse.dltk.validators.core.ValidatorRuntime;
import org.eclipse.dltk.validators.internal.externalchecker.core.ExternalChecker;
import org.eclipse.dltk.validators.internal.externalchecker.core.ExternalCheckerWildcardManager;
import org.eclipse.dltk.validators.internal.externalchecker.core.Rule;
import org.eclipse.dltk.validators.internal.externalchecker.core.WildcardException;
import org.eclipse.dltk.validators.internal.externalchecker.core.WildcardMatcher;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.console.IHyperlink;
import org.eclipse.ui.console.IOConsole;
import org.eclipse.ui.console.IPatternMatchListener;
import org.eclipse.ui.console.PatternMatchEvent;
import org.eclipse.ui.console.TextConsole;
public class ExternalCheckerConsoleTracker implements IPatternMatchListener {
protected TextConsole console;
private List rules = new ArrayList();
public ExternalCheckerConsoleTracker() {
super();
IValidator[] validators = ValidatorRuntime.getAllValidators();
for (int i = 0; i < validators.length; i++) {
if (validators[i] instanceof ExternalChecker) {
ExternalChecker checker = (ExternalChecker) validators[i];
if (checker.isAutomatic()) {
for (int j = 0; j < checker.getNRules(); j++) {
rules.add(checker.getRule(j));
}
}
}
}
}
public void connect(TextConsole console) {
this.console = console;
}
public void disconnect() {
console = null;
}
protected TextConsole getConsole() {
return console;
}
public int getCompilerFlags() {
// TODO Auto-generated method stub
return 0;
}
public String getLineQualifier() {
return null;
}
public void matchFound(PatternMatchEvent event) {
try {
IOConsole cons = (IOConsole) event.getSource();
IDocument doc = cons.getDocument();
int offset = event.getOffset();
int length = event.getLength();
String text = doc.get(offset, length);
List wlist = ExternalCheckerWildcardManager.loadCustomWildcards();
WildcardMatcher wmatcher = new WildcardMatcher(wlist);
for (int i = 0; i < rules.size(); i++) {
Rule rule = (Rule) rules.get(i);
try {
IValidatorProblem problem = wmatcher.match(rule, text);
if (problem != null) {
IHyperlink link = new ExternalCheckerSyntaxHyperlink(
console, problem);
console.addHyperlink(link, offset, text.length());
break;
}
} catch (WildcardException x) {
}
}
// offset = offset + text.length() + 1;
} catch (BadLocationException e) {
}
}
public String getPattern() {
return ".+"; //$NON-NLS-1$
}
}