/*
* *************************************************************************************
* 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.core.context.activator;
import com.espertech.esper.client.EventBean;
import com.espertech.esper.client.EventType;
import com.espertech.esper.core.context.util.AgentInstanceContext;
import com.espertech.esper.core.service.StatementContext;
import com.espertech.esper.pattern.*;
import com.espertech.esper.view.EventStream;
import com.espertech.esper.view.ZeroDepthStream;
import java.util.Map;
public class ViewableActivatorPattern implements ViewableActivator {
private final PatternContext patternContext;
private final EvalRootFactoryNode rootFactoryNode;
private final EventType eventType;
private final boolean hasConsumingFilter;
public ViewableActivatorPattern(PatternContext patternContext, EvalRootFactoryNode rootFactoryNode, EventType eventType, boolean hasConsumingFilter) {
this.patternContext = patternContext;
this.rootFactoryNode = rootFactoryNode;
this.eventType = eventType;
this.hasConsumingFilter = hasConsumingFilter;
}
public ViewableActivationResult activate(AgentInstanceContext agentInstanceContext) {
PatternAgentInstanceContext patternAgentInstanceContext = agentInstanceContext.getStatementContext().getPatternContextFactory().createPatternAgentContext(patternContext, agentInstanceContext, hasConsumingFilter);
EvalRootNode rootNode = EvalNodeUtil.makeRootNodeFromFactory(rootFactoryNode, patternAgentInstanceContext);
final EventStream sourceEventStream = new ZeroDepthStream(eventType);
final StatementContext statementContext = patternContext.getStatementContext();
final PatternMatchCallback callback = new PatternMatchCallback() {
public void matchFound(Map<String, Object> matchEvent)
{
EventBean compositeEvent = statementContext.getEventAdapterService().adapterForTypedMap(matchEvent, eventType);
sourceEventStream.insert(compositeEvent);
}
};
PatternStopCallback patternStopCallback = rootNode.start(callback, patternContext);
return new ViewableActivationResult(sourceEventStream, patternStopCallback, null);
}
}