X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=security%2Fplugins%2Forg.argeo.security.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fui%2Fviews%2FLogContentProvider.java;fp=security%2Fplugins%2Forg.argeo.security.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fui%2Fviews%2FLogContentProvider.java;h=fb1ee13bb95574a4f1faa40519270d335e762dc1;hb=6bb0606505be3e99021c5ff9771c719eb1e1f2e7;hp=08cca0d0a8195e67bf83ca715ac853cf2147b8c0;hpb=d4c2363c4c8dfdf3bc2031e61cbf8d1730a13cf9;p=lgpl%2Fargeo-commons.git diff --git a/security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/LogContentProvider.java b/security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/LogContentProvider.java index 08cca0d0a..fb1ee13bb 100644 --- a/security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/LogContentProvider.java +++ b/security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/LogContentProvider.java @@ -2,6 +2,7 @@ package org.argeo.security.ui.views; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.Date; import java.util.LinkedList; import java.util.List; @@ -25,7 +26,7 @@ class LogContentProvider implements ILazyContentProvider, ArgeoLogListener { private final Integer maxLineBufferSize = 10 * 1000; private final TableViewer viewer; - private final LinkedList lines; + private LinkedList lines; public LogContentProvider(TableViewer viewer) { this.viewer = viewer; @@ -36,6 +37,7 @@ class LogContentProvider implements ILazyContentProvider, ArgeoLogListener { public synchronized void dispose() { lines.clear(); + lines = null; } @SuppressWarnings("unchecked") @@ -62,12 +64,12 @@ class LogContentProvider implements ILazyContentProvider, ArgeoLogListener { return; String message = msg.toString(); - StringBuffer buf = new StringBuffer(""); - buf.append(dateFormat.format(new Date(timestamp))).append(" "); - buf.append(level).append(" "); int count = 0; + String prefix = prefix(username, timestamp, level, category, thread) + .toString(); + // String suffix = suffix(username, timestamp, level, category, thread); for (String line : message.split("\n")) { - addLine(count == 0 ? buf + line : line); + addLine(count == 0 ? prefix + line : line); count++; } @@ -76,24 +78,57 @@ class LogContentProvider implements ILazyContentProvider, ArgeoLogListener { addLine(ste); } } - viewer.getTable().getDisplay().syncExec(new Runnable() { + + viewer.getTable().getDisplay().asyncExec(new Runnable() { public void run() { + if (lines == null) + return; viewer.setItemCount(lines.size()); - // viewer.reveal(lines.peekLast()); - Table table = viewer.getTable(); - // table.setTopIndex(lines.size()-1); - System.out.println("topIndex=" + table.getTopIndex() - + ", tableSize=" + lines.size()); - // table.select(lines.size() - 1); - // table.showSelection(); - TableItem ti = table.getItem(lines.size() - 1); - if (ti == null) - System.out.println("tableItem is null"); - table.showItem(ti); + // doesn't work with syncExec + scrollToLastLine(); } }); } + protected StringBuffer prefix(String username, Long timestamp, + String level, String category, String thread) { + StringBuffer buf = new StringBuffer(""); + buf.append(dateFormat.format(new Date(timestamp))).append(" "); + // buf.append(level).append(" "); + return buf; + } + + /** Normalize string to the given size */ + protected String norm(String str, Integer size) { + int length = str.length(); + if (length == size) + return str; + else if (length > size) + return str.substring(0, size); + else { + char[] arr = new char[size - length]; + Arrays.fill(arr, ' '); + return str + new String(arr); + } + } + + // protected String suffix(String username, Long timestamp, String level, + // String category, String thread) { + // return ""; + // } + + /** Scroll to the last line */ + protected void scrollToLastLine() { + // we try to show last line with two methods + // viewer.reveal(lines.peekLast()); + + Table table = viewer.getTable(); + TableItem ti = table.getItem(lines.size() - 1); + if (ti == null) + System.out.println("tableItem is null"); + table.showItem(ti); + } + protected synchronized LogLine addLine(String line) { // check for maximal size and purge if necessary while (lines.size() >= maxLineBufferSize) {