package io.monokkel.actors; import akka.actor.Props; import akka.actor.UntypedActor; import io.monokkel.core.api.ResponseParser; import io.monokkel.domain.PageData; import io.monokkel.messages.ParseResponse; import io.monokkel.messages.ParserDone; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; /** * Created by tarjei on 28/05/14. * <p/> * This parser actor is designed to parse output and extract data */ public class ParserActor extends UntypedActor { private final ResponseParser responseParser; private Logger log = LoggerFactory.getLogger(ParserActor.class); public ParserActor(final ResponseParser responseParser) { this.responseParser = responseParser; } public static Props props(final ResponseParser responseParser) { return Props.create(ParserActor.class, () -> new ParserActor(responseParser)); } @Override public void onReceive(Object message) throws Exception { if (message instanceof ParseResponse) { ParseResponse parseResponse = (ParseResponse) message; final List<String> typesFromTheResponseHeader = parseResponse.getTypesFromTheResponseHeader(); final String url = parseResponse.getUrl(); final String response = parseResponse.getResponse(); final boolean shouldParse = responseParser.shouldParse(url, response, typesFromTheResponseHeader); if (shouldParse) { final Long timeStamp = parseResponse.getTimeStamp(); final PageData pageData = responseParser.parse(url, response, timeStamp); getSender().tell(new ParserDone(pageData, parseResponse.getDepth(), parseResponse.getMaxDepth()), getSelf()); } else { log.debug("The url {} was not possible to parse by {}. The headers that was returned: {}", url, responseParser.toString(), typesFromTheResponseHeader); } } else { unhandled(message); } } }