+ simple time formatting hh:mm:ss.sss, currently accessed by mouse clicking column header
This commit is contained in:
parent
020da4e8ba
commit
f837678608
1 changed files with 70 additions and 6 deletions
|
@ -26,7 +26,7 @@
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: LogListener.java,v 1.32 2010/09/09 19:52:08 nifi Exp $
|
* $Id: LogListener.java,v 1.33 2010/10/12 10:04:35 fros4943 Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.plugins;
|
package se.sics.cooja.plugins;
|
||||||
|
@ -44,6 +44,7 @@ import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.KeyAdapter;
|
import java.awt.event.KeyAdapter;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
|
@ -108,12 +109,19 @@ public class LogListener extends VisPlugin {
|
||||||
private final static int COLUMN_DATA = 2;
|
private final static int COLUMN_DATA = 2;
|
||||||
private final static int COLUMN_CONCAT = 3;
|
private final static int COLUMN_CONCAT = 3;
|
||||||
private final static String[] COLUMN_NAMES = {
|
private final static String[] COLUMN_NAMES = {
|
||||||
"Time",
|
"Time ms",
|
||||||
"Mote",
|
"Mote",
|
||||||
"Message",
|
"Message",
|
||||||
"#"
|
"#"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static final long TIME_SECOND = 1000*Simulation.MILLISECOND;
|
||||||
|
private static final long TIME_MINUTE = 60*TIME_SECOND;
|
||||||
|
private static final long TIME_HOUR = 60*TIME_MINUTE;
|
||||||
|
|
||||||
|
private boolean formatTimeString = false;
|
||||||
|
private boolean hasHours = false;
|
||||||
|
|
||||||
private final JTable logTable;
|
private final JTable logTable;
|
||||||
private TableRowSorter<TableModel> logFilter;
|
private TableRowSorter<TableModel> logFilter;
|
||||||
private ArrayQueue<LogData> logs = new ArrayQueue<LogData>();
|
private ArrayQueue<LogData> logs = new ArrayQueue<LogData>();
|
||||||
|
@ -179,6 +187,12 @@ public class LogListener extends VisPlugin {
|
||||||
model = new AbstractTableModel() {
|
model = new AbstractTableModel() {
|
||||||
private static final long serialVersionUID = 3065150390849332924L;
|
private static final long serialVersionUID = 3065150390849332924L;
|
||||||
public String getColumnName(int col) {
|
public String getColumnName(int col) {
|
||||||
|
if (col == COLUMN_TIME && formatTimeString) {
|
||||||
|
if (hasHours) {
|
||||||
|
return "Time hh:mm:ss";
|
||||||
|
}
|
||||||
|
return "Time mm:ss";
|
||||||
|
}
|
||||||
return COLUMN_NAMES[col];
|
return COLUMN_NAMES[col];
|
||||||
}
|
}
|
||||||
public int getRowCount() {
|
public int getRowCount() {
|
||||||
|
@ -287,6 +301,19 @@ public class LogListener extends VisPlugin {
|
||||||
}
|
}
|
||||||
logTable.setRowSorter(logFilter);
|
logTable.setRowSorter(logFilter);
|
||||||
|
|
||||||
|
/* Toggle time format */
|
||||||
|
logTable.getTableHeader().addMouseListener(new MouseAdapter() {
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
int colIndex = logTable.columnAtPoint(e.getPoint());
|
||||||
|
int columnIndex = logTable.convertColumnIndexToModel(colIndex);
|
||||||
|
if (columnIndex != COLUMN_TIME) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
formatTimeString = !formatTimeString;
|
||||||
|
recacheAllTimeStrings();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
/* Automatically update column widths */
|
/* Automatically update column widths */
|
||||||
final TableColumnAdjuster adjuster = new TableColumnAdjuster(logTable);
|
final TableColumnAdjuster adjuster = new TableColumnAdjuster(logTable);
|
||||||
adjuster.packColumns();
|
adjuster.packColumns();
|
||||||
|
@ -323,6 +350,10 @@ public class LogListener extends VisPlugin {
|
||||||
LogOutputEvent[] history = simulation.getEventCentral().getLogOutputHistory();
|
LogOutputEvent[] history = simulation.getEventCentral().getLogOutputHistory();
|
||||||
if (history.length > 0) {
|
if (history.length > 0) {
|
||||||
for (LogOutputEvent historyEv: history) {
|
for (LogOutputEvent historyEv: history) {
|
||||||
|
if (!hasHours && historyEv.getTime() > TIME_HOUR) {
|
||||||
|
hasHours = true;
|
||||||
|
recacheAllTimeStrings();
|
||||||
|
}
|
||||||
LogData data = new LogData(historyEv);
|
LogData data = new LogData(historyEv);
|
||||||
logs.add(data);
|
logs.add(data);
|
||||||
}
|
}
|
||||||
|
@ -356,6 +387,10 @@ public class LogListener extends VisPlugin {
|
||||||
}
|
}
|
||||||
public void newLogOutput(LogOutputEvent ev) {
|
public void newLogOutput(LogOutputEvent ev) {
|
||||||
/* Display new log output */
|
/* Display new log output */
|
||||||
|
if (!hasHours && ev.getTime() > TIME_HOUR) {
|
||||||
|
hasHours = true;
|
||||||
|
recacheAllTimeStrings();
|
||||||
|
}
|
||||||
logUpdateAggregator.add(new LogData(ev));
|
logUpdateAggregator.add(new LogData(ev));
|
||||||
}
|
}
|
||||||
public void removedLogOutput(LogOutputEvent ev) {
|
public void removedLogOutput(LogOutputEvent ev) {
|
||||||
|
@ -405,7 +440,16 @@ public class LogListener extends VisPlugin {
|
||||||
setLocation(0, gui.getDesktopPane().getHeight() - 300);
|
setLocation(0, gui.getDesktopPane().getHeight() - 300);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateTitle() {
|
private void recacheAllTimeStrings() {
|
||||||
|
for (LogData ld: logs) {
|
||||||
|
ld.recacheTimeString();
|
||||||
|
}
|
||||||
|
logTable.getColumnModel().getColumn(COLUMN_TIME).setHeaderValue(
|
||||||
|
logTable.getModel().getColumnName(COLUMN_TIME));
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateTitle() {
|
||||||
setTitle("Log Listener (listening on "
|
setTitle("Log Listener (listening on "
|
||||||
+ simulation.getEventCentral().getLogOutputObservationsCount() + " log interfaces)");
|
+ simulation.getEventCentral().getLogOutputObservationsCount() + " log interfaces)");
|
||||||
}
|
}
|
||||||
|
@ -491,15 +535,35 @@ public class LogListener extends VisPlugin {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class LogData {
|
private class LogData {
|
||||||
public final LogOutputEvent ev;
|
public final LogOutputEvent ev;
|
||||||
public final String strID; /* cached value */
|
public final String strID; /* cached value */
|
||||||
public final String strTime; /* cached value */
|
public String strTime; /* cached value */
|
||||||
|
|
||||||
public LogData(LogOutputEvent ev) {
|
public LogData(LogOutputEvent ev) {
|
||||||
this.ev = ev;
|
this.ev = ev;
|
||||||
this.strID = "ID:" + ev.getMote().getID();
|
this.strID = "ID:" + ev.getMote().getID();
|
||||||
this.strTime = "" + ev.getTime()/Simulation.MILLISECOND;
|
recacheTimeString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void recacheTimeString() {
|
||||||
|
if (formatTimeString) {
|
||||||
|
long t = ev.getTime();
|
||||||
|
long h = (t / TIME_HOUR);
|
||||||
|
t -= (t / TIME_HOUR)*TIME_HOUR;
|
||||||
|
long m = (t / TIME_MINUTE);
|
||||||
|
t -= (t / TIME_MINUTE)*TIME_MINUTE;
|
||||||
|
long s = (t / TIME_SECOND);
|
||||||
|
t -= (t / TIME_SECOND)*TIME_SECOND;
|
||||||
|
long ms = t / Simulation.MILLISECOND;
|
||||||
|
if (hasHours) {
|
||||||
|
this.strTime = String.format("%d:%02d:%02d.%03d", h,m,s,ms);
|
||||||
|
} else {
|
||||||
|
this.strTime = String.format("%02d:%02d.%03d", m,s,ms);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.strTime = "" + ev.getTime() / Simulation.MILLISECOND;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue