From 0508f30bba143164a0fe83e3e7343e9375a4b6f4 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 25 Mar 2018 21:56:11 +0200 Subject: [PATCH] First working Eclipse 4 suite --- .../META-INF/spring/workbench-services.xml | 2 +- org.argeo.suite.apps/plugin.xml | 78 ------ org.argeo.suite.cms/.classpath | 7 + org.argeo.suite.cms/.gitignore | 2 + org.argeo.suite.cms/.project | 33 +++ org.argeo.suite.cms/META-INF/.gitignore | 0 org.argeo.suite.cms/META-INF/MANIFEST.MF | 27 ++ .../OSGI-INF/activitiesMaintenanceService.xml | 7 + .../OSGI-INF/activitiesService.xml | 10 + .../OSGI-INF/peopleMaintenanceService.xml | 7 + .../OSGI-INF/peopleService.xml | 9 + .../OSGI-INF/resourcesMaintenanceService.xml | 7 + .../OSGI-INF/resourcesService.xml | 8 + .../OSGI-INF/systemAppService.xml | 8 + .../OSGI-INF/systemMaintenanceService.xml | 9 + .../OSGI-INF/userManagerService.xml | 9 + org.argeo.suite.cms/bnd.bnd | 11 + org.argeo.suite.cms/build.properties | 13 + org.argeo.suite.e4.rap/.classpath | 7 + org.argeo.suite.e4.rap/.gitignore | 1 + org.argeo.suite.e4.rap/.project | 33 +++ org.argeo.suite.e4.rap/META-INF/.gitignore | 0 org.argeo.suite.e4.rap/META-INF/MANIFEST.MF | 15 + .../OSGI-INF/activitiesE4Service.xml | 9 + .../OSGI-INF/argeo-office-rap.xml | 8 + .../OSGI-INF/peopleE4Service.xml | 7 + .../OSGI-INF/systemE4Service.xml | 9 + org.argeo.suite.e4.rap/bnd.bnd | 7 + org.argeo.suite.e4.rap/build.properties | 7 + .../suite/e4/rap/ArgeoOfficeRapE4App.java | 13 + org.argeo.suite.e4/.classpath | 7 + org.argeo.suite.e4/.gitignore | 2 + org.argeo.suite.e4/.project | 28 ++ org.argeo.suite.e4/META-INF/.gitignore | 0 org.argeo.suite.e4/META-INF/MANIFEST.MF | 40 +++ org.argeo.suite.e4/build.properties | 5 + org.argeo.suite.e4/e4xmi/argeo-office.e4xmi | 46 ++++ .../EntitySingleColumnLabelProvider.java | 114 ++++++++ .../argeo/suite/e4/parts/QuickSearchView.java | 256 ++++++++++++++++++ sdk/argeo-office-e4-rap.properties | 30 ++ 40 files changed, 812 insertions(+), 79 deletions(-) delete mode 100644 org.argeo.suite.apps/plugin.xml create mode 100644 org.argeo.suite.cms/.classpath create mode 100644 org.argeo.suite.cms/.gitignore create mode 100644 org.argeo.suite.cms/.project create mode 100644 org.argeo.suite.cms/META-INF/.gitignore create mode 100644 org.argeo.suite.cms/META-INF/MANIFEST.MF create mode 100644 org.argeo.suite.cms/OSGI-INF/activitiesMaintenanceService.xml create mode 100644 org.argeo.suite.cms/OSGI-INF/activitiesService.xml create mode 100644 org.argeo.suite.cms/OSGI-INF/peopleMaintenanceService.xml create mode 100644 org.argeo.suite.cms/OSGI-INF/peopleService.xml create mode 100644 org.argeo.suite.cms/OSGI-INF/resourcesMaintenanceService.xml create mode 100644 org.argeo.suite.cms/OSGI-INF/resourcesService.xml create mode 100644 org.argeo.suite.cms/OSGI-INF/systemAppService.xml create mode 100644 org.argeo.suite.cms/OSGI-INF/systemMaintenanceService.xml create mode 100644 org.argeo.suite.cms/OSGI-INF/userManagerService.xml create mode 100644 org.argeo.suite.cms/bnd.bnd create mode 100644 org.argeo.suite.cms/build.properties create mode 100644 org.argeo.suite.e4.rap/.classpath create mode 100644 org.argeo.suite.e4.rap/.gitignore create mode 100644 org.argeo.suite.e4.rap/.project create mode 100644 org.argeo.suite.e4.rap/META-INF/.gitignore create mode 100644 org.argeo.suite.e4.rap/META-INF/MANIFEST.MF create mode 100644 org.argeo.suite.e4.rap/OSGI-INF/activitiesE4Service.xml create mode 100644 org.argeo.suite.e4.rap/OSGI-INF/argeo-office-rap.xml create mode 100644 org.argeo.suite.e4.rap/OSGI-INF/peopleE4Service.xml create mode 100644 org.argeo.suite.e4.rap/OSGI-INF/systemE4Service.xml create mode 100644 org.argeo.suite.e4.rap/bnd.bnd create mode 100644 org.argeo.suite.e4.rap/build.properties create mode 100644 org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoOfficeRapE4App.java create mode 100644 org.argeo.suite.e4/.classpath create mode 100644 org.argeo.suite.e4/.gitignore create mode 100644 org.argeo.suite.e4/.project create mode 100644 org.argeo.suite.e4/META-INF/.gitignore create mode 100644 org.argeo.suite.e4/META-INF/MANIFEST.MF create mode 100644 org.argeo.suite.e4/build.properties create mode 100644 org.argeo.suite.e4/e4xmi/argeo-office.e4xmi create mode 100644 org.argeo.suite.e4/src/org/argeo/suite/e4/parts/EntitySingleColumnLabelProvider.java create mode 100644 org.argeo.suite.e4/src/org/argeo/suite/e4/parts/QuickSearchView.java create mode 100644 sdk/argeo-office-e4-rap.properties diff --git a/org.argeo.suite.apps/META-INF/spring/workbench-services.xml b/org.argeo.suite.apps/META-INF/spring/workbench-services.xml index a9ce94d..054a601 100644 --- a/org.argeo.suite.apps/META-INF/spring/workbench-services.xml +++ b/org.argeo.suite.apps/META-INF/spring/workbench-services.xml @@ -35,7 +35,7 @@ + class="org.argeo.connect.workbench.DefaultSystemWorkbenchService"> diff --git a/org.argeo.suite.apps/plugin.xml b/org.argeo.suite.apps/plugin.xml deleted file mode 100644 index c33d96d..0000000 --- a/org.argeo.suite.apps/plugin.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/org.argeo.suite.cms/.classpath b/org.argeo.suite.cms/.classpath new file mode 100644 index 0000000..eca7bdb --- /dev/null +++ b/org.argeo.suite.cms/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/org.argeo.suite.cms/.gitignore b/org.argeo.suite.cms/.gitignore new file mode 100644 index 0000000..09e3bc9 --- /dev/null +++ b/org.argeo.suite.cms/.gitignore @@ -0,0 +1,2 @@ +/bin/ +/target/ diff --git a/org.argeo.suite.cms/.project b/org.argeo.suite.cms/.project new file mode 100644 index 0000000..159bcce --- /dev/null +++ b/org.argeo.suite.cms/.project @@ -0,0 +1,33 @@ + + + org.argeo.suite.cms + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.pde.ds.core.builder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/org.argeo.suite.cms/META-INF/.gitignore b/org.argeo.suite.cms/META-INF/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/org.argeo.suite.cms/META-INF/MANIFEST.MF b/org.argeo.suite.cms/META-INF/MANIFEST.MF new file mode 100644 index 0000000..e0594fc --- /dev/null +++ b/org.argeo.suite.cms/META-INF/MANIFEST.MF @@ -0,0 +1,27 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Cms +Bundle-SymbolicName: org.argeo.suite.cms +Bundle-Version: 1.0.0.qualifier +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Service-Component: OSGI-INF/resourcesService.xml, + OSGI-INF/activitiesService.xml, + OSGI-INF/systemAppService.xml, + OSGI-INF/userManagerService.xml, + OSGI-INF/peopleService.xml, + OSGI-INF/systemMaintenanceService.xml, + OSGI-INF/activitiesMaintenanceService.xml, + OSGI-INF/resourcesMaintenanceService.xml, + OSGI-INF/peopleMaintenanceService.xml +Import-Package: javax.jcr;version="2.0.0", + javax.transaction, + org.argeo.activities;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.activities.core;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.connect;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.connect.core;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.connect.resources;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.connect.resources.core;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.people;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.people.core;version="2.1.79.SNAPSHOT-r201803241506", + org.osgi.service.useradmin;version="1.1.0" +Bundle-ActivationPolicy: lazy diff --git a/org.argeo.suite.cms/OSGI-INF/activitiesMaintenanceService.xml b/org.argeo.suite.cms/OSGI-INF/activitiesMaintenanceService.xml new file mode 100644 index 0000000..6d8105f --- /dev/null +++ b/org.argeo.suite.cms/OSGI-INF/activitiesMaintenanceService.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/org.argeo.suite.cms/OSGI-INF/activitiesService.xml b/org.argeo.suite.cms/OSGI-INF/activitiesService.xml new file mode 100644 index 0000000..c84eaa2 --- /dev/null +++ b/org.argeo.suite.cms/OSGI-INF/activitiesService.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/org.argeo.suite.cms/OSGI-INF/peopleMaintenanceService.xml b/org.argeo.suite.cms/OSGI-INF/peopleMaintenanceService.xml new file mode 100644 index 0000000..0aa8705 --- /dev/null +++ b/org.argeo.suite.cms/OSGI-INF/peopleMaintenanceService.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/org.argeo.suite.cms/OSGI-INF/peopleService.xml b/org.argeo.suite.cms/OSGI-INF/peopleService.xml new file mode 100644 index 0000000..b734946 --- /dev/null +++ b/org.argeo.suite.cms/OSGI-INF/peopleService.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/org.argeo.suite.cms/OSGI-INF/resourcesMaintenanceService.xml b/org.argeo.suite.cms/OSGI-INF/resourcesMaintenanceService.xml new file mode 100644 index 0000000..52450ee --- /dev/null +++ b/org.argeo.suite.cms/OSGI-INF/resourcesMaintenanceService.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/org.argeo.suite.cms/OSGI-INF/resourcesService.xml b/org.argeo.suite.cms/OSGI-INF/resourcesService.xml new file mode 100644 index 0000000..5f7bce1 --- /dev/null +++ b/org.argeo.suite.cms/OSGI-INF/resourcesService.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/org.argeo.suite.cms/OSGI-INF/systemAppService.xml b/org.argeo.suite.cms/OSGI-INF/systemAppService.xml new file mode 100644 index 0000000..fd7f32a --- /dev/null +++ b/org.argeo.suite.cms/OSGI-INF/systemAppService.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/org.argeo.suite.cms/OSGI-INF/systemMaintenanceService.xml b/org.argeo.suite.cms/OSGI-INF/systemMaintenanceService.xml new file mode 100644 index 0000000..511d285 --- /dev/null +++ b/org.argeo.suite.cms/OSGI-INF/systemMaintenanceService.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/org.argeo.suite.cms/OSGI-INF/userManagerService.xml b/org.argeo.suite.cms/OSGI-INF/userManagerService.xml new file mode 100644 index 0000000..f568a05 --- /dev/null +++ b/org.argeo.suite.cms/OSGI-INF/userManagerService.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/org.argeo.suite.cms/bnd.bnd b/org.argeo.suite.cms/bnd.bnd new file mode 100644 index 0000000..687d79b --- /dev/null +++ b/org.argeo.suite.cms/bnd.bnd @@ -0,0 +1,11 @@ +Bundle-ActivationPolicy: lazy +Service-Component: OSGI-INF/systemAppService.xml,\ + OSGI-INF/userManagerService.xml,\ + OSGI-INF/resourcesService.xml,\ + OSGI-INF/activitiesService.xml,\ + OSGI-INF/peopleService.xml,\ + OSGI-INF/systemMaintenanceService.xml,\ + OSGI-INF/activitiesMaintenanceService.xml,\ + OSGI-INF/resourcesMaintenanceService.xml,\ + OSGI-INF/peopleMaintenanceService.xml + \ No newline at end of file diff --git a/org.argeo.suite.cms/build.properties b/org.argeo.suite.cms/build.properties new file mode 100644 index 0000000..f673b42 --- /dev/null +++ b/org.argeo.suite.cms/build.properties @@ -0,0 +1,13 @@ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + OSGI-INF/resourcesService.xml,\ + OSGI-INF/activitiesService.xml,\ + OSGI-INF/systemAppService.xml,\ + OSGI-INF/userManagerService.xml,\ + OSGI-INF/peopleService.xml,\ + OSGI-INF/systemMaintenanceService.xml,\ + OSGI-INF/activitiesMaintenanceService.xml,\ + OSGI-INF/resourcesMaintenanceService.xml,\ + OSGI-INF/peopleMaintenanceService.xml +source.. = src/ diff --git a/org.argeo.suite.e4.rap/.classpath b/org.argeo.suite.e4.rap/.classpath new file mode 100644 index 0000000..eca7bdb --- /dev/null +++ b/org.argeo.suite.e4.rap/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/org.argeo.suite.e4.rap/.gitignore b/org.argeo.suite.e4.rap/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/org.argeo.suite.e4.rap/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/org.argeo.suite.e4.rap/.project b/org.argeo.suite.e4.rap/.project new file mode 100644 index 0000000..ab1169e --- /dev/null +++ b/org.argeo.suite.e4.rap/.project @@ -0,0 +1,33 @@ + + + org.argeo.suite.e4.rap + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.pde.ds.core.builder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/org.argeo.suite.e4.rap/META-INF/.gitignore b/org.argeo.suite.e4.rap/META-INF/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/org.argeo.suite.e4.rap/META-INF/MANIFEST.MF b/org.argeo.suite.e4.rap/META-INF/MANIFEST.MF new file mode 100644 index 0000000..9656163 --- /dev/null +++ b/org.argeo.suite.e4.rap/META-INF/MANIFEST.MF @@ -0,0 +1,15 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Rap +Bundle-SymbolicName: org.argeo.suite.e4.rap +Bundle-Version: 1.0.0.qualifier +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Import-Package: org.argeo.activities.e4, + org.argeo.activities.e4.parts, + org.argeo.cms.e4.rap;version="2.1.73.SNAPSHOT-r201803221729", + org.argeo.connect.e4, + org.argeo.connect.ui;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.people.e4, + org.eclipse.rap.rwt.application;version="3.4.0" +Service-Component: OSGI-INF/argeo-office-rap.xml,OSGI-INF/systemE4Service.xml,OSGI-INF/activitiesE4Service.xml, + OSGI-INF/peopleE4Service.xml diff --git a/org.argeo.suite.e4.rap/OSGI-INF/activitiesE4Service.xml b/org.argeo.suite.e4.rap/OSGI-INF/activitiesE4Service.xml new file mode 100644 index 0000000..109745d --- /dev/null +++ b/org.argeo.suite.e4.rap/OSGI-INF/activitiesE4Service.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/org.argeo.suite.e4.rap/OSGI-INF/argeo-office-rap.xml b/org.argeo.suite.e4.rap/OSGI-INF/argeo-office-rap.xml new file mode 100644 index 0000000..126ca5b --- /dev/null +++ b/org.argeo.suite.e4.rap/OSGI-INF/argeo-office-rap.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/org.argeo.suite.e4.rap/OSGI-INF/peopleE4Service.xml b/org.argeo.suite.e4.rap/OSGI-INF/peopleE4Service.xml new file mode 100644 index 0000000..32c6e5f --- /dev/null +++ b/org.argeo.suite.e4.rap/OSGI-INF/peopleE4Service.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/org.argeo.suite.e4.rap/OSGI-INF/systemE4Service.xml b/org.argeo.suite.e4.rap/OSGI-INF/systemE4Service.xml new file mode 100644 index 0000000..1d758e2 --- /dev/null +++ b/org.argeo.suite.e4.rap/OSGI-INF/systemE4Service.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/org.argeo.suite.e4.rap/bnd.bnd b/org.argeo.suite.e4.rap/bnd.bnd new file mode 100644 index 0000000..e313a60 --- /dev/null +++ b/org.argeo.suite.e4.rap/bnd.bnd @@ -0,0 +1,7 @@ +Bundle-ActivationPolicy: lazy +Service-Component: OSGI-INF/argeo-office-rap.xml + +Import-Package: org.argeo.node,\ +org.eclipse.swt,\ +org.eclipse.rap.rwt.client,\ +* diff --git a/org.argeo.suite.e4.rap/build.properties b/org.argeo.suite.e4.rap/build.properties new file mode 100644 index 0000000..7d8239f --- /dev/null +++ b/org.argeo.suite.e4.rap/build.properties @@ -0,0 +1,7 @@ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + OSGI-INF/systemE4Service.xml,\ + OSGI-INF/activitiesE4Service.xml,\ + OSGI-INF/peopleE4Service.xml +source.. = src/ diff --git a/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoOfficeRapE4App.java b/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoOfficeRapE4App.java new file mode 100644 index 0000000..473406f --- /dev/null +++ b/org.argeo.suite.e4.rap/src/org/argeo/suite/e4/rap/ArgeoOfficeRapE4App.java @@ -0,0 +1,13 @@ +package org.argeo.suite.e4.rap; + +import org.argeo.cms.e4.rap.AbstractRapE4App; + +public class ArgeoOfficeRapE4App extends AbstractRapE4App { + + public ArgeoOfficeRapE4App() { + setPageTitle("Argeo Office"); + setE4Xmi("org.argeo.suite.e4/e4xmi/argeo-office.e4xmi"); + setPath("/office"); + } + +} diff --git a/org.argeo.suite.e4/.classpath b/org.argeo.suite.e4/.classpath new file mode 100644 index 0000000..eca7bdb --- /dev/null +++ b/org.argeo.suite.e4/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/org.argeo.suite.e4/.gitignore b/org.argeo.suite.e4/.gitignore new file mode 100644 index 0000000..09e3bc9 --- /dev/null +++ b/org.argeo.suite.e4/.gitignore @@ -0,0 +1,2 @@ +/bin/ +/target/ diff --git a/org.argeo.suite.e4/.project b/org.argeo.suite.e4/.project new file mode 100644 index 0000000..78b3980 --- /dev/null +++ b/org.argeo.suite.e4/.project @@ -0,0 +1,28 @@ + + + org.argeo.suite.e4 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/org.argeo.suite.e4/META-INF/.gitignore b/org.argeo.suite.e4/META-INF/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/org.argeo.suite.e4/META-INF/MANIFEST.MF b/org.argeo.suite.e4/META-INF/MANIFEST.MF new file mode 100644 index 0000000..b5f2931 --- /dev/null +++ b/org.argeo.suite.e4/META-INF/MANIFEST.MF @@ -0,0 +1,40 @@ +Manifest-Version: 1.0 +Bundle-SymbolicName: org.argeo.suite.e4 +Bundle-Name: E4 +Bundle-Version: 1.0.0.qualifier +Bundle-ManifestVersion: 2 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Import-Package: javax.inject;version="1.0.0", + javax.jcr;version="2.0.0", + javax.jcr.nodetype;version="2.0.0", + javax.jcr.observation;version="2.0.0", + javax.jcr.query;version="2.0.0", + org.apache.commons.logging;version="1.1.1", + org.argeo.activities;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.activities.ui;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.cms.util;version="2.1.73.SNAPSHOT-r201803221729", + org.argeo.connect;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.connect.e4.handlers, + org.argeo.connect.resources;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.connect.ui, + org.argeo.connect.ui.util;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.connect.ui.widgets;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.connect.util;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.eclipse.ui;version="2.1.73.SNAPSHOT-r201803221729", + org.argeo.jcr;version="2.1.73.SNAPSHOT-r201803221729", + org.argeo.people;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.people.e4, + org.argeo.people.e4.parts, + org.argeo.people.ui.providers;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.tracker;version="2.1.79.SNAPSHOT-r201803241506", + org.argeo.tracker.ui;version="2.1.79.SNAPSHOT-r201803241506", + org.eclipse.jface, + org.eclipse.jface.layout, + org.eclipse.jface.viewers, + org.eclipse.jface.viewers.deferred, + org.eclipse.swt, + org.eclipse.swt.events, + org.eclipse.swt.graphics, + org.eclipse.swt.layout, + org.eclipse.swt.widgets + diff --git a/org.argeo.suite.e4/build.properties b/org.argeo.suite.e4/build.properties new file mode 100644 index 0000000..da84b25 --- /dev/null +++ b/org.argeo.suite.e4/build.properties @@ -0,0 +1,5 @@ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + e4xmi/argeo-office.e4xmi +source.. = src/ diff --git a/org.argeo.suite.e4/e4xmi/argeo-office.e4xmi b/org.argeo.suite.e4/e4xmi/argeo-office.e4xmi new file mode 100644 index 0000000..263881f --- /dev/null +++ b/org.argeo.suite.e4/e4xmi/argeo-office.e4xmi @@ -0,0 +1,46 @@ + + + + + shellMaximized + + + + + + + + entityEditorArea + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/EntitySingleColumnLabelProvider.java b/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/EntitySingleColumnLabelProvider.java new file mode 100644 index 0000000..490ae13 --- /dev/null +++ b/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/EntitySingleColumnLabelProvider.java @@ -0,0 +1,114 @@ +package org.argeo.suite.e4.parts; + +import javax.jcr.Node; +import javax.jcr.Property; +import javax.jcr.RepositoryException; +import javax.jcr.nodetype.NodeType; + +import org.argeo.activities.ActivitiesService; +import org.argeo.activities.ActivitiesTypes; +import org.argeo.activities.ui.ActivityListLabelProvider; +import org.argeo.connect.resources.ResourcesService; +import org.argeo.connect.ui.ConnectUiConstants; +import org.argeo.connect.ui.SystemWorkbenchService; +import org.argeo.connect.ui.util.TagLabelProvider; +import org.argeo.connect.util.ConnectUtils; +import org.argeo.people.PeopleException; +import org.argeo.people.PeopleNames; +import org.argeo.people.PeopleService; +import org.argeo.people.PeopleTypes; +import org.argeo.people.ui.providers.GroupLabelProvider; +import org.argeo.people.ui.providers.OrgListLabelProvider; +import org.argeo.people.ui.providers.PersonListLabelProvider; +import org.argeo.tracker.TrackerTypes; +import org.argeo.tracker.ui.TrackerSingleColLP; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ILabelProviderListener; +import org.eclipse.swt.graphics.Image; + +/** + * Provide a single column label provider for entity lists. Icon and displayed + * text vary with the element node type + */ +public class EntitySingleColumnLabelProvider implements PeopleNames, ILabelProvider { + private static final long serialVersionUID = 3111885324210673320L; + + private SystemWorkbenchService systemWorkbenchService; + + private ActivityListLabelProvider activityLP; + private TrackerSingleColLP trackerLP; + private OrgListLabelProvider orgLp; + private PersonListLabelProvider personLp; + private GroupLabelProvider groupLp = new GroupLabelProvider(ConnectUiConstants.LIST_TYPE_SMALL); + private TagLabelProvider mlInstanceLp; + + public EntitySingleColumnLabelProvider(ResourcesService resourceService, ActivitiesService activitiesService, + PeopleService peopleService, SystemWorkbenchService systemWorkbenchService) { + this.systemWorkbenchService = systemWorkbenchService; + activityLP = new ActivityListLabelProvider(activitiesService); + trackerLP = new TrackerSingleColLP(activitiesService); + personLp = new PersonListLabelProvider(peopleService); + orgLp = new OrgListLabelProvider(resourceService, peopleService); + mlInstanceLp = new TagLabelProvider(resourceService, ConnectUiConstants.LIST_TYPE_SMALL); + } + + @Override + public String getText(Object element) { + try { + Node entity = (Node) element; + String result; + + if (entity.isNodeType(TrackerTypes.TRACKER_TASK) || entity.isNodeType(TrackerTypes.TRACKER_PROJECT) + || entity.isNodeType(TrackerTypes.TRACKER_MILESTONE)) + result = trackerLP.getText(element); + else if (entity.isNodeType(ActivitiesTypes.ACTIVITIES_ACTIVITY)) + result = activityLP.getText(element); + else if (entity.isNodeType(PeopleTypes.PEOPLE_PERSON)) + result = personLp.getText(element); + else if (entity.isNodeType(PeopleTypes.PEOPLE_ORG)) + result = orgLp.getText(element); + else if (entity.isNodeType(PeopleTypes.PEOPLE_MAILING_LIST)) + result = mlInstanceLp.getText(element); + else if (entity.isNodeType(PeopleTypes.PEOPLE_GROUP)) + result = groupLp.getText(element); + else if (entity.isNodeType(NodeType.MIX_TITLE) && entity.hasProperty(Property.JCR_TITLE)) + result = entity.getProperty(Property.JCR_TITLE).getString(); + else + result = ""; + return ConnectUtils.replaceAmpersand(result); + } catch (RepositoryException re) { + throw new PeopleException("Unable to get formatted value for node", re); + } + } + + /** Overwrite this method to provide project specific images */ + @Override + public Image getImage(Object element) { + return systemWorkbenchService.getIconForType((Node) element); + } + + @Override + public void addListener(ILabelProviderListener listener) { + // TODO Auto-generated method stub + + } + + @Override + public void dispose() { + // TODO Auto-generated method stub + + } + + @Override + public boolean isLabelProperty(Object element, String property) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void removeListener(ILabelProviderListener listener) { + // TODO Auto-generated method stub + + } + +} diff --git a/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/QuickSearchView.java b/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/QuickSearchView.java new file mode 100644 index 0000000..3f95d8c --- /dev/null +++ b/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/QuickSearchView.java @@ -0,0 +1,256 @@ +package org.argeo.suite.e4.parts; + +import static org.argeo.eclipse.ui.EclipseUiUtils.notEmpty; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.inject.Inject; +import javax.jcr.NodeIterator; +import javax.jcr.Repository; +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.observation.Event; +import javax.jcr.observation.EventIterator; +import javax.jcr.observation.EventListener; +import javax.jcr.query.Query; +import javax.jcr.query.QueryResult; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.activities.ActivitiesService; +import org.argeo.cms.util.CmsUtils; +import org.argeo.connect.ConnectException; +import org.argeo.connect.ConnectTypes; +import org.argeo.connect.resources.ResourcesService; +import org.argeo.connect.ui.ConnectUiConstants; +import org.argeo.connect.ui.Refreshable; +import org.argeo.connect.ui.SystemWorkbenchService; +import org.argeo.connect.ui.util.BasicNodeListContentProvider; +import org.argeo.connect.ui.util.JcrViewerDClickListener; +import org.argeo.connect.ui.widgets.DelayedText; +import org.argeo.connect.util.ConnectJcrUtils; +import org.argeo.connect.util.XPathUtils; +import org.argeo.eclipse.ui.EclipseUiUtils; +import org.argeo.jcr.JcrUtils; +import org.argeo.people.PeopleService; +import org.eclipse.jface.layout.TableColumnLayout; +import org.eclipse.jface.viewers.ColumnWeightData; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.KeyEvent; +import org.eclipse.swt.events.KeyListener; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.swt.widgets.Text; + +/** A table with a quick search field. */ +public class QuickSearchView implements Refreshable { + private final static Log log = LogFactory.getLog(QuickSearchView.class); + // public static final String ID = AsUiPlugin.PLUGIN_ID + ".quickSearchView"; + + /* DEPENDENCY INJECTION */ + @Inject + private Repository repository; + @Inject + private ResourcesService resourcesService; + @Inject + private ActivitiesService activitiesService; + @Inject + private PeopleService peopleService; + @Inject + private SystemWorkbenchService systemWorkbenchService; + + // This page widgets + private TableViewer entityViewer; + private Text filterTxt; + + private Session session; + + // @Override + // public void init(IViewSite site) throws PartInitException { + // super.init(site); + // } + + @PostConstruct + public void createPartControl(Composite parent) { + session = ConnectJcrUtils.login(repository); + // MainLayout + parent.setLayout(new GridLayout()); + addFilterPanel(parent); + entityViewer = createListPart(parent, new EntitySingleColumnLabelProvider(resourcesService, activitiesService, + peopleService, systemWorkbenchService)); + refreshFilteredList(); + + try { + session.getWorkspace().getObservationManager().addEventListener(new EventListener() { + + @Override + public void onEvent(EventIterator events) { + parent.getDisplay().asyncExec(() -> refreshFilteredList()); + } + }, Event.PROPERTY_CHANGED | Event.NODE_ADDED | Event.NODE_REMOVED | Event.PROPERTY_ADDED, "/", true, null, + new String[] { ConnectTypes.CONNECT_ENTITY }, true); + } catch (RepositoryException e) { + throw new ConnectException("Cannot add JCR observer", e); + } + + } + + private void addFilterPanel(Composite parent) { + // Use a delayed text: the query won't be done until the user stop + // typing for 800ms + int style = SWT.BORDER | SWT.SEARCH | SWT.ICON_CANCEL; + DelayedText delayedText = new DelayedText(parent, style, ConnectUiConstants.SEARCH_TEXT_DELAY); + filterTxt = delayedText.getText(); + filterTxt.setLayoutData(EclipseUiUtils.fillWidth()); + + // final ServerPushSession pushSession = new ServerPushSession(); + delayedText.addDelayedModifyListener(null, new ModifyListener() { + private static final long serialVersionUID = 5003010530960334977L; + + public void modifyText(ModifyEvent event) { + delayedText.getText().getDisplay().asyncExec(new Runnable() { + @Override + public void run() { + refreshFilteredList(); + } + }); + // pushSession.stop(); + } + }); + + // Jump to the first item of the list using the down arrow + filterTxt.addKeyListener(new KeyListener() { + private static final long serialVersionUID = -4523394262771183968L; + + @Override + public void keyReleased(KeyEvent e) { + } + + @Override + public void keyPressed(KeyEvent e) { + // boolean shiftPressed = (e.stateMask & SWT.SHIFT) != 0; + // boolean altPressed = (e.stateMask & SWT.ALT) != 0; + if (e.keyCode == SWT.ARROW_DOWN || e.keyCode == SWT.TAB) { + Object first = entityViewer.getElementAt(0); + if (first != null) { + entityViewer.getTable().setFocus(); + entityViewer.setSelection(new StructuredSelection(first), true); + } + e.doit = false; + } + } + }); + } + + protected TableViewer createListPart(Composite parent, ILabelProvider labelProvider) { + parent.setLayout(new GridLayout()); + + Composite tableComposite = new Composite(parent, SWT.NONE); + GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_VERTICAL + | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); + tableComposite.setLayoutData(gd); + + TableViewer v = new TableViewer(tableComposite); + v.setLabelProvider(labelProvider); + + TableColumn singleColumn = new TableColumn(v.getTable(), SWT.V_SCROLL); + TableColumnLayout tableColumnLayout = new TableColumnLayout(); + tableColumnLayout.setColumnData(singleColumn, new ColumnWeightData(85)); + tableComposite.setLayout(tableColumnLayout); + + // Corresponding table & style + Table table = v.getTable(); + table.setLinesVisible(true); + table.setHeaderVisible(false); + CmsUtils.markup(table); + CmsUtils.setItemHeight(table, 26); + + v.setContentProvider(new BasicNodeListContentProvider()); + v.addDoubleClickListener(new JcrViewerDClickListener(systemWorkbenchService)); + return v; + } + + @PreDestroy + public void dispose() { + JcrUtils.logoutQuietly(session); + } + + + public void setFocus() { + refreshFilteredList(); + filterTxt.setFocus(); + } + + @Override + public void forceRefresh(Object object) { + refreshFilteredList(); + } + + protected void refreshFilteredList() { + try { + String filter = filterTxt.getText(); + // Prevents the query on the full repository + // if (isEmpty(filter)) { + // entityViewer.setInput(null); + // return; + // } + + // XPATH Query + String xpathQueryStr = "//element(*, " + ConnectTypes.CONNECT_ENTITY + ")"; + String xpathFilter = XPathUtils.getFreeTextConstraint(filter); + if (notEmpty(xpathFilter)) + xpathQueryStr += "[" + xpathFilter + "]"; + + // boolean doOrder = orderResultsBtn != null + // && !(orderResultsBtn.isDisposed()) + // && orderResultsBtn.getSelection(); + // if (doOrder) { + // xpathQueryStr += " order by jcr:title"; + // } + + long begin = System.currentTimeMillis(); + Query xpathQuery = XPathUtils.createQuery(session, xpathQueryStr); + + xpathQuery.setLimit(ConnectUiConstants.SEARCH_DEFAULT_LIMIT); + QueryResult result = xpathQuery.execute(); + + NodeIterator nit = result.getNodes(); + entityViewer.setInput(JcrUtils.nodeIteratorToList(nit)); + if (log.isDebugEnabled()) { + long end = System.currentTimeMillis(); + log.debug("Quick Search - Found: " + nit.getSize() + " in " + (end - begin) + + " ms by executing XPath query (" + xpathQueryStr + ")."); + } + } catch (RepositoryException e) { + throw new ConnectException("Unable to list entities", e); + } + } + +// public void setRepository(Repository repository) { +// this.repository = repository; +// } +// +// public void setResourcesService(ResourcesService resourcesService) { +// this.resourcesService = resourcesService; +// } +// +// public void setActivitiesService(ActivitiesService activitiesService) { +// this.activitiesService = activitiesService; +// } +// +// public void setPeopleService(PeopleService peopleService) { +// this.peopleService = peopleService; +// } +// +// public void setSystemWorkbenchService(SystemWorkbenchService systemWorkbenchService) { +// this.systemWorkbenchService = systemWorkbenchService; +// } +} diff --git a/sdk/argeo-office-e4-rap.properties b/sdk/argeo-office-e4-rap.properties new file mode 100644 index 0000000..55323c7 --- /dev/null +++ b/sdk/argeo-office-e4-rap.properties @@ -0,0 +1,30 @@ +argeo.osgi.start.2.node=\ +org.eclipse.equinox.http.servlet,\ +org.eclipse.equinox.http.jetty,\ +org.eclipse.equinox.metatype,\ +org.eclipse.equinox.cm,\ +org.eclipse.rap.rwt.osgi + +argeo.osgi.start.3.node=\ +org.argeo.cms,\ +org.argeo.suite.cms + +argeo.osgi.start.5.node=\ +org.argeo.suite.e4.rap + +# Local +argeo.node.repo.type=h2 +org.osgi.service.http.port=7070 +#org.osgi.service.http.port.secure=7073 + +# Logging +log4j.configuration=file:../../log4j.properties + +# DON'T CHANGE BELOW +org.eclipse.equinox.http.jetty.autostart=false +org.osgi.framework.bootdelegation=com.sun.jndi.ldap,\ +com.sun.jndi.ldap.sasl,\ +com.sun.security.jgss,\ +com.sun.jndi.dns,\ +com.sun.nio.file,\ +com.sun.nio.sctp -- 2.30.2