View Javadoc
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.ui.util.CmsUiUtils;
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  		CmsUiUtils.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  }