]> git.argeo.org Git - lgpl/argeo-commons.git/blob - rcp/org.argeo.cms.ui.rcp/src/org/argeo/cms/ui/rcp/CmsRcpDisplayFactory.java
Adapt to changes in Argeo TP.
[lgpl/argeo-commons.git] / rcp / org.argeo.cms.ui.rcp / src / org / argeo / cms / ui / rcp / CmsRcpDisplayFactory.java
1 package org.argeo.cms.ui.rcp;
2
3 import java.nio.file.Path;
4
5 import org.argeo.api.cms.CmsApp;
6 import org.argeo.util.OS;
7 import org.eclipse.swt.widgets.Display;
8 import org.osgi.service.event.EventAdmin;
9
10 /** Creates the SWT {@link Display} in a dedicated thread. */
11 public class CmsRcpDisplayFactory {
12 /** File name in a run directory */
13 private final static String ARGEO_RCP_URL = "argeo.rcp.url";
14
15 /** There is only one display in RCP mode */
16 private static Display display;
17
18 private CmsUiThread uiThread;
19
20 private boolean shutdown = false;
21
22 public void init() {
23 uiThread = new CmsUiThread();
24 uiThread.start();
25
26 }
27
28 public void destroy() {
29 shutdown = true;
30 display.wake();
31 try {
32 uiThread.join();
33 } catch (InterruptedException e) {
34 // silent
35 } finally {
36 uiThread = null;
37 }
38 }
39
40 class CmsUiThread extends Thread {
41
42 public CmsUiThread() {
43 super("CMS UI");
44 }
45
46 @Override
47 public void run() {
48 display = Display.getDefault();
49
50 // for (String contextName : cmsApps.keySet()) {
51 // openCmsApp(contextName);
52 // }
53
54 while (!shutdown) {
55 if (!display.readAndDispatch())
56 display.sleep();
57 }
58 display.dispose();
59 display = null;
60 }
61 }
62
63 public static Display getDisplay() {
64 return display;
65 }
66
67 public static void openCmsApp(EventAdmin eventAdmin, CmsApp cmsApp, String uiName) {
68 CmsRcpDisplayFactory.getDisplay().syncExec(() -> {
69 CmsRcpApp cmsRcpApp = new CmsRcpApp(uiName);
70 cmsRcpApp.setEventAdmin(eventAdmin);
71 cmsRcpApp.setCmsApp(cmsApp, null);
72 cmsRcpApp.initRcpApp();
73 });
74 }
75
76 public static Path getUrlRunFile() {
77 return OS.getRunDir().resolve(CmsRcpDisplayFactory.ARGEO_RCP_URL);
78 }
79 }