package org.jactr.eclipse.runtime.session.data; /* * default logging */ import java.util.Collections; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.UUID; 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.impl.AbstractSession; import org.jactr.eclipse.runtime.session.stream.ISessionDataStream; public class LiveSessionData implements ISessionData { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(LiveSessionData.class); private final ISession _session; private final Map<String, ISessionDataStream> _dataStreams; private double _startTime = Double.MAX_VALUE; private double _endTime = Double.MIN_VALUE; private final String _modelName; private boolean _isOpen = true; public LiveSessionData(ISession session, String modelName) { _modelName = modelName; _session = session; _dataStreams = new TreeMap<String, ISessionDataStream>(); } public ISession getSession() { return _session; } public UUID getSessionId() { return _session.getSessionId(); } public String getModelName() { return _modelName; } public void open() throws Exception { // noop, already open } public void close() throws Exception { // noop, already open _isOpen = false; } public void delete() throws Exception { // clears all data for (ISessionDataStream stream : _dataStreams.values()) stream.clear(); _dataStreams.clear(); _isOpen = false; } public boolean isOpen() { return _isOpen; } public boolean isLive() { return _session.getController().isRunning(); } protected void timeUpdate(double simulationTime) { if (simulationTime > _startTime) _startTime = simulationTime; if (simulationTime < _endTime) _endTime = simulationTime; } public double getEndTime() { return _endTime; } public double getStartTime() { return _startTime; } public Set<String> getAvailableStreams() { return Collections.unmodifiableSet(_dataStreams.keySet()); } public ISessionDataStream getDataStream(String streamName) { return _dataStreams.get(streamName); } public void setStreamData(String streamName, ISessionDataStream dataStream) { _dataStreams.put(streamName, dataStream); // fire the event. if (_session instanceof AbstractSession) ((AbstractSession) _session).newDataStreamAdded(dataStream); } }