/*
***************************************************************************************
* 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.pattern;
import com.espertech.esper.client.EventBean;
import com.espertech.esper.client.EventType;
import com.espertech.esper.collection.Pair;
import com.espertech.esper.event.EventAdapterService;
import com.espertech.esper.event.map.MapEventBean;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
/**
* Implements a convertor for pattern partial results to events per stream.
*/
public class MatchedEventConvertorImpl implements MatchedEventConvertor {
private final EventBean[] eventsPerStream;
private final LinkedHashMap<String, Pair<EventType, String>> filterTypes;
private final LinkedHashMap<String, Pair<EventType, String>> arrayEventTypes;
private final MatchedEventMapMeta matchedEventMapMeta;
public MatchedEventConvertorImpl(LinkedHashMap<String, Pair<EventType, String>> filterTypes, LinkedHashMap<String, Pair<EventType, String>> arrayEventTypes, LinkedHashSet<String> allTags, EventAdapterService eventAdapterService) {
int size = filterTypes.size();
if (arrayEventTypes != null) {
size += arrayEventTypes.size();
}
this.eventsPerStream = new EventBean[size];
this.filterTypes = new LinkedHashMap<String, Pair<EventType, String>>(filterTypes);
if (arrayEventTypes != null) {
this.arrayEventTypes = new LinkedHashMap<String, Pair<EventType, String>>(arrayEventTypes);
} else {
this.arrayEventTypes = new LinkedHashMap<String, Pair<EventType, String>>();
}
this.matchedEventMapMeta = new MatchedEventMapMeta(allTags.toArray(new String[allTags.size()]), !this.arrayEventTypes.isEmpty());
}
public EventBean[] convert(MatchedEventMap events) {
int count = 0;
for (Map.Entry<String, Pair<EventType, String>> entry : filterTypes.entrySet()) {
EventBean theEvent = events.getMatchingEventByTag(entry.getKey());
eventsPerStream[count++] = theEvent;
}
if (arrayEventTypes != null) {
for (Map.Entry<String, Pair<EventType, String>> entry : arrayEventTypes.entrySet()) {
EventBean[] eventArray = (EventBean[]) events.getMatchingEventAsObjectByTag(entry.getKey());
HashMap map = new HashMap();
map.put(entry.getKey(), eventArray);
EventBean theEvent = new MapEventBean(map, null);
eventsPerStream[count++] = theEvent;
}
}
return eventsPerStream;
}
public MatchedEventMapMeta getMatchedEventMapMeta() {
return matchedEventMapMeta;
}
}