Improve Eclipse 4 support
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 16 Mar 2018 16:44:39 +0000 (17:44 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 16 Mar 2018 16:44:39 +0000 (17:44 +0100)
24 files changed:
demo/cms-e4-rap.properties
dep/org.argeo.dep.cms.rap.e4/pom.xml
org.argeo.cms.e4.rap/.classpath [new file with mode: 0644]
org.argeo.cms.e4.rap/.gitignore [new file with mode: 0644]
org.argeo.cms.e4.rap/.project [new file with mode: 0644]
org.argeo.cms.e4.rap/META-INF/.gitignore [new file with mode: 0644]
org.argeo.cms.e4.rap/OSGI-INF/cms-admin-rap.xml [new file with mode: 0644]
org.argeo.cms.e4.rap/bnd.bnd [new file with mode: 0644]
org.argeo.cms.e4.rap/build.properties [new file with mode: 0644]
org.argeo.cms.e4.rap/cms-admin.e4xmi [new file with mode: 0644]
org.argeo.cms.e4.rap/pom.xml [new file with mode: 0644]
org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java [new file with mode: 0644]
org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java [new file with mode: 0644]
org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/TestTool.java [new file with mode: 0644]
org.argeo.cms.e4/OSGI-INF/cms-admin-rap.xml [deleted file]
org.argeo.cms.e4/bnd.bnd
org.argeo.cms.e4/cms-admin.e4xmi [deleted file]
org.argeo.cms.e4/pom.xml
org.argeo.cms.e4/src/org/argeo/cms/e4/jcr/JcrBrowserView.java
org.argeo.cms.e4/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java [deleted file]
org.argeo.cms.e4/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java [deleted file]
org.argeo.cms.e4/src/org/argeo/cms/e4/rap/LoginLifcecycle.java [deleted file]
org.argeo.cms.ui/src/org/argeo/cms/ui/jcr/OsgiRepositoryRegister.java
pom.xml

index 68db6f94bd154c347bf8edc7bb62f0a051f61b06..0e01b5dcf049abd167a28a508fe9fc24f8e24251 100644 (file)
@@ -9,7 +9,7 @@ argeo.osgi.start.3.node=\
 org.argeo.cms
 
 argeo.osgi.start.5.node=\
-org.argeo.cms.e4
+org.argeo.cms.e4.rap
 
 # Local
 argeo.node.repo.type=h2
index e826e1b1295835e6f965be0f0d0ad11215690b7a..b5c44ed4d768aa3f818ba2eceef51ef9e1722e0c 100644 (file)
                        <groupId>org.argeo.commons</groupId>
                        <artifactId>org.argeo.dep.cms.node</artifactId>
                        <version>2.1.73-SNAPSHOT</version>
-                       <type>pom</type>
                </dependency>
-               <!-- <dependency> -->
-               <!-- <groupId>org.argeo.commons</groupId> -->
-               <!-- <artifactId>org.argeo.cms.ui.workbench</artifactId> -->
-               <!-- <version>2.1.71-SNAPSHOT</version> -->
-               <!-- </dependency> -->
-               <!-- <dependency> -->
-               <!-- <groupId>org.argeo.commons</groupId> -->
-               <!-- <artifactId>org.argeo.cms.ui.workbench.rap</artifactId> -->
-               <!-- <version>2.1.71-SNAPSHOT</version> -->
-               <!-- </dependency> -->
-               <!-- <dependency> -->
-               <!-- <groupId>org.argeo.commons</groupId> -->
-               <!-- <artifactId>org.argeo.ext.rap.ui.workbench</artifactId> -->
-               <!-- <version>2.1.71-SNAPSHOT</version> -->
-               <!-- </dependency> -->
+               <dependency>
+                       <groupId>org.argeo.commons</groupId>
+                       <artifactId>org.argeo.cms.e4</artifactId>
+                       <version>2.1.73-SNAPSHOT</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.argeo.commons</groupId>
+                       <artifactId>org.argeo.cms.e4.rap</artifactId>
+                       <version>2.1.73-SNAPSHOT</version>
+               </dependency>
 
                <!-- Misc Third Parties -->
                <dependency>
diff --git a/org.argeo.cms.e4.rap/.classpath b/org.argeo.cms.e4.rap/.classpath
new file mode 100644 (file)
index 0000000..eca7bdb
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.argeo.cms.e4.rap/.gitignore b/org.argeo.cms.e4.rap/.gitignore
new file mode 100644 (file)
index 0000000..09e3bc9
--- /dev/null
@@ -0,0 +1,2 @@
+/bin/
+/target/
diff --git a/org.argeo.cms.e4.rap/.project b/org.argeo.cms.e4.rap/.project
new file mode 100644 (file)
index 0000000..94d2f42
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.argeo.cms.e4.rap</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+       </natures>
+</projectDescription>
diff --git a/org.argeo.cms.e4.rap/META-INF/.gitignore b/org.argeo.cms.e4.rap/META-INF/.gitignore
new file mode 100644 (file)
index 0000000..4854a41
--- /dev/null
@@ -0,0 +1 @@
+/MANIFEST.MF
diff --git a/org.argeo.cms.e4.rap/OSGI-INF/cms-admin-rap.xml b/org.argeo.cms.e4.rap/OSGI-INF/cms-admin-rap.xml
new file mode 100644 (file)
index 0000000..e54d613
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" configuration-policy="optional" name="CMS Admin RAP">
+   <implementation class="org.argeo.cms.e4.rap.CmsE4AdminApp"/>
+   <service>
+      <provide interface="org.eclipse.rap.rwt.application.ApplicationConfiguration"/>
+      <property name="contextName" type="String" value="ui"/>
+   </service>
+</scr:component>
diff --git a/org.argeo.cms.e4.rap/bnd.bnd b/org.argeo.cms.e4.rap/bnd.bnd
new file mode 100644 (file)
index 0000000..1dc383b
--- /dev/null
@@ -0,0 +1,7 @@
+Bundle-ActivationPolicy: lazy
+Service-Component: OSGI-INF/cms-admin-rap.xml
+
+Import-Package: org.argeo.node,\
+org.eclipse.swt,\
+org.eclipse.rap.rwt.client,\
+*
diff --git a/org.argeo.cms.e4.rap/build.properties b/org.argeo.cms.e4.rap/build.properties
new file mode 100644 (file)
index 0000000..c58ea21
--- /dev/null
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               OSGI-INF/
diff --git a/org.argeo.cms.e4.rap/cms-admin.e4xmi b/org.argeo.cms.e4.rap/cms-admin.e4xmi
new file mode 100644 (file)
index 0000000..58e6d68
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ASCII"?>
+<application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:advanced="http://www.eclipse.org/ui/2010/UIModel/application/ui/advanced" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_XqkCQKknEeObFrG_clJBYA" elementId="">
+  <children xsi:type="basic:TrimmedWindow" xmi:id="_Zdy6cKknEeObFrG_clJBYA" elementId="org.argeo.cms.e4.apps.admin.trimmedwindow.0" label="" x="10" y="10" width="500" height="500">
+    <persistedState key="styleOverride" value="8"/>
+    <tags>shellMaximized</tags>
+    <children xsi:type="advanced:PerspectiveStack" xmi:id="_jXVqsCk4Eein5vuhpK-Dew" elementId="org.argeo.cms.e4.rap.perspectivestack.0">
+      <children xsi:type="advanced:Perspective" xmi:id="_jvjWYCk4Eein5vuhpK-Dew" elementId="org.argeo.cms.e4.rap.perspective.0">
+        <children xsi:type="basic:PartSashContainer" xmi:id="_h3tvMCkxEein5vuhpK-Dew" elementId="org.argeo.cms.e4.rap.partsashcontainer.0" selectedElement="_0B9SECkxEein5vuhpK-Dew" horizontal="true">
+          <children xsi:type="basic:PartStack" xmi:id="_0B9SECkxEein5vuhpK-Dew" elementId="org.argeo.cms.e4.rap.partstack.0" containerData="4000" selectedElement="_WAjPkCkTEein5vuhpK-Dew">
+            <children xsi:type="basic:Part" xmi:id="_WAjPkCkTEein5vuhpK-Dew" elementId="org.argeo.cms.e4.jcrbrowser" containerData="" contributionURI="bundleclass://org.argeo.cms.e4/org.argeo.cms.e4.jcr.JcrBrowserView" label="JCR Browser"/>
+          </children>
+          <children xsi:type="basic:PartStack" xmi:id="_mHrEUCk4Eein5vuhpK-Dew" elementId="org.argeo.cms.e4.rap.partstack.1" containerData="6000"/>
+        </children>
+      </children>
+    </children>
+    <trimBars xmi:id="_euVxMCk2Eein5vuhpK-Dew" elementId="org.argeo.cms.e4.rap.trimbar.0" side="Left">
+      <children xsi:type="menu:ToolBar" xmi:id="_fotHsCk2Eein5vuhpK-Dew" elementId="org.argeo.cms.e4.rap.toolbar.0">
+        <children xsi:type="menu:HandledToolItem" xmi:id="_jfUM4Ck2Eein5vuhpK-Dew" elementId="org.argeo.cms.e4.rap.handledtoolitem.test" label="Test"/>
+        <children xsi:type="menu:DirectToolItem" xmi:id="_45TpQCk2Eein5vuhpK-Dew" elementId="org.argeo.cms.e4.rap.directtoolitem.0"/>
+        <children xsi:type="menu:ToolBarSeparator" xmi:id="_6W3MYCk2Eein5vuhpK-Dew" elementId="org.argeo.cms.e4.rap.toolbarseparator.0"/>
+        <children xsi:type="menu:ToolControl" xmi:id="_6r8rkCk2Eein5vuhpK-Dew" elementId="org.argeo.cms.e4.rap.toolcontrol.0" contributionURI="bundleclass://org.argeo.cms.e4.rap/org.argeo.cms.e4.rap.TestTool"/>
+      </children>
+    </trimBars>
+  </children>
+  <addons xmi:id="_XqkCQaknEeObFrG_clJBYA" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
+  <addons xmi:id="_XqkCQqknEeObFrG_clJBYA" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>
+  <addons xmi:id="_XqkCQ6knEeObFrG_clJBYA" elementId="org.eclipse.e4.ui.bindings.service" contributionURI="bundleclass://org.eclipse.e4.ui.bindings/org.eclipse.e4.ui.bindings.BindingServiceAddon"/>
+  <addons xmi:id="_XqkCRKknEeObFrG_clJBYA" elementId="org.eclipse.e4.ui.workbench.commands.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon"/>
+  <addons xmi:id="_XqkCRaknEeObFrG_clJBYA" elementId="org.eclipse.e4.ui.workbench.contexts.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon"/>
+  <addons xmi:id="_XqkCRqknEeObFrG_clJBYA" elementId="org.eclipse.e4.ui.workbench.bindings.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.swt/org.eclipse.e4.ui.workbench.swt.util.BindingProcessingAddon"/>
+  <addons xmi:id="_XqkCR6knEeObFrG_clJBYA" elementId="org.eclipse.e4.ui.workbench.handler.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon"/>
+</application:Application>
diff --git a/org.argeo.cms.e4.rap/pom.xml b/org.argeo.cms.e4.rap/pom.xml
new file mode 100644 (file)
index 0000000..f08cc00
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.argeo.commons</groupId>
+               <artifactId>argeo-commons</artifactId>
+               <version>2.1.73-SNAPSHOT</version>
+               <relativePath>..</relativePath>
+       </parent>
+       <artifactId>org.argeo.cms.e4.rap</artifactId>
+       <name>CMS E4 RAP</name>
+       <packaging>jar</packaging>
+       <dependencies>
+               <dependency>
+                       <groupId>org.argeo.commons</groupId>
+                       <artifactId>org.argeo.cms.e4</artifactId>
+                       <version>2.1.73-SNAPSHOT</version>
+               </dependency>
+
+               <!-- UI -->
+               <dependency>
+                       <groupId>org.argeo.tp</groupId>
+                       <artifactId>argeo-tp-rap-e4</artifactId>
+                       <version>${version.argeo-tp}</version>
+                       <type>pom</type>
+                       <scope>provided</scope>
+               </dependency>
+       </dependencies>
+</project>
\ No newline at end of file
diff --git a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java
new file mode 100644 (file)
index 0000000..0a3e050
--- /dev/null
@@ -0,0 +1,89 @@
+package org.argeo.cms.e4.rap;
+
+import java.security.PrivilegedAction;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.security.auth.Subject;
+
+import org.eclipse.rap.e4.E4ApplicationConfig;
+import org.eclipse.rap.e4.E4EntryPointFactory;
+import org.eclipse.rap.rwt.application.Application;
+import org.eclipse.rap.rwt.application.Application.OperationMode;
+import org.eclipse.rap.rwt.application.ApplicationConfiguration;
+import org.eclipse.rap.rwt.application.EntryPoint;
+import org.eclipse.rap.rwt.client.WebClient;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+
+public class CmsE4AdminApp implements ApplicationConfiguration {
+       private final BundleContext bc = FrameworkUtil.getBundle(CmsE4AdminApp.class).getBundleContext();
+
+       String pageTitle = "CMS Admin";
+       String e4Xmi = "/cms-admin.e4xmi";
+       String path = "/admin";
+
+       public void configure(Application application) {
+
+               Map<String, String> properties = new HashMap<String, String>();
+               properties.put(WebClient.PAGE_TITLE, pageTitle);
+               Bundle bundle = bc.getBundle();
+               String e4XmiUri = bundle.getSymbolicName() + e4Xmi;
+               E4ApplicationConfig config = new E4ApplicationConfig(e4XmiUri,
+                               "bundleclass://" + bundle.getSymbolicName() + "/" + CmsLoginLifecycle.class.getName(), null, false,
+                               true, true);
+               config.isClearPersistedState();
+               E4EntryPointFactory entryPointFactory = new E4EntryPointFactory(config) {
+
+                       @Override
+                       public EntryPoint create() {
+                               Subject subject = new Subject();
+                               // return Subject.doAs(subject, new PrivilegedAction<EntryPoint>() {
+                               //
+                               // @Override
+                               // public EntryPoint run() {
+                               EntryPoint ep = createEntryPoint();
+                               EntryPoint authEp = new EntryPoint() {
+
+                                       @Override
+                                       public int createUI() {
+                                               return Subject.doAs(subject, new PrivilegedAction<Integer>() {
+
+                                                       @Override
+                                                       public Integer run() {
+                                                               return ep.createUI();
+                                                       }
+
+                                               });
+                                       }
+                               };
+                               // return authEp;
+                               // }
+                               //
+                               // });
+                               return authEp;
+                       }
+
+                       protected EntryPoint createEntryPoint() {
+                               return super.create();
+                       }
+
+               };
+               application.addEntryPoint(path, entryPointFactory, properties);
+               application.setOperationMode(OperationMode.SWT_COMPATIBILITY);
+       }
+
+       public void setPageTitle(String pageTitle) {
+               this.pageTitle = pageTitle;
+       }
+
+       public void setE4Xmi(String e4Xmi) {
+               this.e4Xmi = e4Xmi;
+       }
+
+       public void setPath(String path) {
+               this.path = path;
+       }
+
+}
diff --git a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java
new file mode 100644 (file)
index 0000000..6872906
--- /dev/null
@@ -0,0 +1,108 @@
+package org.argeo.cms.e4.rap;
+
+import java.security.AccessController;
+
+import javax.security.auth.Subject;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
+
+import org.argeo.cms.CmsException;
+import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.ui.CmsImageManager;
+import org.argeo.cms.ui.CmsView;
+import org.argeo.cms.ui.UxContext;
+import org.argeo.cms.util.SimpleUxContext;
+import org.argeo.cms.widgets.auth.CmsLoginShell;
+import org.argeo.node.NodeConstants;
+import org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate;
+import org.eclipse.swt.widgets.Display;
+
+@SuppressWarnings("restriction")
+public class CmsLoginLifecycle implements CmsView {
+       private UxContext uxContext;
+       private LoginContext loginContext;
+
+       @PostContextCreate
+       boolean login(Display d) {
+               Subject subject = Subject.getSubject(AccessController.getContext());
+               Display display = Display.getCurrent();
+               CmsLoginShell loginShell = new CmsLoginShell(this);
+               loginShell.setSubject(subject);
+               try {
+                       // try pre-auth
+                       loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject, loginShell);
+                       loginContext.login();
+               } catch (LoginException e) {
+                       loginShell.createUi();
+                       loginShell.open();
+
+                       while (!loginShell.getShell().isDisposed()) {
+                               if (!display.readAndDispatch())
+                                       display.sleep();
+                       }
+               }
+               if (CurrentUser.getUsername(getSubject()) == null)
+                       return false;
+               uxContext = new SimpleUxContext();
+               return true;
+       }
+
+       @Override
+       public UxContext getUxContext() {
+               return uxContext;
+       }
+
+       @Override
+       public void navigateTo(String state) {
+               // TODO Auto-generated method stub
+
+       }
+
+       @Override
+       public void authChange(LoginContext loginContext) {
+               if (loginContext == null)
+                       throw new CmsException("Login context cannot be null");
+               // logout previous login context
+//             if (this.loginContext != null)
+//                     try {
+//                             this.loginContext.logout();
+//                     } catch (LoginException e1) {
+//                             System.err.println("Could not log out: " + e1);
+//                     }
+               this.loginContext = loginContext;
+       }
+
+       @Override
+       public void logout() {
+               if (loginContext == null)
+                       throw new CmsException("Login context should not bet null");
+               try {
+                       CurrentUser.logoutCmsSession(loginContext.getSubject());
+                       loginContext.logout();
+               } catch (LoginException e) {
+                       throw new CmsException("Cannot log out", e);
+               }
+       }
+
+       @Override
+       public void exception(Throwable e) {
+               // TODO Auto-generated method stub
+
+       }
+
+       @Override
+       public CmsImageManager getImageManager() {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       protected Subject getSubject() {
+               return loginContext.getSubject();
+       }
+
+       @Override
+       public boolean isAnonymous() {
+               return CurrentUser.isAnonymous(getSubject());
+       }
+
+}
diff --git a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/TestTool.java b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/TestTool.java
new file mode 100644 (file)
index 0000000..774af3f
--- /dev/null
@@ -0,0 +1,16 @@
+package org.argeo.cms.e4.rap;
+
+import javax.annotation.PostConstruct;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+
+public class TestTool {
+
+       @PostConstruct
+       public void createGui(Composite parent) {
+               Combo combo = new Combo(parent, SWT.READ_ONLY);
+               combo.add("First");
+               combo.add("Second");
+       }
+}
\ No newline at end of file
diff --git a/org.argeo.cms.e4/OSGI-INF/cms-admin-rap.xml b/org.argeo.cms.e4/OSGI-INF/cms-admin-rap.xml
deleted file mode 100644 (file)
index e54d613..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" configuration-policy="optional" name="CMS Admin RAP">
-   <implementation class="org.argeo.cms.e4.rap.CmsE4AdminApp"/>
-   <service>
-      <provide interface="org.eclipse.rap.rwt.application.ApplicationConfiguration"/>
-      <property name="contextName" type="String" value="ui"/>
-   </service>
-</scr:component>
index 5d1261fe7a4119a3a6879481c1d67764fc1f1fa4..f3c13bec58e54fee4c8561e1cfec87b64e29ad74 100644 (file)
@@ -1,7 +1,2 @@
-Service-Component: OSGI-INF/cms-admin-rap.xml
-
 Import-Package: org.eclipse.swt,\
-org.argeo.node,\
-org.eclipse.rap.*;resolution:=optional,\
-org.eclipse.rap.rwt.client;resolution:=optional,\
 *
diff --git a/org.argeo.cms.e4/cms-admin.e4xmi b/org.argeo.cms.e4/cms-admin.e4xmi
deleted file mode 100644 (file)
index b9c3767..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmi:id="_XqkCQKknEeObFrG_clJBYA" elementId="">
-  <children xsi:type="basic:TrimmedWindow" xmi:id="_Zdy6cKknEeObFrG_clJBYA" elementId="org.argeo.cms.e4.apps.admin.trimmedwindow.0" label="" x="10" y="10" width="500" height="500">
-    <children xsi:type="basic:Part" xmi:id="_WAjPkCkTEein5vuhpK-Dew" elementId="org.argeo.cms.e4.jcrbrowser" contributionURI="bundleclass://org.argeo.cms.e4/org.argeo.cms.e4.jcr.JcrBrowserView" label="JCR Browser"/>
-  </children>
-  <addons xmi:id="_XqkCQaknEeObFrG_clJBYA" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
-  <addons xmi:id="_XqkCQqknEeObFrG_clJBYA" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>
-  <addons xmi:id="_XqkCQ6knEeObFrG_clJBYA" elementId="org.eclipse.e4.ui.bindings.service" contributionURI="bundleclass://org.eclipse.e4.ui.bindings/org.eclipse.e4.ui.bindings.BindingServiceAddon"/>
-  <addons xmi:id="_XqkCRKknEeObFrG_clJBYA" elementId="org.eclipse.e4.ui.workbench.commands.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon"/>
-  <addons xmi:id="_XqkCRaknEeObFrG_clJBYA" elementId="org.eclipse.e4.ui.workbench.contexts.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon"/>
-  <addons xmi:id="_XqkCRqknEeObFrG_clJBYA" elementId="org.eclipse.e4.ui.workbench.bindings.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.swt/org.eclipse.e4.ui.workbench.swt.util.BindingProcessingAddon"/>
-  <addons xmi:id="_XqkCR6knEeObFrG_clJBYA" elementId="org.eclipse.e4.ui.workbench.handler.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon"/>
-</application:Application>
index bf677e09e1c644e0814b3d5107474d9bdcccfca5..dca59441c359796e381af44c1bd00a4cf3f149d1 100644 (file)
                        <artifactId>org.argeo.cms.ui</artifactId>
                        <version>2.1.73-SNAPSHOT</version>
                </dependency>
-               <dependency>
-                       <groupId>org.argeo.commons</groupId>
-                       <artifactId>org.argeo.cms.ui.theme</artifactId>
-                       <version>2.1.73-SNAPSHOT</version>
-               </dependency>
 
                <!-- UI -->
                <dependency>
index 0551e16b8c89db3133ef6e195cd82e1b785b7101..3eff807330d6012564f0ebb7e840a1ef06a16f62 100644 (file)
@@ -62,16 +62,12 @@ import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Menu;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.FrameworkUtil;
 
 /**
  * Basic View to display a sash form to browse a JCR compliant multiple
  * repository environment
  */
 public class JcrBrowserView {
-       private static BundleContext bc = FrameworkUtil.getBundle(JcrBrowserView.class).getBundleContext();
-
        private boolean sortChildNodes = true;
 
        /* DEPENDENCY INJECTION */
@@ -84,7 +80,7 @@ public class JcrBrowserView {
        // Current user session on the "Argeo node" default workspace
        private Session userSession;
 
-       private OsgiRepositoryRegister repositoryRegister = new OsgiRepositoryRegister(bc);
+       private OsgiRepositoryRegister repositoryRegister = new OsgiRepositoryRegister();
 
        // This page widgets
        private TreeViewer nodesViewer;
diff --git a/org.argeo.cms.e4/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java b/org.argeo.cms.e4/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java
deleted file mode 100644 (file)
index 5b2adc0..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.argeo.cms.e4.rap;
-
-import java.security.PrivilegedAction;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.security.auth.Subject;
-
-import org.eclipse.rap.e4.E4ApplicationConfig;
-import org.eclipse.rap.e4.E4EntryPointFactory;
-import org.eclipse.rap.rwt.application.Application;
-import org.eclipse.rap.rwt.application.Application.OperationMode;
-import org.eclipse.rap.rwt.application.ApplicationConfiguration;
-import org.eclipse.rap.rwt.application.EntryPoint;
-import org.eclipse.rap.rwt.client.WebClient;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.FrameworkUtil;
-
-public class CmsE4AdminApp implements ApplicationConfiguration {
-       private final BundleContext bc = FrameworkUtil.getBundle(CmsE4AdminApp.class).getBundleContext();
-
-       String pageTitle = "CMS Admin";
-       String e4Xmi = "/cms-admin.e4xmi";
-       String path = "/admin";
-
-       public void configure(Application application) {
-
-               Map<String, String> properties = new HashMap<String, String>();
-               properties.put(WebClient.PAGE_TITLE, pageTitle);
-               Bundle bundle = bc.getBundle();
-               String e4XmiUri = bundle.getSymbolicName() + e4Xmi;
-               E4ApplicationConfig config = E4ApplicationConfig.create(e4XmiUri,
-                               "bundleclass://" + bundle.getSymbolicName() + "/" + CmsLoginLifecycle.class.getName());
-               E4EntryPointFactory entryPointFactory = new E4EntryPointFactory(config) {
-
-                       @Override
-                       public EntryPoint create() {
-                               Subject subject = new Subject();
-                               // return Subject.doAs(subject, new PrivilegedAction<EntryPoint>() {
-                               //
-                               // @Override
-                               // public EntryPoint run() {
-                               EntryPoint ep = createEntryPoint();
-                               EntryPoint authEp = new EntryPoint() {
-
-                                       @Override
-                                       public int createUI() {
-                                               return Subject.doAs(subject, new PrivilegedAction<Integer>() {
-
-                                                       @Override
-                                                       public Integer run() {
-                                                               return ep.createUI();
-                                                       }
-
-                                               });
-                                       }
-                               };
-                               // return authEp;
-                               // }
-                               //
-                               // });
-                               return authEp;
-                       }
-
-                       protected EntryPoint createEntryPoint() {
-                               return super.create();
-                       }
-
-               };
-               application.addEntryPoint(path, entryPointFactory, properties);
-               application.setOperationMode(OperationMode.SWT_COMPATIBILITY);
-       }
-
-       public void setPageTitle(String pageTitle) {
-               this.pageTitle = pageTitle;
-       }
-
-       public void setE4Xmi(String e4Xmi) {
-               this.e4Xmi = e4Xmi;
-       }
-
-       public void setPath(String path) {
-               this.path = path;
-       }
-
-}
diff --git a/org.argeo.cms.e4/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java b/org.argeo.cms.e4/src/org/argeo/cms/e4/rap/CmsLoginLifecycle.java
deleted file mode 100644 (file)
index 6872906..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.argeo.cms.e4.rap;
-
-import java.security.AccessController;
-
-import javax.security.auth.Subject;
-import javax.security.auth.login.LoginContext;
-import javax.security.auth.login.LoginException;
-
-import org.argeo.cms.CmsException;
-import org.argeo.cms.auth.CurrentUser;
-import org.argeo.cms.ui.CmsImageManager;
-import org.argeo.cms.ui.CmsView;
-import org.argeo.cms.ui.UxContext;
-import org.argeo.cms.util.SimpleUxContext;
-import org.argeo.cms.widgets.auth.CmsLoginShell;
-import org.argeo.node.NodeConstants;
-import org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate;
-import org.eclipse.swt.widgets.Display;
-
-@SuppressWarnings("restriction")
-public class CmsLoginLifecycle implements CmsView {
-       private UxContext uxContext;
-       private LoginContext loginContext;
-
-       @PostContextCreate
-       boolean login(Display d) {
-               Subject subject = Subject.getSubject(AccessController.getContext());
-               Display display = Display.getCurrent();
-               CmsLoginShell loginShell = new CmsLoginShell(this);
-               loginShell.setSubject(subject);
-               try {
-                       // try pre-auth
-                       loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject, loginShell);
-                       loginContext.login();
-               } catch (LoginException e) {
-                       loginShell.createUi();
-                       loginShell.open();
-
-                       while (!loginShell.getShell().isDisposed()) {
-                               if (!display.readAndDispatch())
-                                       display.sleep();
-                       }
-               }
-               if (CurrentUser.getUsername(getSubject()) == null)
-                       return false;
-               uxContext = new SimpleUxContext();
-               return true;
-       }
-
-       @Override
-       public UxContext getUxContext() {
-               return uxContext;
-       }
-
-       @Override
-       public void navigateTo(String state) {
-               // TODO Auto-generated method stub
-
-       }
-
-       @Override
-       public void authChange(LoginContext loginContext) {
-               if (loginContext == null)
-                       throw new CmsException("Login context cannot be null");
-               // logout previous login context
-//             if (this.loginContext != null)
-//                     try {
-//                             this.loginContext.logout();
-//                     } catch (LoginException e1) {
-//                             System.err.println("Could not log out: " + e1);
-//                     }
-               this.loginContext = loginContext;
-       }
-
-       @Override
-       public void logout() {
-               if (loginContext == null)
-                       throw new CmsException("Login context should not bet null");
-               try {
-                       CurrentUser.logoutCmsSession(loginContext.getSubject());
-                       loginContext.logout();
-               } catch (LoginException e) {
-                       throw new CmsException("Cannot log out", e);
-               }
-       }
-
-       @Override
-       public void exception(Throwable e) {
-               // TODO Auto-generated method stub
-
-       }
-
-       @Override
-       public CmsImageManager getImageManager() {
-               // TODO Auto-generated method stub
-               return null;
-       }
-
-       protected Subject getSubject() {
-               return loginContext.getSubject();
-       }
-
-       @Override
-       public boolean isAnonymous() {
-               return CurrentUser.isAnonymous(getSubject());
-       }
-
-}
diff --git a/org.argeo.cms.e4/src/org/argeo/cms/e4/rap/LoginLifcecycle.java b/org.argeo.cms.e4/src/org/argeo/cms/e4/rap/LoginLifcecycle.java
deleted file mode 100644 (file)
index 5c6caaf..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.argeo.cms.e4.rap;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-@SuppressWarnings("restriction")
-public class LoginLifcecycle {
-       @PostContextCreate
-       boolean login(Display d) {
-               final AtomicBoolean rv = new AtomicBoolean(false);
-               final Shell s = new Shell(d);
-               s.setText("Login");
-               s.setLayout(new GridLayout(2, false));
-
-               {
-                       Label l = new Label(s, SWT.NONE);
-                       l.setText("Username");
-
-                       Text t = new Text(s, SWT.BORDER);
-                       t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-               }
-
-               {
-                       Label l = new Label(s, SWT.NONE);
-                       l.setText("Password");
-
-                       Text t = new Text(s, SWT.BORDER | SWT.PASSWORD);
-                       t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-               }
-
-               {
-                       Composite buttonContainer = new Composite(s, SWT.NONE);
-                       buttonContainer.setLayout(new GridLayout(2, true));
-                       buttonContainer.setLayoutData(new GridData(SWT.TRAIL, SWT.CENTER, false, false, 2, 1));
-
-                       {
-                               Button b = new Button(buttonContainer, SWT.PUSH);
-                               b.setText("Abort");
-                               b.addSelectionListener(new SelectionAdapter() {
-                                       @Override
-                                       public void widgetSelected(SelectionEvent e) {
-                                               rv.set(false);
-                                               s.dispose();
-                                       }
-                               });
-                       }
-
-                       {
-                               Button b = new Button(buttonContainer, SWT.PUSH);
-                               b.setText("Login");
-                               b.addSelectionListener(new SelectionAdapter() {
-                                       @Override
-                                       public void widgetSelected(SelectionEvent e) {
-                                               rv.set(true);
-                                               s.dispose();
-                                       }
-                               });
-                       }
-               }
-               s.pack();
-               s.setSize(300, s.getSize().y + 10);
-               Rectangle bounds = d.getPrimaryMonitor().getBounds();
-
-               Point size = s.getSize();
-               s.setLocation(bounds.width / 2 - size.x / 2, bounds.height / 2 - size.y / 2);
-
-               s.open();
-               while (!s.isDisposed() && !d.isDisposed()) {
-                       if (!d.readAndDispatch()) {
-                               d.sleep();
-                       }
-               }
-
-               return rv.get();
-       }
-}
\ No newline at end of file
index 566b33d017bf81ec85eba034c60d7742d7265c0e..444350aebeefa16d1b3a20708e54bd4b26ab9357 100644 (file)
@@ -6,13 +6,15 @@ import java.util.Map;
 import javax.jcr.Repository;
 
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.ServiceReference;
 import org.osgi.util.tracker.ServiceTracker;
 
 public class OsgiRepositoryRegister extends DefaultRepositoryRegister {
+       private final static BundleContext bc = FrameworkUtil.getBundle(OsgiRepositoryRegister.class).getBundleContext();
        private final ServiceTracker<Repository, Repository> repositoryTracker;
 
-       public OsgiRepositoryRegister(BundleContext bc) {
+       public OsgiRepositoryRegister() {
                repositoryTracker = new ServiceTracker<Repository, Repository>(bc, Repository.class, null) {
 
                        @Override
diff --git a/pom.xml b/pom.xml
index 66f95773a35fc63db6cc67da1d4b81aa5deeac20..cfecfad436384744cadf82590ca66b6a95cb3b52 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -36,6 +36,7 @@
                <module>org.argeo.cms.ui</module>
                <!-- CMS E4 -->
                <module>org.argeo.cms.e4</module>
+               <module>org.argeo.cms.e4.rap</module>
                <!-- CMS Workbench -->
                <module>org.argeo.cms.ui.workbench</module>
                <module>org.argeo.cms.ui.workbench.rap</module>