text-translators-agent/src/jetbrains/buildServer/agent/messages/regex/RegexParserToSimpleMessagesTranslatorAdapter.java (56 lines of code) (raw):

package jetbrains.buildServer.agent.messages.regex; import com.intellij.openapi.diagnostic.Logger; import jetbrains.buildServer.agent.messages.BuildLogTail; import jetbrains.buildServer.agent.messages.KeepMessagesLogger; import jetbrains.buildServer.agent.messages.SimpleMessagesTranslator; import jetbrains.buildServer.messages.BuildMessage1; import jetbrains.buildServer.messages.serviceMessages.ServiceMessage; import jetbrains.teamcity.util.regex.ParserManager; import jetbrains.teamcity.util.regex.RegexParser; import org.jetbrains.annotations.NotNull; import java.util.List; public class RegexParserToSimpleMessagesTranslatorAdapter implements SimpleMessagesTranslator { private static final Logger LOG = Logger.getInstance(RegexParserToSimpleMessagesTranslatorAdapter.class.getName()); private final RegexParser myParser; private final ParserManager myManager; private final KeepMessagesLogger myLogger; public RegexParserToSimpleMessagesTranslatorAdapter(@NotNull final RegexParser parser, @NotNull final ParserManager manager, @NotNull final KeepMessagesLogger logger) { myParser = parser; myManager = manager; myLogger = logger; } public String getName() { return myParser.getName(); } @Override public Result doProcessMessage(@NotNull final ServiceMessage message, @NotNull final BuildLogTail tail) { return Result.SKIP; } @Override public Result doProcessText(@NotNull final String text, @NotNull final BuildLogTail tail) { final List<BuildMessage1> messages; final boolean consumed; synchronized (this) { consumed = myParser.processLine(text, myManager); messages = myLogger.getUnprocessedMessagesAndReset(); } if (!consumed) { if (!messages.isEmpty()) { LOG.warn("Parser '" + myParser.getId() + "'not consumed message but there some pending messages produced: " + messages); } return Result.SKIP; } if (messages.isEmpty()) { return Result.EAT; } if (messages.size() == 1) { final BuildMessage1 msg = messages.iterator().next(); if (msg.getValue() instanceof String && text.equals(msg.getValue())) { return Result.KEEP_ORIGIN; } } return Result.REPLACE(messages); } }