/*
***************************************************************************************
* 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.annotation.AuditEnum;
import com.espertech.esper.util.AuditPath;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
public class EvalAuditInstanceCount {
private final Map<EvalFactoryNode, Integer> counts;
public EvalAuditInstanceCount() {
counts = new HashMap<EvalFactoryNode, Integer>();
}
public void decreaseRefCount(EvalFactoryNode evalNode, EvalAuditStateNode current, String patternExpr, String statementName, String engineURI) {
Integer count = counts.get(evalNode);
if (count == null) {
return;
}
count--;
if (count <= 0) {
counts.remove(evalNode);
print(current, patternExpr, engineURI, statementName, false, 0);
return;
}
counts.put(evalNode, count);
print(current, patternExpr, engineURI, statementName, false, count);
}
public void increaseRefCount(EvalFactoryNode evalNode, EvalAuditStateNode current, String patternExpr, String statementName, String engineURI) {
Integer count = counts.get(evalNode);
if (count == null) {
count = 1;
} else {
count++;
}
counts.put(evalNode, count);
print(current, patternExpr, engineURI, statementName, true, count);
}
private static void print(EvalAuditStateNode current, String patternExpression, String engineURI, String statementName, boolean added, int count) {
if (!AuditPath.isInfoEnabled()) {
return;
}
StringWriter writer = new StringWriter();
EvalAuditStateNode.writePatternExpr(current, patternExpression, writer);
if (added) {
writer.write(" increased to " + count);
} else {
writer.write(" decreased to " + count);
}
AuditPath.auditLog(engineURI, statementName, AuditEnum.PATTERNINSTANCES, writer.toString());
}
}