package org.jactr.eclipse.runtime.ui.looper; /* * default logging */ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jactr.eclipse.runtime.session.ISession; import org.jactr.eclipse.runtime.session.data.ISessionData; import org.jactr.eclipse.runtime.session.impl.Session2SessionAdapter; import org.jactr.eclipse.runtime.session.stream.ISessionDataStream; import org.jactr.eclipse.runtime.trace.IRuntimeTraceListener; import org.jactr.eclipse.runtime.trace.impl.RuntimeTraceDataManager; import org.jactr.tools.tracer.transformer.ITransformedEvent; import org.jactr.tools.tracer.transformer.procedural.TransformedProceduralEvent; public class RuntimeLoopDetector extends RuntimeTraceDataManager<RecentProductionModelData> implements IRuntimeTraceListener { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(RuntimeLoopDetector.class); private LoopNotifier _notifier; public RuntimeLoopDetector() { _notifier = new LoopNotifier(); } @Override protected RecentProductionModelData createRuntimeTraceData( ISession session, String commonName, String modelName) { return new RecentProductionModelData(session, modelName, _notifier); } @Override protected void disposeRuntimeTraceData(ISession session, String modelName, RecentProductionModelData data) { data.dispose(); } @Override protected void process(ISession session, String modelName, RecentProductionModelData data, ITransformedEvent event) { data.process(session, (TransformedProceduralEvent) event); } @Override public void sessionClosed(ISession session, boolean normal) { _notifier.clear(session); } @Override public void sessionDestroyed(ISession session) { } @Override public void sessionOpened(ISession session) { // so that we only do this for debug // if (session.isDebugSession()) _notifier.add(session); } public void eventFired(ITransformedEvent traceEvent, ISession session) { process(traceEvent, session); } public boolean isInterestedIn(ITransformedEvent traceEvent, ISession session) { Session2SessionAdapter nsw = (Session2SessionAdapter) session; return nsw.getOldSession().isDebugSession() && traceEvent instanceof TransformedProceduralEvent; } @Override public void sessionClosed(ISession session) { // TODO Auto-generated method stub } @Override public void newSessionData(ISessionData sessionData) { // TODO Auto-generated method stub } @Override public void newSessionDataStream(ISessionData sessionData, ISessionDataStream sessionDataStream) { // TODO Auto-generated method stub } }