/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.core.util.debug; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Comparator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.TreeMap; import org.drools.common.NetworkNode; import org.drools.reteoo.ReteooRuleBase; import org.drools.reteoo.ReteooWorkingMemory; import org.drools.rule.Package; import org.drools.rule.Rule; public class StatefulKnowledgeSessionInfo { private ReteooWorkingMemory session; private Map<NetworkNode, DefaultNodeInfo> nodesInfo; private List<String> log; private SimpleDateFormat df; public StatefulKnowledgeSessionInfo() { nodesInfo = new TreeMap<NetworkNode, DefaultNodeInfo>( new Comparator<NetworkNode>() { public int compare(NetworkNode o1, NetworkNode o2) { return o1.getId() - o2.getId(); } } ); log = new LinkedList<String>(); df = new SimpleDateFormat( "HH:mm:ss.SSS" ); } public Package[] getPackages() { return this.session.getRuleBase().getPackages(); } public int getNodeCount() { return ((ReteooRuleBase) this.session.getRuleBase()).getNodeCount(); } public int getExternalFactCount() { return this.session.getObjectStore().size(); } public void assign(NetworkNode snode, Rule rule) { DefaultNodeInfo info = this.nodesInfo.get( snode ); info.assign( rule ); } public boolean visited(NetworkNode node) { return this.nodesInfo.containsKey( node ); } public DefaultNodeInfo getNodeInfo(NetworkNode node) { return this.nodesInfo.get( node ); } public void addNodeInfo(NetworkNode node, DefaultNodeInfo dni) { this.nodesInfo.put( node, dni ); } public void info(String msg) { log( msg, " [INFO] - " ); } public void warn(String msg) { log( msg, " [WARN] - " ); } public void error(String msg) { log( msg, " [ERRO] - " ); } private void log(String msg, String lvl) { log.add( df.format( System.currentTimeMillis() ) + lvl + msg ); } public List<String> getLog() { return log; } public Collection< ? extends NodeInfo> getNodeInfos() { return this.nodesInfo.values(); } public ReteooWorkingMemory getSession() { return session; } public void setSession(ReteooWorkingMemory session) { this.session = session; } }