Package org.fluxtream.core.events

Source Code of org.fluxtream.core.events.DataReceivedEventListener

package org.fluxtream.core.events;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.fluxtream.core.aspects.FlxLogger;
import org.fluxtream.core.connectors.Connector;
import org.fluxtream.core.connectors.ObjectType;
import org.fluxtream.core.connectors.updaters.UpdateInfo;
import org.fluxtream.core.domain.AbstractFacet;
import org.fluxtream.core.domain.AbstractLocalTimeFacet;
import org.fluxtream.core.domain.Guest;
import org.fluxtream.core.services.EventListenerService;
import org.fluxtream.core.services.GuestService;
import org.fluxtream.core.utils.Parse;
import org.fluxtream.core.utils.RestCallException;
import org.fluxtream.core.utils.parse.FacetCreatedEvent;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class DataReceivedEventListener implements EventListener<DataReceivedEvent> {

    static FlxLogger logger = FlxLogger.getLogger(DataReceivedEventListener.class);

    @Autowired
    GuestService guestService;

    @Autowired
    Parse parse;

    DateTimeFormatter utcTimeFormatter = DateTimeFormat.forPattern("yyyyMMdd'T'HHmmssZ");

    @Autowired
    final protected void setEventService(@Qualifier("eventListenerServiceImpl") EventListenerService evl) {
        StringBuilder sb = new StringBuilder("module=events component=DataReceivedEventListener action=setEventService")
                .append(" message=\"registering event listener\"");
        logger.info(sb.toString());
        evl.addEventListener(DataReceivedEvent.class, this);
    }

    @Override
    public void handleEvent(final DataReceivedEvent event) {
        // ignore history updates
        if (event.updateInfo.getUpdateType()== UpdateInfo.UpdateType.INITIAL_HISTORY_UPDATE)
            return;
        // ignore if no parse config present
        if (!parse.isParseConfigurationPresent())
            return;
        // ignore if guestId is not in parse list
        if (!parse.isInParseGuestList(event.updateInfo.getGuestId()))
            return;
        final StringBuilder msgAtts = new StringBuilder("module=events component=DataReceivedEventListener action=handleEvent");
        final Connector connector = event.updateInfo.apiKey.getConnector();
        final String connectorName = connector.getName();
        final Guest guest = guestService.getGuestById(event.updateInfo.getGuestId());
        final StringBuilder sb = new StringBuilder(msgAtts)
                .append(" connector=").append(connectorName)
                .append(" eventType=").append(event.objectTypes)
                .append(" date=").append(event.date)
                .append(" guestId=").append(event.updateInfo.getGuestId());
        for (AbstractFacet facet : event.facets) {
            final FacetCreatedEvent facetCreatedEvent = new FacetCreatedEvent();
            facetCreatedEvent.username = guest.username;
            facetCreatedEvent.serverName = parse.getServerName();
            facetCreatedEvent.connectorName = connectorName;
            facetCreatedEvent.objectType = ObjectType.getObjectType(connector, facet.objectType).getName();
            facetCreatedEvent.isLocalTime = facet instanceof AbstractLocalTimeFacet;
            if (facet instanceof AbstractLocalTimeFacet) {
                AbstractLocalTimeFacet localTimeFacet = (AbstractLocalTimeFacet)facet;
                facetCreatedEvent.date = localTimeFacet.date;
            }
            facetCreatedEvent.start = facet.start;
            facetCreatedEvent.end = facet.end;
            facetCreatedEvent.description = facet.fullTextDescription;
            Runnable parseLog = new Runnable() {
                public void run() {
                    try {
                        logger.info(sb.append(" message=\"logging to parse...\""));
                        parse.create("FacetCreatedEvent", facetCreatedEvent);
                    }
                    catch (RestCallException e) {
                        e.printStackTrace();
                    }
                }
            };
            ExecutorService executor = Executors.newSingleThreadExecutor();
            executor.execute(parseLog);
            executor.shutdown();
        }
    }

}
TOP

Related Classes of org.fluxtream.core.events.DataReceivedEventListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.