package hu.bme.mit.incquery.cep.api;
import hu.bme.mit.incquery.cep.metamodels.cep.impl.ComplexEventPatternImpl;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
public abstract class ParameterizableComplexEventPattern extends
ComplexEventPatternImpl {
private Map<String, Object> paramValues = Maps.newHashMap();
private List<ParameterizableEventInstance> observedEvents = Lists
.newArrayList();
protected boolean evaluateParamBinding(Map<String, Object> params) {
if (params.isEmpty()) {
return false;
}
for (Entry<String, Object> param : params.entrySet()) {
if (!(evaluateParamBinding(param.getKey(), param.getValue()))) {
return false;
}
}
return true;
}
protected boolean evaluateParamBinding(Map<String, Object> params,
ParameterizableEventInstance observedEvent) {
if (evaluateParamBinding(params)) {
observedEvents.add(observedEvent);
return true;
}
return false;
}
protected boolean evaluateParamBinding(String paramName, Object paramValue) {
if (Strings.isNullOrEmpty(paramName) || paramValue == null) {
return false;
}
Object value = paramValues.get(paramName);
if (value == null) {
paramValues.put(paramName, paramValue);
return true;
}
return value.equals(paramValue);
}
public Map<String, Object> getParamValues() {
return paramValues;
}
public List<ParameterizableEventInstance> getObservedEvents() {
return observedEvents;
}
}