/* * ************************************************************************************* * Copyright (C) 2008 EsperTech, Inc. All rights reserved. * * http://esper.codehaus.org * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * * ************************************************************************************* */ package com.espertech.esper.regression.enummethod; import com.espertech.esper.client.*; import com.espertech.esper.client.scopetest.SupportUpdateListener; import com.espertech.esper.support.bean.lrreport.Item; import com.espertech.esper.support.bean.lrreport.LRUtil; import com.espertech.esper.support.bean.lrreport.LocationReportFactory; import com.espertech.esper.support.bean.lrreport.LocationReport; import com.espertech.esper.support.client.SupportConfigFactory; import junit.framework.TestCase; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.util.*; public class TestExpressionDefLambdaLocReport extends TestCase { private static final Log log = LogFactory.getLog(TestExpressionDefLambdaLocReport.class); private EPServiceProvider epService; private SupportUpdateListener listener; public void setUp() { Configuration config = SupportConfigFactory.getConfiguration(); config.addEventType("LocationReport", LocationReport.class); config.addImport(LRUtil.class); epService = EPServiceProviderManager.getDefaultProvider(config); epService.initialize(); listener = new SupportUpdateListener(); } protected void tearDown() throws Exception { listener = null; } public void testMissingLuggage() { /** * Regular algorithm to find separated luggage and new owner. */ LocationReport theEvent = LocationReportFactory.makeLarge(); List<Item> separatedLuggage = LocationReportFactory.findSeparatedLuggage(theEvent); for (Item item : separatedLuggage) { //log.info("Luggage that are separated (dist>20): " + item); Item newOwner = LocationReportFactory.findPotentialNewOwner(theEvent, item); //log.info("Found new owner " + newOwner); } String eplFragment = "" + "expression lostLuggage {" + " lr => lr.items.where(l => l.type='L' and " + " lr.items.anyof(p => p.type='P' and p.assetId=l.assetIdPassenger and LRUtil.distance(l.location.x, l.location.y, p.location.x, p.location.y) > 20))" + "}" + "expression passengers {" + " lr => lr.items.where(l => l.type='P')" + "}" + "" + "expression nearestOwner {" + " lr => lostLuggage(lr).toMap(key => key.assetId, " + " value => passengers(lr).minBy(p => LRUtil.distance(value.location.x, value.location.y, p.location.x, p.location.y)))" + "}" + "" + "select lostLuggage(lr) as val1, nearestOwner(lr) as val2 from LocationReport lr"; EPStatement stmtFragment = epService.getEPAdministrator().createEPL(eplFragment); stmtFragment.addListener(listener); LocationReport bean = LocationReportFactory.makeLarge(); epService.getEPRuntime().sendEvent(bean); Item[] val1 = itemArray((Collection<Item>) listener.assertOneGetNew().get("val1")); assertEquals(3, val1.length); assertEquals("L00000", val1[0].getAssetId()); assertEquals("L00007", val1[1].getAssetId()); assertEquals("L00008", val1[2].getAssetId()); Map val2 = (Map) listener.assertOneGetNewAndReset().get("val2"); assertEquals(3, val2.size()); assertEquals("P00008", ((Item) val2.get("L00000")).getAssetId()); assertEquals("P00001", ((Item) val2.get("L00007")).getAssetId()); assertEquals("P00001", ((Item) val2.get("L00008")).getAssetId()); } private Item[] itemArray(Collection<Item> it) { return it.toArray(new Item[it.size()]); } }