Separate RCP and RAP application/entry point
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 16 Mar 2011 20:25:44 +0000 (20:25 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 16 Mar 2011 20:25:44 +0000 (20:25 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@4299 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

13 files changed:
security/demo/argeo-node-web.properties [new file with mode: 0644]
security/plugins/org.argeo.security.ui.rap/META-INF/jaas_default.txt [new file with mode: 0644]
security/plugins/org.argeo.security.ui.rap/plugin.xml [new file with mode: 0644]
security/plugins/org.argeo.security.ui.rap/pom.xml
security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/RapSecureWorkbenchWindowAdvisor.java [new file with mode: 0644]
security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureActionBarAdvisor.java [new file with mode: 0644]
security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureEntryPoint.java [new file with mode: 0644]
security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureRapActivator.java [new file with mode: 0644]
security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureWorkbenchAdvisor.java [new file with mode: 0644]
security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureWorkbenchWindowAdvisor.java [new file with mode: 0644]
security/plugins/org.argeo.security.ui.rcp/plugin.xml
security/plugins/org.argeo.security.ui.rcp/src/main/java/org/argeo/security/ui/rcp/RapSecureWorkbenchWindowAdvisor.java [deleted file]
security/plugins/org.argeo.security.ui.rcp/src/main/java/org/argeo/security/ui/rcp/SecureRap.java [deleted file]

diff --git a/security/demo/argeo-node-web.properties b/security/demo/argeo-node-web.properties
new file mode 100644 (file)
index 0000000..5009da7
--- /dev/null
@@ -0,0 +1,21 @@
+argeo.osgi.start=\
+org.springframework.osgi.extender,\
+org.argeo.server.ads.server,\
+org.argeo.node.repo.jackrabbit,\
+org.argeo.security.manager.ldap,\
+org.argeo.security.services,\
+com.springsource.javax.servlet,\
+org.argeo.security.equinox,\
+org.eclipse.core.runtime,\
+org.eclipse.equinox.common,\
+org.eclipse.equinox.launcher,\
+org.springframework.osgi.web.extender,\
+org.argeo.dep.osgi.catalina.start,\
+org.argeo.jackrabbit.webapp,\
+org.eclipse.equinox.http.registry,\
+org.argeo.server.osgi.webapp,\
+org.argeo.jcr.ui.explorer,\
+
+org.argeo.security.ui.initialPerspective=org.argeo.jcr.ui.explorer.perspective
+
+log4j.configuration=file:../../log4j.properties
diff --git a/security/plugins/org.argeo.security.ui.rap/META-INF/jaas_default.txt b/security/plugins/org.argeo.security.ui.rap/META-INF/jaas_default.txt
new file mode 100644 (file)
index 0000000..b6cbaa6
--- /dev/null
@@ -0,0 +1,14 @@
+UNIX {
+    org.eclipse.equinox.security.auth.module.ExtensionLoginModule sufficient
+        extensionId="org.argeo.security.equinox.unixLoginModule";
+};
+
+SPRING {
+    org.eclipse.equinox.security.auth.module.ExtensionLoginModule sufficient
+        extensionId="org.argeo.security.equinox.springLoginModule";
+};
+
+SPRING_SECURITY_CONTEXT {
+    org.eclipse.equinox.security.auth.module.ExtensionLoginModule sufficient
+        extensionId="org.argeo.security.equinox.springSecurityContextLoginModule";
+};
\ No newline at end of file
diff --git a/security/plugins/org.argeo.security.ui.rap/plugin.xml b/security/plugins/org.argeo.security.ui.rap/plugin.xml
new file mode 100644 (file)
index 0000000..844dc26
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.rap.ui.entrypoint">
+      <entrypoint
+            class="org.argeo.security.ui.rap.SecureEntryPoint"
+            id="org.argeo.security.ui.rap.secureEntryPoint"
+            parameter="secureWebUi">
+      </entrypoint>
+   </extension>
+
+</plugin>
index 4b44d7050e75be3ef2d7450792d9f361bcd330d4..257ef09c3dc340ba0506808c8d3de261ebc96755 100644 (file)
@@ -30,7 +30,7 @@
                                <version>${version.maven-bundle-plugin}</version>
                                <configuration>
                                        <instructions>
-                                               <!-- <Bundle-Activator>org.argeo.security.ui.rcp.SecureApplicationActivator</Bundle-Activator> -->
+                                               <Bundle-Activator>org.argeo.security.ui.rap.SecureRapActivator</Bundle-Activator>
                                                <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
                                                <Require-Bundle>org.eclipse.rap.ui,org.eclipse.core.runtime</Require-Bundle>
                                                <Import-Package>*</Import-Package>
diff --git a/security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/RapSecureWorkbenchWindowAdvisor.java b/security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/RapSecureWorkbenchWindowAdvisor.java
new file mode 100644 (file)
index 0000000..805dcf1
--- /dev/null
@@ -0,0 +1,37 @@
+package org.argeo.security.ui.rap;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+
+public class RapSecureWorkbenchWindowAdvisor extends
+               SecureWorkbenchWindowAdvisor {
+       public RapSecureWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+               super(configurer);
+       }
+
+       @Override
+       public ActionBarAdvisor createActionBarAdvisor(
+                       IActionBarConfigurer configurer) {
+               return new SecureActionBarAdvisor(configurer, false);
+       }
+
+       public void preWindowOpen() {
+               IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
+               configurer.setShowCoolBar(true);
+               configurer.setShowMenuBar(true);
+               configurer.setShowStatusLine(false);
+               configurer.setShowPerspectiveBar(true);
+               configurer.setTitle("Argeo Secure UI"); //$NON-NLS-1$
+               // Full screen, see
+               // http://dev.eclipse.org/newslists/news.eclipse.technology.rap/msg02697.html
+               configurer.setShellStyle(SWT.NONE);
+               Rectangle bounds = Display.getDefault().getBounds();
+               configurer.setInitialSize(new Point(bounds.width, bounds.height));
+       }
+
+}
diff --git a/security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureActionBarAdvisor.java b/security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureActionBarAdvisor.java
new file mode 100644 (file)
index 0000000..98a9c64
--- /dev/null
@@ -0,0 +1,94 @@
+package org.argeo.security.ui.rap;
+
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.ICoolBarManager;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+
+public class SecureActionBarAdvisor extends ActionBarAdvisor {
+       private IWorkbenchAction exitAction;
+       private IWorkbenchAction openPerspectiveDialogAction;
+       private IWorkbenchAction showViewMenuAction;
+       private IWorkbenchAction preferences;
+       private IWorkbenchAction saveAction;
+       private IWorkbenchAction saveAllAction;
+       private IWorkbenchAction closeAllAction;
+
+       // private final Boolean isRcp;
+
+       public SecureActionBarAdvisor(IActionBarConfigurer configurer, Boolean isRcp) {
+               super(configurer);
+               // this.isRcp = isRcp;
+       }
+
+       protected void makeActions(IWorkbenchWindow window) {
+               preferences = ActionFactory.PREFERENCES.create(window);
+               register(preferences);
+               openPerspectiveDialogAction = ActionFactory.OPEN_PERSPECTIVE_DIALOG
+                               .create(window);
+               register(openPerspectiveDialogAction);
+               showViewMenuAction = ActionFactory.SHOW_VIEW_MENU.create(window);
+               register(showViewMenuAction);
+
+               exitAction = ActionFactory.QUIT.create(window);
+               register(exitAction);
+
+               // Save semantiocs
+               saveAction = ActionFactory.SAVE.create(window);
+               register(saveAction);
+               saveAllAction = ActionFactory.SAVE_ALL.create(window);
+               register(saveAllAction);
+               closeAllAction = ActionFactory.CLOSE_ALL.create(window);
+               register(closeAllAction);
+
+       }
+
+       protected void fillMenuBar(IMenuManager menuBar) {
+               MenuManager fileMenu = new MenuManager("&File",
+                               IWorkbenchActionConstants.M_FILE);
+               MenuManager editMenu = new MenuManager("&Edit",
+                               IWorkbenchActionConstants.M_EDIT);
+               MenuManager windowMenu = new MenuManager("&Window",
+                               IWorkbenchActionConstants.M_WINDOW);
+
+               menuBar.add(fileMenu);
+               menuBar.add(editMenu);
+               menuBar.add(windowMenu);
+               // Add a group marker indicating where action set menus will appear.
+               menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+
+               // File
+               fileMenu.add(saveAction);
+               fileMenu.add(saveAllAction);
+               fileMenu.add(closeAllAction);
+               fileMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+               fileMenu.add(new Separator());
+               fileMenu.add(exitAction);
+
+               // Edit
+               editMenu.add(preferences);
+
+               // Window
+               windowMenu.add(openPerspectiveDialogAction);
+               windowMenu.add(showViewMenuAction);
+       }
+
+       @Override
+       protected void fillCoolBar(ICoolBarManager coolBar) {
+               IToolBarManager saveToolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
+               saveToolbar.add(saveAction);
+               saveToolbar.add(saveAllAction);
+               coolBar.add(saveToolbar);
+       }
+
+}
diff --git a/security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureEntryPoint.java b/security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureEntryPoint.java
new file mode 100644 (file)
index 0000000..d7dc18c
--- /dev/null
@@ -0,0 +1,102 @@
+package org.argeo.security.ui.rap;
+
+import java.security.PrivilegedAction;
+
+import javax.security.auth.Subject;
+import javax.security.auth.login.LoginException;
+
+import org.argeo.eclipse.ui.dialogs.Error;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.rwt.lifecycle.IEntryPoint;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchAdvisor;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+
+public class SecureEntryPoint implements IEntryPoint {
+
+       @Override
+       public int createUI() {
+               Integer returnCode = null;
+               Display display = PlatformUI.createDisplay();
+               try {
+                       Subject subject = null;
+                       Boolean retry = true;
+                       while (retry) {
+                               try {
+                                       SecureRapActivator.getLoginContext().login();
+                                       subject = SecureRapActivator.getLoginContext()
+                                                       .getSubject();
+                                       retry = false;
+                               } catch (LoginException e) {
+                                       Error.show("Cannot login", e);
+                                       retry = true;
+                               } catch (Exception e) {
+                                       Error.show("Unexpected exception while trying to login", e);
+                                       retry = false;
+                               }
+                       }
+
+                       if (subject == null) {
+                               // IStatus status = new Status(IStatus.ERROR,
+                               // "org.argeo.security.application", "Login is mandatory",
+                               // loginException);
+                               // ErrorDialog.openError(null, "Error", "Shutdown...", status);
+                               // return status.getSeverity();
+
+                               // TODO: log as anonymous
+                       }
+
+                       if (subject != null) {
+                               returnCode = (Integer) Subject.doAs(subject,
+                                               getRunAction(display));
+                               SecureRapActivator.getLoginContext().logout();
+                               return processReturnCode(returnCode);
+                       } else {
+                               return -1;
+                       }
+               } catch (Exception e) {
+                       // e.printStackTrace();
+                       IStatus status = new Status(IStatus.ERROR,
+                                       "org.argeo.security.rcp", "Login failed", e);
+                       ErrorDialog.openError(null, "Error", "Shutdown...", status);
+                       return returnCode;
+               } finally {
+                       display.dispose();
+               }
+       }
+
+       @SuppressWarnings("rawtypes")
+       private PrivilegedAction getRunAction(final Display display) {
+               return new PrivilegedAction() {
+
+                       public Object run() {
+                               int result = createAndRunWorkbench(display);
+                               return new Integer(result);
+                       }
+               };
+       }
+
+       protected Integer createAndRunWorkbench(Display display) {
+               return PlatformUI.createAndRunWorkbench(display,
+                               createWorkbenchAdvisor());
+       }
+
+       protected Integer processReturnCode(Integer returnCode) {
+               return returnCode;
+       }
+
+       protected WorkbenchAdvisor createWorkbenchAdvisor() {
+               return new SecureWorkbenchAdvisor() {
+                       public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
+                                       IWorkbenchWindowConfigurer configurer) {
+                               return new RapSecureWorkbenchWindowAdvisor(configurer);
+                       }
+
+               };
+       }
+
+}
diff --git a/security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureRapActivator.java b/security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureRapActivator.java
new file mode 100644 (file)
index 0000000..d5d46fe
--- /dev/null
@@ -0,0 +1,33 @@
+package org.argeo.security.ui.rap;
+
+import java.net.URL;
+
+import org.argeo.ArgeoException;
+import org.eclipse.equinox.security.auth.ILoginContext;
+import org.eclipse.equinox.security.auth.LoginContextFactory;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class SecureRapActivator implements BundleActivator {
+
+       public final static String CONTEXT_SPRING = "SPRING";
+       private static final String JAAS_CONFIG_FILE = "/META-INF/jaas_default.txt";
+
+       private static ILoginContext loginContext = null;
+
+       public void start(BundleContext bundleContext) throws Exception {
+               URL configUrl = bundleContext.getBundle().getEntry(JAAS_CONFIG_FILE);
+               loginContext = LoginContextFactory.createContext(CONTEXT_SPRING,
+                               configUrl);
+       }
+
+       public void stop(BundleContext context) throws Exception {
+       }
+
+       static ILoginContext getLoginContext() {
+               if (loginContext == null)
+                       throw new ArgeoException(
+                                       "No Equinox login context available, check your configuration");
+               return loginContext;
+       }
+}
diff --git a/security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureWorkbenchAdvisor.java b/security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureWorkbenchAdvisor.java
new file mode 100644 (file)
index 0000000..072d7de
--- /dev/null
@@ -0,0 +1,23 @@
+package org.argeo.security.ui.rap;
+
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchAdvisor;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+
+public class SecureWorkbenchAdvisor extends WorkbenchAdvisor {
+
+       static final String DEFAULT_PERSPECTIVE_ID = "org.argeo.security.ui.adminSecurityPerspective"; //$NON-NLS-1$
+
+       public final static String INITIAL_PERSPECTIVE_PROPERTY = "org.argeo.security.ui.initialPerspective";
+       private String initialPerspective = System.getProperty(
+                       INITIAL_PERSPECTIVE_PROPERTY, DEFAULT_PERSPECTIVE_ID);
+
+       public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
+                       IWorkbenchWindowConfigurer configurer) {
+               return new SecureWorkbenchWindowAdvisor(configurer);
+       }
+
+       public String getInitialWindowPerspectiveId() {
+               return initialPerspective;
+       }
+}
diff --git a/security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureWorkbenchWindowAdvisor.java b/security/plugins/org.argeo.security.ui.rap/src/main/java/org/argeo/security/ui/rap/SecureWorkbenchWindowAdvisor.java
new file mode 100644 (file)
index 0000000..f4c07a8
--- /dev/null
@@ -0,0 +1,32 @@
+package org.argeo.security.ui.rap;
+
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+
+public class SecureWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
+
+       public SecureWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+               super(configurer);
+       }
+
+       public ActionBarAdvisor createActionBarAdvisor(
+                       IActionBarConfigurer configurer) {
+               return new SecureActionBarAdvisor(configurer, true);
+       }
+
+       public void preWindowOpen() {
+               IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
+               configurer.setInitialSize(new Point(1200, 900));
+               configurer.setShowCoolBar(true);
+               configurer.setShowMenuBar(true);
+               configurer.setShowStatusLine(false);
+
+               configurer.setShowPerspectiveBar(true);
+               configurer.setTitle("Argeo Secure UI"); //$NON-NLS-1$
+
+       }
+
+}
index ce85359e0682d749242b7caf04c7d11fb69d92f8..39b8c848ccb02c2dd701814c621e9536af44b8b0 100644 (file)
                name="preferenceCustomization"
                value="plugin_customization.ini"/>
       </product>
