package org.jactr.eclipse.runtime.visual; /* * 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.stream.ISessionDataStream; import org.jactr.eclipse.runtime.trace.IRuntimeTraceListener; import org.jactr.eclipse.runtime.trace.impl.GeneralEventManager; import org.jactr.eclipse.runtime.trace.impl.RuntimeTraceDataManager; import org.jactr.tools.tracer.transformer.ITransformedEvent; import org.jactr.tools.tracer.transformer.visual.TransformedVisualEvent; public class VisualTraceCenter extends RuntimeTraceDataManager<VisualDescriptor> { static private final Log LOGGER = LogFactory .getLog(VisualTraceCenter.class); static private VisualTraceCenter _default = new VisualTraceCenter(); static public VisualTraceCenter get() { return _default; } private final GeneralEventManager<IVisualTraceCenterListener, VisualTraceCenterEvent> _listenerList; private IRuntimeTraceListener _runtimeListener; protected VisualTraceCenter() { _listenerList = new GeneralEventManager<IVisualTraceCenterListener, VisualTraceCenterEvent>( new GeneralEventManager.INotifier<IVisualTraceCenterListener, VisualTraceCenterEvent>() { public void notify(IVisualTraceCenterListener listener, VisualTraceCenterEvent event) { if (event._isAdd) listener.modelAdded(event._modelName, event._descriptor); else listener.modelRemoved(event._modelName, event._descriptor); } }); _runtimeListener = new IRuntimeTraceListener() { public void eventFired(ITransformedEvent traceEvent, ISession session) { VisualTraceCenter.get().process(traceEvent, session); } public boolean isInterestedIn(ITransformedEvent traceEvent, ISession session) { return traceEvent instanceof TransformedVisualEvent; } }; } public IRuntimeTraceListener getRuntimeListener() { return _runtimeListener; } public void add(IVisualTraceCenterListener listener) { _listenerList.addListener(listener); } public void remove(IVisualTraceCenterListener listener) { _listenerList.removeListener(listener); } @Override protected VisualDescriptor createRuntimeTraceData(ISession session, String commonName, String modelName) { return new VisualDescriptor(commonName, modelName, session); } @Override protected void modelAdded(ISession session, VisualDescriptor data, String modelName) { super.modelAdded(session, data, modelName); _listenerList.notify(new VisualTraceCenterEvent(modelName, data, true)); } @Override protected void disposeRuntimeTraceData(ISession session, String modelName, VisualDescriptor data) { // noop } @Override protected void modelRemoved(ISession session, VisualDescriptor data, String modelName) { super.modelRemoved(session, data, modelName); _listenerList.notify(new VisualTraceCenterEvent(modelName, data, false)); } @Override protected void process(ISession session, String modelName, VisualDescriptor data, ITransformedEvent event) { try { data.process((TransformedVisualEvent) event); } catch (Exception e) { LOGGER.error("Failed to process visual event for " + modelName, e); } } private class VisualTraceCenterEvent { public boolean _isAdd; public String _modelName; public VisualDescriptor _descriptor; public VisualTraceCenterEvent(String modelName, VisualDescriptor data, boolean isAdd) { _isAdd = isAdd; _modelName = modelName; _descriptor = data; } } @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 } }