package sushi.transformation.test; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Date; import java.util.List; import org.junit.Before; import org.junit.Test; import sushi.esper.SushiStreamProcessingAdapter; import sushi.event.SushiEvent; import sushi.event.SushiEventType; import sushi.event.attribute.SushiAttribute; import sushi.event.attribute.SushiAttributeTypeEnum; import sushi.eventhandling.Broker; import sushi.excel.importer.ExcelImporter; import sushi.persistence.Persistor; import sushi.query.SushiQuery; import sushi.query.SushiQueryTypeEnum; import sushi.transformation.TransformationManager; import sushi.transformation.TransformationListener; import sushi.transformation.TransformationRule; public class TruckUsageTest { private ExcelImporter excelNormalizer; private String obuEventsFile = "src/main/resources/OBU_Events.xls"; private String truckUsageFile = "src/main/resources/Truck_Usage_Plan.xls"; /** * @param args */ @Before public void setup(){ Persistor.useTestEnviroment(); SushiStreamProcessingAdapter.clearInstance(); excelNormalizer = new ExcelImporter(); } // public void testTruckUsageFiles() { // SushiAttribute rootAttribute1 = new SushiAttribute("Timestamp End", SushiAttributeTypeEnum.DATE); // SushiAttribute rootAttribute2 = new SushiAttribute("Driver", SushiAttributeTypeEnum.STRING); // SushiAttribute rootAttribute3 = new SushiAttribute("Truck", SushiAttributeTypeEnum.STRING); // // List<SushiAttribute> attributes1 = Arrays.asList(rootAttribute1, rootAttribute2, rootAttribute3); // SushiEventType eventType1 = new SushiEventType("truckUsage", attributes1, "Timestamp Begin"); // assertTrue("eventtype already registered", !SushiStreamProcessingAdapter.getInstance().isEventType(eventType1)); // Broker.send(eventType1); // // SushiAttribute rootAttribute4 = new SushiAttribute("Driver", SushiAttributeTypeEnum.STRING); // SushiAttribute rootAttribute5 = new SushiAttribute("Location", SushiAttributeTypeEnum.STRING); // // List<SushiAttribute> attributes2 = Arrays.asList(rootAttribute4, rootAttribute5); // SushiEventType eventType2 = new SushiEventType("obuEvent", attributes2, "Timestamp"); // Broker.send(eventType2); // // SushiAttribute rootAttribute6 = new SushiAttribute("Driver", SushiAttributeTypeEnum.STRING); // SushiAttribute rootAttribute7 = new SushiAttribute("Truck", SushiAttributeTypeEnum.STRING); // SushiAttribute rootAttribute8 = new SushiAttribute("Location", SushiAttributeTypeEnum.STRING); // List<SushiAttribute> attributes3 = Arrays.asList(rootAttribute6, rootAttribute7, rootAttribute8); // SushiEventType eventType3 = new SushiEventType("transformedEvent", attributes3); // Broker.send(eventType3); // // assertTrue(SushiStreamProcessingAdapter.getInstance().getEventTypeInfo(eventType1, "Timestamp_End") == Date.class); // assertTrue(SushiStreamProcessingAdapter.getInstance().getEventTypeInfo(eventType1, "Timestamp") == Date.class); // //// SushiQuery timestamps = new SushiQuery("transform", "SELECT B.Timestamp " + //// "FROM Pattern[ every A=truckUsage -> every B=obuEvent( " + //// "A.Driver = B.Driver AND " + //// "A.Timestamp.getTime() < B.Timestamp.getTime() AND " + //// "A.TimestampEnd.getTime() > B.Timestamp.getTime())]", QueryTypeEnum.LIVE); // // TransformationRule rule = new TransformationRule(eventType3, "TruckRule", "SELECT B.Timestamp as Timestamp, B.Driver as Driver, "+ // "B.Location as Location, A.Truck as Truck " + // "FROM Pattern[ every A=truckUsage -> every B=obuEvent( " + // "A.Driver = B.Driver AND " + // "B.Timestamp.getTime() IN [A.Timestamp.getTime():A.Timestamp_End.getTime()])]" // ); // TransformationListener listener = TransformationManager.getInstance().register(rule); // // loadData(eventType1, truckUsageFile); // loadData(eventType2, obuEventsFile); // // SushiQuery query = new SushiQuery("timestamp", "select Timestamp.format() from transformedEventWindow", SushiQueryTypeEnum.ONDEMAND); // String result = query.execute(); // System.out.println(result); // //// System.out.println(listenerX.getLog()); //// assertTrue(listenerX.getNumberOfLogEntries() > 0); // assertTrue("Number of transformed events in the event processing engine should be 375, but was " + listener.getNumberOfEventsFired(), listener.getNumberOfEventsFired() == 375); // assertTrue("Number of transformed events in the database should be 375, but was " + SushiEvent.findByEventType(eventType3).size(), SushiEvent.findByEventType(eventType3).size() == 375); // } public void loadData(SushiEventType eventType, String filePath) { List<SushiAttribute> attributes = eventType.getValueTypes(); String timestamp = eventType.getTimestampName(); // insert events into event type via SushiEsper List<SushiEvent> events = excelNormalizer.importEventsFromFile(filePath, attributes, timestamp); for (SushiEvent event : events) { event.setEventType(eventType); } Broker.send(events); } @Test public void getUsefulTimestampFormat() { SushiAttribute rootAttribute4 = new SushiAttribute("Driver", SushiAttributeTypeEnum.STRING); SushiAttribute rootAttribute5 = new SushiAttribute("Location", SushiAttributeTypeEnum.STRING); List<SushiAttribute> attributes2 = Arrays.asList(rootAttribute4, rootAttribute5); SushiEventType eventType2 = new SushiEventType("obuEvent", attributes2, "Timestamp"); Broker.send(eventType2); loadData(eventType2, obuEventsFile); SushiQuery query = new SushiQuery("timestamp", "select formatDate(Timestamp, 'yyyy-MM-dd HH:mm:ss') from obuEventWindow", SushiQueryTypeEnum.ONDEMAND); String result = query.execute(); System.out.println(result); } @Test public void getAggregtedEventsFromEsper() { SushiAttribute rootAttribute4 = new SushiAttribute("Driver", SushiAttributeTypeEnum.STRING); SushiAttribute rootAttribute5 = new SushiAttribute("Location", SushiAttributeTypeEnum.STRING); List<SushiAttribute> attributes2 = Arrays.asList(rootAttribute4, rootAttribute5); SushiEventType eventType2 = new SushiEventType("obuEvent", attributes2, "Timestamp"); Broker.send(eventType2); loadData(eventType2, obuEventsFile); SushiQuery queryRome = new SushiQuery("rome", "select count(*) from obuEventWindow where Driver = 'Paul' AND Location = 'Rome'", SushiQueryTypeEnum.ONDEMAND); String result = queryRome.execute(); String number = (String) result.subSequence(result.indexOf("=")+1, result.indexOf("}")); System.out.println(number); } }