com.espertech.esper.regression.enummethod.TestExpressionDefLambdaLocReport.java Source code

Java tutorial

Introduction

Here is the source code for com.espertech.esper.regression.enummethod.TestExpressionDefLambdaLocReport.java

Source

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