/* *************************************************************************************** * 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.epl.expression.accessagg; import com.espertech.esper.core.service.StatementExtensionSvcContext; import com.espertech.esper.epl.agg.access.AggregationStateMinMaxByEverSpec; import com.espertech.esper.epl.agg.access.AggregationStateSortedSpec; import com.espertech.esper.epl.agg.service.AggregationStateFactory; import com.espertech.esper.epl.core.EngineImportService; import com.espertech.esper.epl.expression.core.ExprEvaluator; import com.espertech.esper.util.CollectionUtil; import java.util.Comparator; public class SortedAggregationStateFactoryFactory { private final EngineImportService engineImportService; private final StatementExtensionSvcContext statementExtensionSvcContext; private final ExprEvaluator[] evaluators; private final boolean[] sortDescending; private final boolean ever; private final int streamNum; private final ExprAggMultiFunctionSortedMinMaxByNode parent; private final ExprEvaluator optionalFilter; public SortedAggregationStateFactoryFactory(EngineImportService engineImportService, StatementExtensionSvcContext statementExtensionSvcContext, ExprEvaluator[] evaluators, boolean[] sortDescending, boolean ever, int streamNum, ExprAggMultiFunctionSortedMinMaxByNode parent, ExprEvaluator optionalFilter) { this.engineImportService = engineImportService; this.statementExtensionSvcContext = statementExtensionSvcContext; this.evaluators = evaluators; this.sortDescending = sortDescending; this.ever = ever; this.streamNum = streamNum; this.parent = parent; this.optionalFilter = optionalFilter; } public AggregationStateFactory makeFactory() { boolean sortUsingCollator = engineImportService.isSortUsingCollator(); Comparator<Object> comparator = CollectionUtil.getComparator(evaluators, sortUsingCollator, sortDescending); if (ever) { AggregationStateMinMaxByEverSpec spec = new AggregationStateMinMaxByEverSpec(streamNum, evaluators, parent.isMax(), comparator, null, optionalFilter); return engineImportService.getAggregationFactoryFactory().makeMinMaxEver(statementExtensionSvcContext, parent, spec); } AggregationStateSortedSpec spec = new AggregationStateSortedSpec(streamNum, evaluators, comparator, null, optionalFilter); return engineImportService.getAggregationFactoryFactory().makeSorted(statementExtensionSvcContext, parent, spec); } }