-   </extension>
-
-       <extension
-         id="org.argeo.security.webui.product"
-         point="org.eclipse.core.runtime.products">
-      <product
-            name="ArgeoProduct" application="org.argeo.security.ui.application.secureWebUi">
-          <property
-               name="appName"
-               value="Secure Web UI">
-         </property>
-            <property
-               name="preferenceCustomization"
-               value="plugin_customization.ini"/>
-      </product>
-   </extension>
-  
+   </extension>  
 
    <extension
          id="secureUi"
          </run>
       </application>
    </extension>
-   <extension
-         id="secureWebUi"
-         name="Argeo Secure Web UI"
-         point="org.eclipse.core.runtime.applications">
-      <application cardinality="singleton-global"
-         thread="main"
-         visible="true">
-         <run
-               class="org.argeo.security.ui.rcp.SecureRap">
-         </run>
-      </application>
-   </extension>
-   <extension
-         id="secureWebUi2"
-         name="Argeo Secure Web UI"
-         point="org.eclipse.core.runtime.applications">
-      <application cardinality="singleton-global"
-         thread="main"
-         visible="true">
-         <run
-               class="org.argeo.security.ui.rcp.SecureRap">
-         </run>
-      </application>
-   </extension>
-
 </plugin>
diff --git a/security/plugins/org.argeo.security.ui.rcp/src/main/java/org/argeo/security/ui/rcp/RapSecureWorkbenchWindowAdvisor.java b/security/plugins/org.argeo.security.ui.rcp/src/main/java/org/argeo/security/ui/rcp/RapSecureWorkbenchWindowAdvisor.java
deleted file mode 100644 (file)
index 252972c..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.argeo.security.ui.rcp;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.application.ActionBarAdvisor;
-import org.eclipse.ui.application.IActionBarConfigurer;
-import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
-
-public class RapSecureWorkbenchWindowAdvisor extends
-               SecureWorkbenchWindowAdvisor {
-       public RapSecureWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
-               super(configurer);
-       }
-
-       @Override
-       public ActionBarAdvisor createActionBarAdvisor(
-                       IActionBarConfigurer configurer) {
-               return new SecureActionBarAdvisor(configurer, false);
-       }
-
-       public void preWindowOpen() {
-               IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
-               configurer.setShowCoolBar(true);
-               configurer.setShowMenuBar(true);
-               configurer.setShowStatusLine(false);
-               configurer.setShowPerspectiveBar(true);
-               configurer.setTitle("Argeo Secure UI"); //$NON-NLS-1$
-               // Full screen, see
-               // http://dev.eclipse.org/newslists/news.eclipse.technology.rap/msg02697.html
-               configurer.setShellStyle(SWT.NONE);
-               Rectangle bounds = Display.getDefault().getBounds();
-               configurer.setInitialSize(new Point(bounds.width, bounds.height));
-       }
-
-}
diff --git a/security/plugins/org.argeo.security.ui.rcp/src/main/java/org/argeo/security/ui/rcp/SecureRap.java b/security/plugins/org.argeo.security.ui.rcp/src/main/java/org/argeo/security/ui/rcp/SecureRap.java
deleted file mode 100644 (file)
index 964de7c..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.argeo.security.ui.rcp;
-
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
-import org.eclipse.ui.application.WorkbenchAdvisor;
-import org.eclipse.ui.application.WorkbenchWindowAdvisor;
-
-/** Generic secure application for RAP. */
-public class SecureRap extends AbstractSecureApplication {
-
-       @Override
-       protected WorkbenchAdvisor createWorkbenchAdvisor() {
-               return new SecureWorkbenchAdvisor() {
-                       public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
-                                       IWorkbenchWindowConfigurer configurer) {
-                               return new RapSecureWorkbenchWindowAdvisor(configurer);
-                       }
-
-               };
-       }
-
-       public void stop() {
-               final IWorkbench workbench = PlatformUI.getWorkbench();
-               if (workbench == null)
-                       return;
-               final Display display = workbench.getDisplay();
-               display.syncExec(new Runnable() {
-
-                       public void run() {
-                               if (!display.isDisposed())
-                                       workbench.close();
-                       }
-               });
-       }
-
-}