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(); } } }