]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/dbus/TestApplication.java
Introduce DBus support
[lgpl/argeo-commons.git] / swt / rcp / org.argeo.cms.swt.rcp / src / org / argeo / cms / ui / rcp / dbus / TestApplication.java
diff --git a/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/dbus/TestApplication.java b/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/dbus/TestApplication.java
new file mode 100644 (file)
index 0000000..8f2da98
--- /dev/null
@@ -0,0 +1,96 @@
+package org.argeo.cms.ui.rcp.dbus;
+
+import java.util.List;
+import java.util.Map;
+
+import org.argeo.cms.swt.CmsSwtUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.argeo.cms.freedesktop.FreeDesktopApplication;
+import org.freedesktop.dbus.connections.impl.DBusConnection;
+import org.freedesktop.dbus.connections.impl.DBusConnectionBuilder;
+import org.freedesktop.dbus.exceptions.DBusException;
+import org.freedesktop.dbus.types.Variant;
+
+public class TestApplication implements FreeDesktopApplication {
+       private DBusConnection dBusConnection;
+
+       private final Display display;
+
+       private Shell shell = null;
+
+       private Text text;
+
+       public TestApplication() throws DBusException {
+               display = Display.getCurrent();
+
+               /* Get a connection to the session bus so we can request a bus name */
+               dBusConnection = DBusConnectionBuilder.forSessionBus().build();
+//             m_conn = DBusConnectionBuilder.forAddress("unix:path=/tmp/dbus-80908265778467677465").build();
+//             m_conn = DBusConnectionBuilder.forAddress("tcp:host=localhost,port=55556").build();
+               /* Request a unique bus name */
+               dBusConnection.requestBusName("org.argeo.TestApplication");
+               /* Export this object onto the bus using the path '/' */
+               dBusConnection.exportObject(getObjectPath(), this);
+       }
+
+       @Override
+       public String getObjectPath() {
+               return "/org/argeo/TestApplication";
+       }
+
+       @Override
+       public void activate(Map<String, Variant<?>> platformData) {
+               display.syncExec(() -> {
+                       shellVisible();
+               });
+
+       }
+
+       protected void shellVisible() {
+               if (shell == null || shell.isDisposed()) {
+                       shell = new Shell(display);
+                       shell.setLayout(new GridLayout());
+                       text = new Text(shell, SWT.MULTI | SWT.WRAP);
+                       text.setLayoutData(CmsSwtUtils.fillAll());
+                       text.setText("New shell\n");
+                       shell.open();
+               } else {
+               }
+               shell.forceActive();
+       }
+
+       @Override
+       public void open(List<String> uris, Map<String, Variant<?>> platformData) {
+               display.syncExec(() -> {
+                       shellVisible();
+                       for (String uri : uris) {
+                               text.append(uri);
+                               text.append("\n");
+                       }
+                       shell.forceActive();
+               });
+       }
+
+       @Override
+       public void activateAction(String actionName, List<Variant<?>> parameter, Map<String, Variant<?>> platformData) {
+               display.syncExec(() -> {
+                       shellVisible();
+                       text.append("Execute action '" + actionName + "' with arguments " + parameter);
+                       text.append("\n");
+               });
+       }
+
+       public static void main(String[] args) throws DBusException {
+               Display display = new Display();
+               new TestApplication();
+               while (!display.isDisposed()) {
+                       if (!display.readAndDispatch())
+                               display.sleep();
+               }
+               display.dispose();
+       }
+}