/*
***************************************************************************************
* Copyright (C) 2006 EsperTech, Inc. All rights reserved. *
* http://www.espertech.com/esper *
* 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.supportregression.util;
import com.espertech.esper.client.EPServiceProvider;
import com.espertech.esper.client.EPStatement;
import com.espertech.esper.client.scopetest.EPAssertionUtil;
import com.espertech.esper.core.service.EPStatementSPI;
import com.espertech.esper.filter.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import static junit.framework.TestCase.fail;
import static org.junit.Assert.assertEquals;
public class SupportFilterHelper {
public static void assertFilterTwo(EPServiceProvider epService, String epl, String expressionOne, FilterOperator opOne, String expressionTwo, FilterOperator opTwo) {
EPStatementSPI statementSPI = (EPStatementSPI) epService.getEPAdministrator().createEPL(epl);
if (((FilterServiceSPI) statementSPI.getStatementContext().getFilterService()).isSupportsTakeApply()) {
FilterValueSetParam[] multi = getFilterMulti(statementSPI);
assertEquals(2, multi.length);
assertEquals(opOne, multi[0].getFilterOperator());
assertEquals(expressionOne, multi[0].getLookupable().getExpression());
assertEquals(opTwo, multi[1].getFilterOperator());
assertEquals(expressionTwo, multi[1].getLookupable().getExpression());
}
}
public static FilterValueSetParam getFilterSingle(EPStatementSPI statementSPI) {
FilterValueSetParam[] params = getFilterMulti(statementSPI);
assertEquals(1, params.length);
return params[0];
}
public static FilterValueSetParam[] getFilterMulti(EPStatementSPI statementSPI) {
FilterServiceSPI filterServiceSPI = (FilterServiceSPI) statementSPI.getStatementContext().getFilterService();
FilterSet set = filterServiceSPI.take(Collections.singleton(statementSPI.getStatementId()));
assertEquals(1, set.getFilters().size());
FilterValueSet valueSet = set.getFilters().get(0).getFilterValueSet();
return valueSet.getParameters()[0];
}
public static EPStatement assertFilterMulti(EPServiceProvider epService, String epl, String eventTypeName, SupportFilterItem[][] expected) {
EPStatementSPI statementSPI = (EPStatementSPI) epService.getEPAdministrator().createEPL(epl);
if (!((FilterServiceSPI) statementSPI.getStatementContext().getFilterService()).isSupportsTakeApply()) {
return statementSPI;
}
assertFilterMulti(statementSPI, eventTypeName, expected);
return statementSPI;
}
public static void assertFilterMulti(EPStatementSPI statementSPI, String eventTypeName, SupportFilterItem[][] expected) {
FilterServiceSPI filterServiceSPI = (FilterServiceSPI) statementSPI.getStatementContext().getFilterService();
FilterSet set = filterServiceSPI.take(Collections.singleton(statementSPI.getStatementId()));
FilterSetEntry filterSetEntry = null;
for (FilterSetEntry entry : set.getFilters()) {
if (entry.getFilterValueSet().getEventType().getName().equals(eventTypeName)) {
if (filterSetEntry != null) {
fail("Multiple filters for type " + eventTypeName);
}
filterSetEntry = entry;
}
}
FilterValueSet valueSet = filterSetEntry.getFilterValueSet();
FilterValueSetParam[][] params = valueSet.getParameters();
Comparator<SupportFilterItem> comparator = new Comparator<SupportFilterItem>() {
public int compare(SupportFilterItem o1, SupportFilterItem o2) {
if (o1.getName().equals(o2.getName())) {
if (o1.getOp().ordinal() > o1.getOp().ordinal()) {
return 1;
}
if (o1.getOp().ordinal() < o1.getOp().ordinal()) {
return -1;
}
return 0;
}
return o1.getName().compareTo(o2.getName());
}
};
SupportFilterItem[][] found = new SupportFilterItem[params.length][];
for (int i = 0; i < found.length; i++) {
found[i] = new SupportFilterItem[params[i].length];
for (int j = 0; j < params[i].length; j++) {
found[i][j] = new SupportFilterItem(params[i][j].getLookupable().getExpression().toString(),
params[i][j].getFilterOperator());
}
Arrays.sort(found[i], comparator);
}
for (int i = 0; i < expected.length; i++) {
Arrays.sort(expected[i], comparator);
}
EPAssertionUtil.assertEqualsAnyOrder(expected, found);
filterServiceSPI.apply(set);
}
}