package org.argeo.cms.ui.rcp.dbus; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; import org.argeo.api.cms.CmsApp; import org.argeo.cms.dbus.CmsDBus; public class CmsRcpDBusLauncher { private CompletableFuture cmsDBus = new CompletableFuture<>(); private Map apps = new HashMap<>(); public void start() { } public void stop() { } public void addCmsApp(CmsApp cmsApp, Map properties) { final String contextName = properties.get(CmsApp.CONTEXT_NAME_PROPERTY); cmsDBus.thenAcceptAsync((cmsDBus) -> { CmsRcpFreeDesktopApplication application = new CmsRcpFreeDesktopApplication(cmsDBus, contextName, cmsApp); apps.put(contextName, application); }); } public void removeCmsApp(CmsApp cmsApp, Map properties) { final String contextName = properties.get(CmsApp.CONTEXT_NAME_PROPERTY); CmsRcpFreeDesktopApplication application = apps.remove(contextName); if (application != null) { try { application.close(); } catch (IOException e) { throw new IllegalStateException("Cannot remove CMS RCP app " + contextName, e); } } } public void setCmsDBus(CmsDBus cmsDBus) { this.cmsDBus.complete(cmsDBus); } }