package org.jactr.eclipse.runtime.log2; /* * default logging */ import java.util.Collections; import java.util.Map; import java.util.Set; import java.util.TreeMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jactr.core.logging.Logger; public class LogData { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(LogData.class); private final double _time; private final Map<String, StringBuilder> _streamContents; private final LogSessionDataStream _logStream; private final String _timeStream; public LogData(double time, boolean translateTime, LogSessionDataStream stream) { _time = time; _streamContents = new TreeMap<String, StringBuilder>(); _logStream = stream; String timeName = null; try { if (translateTime) { double timeInSeconds = time; double hours = Math.floor(timeInSeconds / 3600); timeInSeconds -= hours * 3600; double minutes = Math.floor(timeInSeconds / 60); timeInSeconds -= minutes * 60; double days = Math.floor(hours / 24); hours -= days * 24; if (days > 0) timeName = String.format("%02.0f:%02.0f:%02.0f:%05.3f", days, hours, minutes, timeInSeconds); else timeName = String.format("%02.0f:%02.0f:%02.0f:%05.3f", days, hours, minutes, timeInSeconds); } } catch (Exception e) { timeName = null; } if (timeName == null) timeName = String.format("%.3f", _time); _timeStream = timeName; } public LogSessionDataStream getDataStream() { return _logStream; } public double getTime() { return _time; } public Set<String> getStreamNames() { return Collections.unmodifiableSet(_streamContents.keySet()); } protected void conflictResolution() { for (StringBuilder sb : _streamContents.values()) if (sb.length() > 0) sb.append("---\n"); } protected void append(String stream, String message) { StringBuilder sb = _streamContents.get(stream); if (sb == null) { sb = new StringBuilder(message); _streamContents.put(stream, sb); } else sb.append(message); } public String get(String streamName) { if (streamName.equalsIgnoreCase(Logger.Stream.TIME.toString())) return _timeStream; StringBuilder sb = _streamContents.get(streamName); if (sb != null) return sb.toString(); return ""; } @Override public String toString() { return String.format("[Log (%.2f) : %s]", getTime(), _streamContents.keySet()); } }