ingo@1147: package de.intevation.flys.wsplgen; ingo@1147: ingo@1147: import java.util.HashMap; ingo@1147: import java.util.Map; ingo@1147: import java.util.regex.Matcher; ingo@1147: import java.util.regex.Pattern; ingo@1147: ingo@1147: import org.apache.log4j.Logger; ingo@1147: ingo@1147: import de.intevation.flys.artifacts.model.WSPLGENJob; ingo@1147: ingo@1147: ingo@1147: public class ProblemObserver extends JobObserver { ingo@1147: ingo@1147: private static Logger logger = Logger.getLogger(ProblemObserver.class); ingo@1147: ingo@1147: ingo@1147: public static final Pattern WSPLGEN_ERROR_START = Pattern.compile( ingo@1147: ".*->Fehler\\s*\\((\\d+)\\).*", ingo@1147: Pattern.DOTALL); ingo@1147: ingo@1147: public static final Pattern WSPLGEN_ERROR_END = Pattern.compile( ingo@1147: ".*<-Fehler .*", ingo@1147: Pattern.DOTALL); ingo@1147: ingo@1147: public static final Pattern WSPLGEN_WARNING_START = Pattern.compile( ingo@1147: ".*->Warnung\\s*\\((\\d+)\\).*", ingo@1147: Pattern.DOTALL); ingo@1147: ingo@1147: public static final Pattern WSPLGEN_WARNING_END = Pattern.compile( ingo@1147: ".*<-Warnung .*", ingo@1147: Pattern.DOTALL); ingo@1147: ingo@1147: ingo@1147: protected int error; ingo@1147: protected int warning; ingo@1147: ingo@1147: protected Map errorMsg; ingo@1147: protected Map warningMsg; ingo@1147: ingo@1147: ingo@1147: public ProblemObserver(WSPLGENJob job) { ingo@1147: super(job); ingo@1147: error = -1; ingo@1147: warning = -1; ingo@1147: errorMsg = new HashMap(); ingo@1147: warningMsg = new HashMap(); ingo@1147: } ingo@1147: ingo@1147: ingo@1147: public void run() { ingo@1147: logger.debug("Start observation..."); ingo@1147: ingo@1147: super.run(); ingo@1147: } ingo@1147: ingo@1147: ingo@1147: @Override ingo@1147: protected void prepareRegexes() { ingo@1147: // do nothing ingo@1147: } ingo@1147: ingo@1147: ingo@1147: @Override ingo@1147: protected void update(String log) { ingo@1147: Matcher startError = WSPLGEN_ERROR_START.matcher(log); ingo@1147: if (startError.matches()) { ingo@1147: error = Integer.parseInt(startError.group(1)); ingo@1147: return; ingo@1147: } ingo@1147: ingo@1147: Matcher endError = WSPLGEN_ERROR_END.matcher(log); ingo@1147: if (endError.matches()) { ingo@1147: error = -1; ingo@1147: } ingo@1147: ingo@1147: if (error > 0) { ingo@1147: errorMsg.put(new Integer(error), log); ingo@1147: } ingo@1147: ingo@1147: Matcher startWarning = WSPLGEN_WARNING_START.matcher(log); ingo@1147: if (startWarning.matches()) { ingo@1147: warning = Integer.parseInt(startWarning.group(1)); ingo@1147: return; ingo@1147: } ingo@1147: ingo@1147: Matcher endWarning = WSPLGEN_WARNING_END.matcher(log); ingo@1147: if (endWarning.matches()) { ingo@1147: warning = -1; ingo@1147: } ingo@1147: ingo@1147: if (warning > 0) { ingo@1147: warningMsg.put(new Integer(warning), log); ingo@1147: } ingo@1147: } ingo@1147: ingo@1147: ingo@1147: public int numErrors() { ingo@1147: return errorMsg.size(); ingo@1147: } ingo@1147: ingo@1147: ingo@1147: public int numWarnings() { ingo@1147: return warningMsg.size(); ingo@1147: } ingo@1147: } ingo@1147: // vim:set ts=4 sw=4 si et sta sts=5 fenc=utf-8 :