]> git.argeo.org Git - lgpl/argeo-commons.git/blob - LogDeploymentUi.java
fa5d3dae3aff34323ce8c54b110de3eeaec05bdd
[lgpl/argeo-commons.git] / LogDeploymentUi.java
1 package org.argeo.cms.e4.maintenance;
2
3 import java.text.DateFormat;
4 import java.text.SimpleDateFormat;
5 import java.util.Enumeration;
6 import java.util.GregorianCalendar;
7 import java.util.TimeZone;
8
9 import org.argeo.cms.swt.CmsSwtUtils;
10 import org.eclipse.swt.SWT;
11 import org.eclipse.swt.layout.GridData;
12 import org.eclipse.swt.widgets.Composite;
13 import org.eclipse.swt.widgets.Display;
14 import org.eclipse.swt.widgets.Text;
15 import org.osgi.service.log.LogEntry;
16 import org.osgi.service.log.LogListener;
17 import org.osgi.service.log.LogReaderService;
18
19 class LogDeploymentUi extends AbstractOsgiComposite implements LogListener {
20 private static final long serialVersionUID = 590221539553514693L;
21
22 private DateFormat dateFormat = new SimpleDateFormat("MMdd HH:mm");
23
24 private Display display;
25 private Text logDisplay;
26
27 public LogDeploymentUi(Composite parent, int style) {
28 super(parent, style);
29 }
30
31 @Override
32 protected void initUi(int style) {
33 LogReaderService logReader = getService(LogReaderService.class);
34 // FIXME use server push
35 // logReader.addLogListener(this);
36 this.display = getDisplay();
37 this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
38 logDisplay = new Text(this, SWT.WRAP | SWT.MULTI | SWT.READ_ONLY);
39 logDisplay.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
40 CmsSwtUtils.markup(logDisplay);
41 Enumeration<LogEntry> logEntries = (Enumeration<LogEntry>) logReader.getLog();
42 while (logEntries.hasMoreElements())
43 logDisplay.append(printEntry(logEntries.nextElement()));
44 }
45
46 private String printEntry(LogEntry entry) {
47 StringBuilder sb = new StringBuilder();
48 GregorianCalendar calendar = new GregorianCalendar(TimeZone.getDefault());
49 calendar.setTimeInMillis(entry.getTime());
50 sb.append(dateFormat.format(calendar.getTime())).append(' ');
51 sb.append(entry.getMessage());
52 sb.append('\n');
53 return sb.toString();
54 }
55
56 @Override
57 public void logged(LogEntry entry) {
58 if (display.isDisposed())
59 return;
60 display.asyncExec(() -> {
61 if (logDisplay.isDisposed())
62 return;
63 logDisplay.append(printEntry(entry));
64 });
65 display.wake();
66 }
67
68 // @Override
69 // public void dispose() {
70 // super.dispose();
71 // getService(LogReaderService.class).removeLogListener(this);
72 // }
73 }