From 474daea6cd9e52cc489a0a13cc93e6cd1139db1f Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 26 Jan 2014 12:34:40 +0000 Subject: [PATCH] Remove AKB from SLC git-svn-id: https://svn.argeo.org/slc/trunk@6770 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- dep/org.argeo.slc.dep.akb.rap/pom.xml | 106 ---- dep/org.argeo.slc.dep.akb.rcp/pom.xml | 106 ---- modules/org.argeo.slc.akb.services/.project | 22 - .../META-INF/spring/jackrabbit.xml | 16 - .../META-INF/spring/services-osgi.xml | 29 - .../META-INF/spring/services.xml | 17 - modules/org.argeo.slc.akb.services/init.ldif | 89 --- modules/org.argeo.slc.akb.services/pom.xml | 36 -- plugins/org.argeo.slc.akb.ui/.classpath | 10 - plugins/org.argeo.slc.akb.ui/.project | 28 - .../.settings/org.eclipse.jdt.core.prefs | 7 - .../META-INF/spring/commands.xml | 25 - .../META-INF/spring/editors.xml | 34 -- .../META-INF/spring/osgi.xml | 16 - .../META-INF/spring/views.xml | 21 - plugins/org.argeo.slc.akb.ui/build.properties | 8 - .../icons/addConnector.gif | Bin 209 -> 0 bytes .../org.argeo.slc.akb.ui/icons/addItem.gif | Bin 318 -> 0 bytes plugins/org.argeo.slc.akb.ui/icons/akb.gif | Bin 595 -> 0 bytes .../org.argeo.slc.akb.ui/icons/connectors.gif | Bin 205 -> 0 bytes .../icons/environment.png | Bin 345 -> 0 bytes .../icons/environments.gif | Bin 360 -> 0 bytes .../org.argeo.slc.akb.ui/icons/itemFolder.gif | Bin 213 -> 0 bytes .../icons/jcrConnector.gif | Bin 325 -> 0 bytes .../org.argeo.slc.akb.ui/icons/jcrQuery.gif | Bin 152 -> 0 bytes .../icons/jdbcConnector.gif | Bin 545 -> 0 bytes .../org.argeo.slc.akb.ui/icons/jdbcQuery.gif | Bin 582 -> 0 bytes plugins/org.argeo.slc.akb.ui/icons/note.gif | Bin 218 -> 0 bytes .../org.argeo.slc.akb.ui/icons/refresh.png | Bin 465 -> 0 bytes .../org.argeo.slc.akb.ui/icons/searchView.png | Bin 603 -> 0 bytes .../icons/smallerOrnamentLogo.png | Bin 28475 -> 0 bytes .../org.argeo.slc.akb.ui/icons/sshCommand.png | Bin 270 -> 0 bytes .../icons/sshConnector.png | Bin 443 -> 0 bytes .../org.argeo.slc.akb.ui/icons/sshFile.gif | Bin 354 -> 0 bytes .../org.argeo.slc.akb.ui/icons/template.gif | Bin 219 -> 0 bytes .../org.argeo.slc.akb.ui/icons/treeView.png | Bin 193 -> 0 bytes plugins/org.argeo.slc.akb.ui/plugin.xml | 200 ------ plugins/org.argeo.slc.akb.ui/pom.xml | 80 --- .../argeo/slc/akb/ui/AkbEnvPerspective.java | 23 - .../java/org/argeo/slc/akb/ui/AkbImages.java | 49 -- .../org/argeo/slc/akb/ui/AkbMessages.java | 37 -- .../slc/akb/ui/AkbTemplatesPerspective.java | 23 - .../org/argeo/slc/akb/ui/AkbUiConstants.java | 10 - .../org/argeo/slc/akb/ui/AkbUiPlugin.java | 68 --- .../java/org/argeo/slc/akb/ui/AkbUiUtils.java | 322 ---------- .../slc/akb/ui/commands/CreateAkbNode.java | 106 ---- .../slc/akb/ui/commands/DeleteAkbNodes.java | 86 --- .../slc/akb/ui/commands/ForceRefresh.java | 27 - .../akb/ui/commands/OpenAkbNodeEditor.java | 178 ------ .../argeo/slc/akb/ui/commands/OpenUrl.java | 44 -- .../composites/ActiveItemHeaderComposite.java | 160 ----- .../ui/composites/AkbItemsTableComposite.java | 356 ----------- .../ui/composites/AliasListItemComposite.java | 253 -------- .../ConnectorAliasSmallComposite.java | 214 ------- .../ItemTemplateTitleComposite.java | 253 -------- .../akb/ui/composites/MixTitleComposite.java | 96 --- .../slc/akb/ui/dialogs/AddItemDialog.java | 97 --- .../akb/ui/editors/AbstractAkbNodeEditor.java | 238 -------- .../akb/ui/editors/AkbItemTemplateEditor.java | 73 --- .../akb/ui/editors/AkbNodeEditorInput.java | 84 --- .../akb/ui/editors/ConnectorAliasEditor.java | 191 ------ .../slc/akb/ui/editors/EnvTemplateEditor.java | 259 -------- .../ui/editors/JdbcQueryTemplateEditor.java | 68 --- .../slc/akb/ui/editors/JdbcTestPage.java | 245 -------- .../ui/editors/SshCommandTemplateEditor.java | 94 --- .../akb/ui/editors/SshFileTemplateEditor.java | 96 --- .../ActiveEnvsTreeContentProvider.java | 137 ----- .../slc/akb/ui/providers/ActiveTreeItem.java | 33 - .../akb/ui/providers/AkbImageProvider.java | 48 -- .../ui/providers/AkbTreeLabelProvider.java | 46 -- .../TemplatesTreeContentProvider.java | 106 ---- .../slc/akb/ui/utils/AkbItemsComparator.java | 66 -- .../argeo/slc/akb/ui/utils/Refreshable.java | 11 - .../slc/akb/ui/views/AkbDefaultView.java | 216 ------- .../akb/ui/views/AkbTemplatesTreeView.java | 515 ---------------- .../akb/ui/views/EnvironmentsTreeView.java | 208 ------- .../akb/ui/wizards/ActiveConnectorWizard.java | 186 ------ .../ui/wizards/CreateEnvInstanceWizard.java | 162 ----- runtime/org.argeo.slc.akb/.classpath | 10 - runtime/org.argeo.slc.akb/.project | 29 - runtime/org.argeo.slc.akb/build.properties | 5 - runtime/org.argeo.slc.akb/pom.xml | 56 -- .../java/org/argeo/slc/akb/AkbConstants.java | 6 - .../java/org/argeo/slc/akb/AkbException.java | 18 - .../main/java/org/argeo/slc/akb/AkbNames.java | 34 -- .../java/org/argeo/slc/akb/AkbService.java | 86 --- .../main/java/org/argeo/slc/akb/AkbTypes.java | 32 - .../argeo/slc/akb/core/AkbServiceImpl.java | 570 ------------------ .../org/argeo/slc/akb/utils/AkbJcrUtils.java | 435 ------------- .../main/resources/org/argeo/slc/akb/akb.cnd | 91 --- 90 files changed, 7706 deletions(-) delete mode 100644 dep/org.argeo.slc.dep.akb.rap/pom.xml delete mode 100644 dep/org.argeo.slc.dep.akb.rcp/pom.xml delete mode 100644 modules/org.argeo.slc.akb.services/.project delete mode 100644 modules/org.argeo.slc.akb.services/META-INF/spring/jackrabbit.xml delete mode 100644 modules/org.argeo.slc.akb.services/META-INF/spring/services-osgi.xml delete mode 100644 modules/org.argeo.slc.akb.services/META-INF/spring/services.xml delete mode 100644 modules/org.argeo.slc.akb.services/init.ldif delete mode 100644 modules/org.argeo.slc.akb.services/pom.xml delete mode 100644 plugins/org.argeo.slc.akb.ui/.classpath delete mode 100644 plugins/org.argeo.slc.akb.ui/.project delete mode 100644 plugins/org.argeo.slc.akb.ui/.settings/org.eclipse.jdt.core.prefs delete mode 100644 plugins/org.argeo.slc.akb.ui/META-INF/spring/commands.xml delete mode 100644 plugins/org.argeo.slc.akb.ui/META-INF/spring/editors.xml delete mode 100644 plugins/org.argeo.slc.akb.ui/META-INF/spring/osgi.xml delete mode 100644 plugins/org.argeo.slc.akb.ui/META-INF/spring/views.xml delete mode 100644 plugins/org.argeo.slc.akb.ui/build.properties delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/addConnector.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/addItem.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/akb.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/connectors.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/environment.png delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/environments.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/itemFolder.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/jcrConnector.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/jcrQuery.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/jdbcConnector.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/jdbcQuery.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/note.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/refresh.png delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/searchView.png delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/smallerOrnamentLogo.png delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/sshCommand.png delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/sshConnector.png delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/sshFile.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/template.gif delete mode 100644 plugins/org.argeo.slc.akb.ui/icons/treeView.png delete mode 100644 plugins/org.argeo.slc.akb.ui/plugin.xml delete mode 100644 plugins/org.argeo.slc.akb.ui/pom.xml delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbEnvPerspective.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbImages.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbMessages.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbTemplatesPerspective.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiConstants.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiPlugin.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiUtils.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/CreateAkbNode.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/DeleteAkbNodes.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/ForceRefresh.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/OpenAkbNodeEditor.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/OpenUrl.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ActiveItemHeaderComposite.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/AkbItemsTableComposite.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/AliasListItemComposite.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ConnectorAliasSmallComposite.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ItemTemplateTitleComposite.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/MixTitleComposite.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/dialogs/AddItemDialog.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbItemTemplateEditor.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbNodeEditorInput.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/ConnectorAliasEditor.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/EnvTemplateEditor.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcQueryTemplateEditor.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcTestPage.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshCommandTemplateEditor.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshFileTemplateEditor.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveEnvsTreeContentProvider.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveTreeItem.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/AkbImageProvider.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/AkbTreeLabelProvider.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/TemplatesTreeContentProvider.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/utils/AkbItemsComparator.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/utils/Refreshable.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbDefaultView.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbTemplatesTreeView.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/EnvironmentsTreeView.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/ActiveConnectorWizard.java delete mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/CreateEnvInstanceWizard.java delete mode 100644 runtime/org.argeo.slc.akb/.classpath delete mode 100644 runtime/org.argeo.slc.akb/.project delete mode 100644 runtime/org.argeo.slc.akb/build.properties delete mode 100644 runtime/org.argeo.slc.akb/pom.xml delete mode 100644 runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbConstants.java delete mode 100644 runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbException.java delete mode 100644 runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java delete mode 100644 runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbService.java delete mode 100644 runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbTypes.java delete mode 100644 runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java delete mode 100644 runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/utils/AkbJcrUtils.java delete mode 100644 runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd diff --git a/dep/org.argeo.slc.dep.akb.rap/pom.xml b/dep/org.argeo.slc.dep.akb.rap/pom.xml deleted file mode 100644 index 81cbb810e..000000000 --- a/dep/org.argeo.slc.dep.akb.rap/pom.xml +++ /dev/null @@ -1,106 +0,0 @@ - - 4.0.0 - - org.argeo.slc - dep - 1.1.15-SNAPSHOT - .. - - org.argeo.slc.akb.dep.rap - SLC AKB RAP Dependencies - - - - org.apache.felix - maven-bundle-plugin - - - default - - - - - org.argeo.maven.plugins - maven-argeo-osgi-plugin - - - generate-descriptors - - descriptors - - generate-resources - - - - - - - - - org.argeo.slc - org.argeo.slc.akb - 1.1.15-SNAPSHOT - - - org.argeo.slc - org.argeo.slc.akb.services - 1.1.15-SNAPSHOT - - - org.argeo.slc - org.argeo.slc.akb.ui - 1.1.15-SNAPSHOT - - - - - org.argeo.slc - org.argeo.slc.support.simple - 1.1.15-SNAPSHOT - - - org.argeo.slc - org.argeo.slc.support.jcr - 1.1.15-SNAPSHOT - - - - - - - - - - - org.argeo.commons.security - org.argeo.security.dep.node.rap - ${version.argeo-commons} - - - - - check-osgi - - - - org.argeo.maven.plugins - maven-argeo-osgi-plugin - - - check-osgi - test - - equinox - - - true - - - - - - - - - \ No newline at end of file diff --git a/dep/org.argeo.slc.dep.akb.rcp/pom.xml b/dep/org.argeo.slc.dep.akb.rcp/pom.xml deleted file mode 100644 index 7ad1d2043..000000000 --- a/dep/org.argeo.slc.dep.akb.rcp/pom.xml +++ /dev/null @@ -1,106 +0,0 @@ - - 4.0.0 - - org.argeo.slc - dep - 1.1.15-SNAPSHOT - .. - - org.argeo.slc.akb.dep.rcp - SLC AKB RCP Dependencies - - - - org.apache.felix - maven-bundle-plugin - - - default - - - - - org.argeo.maven.plugins - maven-argeo-osgi-plugin - - - generate-descriptors - - descriptors - - generate-resources - - - - - - - - - org.argeo.slc - org.argeo.slc.akb - 1.1.15-SNAPSHOT - - - org.argeo.slc - org.argeo.slc.akb.services - 1.1.15-SNAPSHOT - - - org.argeo.slc - org.argeo.slc.akb.ui - 1.1.15-SNAPSHOT - - - - - org.argeo.slc - org.argeo.slc.support.simple - 1.1.15-SNAPSHOT - - - org.argeo.slc - org.argeo.slc.support.jcr - 1.1.15-SNAPSHOT - - - - - - - - - - - org.argeo.commons.security - org.argeo.security.dep.node.rcp - ${version.argeo-commons} - - - - - check-osgi - - - - org.argeo.maven.plugins - maven-argeo-osgi-plugin - - - check-osgi - test - - equinox - - - true - - - - - - - - - \ No newline at end of file diff --git a/modules/org.argeo.slc.akb.services/.project b/modules/org.argeo.slc.akb.services/.project deleted file mode 100644 index 62cda5c4b..000000000 --- a/modules/org.argeo.slc.akb.services/.project +++ /dev/null @@ -1,22 +0,0 @@ - - - org.argeo.slc.akb.services - - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - - diff --git a/modules/org.argeo.slc.akb.services/META-INF/spring/jackrabbit.xml b/modules/org.argeo.slc.akb.services/META-INF/spring/jackrabbit.xml deleted file mode 100644 index 06bdb4523..000000000 --- a/modules/org.argeo.slc.akb.services/META-INF/spring/jackrabbit.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - /org/argeo/slc/akb/akb.cnd - - - - - - diff --git a/modules/org.argeo.slc.akb.services/META-INF/spring/services-osgi.xml b/modules/org.argeo.slc.akb.services/META-INF/spring/services-osgi.xml deleted file mode 100644 index cbc38157a..000000000 --- a/modules/org.argeo.slc.akb.services/META-INF/spring/services-osgi.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/org.argeo.slc.akb.services/META-INF/spring/services.xml b/modules/org.argeo.slc.akb.services/META-INF/spring/services.xml deleted file mode 100644 index 0711d6555..000000000 --- a/modules/org.argeo.slc.akb.services/META-INF/spring/services.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - diff --git a/modules/org.argeo.slc.akb.services/init.ldif b/modules/org.argeo.slc.akb.services/init.ldif deleted file mode 100644 index 4f6a47da0..000000000 --- a/modules/org.argeo.slc.akb.services/init.ldif +++ /dev/null @@ -1,89 +0,0 @@ -dn: dc=demo,dc=slc,dc=argeo,dc=org -objectClass: domain -objectClass: extensibleObject -objectClass: top -dc: gr - -dn: ou=Roles,dc=demo,dc=slc,dc=argeo,dc=org -objectClass: organizationalUnit -objectClass: top -ou: Roles - -dn: ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org -objectClass: organizationalUnit -objectClass: top -ou: Akb - -dn: uid=demo,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org -objectClass: organizationalPerson -objectClass: person -objectClass: inetOrgPerson -objectClass: top -cn: Demo User -description: Default demo user -givenname: Demo -mail: demo@localhost -sn: User -uid: demo -userpassword:: e1NIQX1pZVNWNTVRYytlUU9hWURSU2hhL0Fqek5USkU9 - -dn: uid=consultant,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org -objectClass: organizationalPerson -objectClass: person -objectClass: inetOrgPerson -objectClass: top -cn: Consultant -description: Consultant -givenname: Consultant -mail: consultant@localhost -sn: User -uid: consultant -userpassword:: e1NIQX1pZVNWNTVRYytlUU9hWURSU2hhL0Fqek5USkU9 - -dn: uid=manager,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org -objectClass: organizationalPerson -objectClass: person -objectClass: inetOrgPerson -objectClass: top -cn: Manager -description: Manager -givenname: Manager -mail: manager@localhost -sn: User -uid: manager -userpassword:: e1NIQX1pZVNWNTVRYytlUU9hWURSU2hhL0Fqek5USkU9 - -dn: uid=root,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org -objectClass: person -objectClass: inetOrgPerson -objectClass: organizationalPerson -objectClass: top -cn: Slc Demo System -description: Superuser -givenname: Slc Demo -mail: root@localhost -sn: System -uid: root -userpassword:: e1NIQX1pZVNWNTVRYytlUU9hWURSU2hhL0Fqek5USkU9 - -dn: cn=admin,ou=Roles,dc=demo,dc=slc,dc=argeo,dc=org -objectClass: groupOfNames -objectClass: top -cn: admin -member: uid=root,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org - -dn: cn=consultant,ou=Roles,dc=demo,dc=slc,dc=argeo,dc=org -objectClass: groupOfNames -objectClass: top -cn: consultant -member: uid=root,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org -member: uid=demo,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org -member: uid=manager,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org -member: uid=consultant,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org - -dn: cn=manager,ou=Roles,dc=demo,dc=slc,dc=argeo,dc=org -objectClass: groupOfNames -objectClass: top -cn: manager -member: uid=root,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org -member: uid=manager,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org diff --git a/modules/org.argeo.slc.akb.services/pom.xml b/modules/org.argeo.slc.akb.services/pom.xml deleted file mode 100644 index 0618a7119..000000000 --- a/modules/org.argeo.slc.akb.services/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - 4.0.0 - - org.argeo.slc - modules - 1.1.15-SNAPSHOT - .. - - org.argeo.slc.akb.services - SLC AKB - Services - - - - org.apache.felix - maven-bundle-plugin - - - - *, - org.argeo.slc.akb, - - - - - - - - - org.argeo.slc - org.argeo.slc.akb - 1.1.15-SNAPSHOT - - - diff --git a/plugins/org.argeo.slc.akb.ui/.classpath b/plugins/org.argeo.slc.akb.ui/.classpath deleted file mode 100644 index 76cb9350a..000000000 --- a/plugins/org.argeo.slc.akb.ui/.classpath +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - diff --git a/plugins/org.argeo.slc.akb.ui/.project b/plugins/org.argeo.slc.akb.ui/.project deleted file mode 100644 index 1462e5a7a..000000000 --- a/plugins/org.argeo.slc.akb.ui/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - org.argeo.slc.akb.ui - - - - - - 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/plugins/org.argeo.slc.akb.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.argeo.slc.akb.ui/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index c537b6306..000000000 --- a/plugins/org.argeo.slc.akb.ui/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.compliance=1.6 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 diff --git a/plugins/org.argeo.slc.akb.ui/META-INF/spring/commands.xml b/plugins/org.argeo.slc.akb.ui/META-INF/spring/commands.xml deleted file mode 100644 index e5ebc9a76..000000000 --- a/plugins/org.argeo.slc.akb.ui/META-INF/spring/commands.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/plugins/org.argeo.slc.akb.ui/META-INF/spring/editors.xml b/plugins/org.argeo.slc.akb.ui/META-INF/spring/editors.xml deleted file mode 100644 index 55c706d0a..000000000 --- a/plugins/org.argeo.slc.akb.ui/META-INF/spring/editors.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/META-INF/spring/osgi.xml b/plugins/org.argeo.slc.akb.ui/META-INF/spring/osgi.xml deleted file mode 100644 index 103227e87..000000000 --- a/plugins/org.argeo.slc.akb.ui/META-INF/spring/osgi.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - AKB UI - - - - \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/META-INF/spring/views.xml b/plugins/org.argeo.slc.akb.ui/META-INF/spring/views.xml deleted file mode 100644 index e00fec8c2..000000000 --- a/plugins/org.argeo.slc.akb.ui/META-INF/spring/views.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - diff --git a/plugins/org.argeo.slc.akb.ui/build.properties b/plugins/org.argeo.slc.akb.ui/build.properties deleted file mode 100644 index 10087d45c..000000000 --- a/plugins/org.argeo.slc.akb.ui/build.properties +++ /dev/null @@ -1,8 +0,0 @@ -source.. = src/main/java/,\ - src/main/resources, - -output.. = target/classes/ -bin.includes = META-INF/,\ - .,\ - icons/,\ - plugin.xml diff --git a/plugins/org.argeo.slc.akb.ui/icons/addConnector.gif b/plugins/org.argeo.slc.akb.ui/icons/addConnector.gif deleted file mode 100644 index b1526e931977e6a15cb0d3a707e33378f44ef1a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmZ?wbhEHb6krfwIKsg2`OC-8Uq1Z%`~K0*Eq}k9|N8pa-_Pf_PE_7H35Zm-Pf^`9 zUG4Y%&foXD{ybm&=hgbJua3>D6kFCPwX8{MX_M5tF8TGH3LCo=H}@%R=vMrFw|QoX z@S0Zn|Ns9pfPvyq7DfgJSq2>t4`e3;t6ze8UrOe@)16!^t>iiy6!O9aTM`9AeFOVC zm#B4RD6P1b(OhLC=5;x3b3xd`2n|m`4jzWiwhEnDNnEY0PbOvV_7r1lKCD>w;@h4$ I5hey}06}S8rT_o{ diff --git a/plugins/org.argeo.slc.akb.ui/icons/addItem.gif b/plugins/org.argeo.slc.akb.ui/icons/addItem.gif deleted file mode 100644 index 252d7ebcb8c74d6e5de66ef0eb8856622a0e9d89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmZ?wbhEHb6krfwxXQp_S{7na6>d=(Ze15;Qy1mX8t2lT^ zHOHgY9FJamJZkN+sI|wVk6ueSb}ixP)r4bLfn?%^+sU^crQUj&`rv8W|Ns9PC;*B- zSr{1@v>9|jW`O*}z!rUAYJrE2RKG`JYNRKhwpQrnor{(Ph`sVEnyR2Kc;c~(o$WdP zMb0Wl6K^dQ-0hgs;Xf2Iu<6Rd_`fg{IU-Wj4j< zwG~!0ryv&vg&`@>i@YL{^xD@|Lo)cQx|U~toon1;eXcp z|AkxrGXyVT@L$B>zmUOqZqfGtMLYkO?E3%m%m26E{xigGV2E7B5W2W<*Z;D;|6hFh z&yc!~m~3 zHkxegXvf#n-#=-}v>En}f|9c*8%?#J;m|K2;Am`UXgbw_-^s>uk>xI3?Y$-YCxzrX!|zxvtj4Szly-PFmorJH+uKhOV1_5U9={CR(L zbv^6a2DUYgZ0lRtC#EqhuVVTC|33rKK=CIFBLjmVgAPas$W8`UuLKph(7t7-(Fny^yI?*O@>FC zjc)Iscd$zL`py~qOSKM`YhT|neS5CP?n13|tGibwC{GTRUze=9G)8Gbq~fATrQ-{l z3T?#a6+~3}JN*CuA7~^d;J!5P7En~OB*-rqs0J%wU^L;{4phXL)Wo+4>x^%y!FGqP48~6e{*x)r(3JuTwnL>@|rgnmwtJ6 z;oHm0-(FsMacs)-(+l2QSo-|*!l$Pf-&`DVV`0RD!*d=Uo%i_of(J+D-8(%0?xA^i z_RqSpd&cp0$4jdlu56ijefyM~yQW{?Iqg7&!QndV%bWTyZs@ja@2|4l zUu|`2S^K15#TALVYf|;6L};!}H`thEv?bSMNvw8(wM3zv-2eao8E^x|pDc_F3}y^E zASEC_F|f5d%)SsNE!Ds1V#iV$*N(9fJNx{t?P7}hER5n|&aT2dT=Mz?{32T68q(_8rfLeR8vdqA0JNqxY4nxQse*s{|u-= z@h1x-1A`QU4oDbeCj)EH0=2%B%z5bx*j~(-pf9D##cb)nI!=rkTAvtM^dZ)Z?Cc>r>kH8HUX-oqWtAZ{y0n_ccQ1 zcP~3{8n>)^)~RXhu2oGtRyX@}T+@;Ixu^GCdiVIB2OvNhYFM zn$Z_ij_g!&6D~|wp2c3Pti%gQ1w$j`*W$Lh-|K55D{PG5By#>I;j L7A$vmWUvMRnQ~`o diff --git a/plugins/org.argeo.slc.akb.ui/icons/jcrQuery.gif b/plugins/org.argeo.slc.akb.ui/icons/jcrQuery.gif deleted file mode 100644 index 0dc862cbd7d883765b71f5d377a3aed0d13f3645..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmZ?wbhEHb6krfw*v!BnlDS$Sv}@D-znky>op$N_rU!pFKlpp@&HrhazaM<@|J>XE z=imN+`0YOgFfcGE{$ycfVBllW0kVN62rw|PxL&YySiPrW(^-de2MTq%rq6l7%F`5B z;i$8k#Yy1a@~|oIyrOq_^@kI-zfbD?KCS!VgyZ{TP6rm+pV<&{Y@zM(MfQ)D zi5!|~dUT%kv4!@ZHp(BGYII<#$&uMskLC#P?bSat)%^ZU(H)K2yV`7awAyTIvE9{X zyS>F`TeI!fM%zOThKCvrpH{N%uQl3NWBjy|eM7F=<}~&H|Nk=#5uo^!g^_{5ok0iW zUQnDcu-7%XH#N7kwka6s7@C+Xv^7a7%d>Eb%IZt?>#E32nWpdBZ)GgWC@8J%=-h9o z$UkrT>NeYTEF2=!o%(GQ`B>S7clKNEWn~jO)MlZ?$HG3}zTaAvkC{tsy2B+kUM6nw lo0rTa7wm+wC{rAHMhT*Wdpw2cAth z_F~?dS3m#$zxw(A%b)*0{Qm#%@1uWzAOHEW_|K0ezrQZ|`|HBL-&YT9u{yCc?B}bJ zpRdY)zN-BBs`}@v`afTff4*-2>4y8K8y=r-czu7IG;><>%xNv3ui1RM;q&W3VtuL8 z;pN)LR+;{~8`WCjuy9uGfjP2=7pWXxtbTf>{`=DoeKmHg7nDBRCi&~6-i#*eryC_d z?o#`>Oa0d|?KM57i`y+8Z?WCfZ}R=guGjaEY_I1&)Ter|SM6~d=f+yA7dMVPtz`fI z|33pAf#OdVMh1px1|5){pg3V*U)&Jg)ZEhA)~xAh?c|`@-lXAcsjOqKuOEcXJxdMw2YXzgs2FMlJ>OFCLvaKPHtX4eilVt zWA9_pfpT(gH*N$f>RDWA@{^NylYcJnr)J<47188xYQ|vy)!tv-#3jPH$x}{&p+SN} l$x}=xVgZlVBSnS=J^^D9%O}q5N4u?RY;K*{n5@8H4FJ8>>N5ZU diff --git a/plugins/org.argeo.slc.akb.ui/icons/note.gif b/plugins/org.argeo.slc.akb.ui/icons/note.gif deleted file mode 100644 index 6e63b990d9e699207b77dc19e7ae36f64bcc6e2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218 zcmZ?wbhEHb6krfwI3mShSG0Wlr6=M>u}hjwddn@>cN*3f+OBCgTG?v6smowmjd@*x z?W8Kp1&yY2>P>(A{r~6x|8IZ(|NQ&^%b)-M{{8>;@Bg2F|Ns8`Usq`R^WT3UU_b?m zKUo+V7^E0C;ijD34s>Fphs+rp0fGOp9g>oJ;IsJz0sMfzFq#LI7A{W_Zvp<~d{VBXv! IrO03n0CRs|WdHyG diff --git a/plugins/org.argeo.slc.akb.ui/icons/refresh.png b/plugins/org.argeo.slc.akb.ui/icons/refresh.png deleted file mode 100644 index a3884fb4888c2a68f0fa64d523e69da2f0569ab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 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 e=N=)eTF#ocDS|Fz0?o@ diff --git a/plugins/org.argeo.slc.akb.ui/icons/sshCommand.png b/plugins/org.argeo.slc.akb.ui/icons/sshCommand.png deleted file mode 100644 index 14ebb9eb9f062fec2bcb63c31a8ef4b057e3b9ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}NPtg>>;M1%58XR|{J~}0X(=wV zGQ*Zt6mRYiUtJWjx-bGrt}66hp6a_SHE}~i^S;LBy^WKPw*UV>|Ns5?{qybr|NiiQ zzx}M<;`{UM^L$n3WQ2uS7|6HyU0>C>3TQrKNswPKgTu2MX+Tbfr;B4q#jV~xPre2N z9_E|eQ%skd^#1?vAGUI*!b9gJF2c7Xzr_bGikq1#npRri@+9KpmeYPOz4uIiE7kcy z{b4@SiTr+nLysF-OAD8_n6rMiSr}w{;oGqi58ed!Znx4S9h)vJoj)aCR$7yN&8AlQ QexRKUp00i_>zopr02}nXQkUu#%s$>hSsT_51kx{Z)d!ReP*ed8v+^uaTd! zlAp2W?)mlj{8Wt4REy43iOW=p$W@5QREES=hQw8c!BmC7RfD`$fw)zFv{ikuRei5j ze5_S^sa1KVRe7arkG*@DzmcG_lAyAYpRwui`Reic_4xbv`uy4P{Q3F(KMVr=00001 zbW%=J06^y0W&i*Hok>JNRCwBr&siIRP!NFO7CW6JvK>o~rR+scCxr3;|C7ce-MH}0 z)x1|TlJrN>A}d00YFQ3~t3jIPA}ky5P@c+AR^<8$VPk+^E#=hvJa4QKb|wrynOlTW z2XwtsE*8{wbC2M4fyObVF}<}s1b+fEVp)U`tLGye8Jn{HgCv4fGYhm)>@lCgr3u!EAY?(+Kb_51ny z{P_9%hMK;NpTdTeu8Wqd@bvqWrpB7A%c8T-sJPRtyw%?5_}%CC-{|+`?D^;J`R(%h z^Y;7P=l9>~_}=LE;p+J6@cH)m`;eNb=I;6M_51Sn`<9)g_4xbu`TLcfq?@6kp`@Ir zsF8yg6Lgc~kJEFpM$VhkZHMJps4l$Db! zMJgGKdkh&TMI#`iq@*K74<3wT7#|i7MGhSu7qqms1VsV`2L`;o2Lc03#6v*atiDp{W#fG;S$h%aZO^ n52;T$8);2 z7fskzHf7)c|Nr|`n*)GqI7)*2f`MERV7S-3HxekunB?v5!Y-EB@fyhCEbxdd2GSm2 z>~=ES4#?2+ba4#fxSp)h&cvqE!^9?Wc!7?ti(urEIkM*%x)}|bn;koqx;W%apBf07 acr#W;7-basZI}nt$>8bg=d#Wzp$PzIxIJG0 diff --git a/plugins/org.argeo.slc.akb.ui/plugin.xml b/plugins/org.argeo.slc.akb.ui/plugin.xml deleted file mode 100644 index bc64576e2..000000000 --- a/plugins/org.argeo.slc.akb.ui/plugin.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plugins/org.argeo.slc.akb.ui/pom.xml b/plugins/org.argeo.slc.akb.ui/pom.xml deleted file mode 100644 index c40bca7b1..000000000 --- a/plugins/org.argeo.slc.akb.ui/pom.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - 4.0.0 - - org.argeo.slc - plugins - 1.1.15-SNAPSHOT - .. - - org.argeo.slc.akb.ui - SLC AKB UI - jar - - - - org.apache.felix - maven-bundle-plugin - - - org.argeo.slc.akb.ui.AkbUiPlugin - - org.eclipse.ui;resolution:=optional, - org.eclipse.core.runtime;resolution:=optional, - org.eclipse.rap.ui;resolution:=optional, - org.eclipse.rap.ui.workbench;resolution:=optional - - - *, - org.argeo.eclipse.spring, - javax.jcr.nodetype - - - - - - - - - - - org.argeo.slc - org.argeo.slc.akb.services - 1.1.15-SNAPSHOT - - - - - - org.argeo.commons.base - org.argeo.eclipse.ui - ${version.argeo-commons} - - - org.argeo.commons.security - org.argeo.security.ui - ${version.argeo-commons} - - - - - org.argeo.commons.base - org.argeo.eclipse.ui.rap - ${version.argeo-commons} - provided - - - - org.argeo.commons.base - org.argeo.eclipse.ui.jcr - ${version.argeo-commons} - - - - org.argeo.commons.server - org.argeo.server.jcr - ${version.argeo-commons} - - - \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbEnvPerspective.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbEnvPerspective.java deleted file mode 100644 index fdab3e1a9..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbEnvPerspective.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.argeo.slc.akb.ui; - -import org.argeo.slc.akb.ui.views.EnvironmentsTreeView; -import org.eclipse.ui.IFolderLayout; -import org.eclipse.ui.IPageLayout; -import org.eclipse.ui.IPerspectiveFactory; - -public class AkbEnvPerspective implements IPerspectiveFactory { - public static final String ID = AkbUiPlugin.PLUGIN_ID - + ".akbEnvPerspective"; - - @Override - public void createInitialLayout(IPageLayout layout) { - String editorArea = layout.getEditorArea(); - layout.setEditorAreaVisible(true); - layout.setFixed(false); - - IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, - 0.3f, editorArea); - left.addView(EnvironmentsTreeView.ID); - // left.addView(AkbDefaultView.ID); - } -} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbImages.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbImages.java deleted file mode 100644 index cf3963377..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbImages.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.argeo.slc.akb.ui; - -import org.argeo.slc.akb.AkbTypes; -import org.eclipse.swt.graphics.Image; - -/** Shared icons. */ -public class AkbImages { - - public final static Image LOGO_SMALL = AkbUiPlugin.getImageDescriptor( - "icons/smallerOrnamentLogo.png").createImage(); - - public final static Image TEMPLATE = AkbUiPlugin.getImageDescriptor( - "icons/template.gif").createImage(); - public final static Image ACTIVE_ENV = AkbUiPlugin.getImageDescriptor( - "icons/environment.png").createImage(); - - public final static Image CONNECTOR_FOLDER = AkbUiPlugin - .getImageDescriptor("icons/connectors.gif").createImage(); - - public final static Image ITEM_FOLDER = AkbUiPlugin.getImageDescriptor( - "icons/itemFolder.gif").createImage(); - - public final static Image CONNECTOR_ALIAS = AkbUiPlugin.getImageDescriptor( - "icons/addConnector.gif").createImage(); - - public final static Image DEFAULT_CONNECTOR = AkbUiPlugin.getImageDescriptor( - "icons/addConnector.gif").createImage(); - - public final static Image JDBC_CONNECTOR = AkbUiPlugin.getImageDescriptor( - "icons/jdbcConnector.gif").createImage(); - public final static Image JDBC_QUERY = AkbUiPlugin.getImageDescriptor( - "icons/jdbcQuery.gif").createImage(); - - public final static Image SSH_CONNECTOR = AkbUiPlugin.getImageDescriptor( - "icons/sshConnector.png").createImage(); - public final static Image SSH_COMMAND = AkbUiPlugin.getImageDescriptor( - "icons/sshCommand.png").createImage(); - public final static Image SSH_FILE = AkbUiPlugin.getImageDescriptor( - "icons/sshFile.gif").createImage(); - - public static Image getImageForAkbNodeType(String nodeType) { - if (AkbTypes.AKB_JDBC_CONNECTOR.equals(nodeType)) - return JDBC_CONNECTOR; - else if (AkbTypes.AKB_SSH_CONNECTOR.equals(nodeType)) - return SSH_CONNECTOR; - else - return null; - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbMessages.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbMessages.java deleted file mode 100644 index 521150378..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbMessages.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.argeo.slc.akb.ui; - -import java.util.HashMap; -import java.util.Map; - -import org.argeo.slc.akb.AkbTypes; - -// TODO implement i18n -public class AkbMessages { - - // Shortcut to provide a label for each nodeType - public final static Map typeLabels = new HashMap() { - private static final long serialVersionUID = 6790463815849374432L; - - { - put(AkbTypes.AKB_ENV_TEMPLATE, "Template environment"); - put(AkbTypes.AKB_ENV, "Active environment"); - put(AkbTypes.AKB_CONNECTOR_FOLDER, "Connector folder"); - put(AkbTypes.AKB_CONNECTOR, "Connector"); - put(AkbTypes.AKB_CONNECTOR_ALIAS, "Connector alias"); - put(AkbTypes.AKB_SSH_CONNECTOR, "SSH connector"); - put(AkbTypes.AKB_JDBC_CONNECTOR, "JDBC connector"); - put(AkbTypes.AKB_JCR_CONNECTOR, "JCR connector"); - put(AkbTypes.AKB_ITEM_FOLDER, "Item folder"); - put(AkbTypes.AKB_ITEM, "Item"); - put(AkbTypes.AKB_SSH_FILE, "SSH file"); - put(AkbTypes.AKB_SSH_COMMAND, "SSH command"); - put(AkbTypes.AKB_JDBC_QUERY, "JDBC query"); - put(AkbTypes.AKB_NOTE, "Note"); - } - }; - - public final static String getLabelForType(String nodeType) { - return typeLabels.get(nodeType); - } - -} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbTemplatesPerspective.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbTemplatesPerspective.java deleted file mode 100644 index 0d2aeff6f..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbTemplatesPerspective.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.argeo.slc.akb.ui; - -import org.argeo.slc.akb.ui.views.AkbDefaultView; -import org.argeo.slc.akb.ui.views.AkbTemplatesTreeView; -import org.eclipse.ui.IFolderLayout; -import org.eclipse.ui.IPageLayout; -import org.eclipse.ui.IPerspectiveFactory; - -public class AkbTemplatesPerspective implements IPerspectiveFactory { - public static final String ID = AkbUiPlugin.PLUGIN_ID + ".akbTemplatesPerspective"; - - @Override - public void createInitialLayout(IPageLayout layout) { - String editorArea = layout.getEditorArea(); - layout.setEditorAreaVisible(true); - layout.setFixed(false); - - IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, - 0.3f, editorArea); - left.addView(AkbTemplatesTreeView.ID); - left.addView(AkbDefaultView.ID); - } -} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiConstants.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiConstants.java deleted file mode 100644 index 70f9e5a9a..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiConstants.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.argeo.slc.akb.ui; - -/** Defines some constants that are used all across the user interface **/ -public interface AkbUiConstants { - - /* Default formats */ - public final static String DEFAULT_DATE_FORMAT = "EEE, dd MMM yyyy"; - public final static String DEFAULT_DATE_TIME_FORMAT = "EEE, dd MMM yyyy 'at' HH:mm"; - public final static String DEFAULT_NUMBER_FORMAT = "#,##0.0"; -} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiPlugin.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiPlugin.java deleted file mode 100644 index 03f20c1ca..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiPlugin.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.argeo.slc.akb.ui; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.osgi.framework.BundleContext; - -/** - * The activator class controls the plug-in life cycle - */ -public class AkbUiPlugin extends AbstractUIPlugin { - - // The plug-in ID - public static final String PLUGIN_ID = "org.argeo.slc.akb.ui"; //$NON-NLS-1$ - - // The shared instance - private static AkbUiPlugin plugin; - - /** - * The constructor - */ - public AkbUiPlugin() { - } - - /* - * (non-Javadoc) - * - * @see - * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext - * ) - */ - public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - } - - /* - * (non-Javadoc) - * - * @see - * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext - * ) - */ - public void stop(BundleContext context) throws Exception { - plugin = null; - super.stop(context); - } - - /** - * Returns the shared instance - * - * @return the shared instance - */ - public static AkbUiPlugin getDefault() { - return plugin; - } - - /** - * Returns an image descriptor for the image file at the given plug-in - * relative path - * - * @param path - * the path - * @return the image descriptor - */ - public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiUtils.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiUtils.java deleted file mode 100644 index 8012a8b08..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiUtils.java +++ /dev/null @@ -1,322 +0,0 @@ -package org.argeo.slc.akb.ui; - -import java.util.Calendar; -import java.util.Map; - -import javax.jcr.Node; -import javax.jcr.PropertyType; -import javax.jcr.RepositoryException; - -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.jface.action.IContributionItem; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.layout.FormAttachment; -import org.eclipse.swt.layout.FormData; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.layout.RowData; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.forms.AbstractFormPart; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.menus.CommandContributionItem; -import org.eclipse.ui.menus.CommandContributionItemParameter; -import org.eclipse.ui.services.IServiceLocator; - -/** Some helper methods that factorize widely used snippets in people UI */ -public class AkbUiUtils { - - /** - * Shortcut to refresh the value of a Text given a Node and a - * property Name - */ - public static String refreshTextWidgetValue(Text text, Node entity, - String propName) { - String tmpStr = AkbJcrUtils.get(entity, propName); - if (AkbJcrUtils.checkNotEmptyString(tmpStr)) - text.setText(tmpStr); - return tmpStr; - } - - /** - * Shortcut to refresh a Text widget given a Node in a form and - * a property Name. Also manages its enable state - */ - public static String refreshFormTextWidget(Text text, Node entity, - String propName) { - String tmpStr = AkbJcrUtils.get(entity, propName); - if (AkbJcrUtils.checkNotEmptyString(tmpStr)) - text.setText(tmpStr); - text.setEnabled(AkbJcrUtils.isNodeCheckedOutByMe(entity)); - return tmpStr; - } - - /** - * Shortcut to refresh a Text widget given a Node in a form and - * a property Name. Also manages its enable state and set a default message - * if corresponding Text value is empty - */ - public static String refreshFormTextWidget(Text text, Node entity, - String propName, String defaultMsg) { - String tmpStr = refreshFormTextWidget(text, entity, propName); - if (AkbJcrUtils.isEmptyString(tmpStr) - && AkbJcrUtils.checkNotEmptyString(defaultMsg)) - text.setMessage(defaultMsg); - return tmpStr; - } - - /** - * Shortcut to refresh a Check box Button widget given a Node - * in a form and a property Name. - */ - public static boolean refreshCheckBoxWidget(Button button, Node entity, - String propName) { - Boolean tmp = null; - try { - if (entity.hasProperty(propName)) { - tmp = entity.getProperty(propName).getBoolean(); - button.setSelection(tmp); - } - } catch (RepositoryException re) { - throw new AkbException("unable get boolean value for property " - + propName); - } - return tmp; - } - - /** - * Shortcut to add a default modify listeners to a Text widget - * that is bound a JCR String Property. Any change in the text is - * immediately stored in the active session, but no save is done. - */ - public static void addTextModifyListener(final Text text, final Node node, - final String propName, final AbstractFormPart part) { - text.addModifyListener(new ModifyListener() { - @Override - public void modifyText(ModifyEvent event) { - if (setJcrProperty(node, propName, PropertyType.STRING, - text.getText())) - part.markDirty(); - } - }); - } - - /** - * Centralizes management of updating property value. Among other to avoid - * infinite loop when the new value is the same as the ones that is already - * stored in JCR. - * - * @return true if the value as changed - */ - public static boolean setJcrProperty(Node node, String propName, - int propertyType, Object value) { - try { - // int propertyType = getPic().getProperty(propName).getType(); - switch (propertyType) { - case PropertyType.STRING: - if ("".equals((String) value) - && (!node.hasProperty(propName) || node - .hasProperty(propName) - && "".equals(node.getProperty(propName) - .getString()))) - // workaround the fact that the Text widget value cannot be - // set to null - return false; - else if (node.hasProperty(propName) - && node.getProperty(propName).getString() - .equals((String) value)) - // nothing changed yet - return false; - else { - node.setProperty(propName, (String) value); - return true; - } - case PropertyType.BOOLEAN: - if (node.hasProperty(propName) - && node.getProperty(propName).getBoolean() == (Boolean) value) - // nothing changed yet - return false; - else { - node.setProperty(propName, (Boolean) value); - return true; - } - case PropertyType.DATE: - if (node.hasProperty(propName) - && node.getProperty(propName).getDate() - .equals((Calendar) value)) - // nothing changed yet - return false; - else { - node.setProperty(propName, (Calendar) value); - return true; - } - case PropertyType.LONG: - Long lgValue = (Long) value; - - if (lgValue == null) - lgValue = 0L; - - if (node.hasProperty(propName) - && node.getProperty(propName).getLong() == lgValue) - // nothing changed yet - return false; - else { - node.setProperty(propName, lgValue); - return true; - } - - default: - throw new AkbException("Unimplemented save for property type: " - + propertyType + " - property: " + propName); - - } - } catch (RepositoryException re) { - throw new AkbException("Error while setting property" + propName - + " - propertyType: " + propertyType, re); - } - } - - // //////////////////////// - // LAYOUTS AND STYLES - - /** shortcut to set form data while dealing with switching panel */ - public static void setSwitchingFormData(Composite composite) { - FormData fdLabel = new FormData(); - fdLabel.top = new FormAttachment(0, 0); - fdLabel.left = new FormAttachment(0, 0); - fdLabel.right = new FormAttachment(100, 0); - fdLabel.bottom = new FormAttachment(100, 0); - composite.setLayoutData(fdLabel); - } - - public static void setTableDefaultStyle(TableViewer viewer, - int customItemHeight) { - Table table = viewer.getTable(); - table.setLinesVisible(true); - table.setHeaderVisible(false); - } - - /** - * Shortcut to provide a gridlayout with no margin and no spacing (dafault - * are normally 5 px) - */ - public static GridLayout gridLayoutNoBorder() { - return gridLayoutNoBorder(1); - } - - /** - * Shortcut to provide a gridlayout with no margin and no spacing (default - * are normally 5 px) with the given column number (equals width is false). - */ - public static GridLayout gridLayoutNoBorder(int nbOfCol) { - GridLayout gl = new GridLayout(nbOfCol, false); - gl.marginWidth = gl.marginHeight = gl.horizontalSpacing = gl.verticalSpacing = 0; - return gl; - } - - /** Creates a text widget with RowData already set */ - public static Text createRDText(FormToolkit toolkit, Composite parent, - String msg, String toolTip, int width) { - Text text = toolkit.createText(parent, "", SWT.BORDER | SWT.SINGLE - | SWT.LEFT); - text.setMessage(msg); - text.setToolTipText(toolTip); - text.setLayoutData(new RowData(width, SWT.DEFAULT)); - return text; - } - - /** - * Creates a text widget with GridData already set - * - * @param toolkit - * @param parent - * @param msg - * @param toolTip - * @param width - * @param colSpan - * @return - */ - public static Text createGDText(FormToolkit toolkit, Composite parent, - String msg, String toolTip, int width, int colSpan) { - Text text = toolkit.createText(parent, "", SWT.BORDER | SWT.SINGLE - | SWT.LEFT); - text.setMessage(msg); - text.setToolTipText(toolTip); - GridData gd = new GridData(SWT.FILL, SWT.FILL, true, false); - gd.widthHint = width; - gd.horizontalSpan = colSpan; - text.setLayoutData(gd); - return text; - } - - /** - * Shortcut to quickly get a FormData object with configured FormAttachment - * - * @param left - * @param top - * @param right - * @param bottom - * @return - */ - public static FormData createformData(int left, int top, int right, - int bottom) { - FormData formData = new FormData(); - formData.left = new FormAttachment(left, 0); - formData.top = new FormAttachment(top, 0); - formData.right = new FormAttachment(right, 0); - formData.bottom = new FormAttachment(bottom, 0); - return formData; - } - - // ////////////////////////////// - // / COMMANDS - public static CommandContributionItem createContributionItem( - IMenuManager menuManager, IServiceLocator locator, String itemId, - String cmdId, String label, ImageDescriptor icon, - Map params) { - - CommandContributionItemParameter contributionItemParameter = new CommandContributionItemParameter( - locator, itemId, cmdId, SWT.PUSH); - - contributionItemParameter.label = label; - contributionItemParameter.icon = icon; - - if (params != null) - contributionItemParameter.parameters = params; - CommandContributionItem cci = new CommandContributionItem( - contributionItemParameter); - return cci; - } - - /** - * Commodities the refresh of a single command with a map of parameters in a - * Menu.aboutToShow method to simplify further development - * - * @param menuManager - * @param locator - * @param cmdId - * @param label - * @param iconPath - * @param showCommand - */ - public static void refreshParameterizedCommand(IMenuManager menuManager, - IServiceLocator locator, String itemId, String cmdId, String label, - ImageDescriptor icon, boolean showCommand, - Map params) { - IContributionItem ici = menuManager.find(itemId); - if (ici != null) - menuManager.remove(ici); - if (showCommand) - menuManager.add(createContributionItem(menuManager, locator, - itemId, cmdId, label, icon, params)); - } - -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/CreateAkbNode.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/CreateAkbNode.java deleted file mode 100644 index 19de92819..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/CreateAkbNode.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.argeo.slc.akb.ui.commands; - -import javax.jcr.Node; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.jcr.JcrUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.AkbTypes; -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.dialogs.AddItemDialog; -import org.argeo.slc.akb.ui.wizards.CreateEnvInstanceWizard; -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.handlers.HandlerUtil; - -/** - * Opens corresponding wizard to create a new AKB Node - */ -public class CreateAkbNode extends AbstractHandler { - public final static String ID = AkbUiPlugin.PLUGIN_ID + ".createAkbNode"; - - /* DEPENDENCY INJECTION */ - private AkbService akbService; - - public final static String PARAM_PARENT_NODE_JCR_ID = "param.parentNodeJcrId"; - public final static String PARAM_NODE_TYPE = "param.nodeType"; - - public Object execute(ExecutionEvent event) throws ExecutionException { - - String parentNodeJcrId = event.getParameter(PARAM_PARENT_NODE_JCR_ID); - String nodeType = event.getParameter(PARAM_NODE_TYPE); - Session session = null; - try { - session = akbService.getRepository().login(); - Node node = createNewNode(HandlerUtil.getActiveShell(event), - session, nodeType, parentNodeJcrId); - // no node has been created, return - if (node == null) - return null; - } catch (RepositoryException e) { - throw new AkbException("unexpected JCR error while opening " - + nodeType + " editor", e); - } finally { - JcrUtils.logoutQuietly(session); - } - return null; - } - - private Node createNewNode(Shell shell, Session session, String nodeType, - String parentNodeJcrId) throws RepositoryException { - Node node = null; - if (AkbTypes.AKB_ITEM.equals(nodeType)) { - Node parNode = session.getNodeByIdentifier(parentNodeJcrId); - AddItemDialog dialog = new AddItemDialog(shell, "Add new item", - parNode); - dialog.open(); - node = dialog.getNewNode(); - } else if (AkbTypes.AKB_ENV.equals(nodeType)) { - CreateEnvInstanceWizard wizard = new CreateEnvInstanceWizard( - akbService, session); - WizardDialog dialog = new WizardDialog(shell, wizard); - dialog.open(); - node = wizard.getCreatedNode(); - } else - return null; - // { - // String name = SingleValue - // .ask("Create " - // + AkbMessages - // .getLabelForType(nodeSubtype == null ? nodeType - // : nodeSubtype), - // "Please enter a name for the corresponding " - // + AkbMessages - // .getLabelForType(nodeSubtype == null ? nodeType - // : nodeSubtype)); - // if (name == null) - // return null; - // if (AkbTypes.AKB_ENV_TEMPLATE.equals(nodeType)) { - // node = akbService.createAkbTemplate( - // session.getNodeByIdentifier(parentNodeJcrId), name); - // } else if (AkbTypes.AKB_CONNECTOR_ALIAS.equals(nodeType)) { - // // the Jcr ID of the corresponding template must be passed to - // // create a new alias - // node = session.getNodeByIdentifier(parentNodeJcrId); - // akbService.createConnectorAlias(node, name, nodeSubtype); - // } else { - // Node parentNode = session.getNodeByIdentifier(parentNodeJcrId); - // node = parentNode.addNode(name, nodeType); - // node.setProperty(Property.JCR_TITLE, name); - // } - // } - // corresponding node is saved but not checked in, in order to ease - // cancel actions. - session.save(); - return node; - } - - public void setAkbService(AkbService akbService) { - this.akbService = akbService; - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/DeleteAkbNodes.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/DeleteAkbNodes.java deleted file mode 100644 index 3a3e9a0a9..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/DeleteAkbNodes.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.argeo.slc.akb.ui.commands; - -import javax.jcr.Node; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.jcr.JcrUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbTypes; -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.editors.AkbNodeEditorInput; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.handlers.HandlerUtil; - -/** - * Deletes one or more akb nodes also closing the corresponding editors if - * needed - */ -public class DeleteAkbNodes extends AbstractHandler { - public final static String ID = AkbUiPlugin.PLUGIN_ID + ".deleteAkbNodes"; - - /* DEPENDENCY INJECTION */ - private Repository repository; - - public final static String PARAM_NODE_JCR_ID = "param.nodeJcrId"; - - public Object execute(ExecutionEvent event) throws ExecutionException { - - String nodeJcrId = event.getParameter(PARAM_NODE_JCR_ID); - - Session session = null; - try { - session = repository.login(); - - // caches current Page - IWorkbenchPage currentPage = HandlerUtil.getActiveWorkbenchWindow( - event).getActivePage(); - - session = repository.login(); - Node node = null; - - if (nodeJcrId != null) - node = session.getNodeByIdentifier(nodeJcrId); - - // We must be in a template or on the root of an env instance to - // delete nodes. - Node template = node.isNodeType(AkbTypes.AKB_ENV) ? node - : AkbJcrUtils.getCurrentTemplate(node); - - if (node != null) { - Boolean ok = MessageDialog.openConfirm( - HandlerUtil.getActiveShell(event), "Confirm deletion", - "Do you want to delete this item?"); - - if (ok) { - IEditorPart currPart = currentPage - .findEditor(new AkbNodeEditorInput(template - .getIdentifier(), nodeJcrId)); - if (currPart != null) - currentPage.closeEditor(currPart, false); - - node.remove(); - session.save(); - } - } - } catch (RepositoryException e) { - throw new AkbException("JCR error while deleting node" + nodeJcrId - + " editor", e); - } finally { - JcrUtils.logoutQuietly(session); - } - return null; - } - - /* DEPENDENCY INJECTION */ - public void setRepository(Repository repository) { - this.repository = repository; - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/ForceRefresh.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/ForceRefresh.java deleted file mode 100644 index 0344b7beb..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/ForceRefresh.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.argeo.slc.akb.ui.commands; - -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.utils.Refreshable; -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.handlers.HandlerUtil; - -/** - * Force refreshment of the active part if it implements - * Refreshable interface. - */ -public class ForceRefresh extends AbstractHandler { - - public final static String ID = AkbUiPlugin.PLUGIN_ID + ".forceRefresh"; - - public Object execute(ExecutionEvent event) throws ExecutionException { - - IWorkbenchPart part = HandlerUtil.getActiveWorkbenchWindow(event) - .getActivePage().getActivePart(); - if (part instanceof Refreshable) - ((Refreshable) part).forceRefresh(null); - return null; - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/OpenAkbNodeEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/OpenAkbNodeEditor.java deleted file mode 100644 index cdd7dd5bd..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/OpenAkbNodeEditor.java +++ /dev/null @@ -1,178 +0,0 @@ -package org.argeo.slc.akb.ui.commands; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.eclipse.ui.dialogs.SingleValue; -import org.argeo.jcr.JcrUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.AkbTypes; -import org.argeo.slc.akb.ui.AkbMessages; -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.dialogs.AddItemDialog; -import org.argeo.slc.akb.ui.editors.AkbNodeEditorInput; -import org.argeo.slc.akb.ui.editors.ConnectorAliasEditor; -import org.argeo.slc.akb.ui.editors.EnvTemplateEditor; -import org.argeo.slc.akb.ui.editors.JdbcQueryTemplateEditor; -import org.argeo.slc.akb.ui.editors.SshCommandTemplateEditor; -import org.argeo.slc.akb.ui.editors.SshFileTemplateEditor; -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.handlers.HandlerUtil; - -/** - * Opens or show an AKB specific node in a single repository / single workspace - * environment given some parameters, namely : - *
    - *
  • PARAM_NODE_JCR_ID: the corresponding JCR ID might be null to create a new - * one
  • - *
  • PARAM_NODE_TYPE: jcr type of the node to create
  • - *
  • PARAM_PARENT_NODE_JCR_ID: Only used in the case of the creation of a new - * node.
  • - *
- */ -public class OpenAkbNodeEditor extends AbstractHandler { - public final static String ID = AkbUiPlugin.PLUGIN_ID - + ".openAkbNodeEditor"; - - /* DEPENDENCY INJECTION */ - private Repository repository; - private AkbService akbService; - - public final static String PARAM_NODE_JCR_ID = "param.nodeJcrId"; - public final static String PARAM_NODE_TYPE = "param.nodeType"; - public final static String PARAM_NODE_SUBTYPE = "param.nodeSubtype"; - public final static String PARAM_CURR_ENV_JCR_ID = "param.currEnvJcrId"; - public final static String PARAM_PARENT_NODE_JCR_ID = "param.parentNodeJcrId"; - - public Object execute(ExecutionEvent event) throws ExecutionException { - - String nodeType = event.getParameter(PARAM_NODE_TYPE); - String nodeSubtype = event.getParameter(PARAM_NODE_SUBTYPE); - String currEnvJcrId = event.getParameter(PARAM_CURR_ENV_JCR_ID); - String nodeJcrId = event.getParameter(PARAM_NODE_JCR_ID); - String parentNodeJcrId = event.getParameter(PARAM_PARENT_NODE_JCR_ID); - - Session session = null; - try { - // caches current Page - IWorkbenchPage currentPage = HandlerUtil.getActiveWorkbenchWindow( - event).getActivePage(); - - session = repository.login(); - Node node = null; - - if (nodeJcrId == null) - if (parentNodeJcrId == null) - throw new AkbException( - "Define a parent node to create a new node"); - else - node = createNewNode(session, nodeType, nodeSubtype, - parentNodeJcrId); - else - node = session.getNodeByIdentifier(nodeJcrId); - - // no node has been found or created, return - if (node == null) - return null; - - String editorId = getEditorForNode(node); - - // no editor has been found, return silently - if (editorId == null) - return null; - - AkbNodeEditorInput eei = new AkbNodeEditorInput(currEnvJcrId, - node.getIdentifier()); - - currentPage.openEditor(eei, editorId); - } catch (PartInitException pie) { - throw new AkbException( - "Unexpected PartInitException while opening akb node editor", - pie); - } catch (RepositoryException e) { - throw new AkbException("unexpected JCR error while opening " - + nodeType + " editor", e); - } finally { - JcrUtils.logoutQuietly(session); - } - return null; - } - - private Node createNewNode(Session session, String nodeType, - String nodeSubtype, String parentNodeJcrId) - throws RepositoryException { - Node node = null; - - if (AkbTypes.AKB_ITEM.equals(nodeType)) { - Node parNode = session.getNodeByIdentifier(parentNodeJcrId); - AddItemDialog dialog = new AddItemDialog(Display.getDefault() - .getActiveShell(), "Add new item", parNode); - dialog.open(); - node = dialog.getNewNode(); - } else { - String name = SingleValue - .ask("Create " - + AkbMessages - .getLabelForType(nodeSubtype == null ? nodeType - : nodeSubtype), - "Please enter a name for the corresponding " - + AkbMessages - .getLabelForType(nodeSubtype == null ? nodeType - : nodeSubtype)); - if (name == null) - return null; - if (AkbTypes.AKB_ENV_TEMPLATE.equals(nodeType)) { - node = akbService.createAkbTemplate( - session.getNodeByIdentifier(parentNodeJcrId), name); - } else if (AkbTypes.AKB_CONNECTOR_ALIAS.equals(nodeType)) { - // the Jcr ID of the corresponding template must be passed to - // create a new alias - node = session.getNodeByIdentifier(parentNodeJcrId); - akbService.createConnectorAlias(node, name, nodeSubtype); - } else { - Node parentNode = session.getNodeByIdentifier(parentNodeJcrId); - node = parentNode.addNode(name, nodeType); - node.setProperty(Property.JCR_TITLE, name); - } - } - // corresponding node is saved but not checked in, in order to ease - // cancel actions. - session.save(); - return node; - } - - private String getEditorForNode(Node node) throws RepositoryException { - String editorId = null; - if (node.isNodeType(AkbTypes.AKB_CONNECTOR_ALIAS)) - editorId = ConnectorAliasEditor.ID; - else if (node.isNodeType(AkbTypes.AKB_ENV_TEMPLATE) || node.isNodeType(AkbTypes.AKB_ENV)) - editorId = EnvTemplateEditor.ID; - else if (node.isNodeType(AkbTypes.AKB_SSH_FILE)) - editorId = SshFileTemplateEditor.ID; - else if (node.isNodeType(AkbTypes.AKB_SSH_COMMAND)) - editorId = SshCommandTemplateEditor.ID; - else if (node.isNodeType(AkbTypes.AKB_JDBC_QUERY)) - editorId = JdbcQueryTemplateEditor.ID; - // else - // throw new AkbException("Editor is undefined for node " + node); - return editorId; - } - - /* DEPENDENCY INJECTION */ - public void setRepository(Repository repository) { - this.repository = repository; - } - - public void setAkbService(AkbService akbService) { - this.akbService = akbService; - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/OpenUrl.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/OpenUrl.java deleted file mode 100644 index 82276684e..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/OpenUrl.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.argeo.slc.akb.ui.commands; - -import java.net.URL; - -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.ui.PlatformUI; - -/** - * Open various predefine URL on the web to ease end user understanding of the - * app. - */ -public class OpenUrl extends AbstractHandler { - - public final static String ID = AkbUiPlugin.PLUGIN_ID + ".openUrl"; - public final static String PARAM_URL_TYPE = "param.urlType"; - - public final static String PARAM_VALUE_TRACKER = "tracker"; - public final static String PARAM_VALUE_WIKI = "wiki"; - - private final static String TRACKER_URL = "https://www.argeo.org/bugzilla/enter_bug.cgi?product=slc&component=akb"; - private final static String WIKI_URL = "https://www.argeo.org/wiki/SLC_Active_Knowledge_Base"; - - public Object execute(ExecutionEvent event) throws ExecutionException { - String urlType = event.getParameter(PARAM_URL_TYPE); - try { - URL url = null; - if (PARAM_VALUE_TRACKER.equals(urlType)) - url = new URL(TRACKER_URL); - else if (PARAM_VALUE_WIKI.equals(urlType)) - url = new URL(WIKI_URL); - else - return null; - PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser() - .openURL(url); - } catch (Exception e) { - throw new AkbException("Unable to open browser page", e); - } - return null; - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ActiveItemHeaderComposite.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ActiveItemHeaderComposite.java deleted file mode 100644 index 92e746945..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ActiveItemHeaderComposite.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.argeo.slc.akb.ui.composites; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.RepositoryException; - -import org.argeo.eclipse.ui.utils.CommandUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.ui.commands.ForceRefresh; -import org.argeo.slc.akb.ui.wizards.ActiveConnectorWizard; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Link; -import org.eclipse.ui.forms.AbstractFormPart; -import org.eclipse.ui.forms.IManagedForm; -import org.eclipse.ui.forms.widgets.FormToolkit; - -public class ActiveItemHeaderComposite extends Composite { - - private final AkbService akbService; - private final Node envNode; - private final Node itemNode; - private final FormToolkit toolkit; - private final IManagedForm form; - // Don't forget to unregister on dispose - private AbstractFormPart formPart; - - /** - * - * @param parent - * @param style - * @param toolkit - * @param form - * @param envNode - * @param itemNode - * @param akbService - */ - public ActiveItemHeaderComposite(Composite parent, int style, - FormToolkit toolkit, IManagedForm form, Node envNode, - Node itemNode, AkbService akbService) { - super(parent, style); - this.envNode = envNode; - this.itemNode = itemNode; - this.toolkit = toolkit; - this.form = form; - this.akbService = akbService; - populate(); - toolkit.adapt(this); - } - - private void populate() { - // Initialization - Composite parent = this; - - parent.setLayout(new GridLayout(3, false)); - - final Label envLbl = toolkit.createLabel(parent, ""); - - final Link editActiveConnLk = new Link(parent, SWT.NONE); - toolkit.adapt(editActiveConnLk, false, false); - editActiveConnLk.setText("Edit Connector"); - editActiveConnLk.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, true, - false)); - - final Link refreshLk = new Link(parent, SWT.NONE); - toolkit.adapt(refreshLk, false, false); - refreshLk.setText("Refresh"); - - new Label(parent, SWT.SEPARATOR | SWT.SHADOW_OUT | SWT.HORIZONTAL) - .setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, - 3, 1)); - - // Part Management - final AbstractFormPart part = new AbstractFormPart() { - public void refresh() { - super.refresh(); - // update display value - envLbl.setText("Environment: " - + AkbJcrUtils.get(envNode, Property.JCR_TITLE) - + " - Connector:" - + AkbJcrUtils.get(itemNode, Property.JCR_TITLE)); - - // Node activeConnector = - // akbService.getActiveConnectorByAlias(envNode, - // AkbJcrUtils.get(itemNode, - // AkbNames.AKB_CONNECTOR_ALIAS_PATH)); - // if - // (AkbJcrUtils.isEmptyString(AkbJcrUtils.get(activeConnector, - // AkbNames.AKB_CONNECTOR_URL))) - // conLbl.setImage(SWT.); - } - }; - - // Listeners - editActiveConnLk.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(final SelectionEvent event) { - try { - String pathId = AkbJcrUtils.get(itemNode, - AkbNames.AKB_USED_CONNECTOR); - - Node activeConnector = akbService - .getActiveConnectorByAlias(envNode, pathId); - - ActiveConnectorWizard wizard = new ActiveConnectorWizard( - akbService, activeConnector); - WizardDialog dialog = new WizardDialog(getShell(), wizard); - dialog.open(); - - // String id = AkbJcrUtils - // .getIdentifierQuietly(activeConnector); - // Map params = new HashMap(); - // params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID, id); - // params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, - // AkbJcrUtils.getIdentifierQuietly(envNode)); - // - // CommandUtils.callCommand(OpenAkbNodeEditor.ID, params); - } catch (RepositoryException e) { - throw new AkbException("Error opening active connector", e); - } - } - }); - - refreshLk.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(final SelectionEvent event) { - CommandUtils.callCommand(ForceRefresh.ID); - } - }); - form.addPart(part); - } - - @Override - public boolean setFocus() { - return true; - } - - protected void disposePart(AbstractFormPart part) { - if (part != null) { - form.removePart(part); - part.dispose(); - } - } - - @Override - public void dispose() { - disposePart(formPart); - super.dispose(); - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/AkbItemsTableComposite.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/AkbItemsTableComposite.java deleted file mode 100644 index d2da5791b..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/AkbItemsTableComposite.java +++ /dev/null @@ -1,356 +0,0 @@ -package org.argeo.slc.akb.ui.composites; - -import java.util.ArrayList; -import java.util.List; - -import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.Property; -import javax.jcr.PropertyType; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.nodetype.NodeType; -import javax.jcr.query.QueryManager; -import javax.jcr.query.QueryResult; -import javax.jcr.query.qom.Constraint; -import javax.jcr.query.qom.Ordering; -import javax.jcr.query.qom.QueryObjectModel; -import javax.jcr.query.qom.QueryObjectModelFactory; -import javax.jcr.query.qom.Selector; -import javax.jcr.query.qom.StaticOperand; - -import org.argeo.eclipse.ui.EclipseUiUtils; -import org.argeo.eclipse.ui.jcr.JcrUiUtils; -import org.argeo.eclipse.ui.jcr.lists.ColumnDefinition; -import org.argeo.eclipse.ui.jcr.lists.NodeViewerComparator; -import org.argeo.eclipse.ui.jcr.lists.SimpleJcrNodeLabelProvider; -import org.argeo.eclipse.ui.specific.EclipseUiSpecificUtils; -import org.argeo.eclipse.ui.utils.ViewerUtils; -import org.argeo.jcr.ArgeoNames; -import org.argeo.jcr.JcrUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.ui.providers.AkbImageProvider; -import org.eclipse.jface.viewers.CheckboxTableViewer; -import org.eclipse.jface.viewers.ColumnLabelProvider; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.TableViewerColumn; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.Image; -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.Text; - -public class AkbItemsTableComposite extends Composite implements ArgeoNames { - // private final static Log log = - // LogFactory.getLog(UserTableComposite.class); - - private TableViewer usersViewer; - private Text filterTxt; - private final static String FILTER_HELP_MSG = "Type filter criterion " - + "separated by a space"; - private Session session; - - private Font italic; - private Font bold; - - private boolean hasFilter; - private boolean hasSelectionColumn; - - // private List selectedItems = new ArrayList(); - - /** - * Overwrite to display other columns - */ - public List getColumnsDef() { - List columnDefs = new ArrayList(); - // Name - columnDefs.add(new ColumnDefinition(null, Property.JCR_TITLE, - PropertyType.STRING, "Name", 150)); - - return columnDefs; - } - - public AkbItemsTableComposite(Composite parent, int style, Session session) { - super(parent, style); - this.session = session; - } - - /** - * - * @param addFilter - * choose to add a field to filter results or not - * @param addSelection - * choose to add a column to select some of the displayed results - * or not - */ - public void populate(boolean addFilter, boolean addSelection) { - // initialization - Composite parent = this; - italic = EclipseUiUtils.getItalicFont(parent); - bold = EclipseUiUtils.getBoldFont(parent); - hasFilter = addFilter; - hasSelectionColumn = addSelection; - - // Main Layout - this.setLayout(new GridLayout(1, false)); - if (hasFilter) - createFilterPart(parent); - usersViewer = createTableViewer(parent); - EclipseUiSpecificUtils.enableToolTipSupport(usersViewer); - usersViewer.setContentProvider(new UsersContentProvider()); - refreshFilteredList(); - } - - /** Returns the User table viewer, typically to add doubleclick listener */ - public TableViewer getTableViewer() { - return usersViewer; - } - - private TableViewer createTableViewer(final Composite parent) { - int style = SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL; - if (hasSelectionColumn) - style = style | SWT.CHECK; - - Table table = new Table(parent, style); - table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - TableViewer viewer; - if (hasSelectionColumn) - viewer = new CheckboxTableViewer(table); - else - viewer = new TableViewer(table); - table.setLinesVisible(true); - table.setHeaderVisible(true); - - // pass a mapping between col index and property name to the comparator. - // List propertiesList = new ArrayList(); - - TableViewerColumn column; - int offset = 0; - // if (hasSelectionColumn) { - if (hasSelectionColumn) { - offset++; - column = ViewerUtils.createTableViewerColumn(viewer, "", SWT.NONE, - 25); - // column.setEditingSupport(new SelectedEditingSupport(viewer)); - column.setLabelProvider(new ColumnLabelProvider() { - @Override - public String getText(Object element) { - return null; - } - }); - SelectionAdapter selectionAdapter = new SelectionAdapter() { - boolean allSelected = false; - - @Override - public void widgetSelected(SelectionEvent e) { - allSelected = !allSelected; - ((CheckboxTableViewer) usersViewer) - .setAllChecked(allSelected); - } - }; - column.getColumn().addSelectionListener(selectionAdapter); - } - - // Image column - offset++; - column = ViewerUtils.createTableViewerColumn(viewer, "", SWT.NONE, 25); - // column.setEditingSupport(new SelectedEditingSupport(viewer)); - column.setLabelProvider(new ColumnLabelProvider() { - private AkbImageProvider imageProvider = new AkbImageProvider(); - - @Override - public String getText(Object element) { - return null; - } - - @Override - public Image getImage(Object element) { - return imageProvider.getImage(element); - } - - }); - - // Create other columns - List colDefs = getColumnsDef(); - - NodeViewerComparator comparator = new NodeViewerComparator(); - int i = offset; - for (ColumnDefinition colDef : colDefs) { - column = ViewerUtils.createTableViewerColumn(viewer, - colDef.getHeaderLabel(), SWT.NONE, colDef.getColumnSize()); - column.setLabelProvider(new CLProvider(colDef.getPropertyName())); - column.getColumn().addSelectionListener( - JcrUiUtils.getNodeSelectionAdapter(i, - colDef.getPropertyType(), colDef.getPropertyName(), - comparator, viewer)); - i++; - } - - // IMPORTANT: initialize comparator before setting it - ColumnDefinition firstCol = colDefs.get(0); - comparator.setColumn(firstCol.getPropertyType(), - firstCol.getPropertyName()); - viewer.setComparator(comparator); - - return viewer; - } - - private class CLProvider extends SimpleJcrNodeLabelProvider { - - public CLProvider(String propertyName) { - super(propertyName); - } - - public String getToolTipText(Object element) { - return getText(element); - } - - @Override - public Font getFont(Object elem) { - return null; - // // self - // String username = getProperty(elem, ARGEO_USER_ID); - // if (username.equals(session.getUserID())) - // return bold; - // - // // disabled - // try { - // Node userProfile = (Node) elem; - // // Node userProfile = userHome.getNode(ARGEO_PROFILE); - // if (!userProfile.getProperty(ARGEO_ENABLED).getBoolean()) - // return italic; - // else - // return null; - // } catch (RepositoryException e) { - // throw new AkbException("Cannot get font for " + username, e); - // } - } - } - - @Override - public boolean setFocus() { - usersViewer.getTable().setFocus(); - return true; - } - - @Override - public void dispose() { - super.dispose(); - } - - public void refresh() { - refreshFilteredList(); - } - - private String getProperty(Object element, String name) { - try { - Node node = (Node) element; - return node.hasProperty(name) ? node.getProperty(name).getString() - : ""; - } catch (RepositoryException e) { - throw new AkbException("Cannot get property " + name, e); - } - } - - private class UsersContentProvider implements IStructuredContentProvider { - - public Object[] getElements(Object inputElement) { - return (Object[]) inputElement; - } - - public void dispose() { - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - } - - /* MANAGE FILTER */ - private void createFilterPart(Composite parent) { - // Text Area for the filter - filterTxt = new Text(parent, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH - | SWT.ICON_CANCEL); - filterTxt.setMessage(FILTER_HELP_MSG); - filterTxt.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL - | GridData.HORIZONTAL_ALIGN_FILL)); - filterTxt.addModifyListener(new ModifyListener() { - - public void modifyText(ModifyEvent event) { - refreshFilteredList(); - } - }); - } - - /** - * Refresh the user list: caller might overwrite in order to display a - * subset of all users - */ - protected void refreshFilteredList() { - List nodes; - try { - nodes = JcrUtils.nodeIteratorToList(listFilteredElements(session, - hasFilter ? filterTxt.getText() : null)); - usersViewer.setInput(nodes.toArray()); - } catch (RepositoryException e) { - throw new AkbException("Unable to items", e); - } - } - - /** - * Build repository request : caller might overwrite in order to display a - * subset of all users - */ - protected NodeIterator listFilteredElements(Session session, String filter) - throws RepositoryException { - QueryManager queryManager = session.getWorkspace().getQueryManager(); - QueryObjectModelFactory factory = queryManager.getQOMFactory(); - - Selector source = factory.selector(NodeType.MIX_TITLE, - NodeType.MIX_TITLE); - - // Default Constraint: in correct sub tree - Constraint defaultC = factory.descendantNode(source.getSelectorName(), - AkbNames.AKB_TEMPLATES_BASE_PATH); - - // FIXME: workaround to display only legal nodes - defaultC = factory.and(defaultC, factory.propertyExistence( - source.getSelectorName(), Property.JCR_TITLE)); - - // Build constraints based the textArea content - if (filter != null && !"".equals(filter.trim())) { - // Parse the String - String[] strs = filter.trim().split(" "); - for (String token : strs) { - StaticOperand so = factory.literal(session.getValueFactory() - .createValue("*" + token + "*")); - Constraint currC = factory.fullTextSearch( - source.getSelectorName(), null, so); - if (defaultC == null) - defaultC = currC; - else - defaultC = factory.and(defaultC, currC); - } - } - - Ordering order = factory.ascending(factory.propertyValue( - source.getSelectorName(), Property.JCR_TITLE)); - Ordering[] orderings = { order }; - - QueryObjectModel query = factory.createQuery(source, defaultC, - orderings, null); - - QueryResult result = query.execute(); - return result.getNodes(); - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/AliasListItemComposite.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/AliasListItemComposite.java deleted file mode 100644 index 9fc72a5aa..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/AliasListItemComposite.java +++ /dev/null @@ -1,253 +0,0 @@ -package org.argeo.slc.akb.ui.composites; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.eclipse.ui.ErrorFeedback; -import org.argeo.eclipse.ui.utils.CommandUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.AkbTypes; -import org.argeo.slc.akb.ui.AkbImages; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.ui.commands.DeleteAkbNodes; -import org.argeo.slc.akb.ui.wizards.ActiveConnectorWizard; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Link; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.forms.AbstractFormPart; -import org.eclipse.ui.forms.IFormPart; -import org.eclipse.ui.forms.IManagedForm; -import org.eclipse.ui.forms.widgets.FormToolkit; - -/** Default composite to display a connector alias. */ -public class AliasListItemComposite extends Composite { - - private final AkbService akbService; - private final Node connectorAlias; - private final Node activeEnv; - private final boolean isActive; - private final Node activeConnector; - private final FormToolkit toolkit; - private final IManagedForm form; - - // Don't forget to unregister on dispose - private AbstractFormPart formPart; - - // To enable set focus - private Text titleTxt; - - public AliasListItemComposite(Composite parent, int style, - FormToolkit toolkit, IManagedForm form, Node envNode, - String aliasPath, AkbService akbService) { - super(parent, style); - this.activeEnv = envNode; - try { - isActive = activeEnv.isNodeType(AkbTypes.AKB_ENV); - this.activeConnector = akbService.getActiveConnectorByAlias( - envNode, aliasPath); - this.connectorAlias = activeEnv.getSession().getNode(aliasPath); - } catch (RepositoryException e) { - throw new AkbException("Unable to get activeConnector for node", e); - } - this.toolkit = toolkit; - this.form = form; - this.akbService = akbService; - populate(); - toolkit.adapt(this); - } - - private void populate() { - // Initialization - Composite parent = this; - createConnectorAliasInfoCmp(parent); - } - - private void createConnectorAliasInfoCmp(Composite parent) { - GridLayout gl = AkbUiUtils.gridLayoutNoBorder(); - gl.marginBottom = 5; - - parent.setLayout(gl); - Composite firstLine = toolkit.createComposite(parent, SWT.NO_FOCUS); - firstLine.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - firstLine.setLayout(new GridLayout(6, false)); - - // Image - final Label image = toolkit.createLabel(firstLine, "", SWT.NONE); - GridData gd = new GridData(SWT.LEFT, SWT.CENTER, false, false); - try { - image.setImage(AkbImages.getImageForAkbNodeType(activeConnector - .getPrimaryNodeType().getName())); - } catch (RepositoryException e2) { - // silent - } - image.setLayoutData(gd); - - // Name - final Text titleTxt = toolkit.createText(firstLine, "", SWT.NONE); - gd = new GridData(SWT.LEFT, SWT.CENTER, false, false); - gd.widthHint = 150; - titleTxt.setLayoutData(gd); - - // Description - final Text descTxt = toolkit.createText(firstLine, "", SWT.NONE); - gd = new GridData(SWT.LEFT, SWT.CENTER, false, false); - gd.widthHint = 220; - descTxt.setLayoutData(gd); - - final Link testBtn = new Link(firstLine, SWT.NONE); - toolkit.adapt(testBtn, false, false); - testBtn.setText("Test"); - testBtn.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false)); - - final Link editActiveConnLk = new Link(firstLine, SWT.NONE); - toolkit.adapt(editActiveConnLk, false, false); - // editActiveConnLk.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, - // true, false)); - - // Part Management - formPart = new AbstractFormPart() { - public void refresh() { - super.refresh(); - if (titleTxt.isDisposed()) - return; - // update display value - AkbUiUtils.refreshFormTextWidget(titleTxt, connectorAlias, - Property.JCR_TITLE, "Name"); - AkbUiUtils.refreshFormTextWidget(descTxt, connectorAlias, - Property.JCR_DESCRIPTION, "Short description"); - - if (isActive) { - titleTxt.setEditable(false); - descTxt.setEditable(false); - editActiveConnLk.setText("Edit connector instance"); - } else { - titleTxt.setEditable(true); - descTxt.setEditable(true); - editActiveConnLk.setText("Edit default connector"); - } - } - }; - - if (!isActive) { - final Link removeBtn = new Link(firstLine, SWT.NONE); - toolkit.adapt(removeBtn, false, false); - removeBtn.setText("Delete"); - removeBtn.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - try { - - try { - connectorAlias.getPath(); - } catch (Exception ex) { - // node has been removed. - // silent - return; - } - - // Manually check if corresponding node was really - // removed - Session session = connectorAlias.getSession(); - String absPath = connectorAlias.getPath(); - - form.removePart(formPart); - - CommandUtils.CallCommandWithOneParameter( - DeleteAkbNodes.ID, - DeleteAkbNodes.PARAM_NODE_JCR_ID, AkbJcrUtils - .getIdentifierQuietly(connectorAlias)); - - if (session.nodeExists(absPath)) { - form.addPart(formPart); - } else { - for (IFormPart cpart : form.getParts()) - cpart.refresh(); - } - - } catch (RepositoryException re) { - throw new AkbException( - "Error while removing connector Alias ", re); - } - } - }); - } - - // Listeners - AkbUiUtils.addTextModifyListener(titleTxt, connectorAlias, - Property.JCR_TITLE, formPart); - AkbUiUtils.addTextModifyListener(descTxt, connectorAlias, - Property.JCR_DESCRIPTION, formPart); - - testBtn.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - boolean testSuccesfull; - try { - testSuccesfull = akbService.testConnector(activeConnector); - } catch (Exception e1) { - testSuccesfull = false; - ErrorFeedback.show("Cannot test connection", e1); - } - String name = AkbJcrUtils.get(activeConnector, - Property.JCR_TITLE); - String url = AkbJcrUtils.get(activeConnector, - AkbNames.AKB_CONNECTOR_URL); - String msg = " to " + name + " (" + url + ")"; - if (testSuccesfull) - MessageDialog.openInformation( - getDisplay().getActiveShell(), "Test successful", - "Successfully connected " + msg); - else - MessageDialog.openError(getDisplay().getActiveShell(), - "Test failure", "Unable to connect" + msg); - } - }); - - editActiveConnLk.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(final SelectionEvent event) { - ActiveConnectorWizard wizard = new ActiveConnectorWizard( - akbService, activeConnector); - WizardDialog dialog = new WizardDialog(getShell(), wizard); - dialog.open(); - } - }); - - // force refresh to initialize various fields on creation - formPart.refresh(); - form.addPart(formPart); - } - - @Override - public boolean setFocus() { - if (titleTxt != null) - return titleTxt.setFocus(); - return false; - } - - protected void disposePart(AbstractFormPart part) { - if (part != null) { - form.removePart(part); - part.dispose(); - } - } - - @Override - public void dispose() { - disposePart(formPart); - super.dispose(); - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ConnectorAliasSmallComposite.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ConnectorAliasSmallComposite.java deleted file mode 100644 index 8717df5b5..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ConnectorAliasSmallComposite.java +++ /dev/null @@ -1,214 +0,0 @@ -package org.argeo.slc.akb.ui.composites; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.eclipse.ui.ErrorFeedback; -import org.argeo.eclipse.ui.utils.CommandUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.ui.AkbImages; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.ui.commands.DeleteAkbNodes; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Link; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.forms.AbstractFormPart; -import org.eclipse.ui.forms.IManagedForm; -import org.eclipse.ui.forms.widgets.FormToolkit; - -/** Default composite to display a connector alias. */ -public class ConnectorAliasSmallComposite extends Composite { - - private final AkbService akbService; - private final Node connectorAlias; - private final Node activeConnector; - private final FormToolkit toolkit; - private final IManagedForm form; - - // Don't forget to unregister on dispose - private AbstractFormPart formPart; - - // To enable set focus - private Text titleTxt; - - public ConnectorAliasSmallComposite(Composite parent, int style, - FormToolkit toolkit, IManagedForm form, Node akbNode, - AkbService akbService) { - super(parent, style); - this.connectorAlias = akbNode; - try { - this.activeConnector = akbNode - .getNode(AkbNames.AKB_DEFAULT_TEST_CONNECTOR); - } catch (RepositoryException e) { - throw new AkbException("Unable to get activeConnector for node", e); - } - this.toolkit = toolkit; - this.form = form; - this.akbService = akbService; - populate(); - toolkit.adapt(this); - } - - private void populate() { - // Initialization - Composite parent = this; - createConnectorAliasInfoCmp(parent); - } - - private void createConnectorAliasInfoCmp(Composite parent) { - GridLayout gl = AkbUiUtils.gridLayoutNoBorder(); - gl.marginBottom = 15; - - parent.setLayout(gl); - Composite firstLine = toolkit.createComposite(parent, SWT.NO_FOCUS); - firstLine.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - firstLine.setLayout(new GridLayout(9, false)); - - // Image - final Label image = toolkit.createLabel(firstLine, "", SWT.NONE); - GridData gd = new GridData(SWT.LEFT, SWT.CENTER, false, false); - try { - image.setImage(AkbImages.getImageForAkbNodeType(activeConnector - .getPrimaryNodeType().getName())); - } catch (RepositoryException e2) { - // silent - } - image.setLayoutData(gd); - - // Name - final Text titleTxt = toolkit.createText(firstLine, "", SWT.BORDER); - gd = new GridData(SWT.FILL, SWT.TOP, false, false); - gd.widthHint = 150; - titleTxt.setLayoutData(gd); - - toolkit.createLabel(firstLine, "URL"); - final Text urlTxt = toolkit.createText(firstLine, "", SWT.BORDER); - urlTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - - toolkit.createLabel(firstLine, "User"); - final Text userTxt = toolkit.createText(firstLine, "", SWT.BORDER); - gd = new GridData(SWT.LEFT, SWT.TOP, false, false); - gd.widthHint = 150; - userTxt.setLayoutData(gd); - - final Link testBtn = new Link(firstLine, SWT.NONE); - toolkit.adapt(testBtn, false, false); - testBtn.setText("Test"); - - final Link removeBtn = new Link(firstLine, SWT.NONE); - toolkit.adapt(removeBtn, false, false); - removeBtn.setText("Delete"); - - // createDefaultTestConnectorCmp(secondLine); - - // Description - final Text descTxt = toolkit.createText(parent, "", SWT.NONE); - gd = new GridData(SWT.FILL, SWT.TOP, true, false); - descTxt.setLayoutData(gd); - - // Part Management - formPart = new AbstractFormPart() { - public void refresh() { - super.refresh(); - // update display value - AkbUiUtils.refreshFormTextWidget(titleTxt, connectorAlias, - Property.JCR_TITLE, "Name"); - AkbUiUtils.refreshFormTextWidget(descTxt, connectorAlias, - Property.JCR_DESCRIPTION, "Short description"); - AkbUiUtils.refreshFormTextWidget(urlTxt, activeConnector, - AkbNames.AKB_CONNECTOR_URL); - AkbUiUtils.refreshFormTextWidget(userTxt, activeConnector, - AkbNames.AKB_CONNECTOR_USER); - } - }; - // Listeners - AkbUiUtils.addTextModifyListener(titleTxt, connectorAlias, - Property.JCR_TITLE, formPart); - AkbUiUtils.addTextModifyListener(urlTxt, activeConnector, - AkbNames.AKB_CONNECTOR_URL, formPart); - AkbUiUtils.addTextModifyListener(userTxt, activeConnector, - AkbNames.AKB_CONNECTOR_USER, formPart); - AkbUiUtils.addTextModifyListener(descTxt, connectorAlias, - Property.JCR_DESCRIPTION, formPart); - - testBtn.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - boolean testSuccesfull; - try { - testSuccesfull = akbService.testConnector(activeConnector); - } catch (Exception e1) { - testSuccesfull = false; - ErrorFeedback.show("Cannot test connection", e1); - } - String name = AkbJcrUtils.get(activeConnector, - Property.JCR_TITLE); - String url = AkbJcrUtils.get(activeConnector, - AkbNames.AKB_CONNECTOR_URL); - String msg = " to " + name + " (" + url + ")"; - if (testSuccesfull) - MessageDialog.openInformation( - getDisplay().getActiveShell(), "Test successful", - "Successfully connected " + msg); - else - MessageDialog.openError(getDisplay().getActiveShell(), - "Test failure", "Unable to connect" + msg); - } - }); - - removeBtn.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - try { - // Manually check if corresponding node was really removed - Session session = connectorAlias.getSession(); - String absPath = connectorAlias.getPath(); - - CommandUtils.CallCommandWithOneParameter(DeleteAkbNodes.ID, - DeleteAkbNodes.PARAM_NODE_JCR_ID, - AkbJcrUtils.getIdentifierQuietly(connectorAlias)); - - if (!session.nodeExists(absPath)) - form.removePart(formPart); - - } catch (RepositoryException re) { - throw new AkbException( - "Error while removing connector Alias ", re); - } - } - }); - // force refresh to initialize various fields on creation - formPart.refresh(); - form.addPart(formPart); - } - - @Override - public boolean setFocus() { - return titleTxt.setFocus(); - } - - protected void disposePart(AbstractFormPart part) { - if (part != null) { - form.removePart(part); - part.dispose(); - } - } - - @Override - public void dispose() { - disposePart(formPart); - super.dispose(); - } -} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ItemTemplateTitleComposite.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ItemTemplateTitleComposite.java deleted file mode 100644 index 56c015c7f..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ItemTemplateTitleComposite.java +++ /dev/null @@ -1,253 +0,0 @@ -package org.argeo.slc.akb.ui.composites; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.RepositoryException; - -import org.argeo.eclipse.ui.utils.CommandUtils; -import org.argeo.jcr.JcrUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Link; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.forms.AbstractFormPart; -import org.eclipse.ui.forms.IManagedForm; -import org.eclipse.ui.forms.widgets.FormToolkit; - -public class ItemTemplateTitleComposite extends Composite { - // private final static Log log = - // LogFactory.getLog(MixTitleComposite.class); - - private final AkbService akbService; - private final Node envNode; - private final Node itemNode; - private final FormToolkit toolkit; - private final IManagedForm form; - // Don't forget to unregister on dispose - private AbstractFormPart formPart; - - // To enable set focus - private Text titleTxt; - private Combo aliasCmb; - - private List definedAliases; - - /** - * - * @param parent - * @param style - * @param toolkit - * @param form - * @param envNode - * @param itemNode - * @param akbService - */ - public ItemTemplateTitleComposite(Composite parent, int style, - FormToolkit toolkit, IManagedForm form, Node envNode, - Node itemNode, AkbService akbService) { - super(parent, style); - this.envNode = envNode; - this.itemNode = itemNode; - this.toolkit = toolkit; - this.form = form; - this.akbService = akbService; - populate(); - toolkit.adapt(this); - } - - private void populate() { - // Initialization - Composite parent = this; - - parent.setLayout(new GridLayout(5, false)); - - // first line: Item name - toolkit.createLabel(parent, "Name"); - titleTxt = toolkit.createText(parent, "", SWT.BORDER); - GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false, 4, 1); - titleTxt.setLayoutData(gd); - - // Second line: alias management - toolkit.createLabel(parent, "Alias"); - aliasCmb = new Combo(parent, SWT.READ_ONLY); - toolkit.adapt(aliasCmb, false, false); - gd = new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1); - aliasCmb.setLayoutData(gd); - - final Link openAliasLk = new Link(parent, SWT.NONE); - toolkit.adapt(openAliasLk, false, false); - openAliasLk.setText("Edit Alias"); - openAliasLk.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(final SelectionEvent event) { - int index = aliasCmb.getSelectionIndex(); - if (index != -1) { - Node currAlias = definedAliases.get(index); - String id = AkbJcrUtils.getIdentifierQuietly(currAlias); - Map params = new HashMap(); - params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID, id); - params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, - AkbJcrUtils.getIdentifierQuietly(envNode)); - - CommandUtils.callCommand(OpenAkbNodeEditor.ID, params); - } else - MessageDialog.openError(getShell(), "Error", - "No selected alias"); - } - }); - - // 3rd line: description - Label lbl = toolkit.createLabel(parent, "Description"); - lbl.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false)); - final Text descTxt = toolkit.createText(parent, "", SWT.BORDER - | SWT.MULTI | SWT.WRAP); - gd = new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1); - descTxt.setLayoutData(gd); - - // Part Management - final AbstractFormPart part = new AbstractFormPart() { - public void refresh() { - super.refresh(); - // update display value - AkbUiUtils.refreshFormTextWidget(titleTxt, itemNode, - Property.JCR_TITLE); - AkbUiUtils.refreshFormTextWidget(descTxt, itemNode, - Property.JCR_DESCRIPTION); - - refreshTypeCmbValues(); - aliasCmb.select(getCurrAliasIndex()); - aliasCmb.setEnabled(AkbJcrUtils.isNodeCheckedOutByMe(itemNode)); - } - }; - - // Listeners - AkbUiUtils.addTextModifyListener(titleTxt, itemNode, - Property.JCR_TITLE, part); - AkbUiUtils.addTextModifyListener(descTxt, itemNode, - Property.JCR_DESCRIPTION, part); - - aliasCmb.addModifyListener(new ModifyListener() { - @Override - public void modifyText(ModifyEvent event) { - try { - int oldIndex = getCurrAliasIndex(); - int selIndex = aliasCmb.getSelectionIndex(); - - // insure something has really been modified - if (selIndex < 0 || oldIndex == selIndex) - return; - - // set new alias - Node newAlias = definedAliases.get(selIndex); - - // Only relies on the alias - itemNode.setProperty(AkbNames.AKB_USED_CONNECTOR, - newAlias.getPath()); - part.markDirty(); - } catch (RepositoryException e) { - throw new AkbException( - "Error while updating connector alias", e); - } - } - }); - - form.addPart(part); - } - - private void refreshTypeCmbValues() { - List newAliases; - try { - newAliases = JcrUtils.nodeIteratorToList(akbService - .getDefinedAliases( - AkbJcrUtils.getCurrentTemplate(itemNode), - AkbJcrUtils.getAliasTypeForNode(itemNode))); - } catch (RepositoryException e) { - throw new AkbException("Unable to get defined aliases for node " - + itemNode, e); - } - boolean hasChanged = false; - // manually ckeck if something has changed - if (definedAliases == null - || newAliases.size() != definedAliases.size()) - hasChanged = true; - else { - - for (int i = 0; i < newAliases.size(); i++) { - if (!newAliases.get(i).equals(definedAliases.get(i))) { - hasChanged = true; - break; - } - } - } - - if (hasChanged) { - definedAliases = newAliases; - final String[] names = new String[definedAliases.size()]; - int i = 0; - for (Node node : definedAliases) - names[i++] = AkbJcrUtils.get(node, Property.JCR_TITLE); - aliasCmb.setItems(names); - } - } - - /** - * Returns the index in definedAliases list of the CURRENT defined alias as - * set in the item node AkbNames.AKB_USED_CONNECTOR if defined, - * -1 otherwise - */ - private int getCurrAliasIndex() { - try { - if (itemNode.hasProperty(AkbNames.AKB_USED_CONNECTOR)) { - String aliasPath = itemNode.getProperty( - AkbNames.AKB_USED_CONNECTOR).getString(); - - if (!itemNode.getSession().nodeExists(aliasPath)) - return -1; - - Node alias = itemNode.getSession().getNode(aliasPath); - return aliasCmb.indexOf(alias.getProperty(Property.JCR_TITLE) - .getString()); - } else - return -1; - } catch (RepositoryException re) { - throw new AkbException("Unable to retrieve current Alias", re); - } - } - - @Override - public boolean setFocus() { - return titleTxt.setFocus(); - } - - protected void disposePart(AbstractFormPart part) { - if (part != null) { - form.removePart(part); - part.dispose(); - } - } - - @Override - public void dispose() { - disposePart(formPart); - super.dispose(); - } -} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/MixTitleComposite.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/MixTitleComposite.java deleted file mode 100644 index 5aa64239f..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/MixTitleComposite.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.argeo.slc.akb.ui.composites; - -import javax.jcr.Node; -import javax.jcr.Property; - -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.forms.AbstractFormPart; -import org.eclipse.ui.forms.IManagedForm; -import org.eclipse.ui.forms.widgets.FormToolkit; - -public class MixTitleComposite extends Composite { - // private final static Log log = - // LogFactory.getLog(MixTitleComposite.class); - - private final Node akbNode; - private final FormToolkit toolkit; - private final IManagedForm form; - // Don't forget to unregister on dispose - private AbstractFormPart formPart; - - // To enable set focus - private Text titleTxt; - - public MixTitleComposite(Composite parent, int style, FormToolkit toolkit, - IManagedForm form, Node akbNode) { - super(parent, style); - this.akbNode = akbNode; - this.toolkit = toolkit; - this.form = form; - populate(); - toolkit.adapt(this); - } - - private void populate() { - // Initialization - Composite parent = this; - - parent.setLayout(new GridLayout(2, false)); - - // first line: connector name - toolkit.createLabel(parent, "Name"); - titleTxt = toolkit.createText(parent, "", SWT.BORDER); - GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false); - titleTxt.setLayoutData(gd); - - // 2nd line: description - Label lbl = toolkit.createLabel(parent, "Description"); - lbl.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false)); - final Text descTxt = toolkit.createText(parent, "", SWT.BORDER - | SWT.MULTI | SWT.WRAP); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - descTxt.setLayoutData(gd); - - // Part Management - final AbstractFormPart part = new AbstractFormPart() { - public void refresh() { - super.refresh(); - // update display value - AkbUiUtils.refreshFormTextWidget(titleTxt, akbNode, - Property.JCR_TITLE); - AkbUiUtils.refreshFormTextWidget(descTxt, akbNode, - Property.JCR_DESCRIPTION); - } - }; - // Listeners - AkbUiUtils.addTextModifyListener(titleTxt, akbNode, Property.JCR_TITLE, - part); - AkbUiUtils.addTextModifyListener(descTxt, akbNode, - Property.JCR_DESCRIPTION, part); - form.addPart(part); - } - - @Override - public boolean setFocus() { - return titleTxt.setFocus(); - } - - protected void disposePart(AbstractFormPart part) { - if (part != null) { - form.removePart(part); - part.dispose(); - } - } - - @Override - public void dispose() { - disposePart(formPart); - super.dispose(); - } -} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/dialogs/AddItemDialog.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/dialogs/AddItemDialog.java deleted file mode 100644 index d54606fef..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/dialogs/AddItemDialog.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.argeo.slc.akb.ui.dialogs; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.RepositoryException; - -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbTypes; -import org.eclipse.jface.dialogs.TrayDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; - -/** - * Dialog to create a new Item Template - */ -public class AddItemDialog extends TrayDialog { - - // this page widgets and UI objects - private final String title; - - private String[] itemTypesLbl = new String[] { "SSH File", "SSH Command", - "JDBC Query" }; - private String[] itemTypes = new String[] { AkbTypes.AKB_SSH_FILE, - AkbTypes.AKB_SSH_COMMAND, AkbTypes.AKB_JDBC_QUERY }; - - // business objects - private Node parentNode; - private Node newNode; - - // widget objects - private Combo typeCmb; - private Text titleTxt; - - public AddItemDialog(Shell parentShell, String title, Node parentNode) { - super(parentShell); - this.title = title; - this.parentNode = parentNode; - } - - protected Point getInitialSize() { - return new Point(400, 300); - } - - protected Control createDialogArea(Composite parent) { - Composite dialogArea = (Composite) super.createDialogArea(parent); - dialogArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - dialogArea.setLayout(new GridLayout(2, false)); - // type - Label lbl = new Label(dialogArea, SWT.NONE); - lbl.setText("Item type"); - typeCmb = new Combo(dialogArea, SWT.READ_ONLY); - typeCmb.setItems(itemTypesLbl); - // name - titleTxt = createLT(dialogArea, "Item Name"); - - parent.pack(); - return dialogArea; - } - - @Override - protected void okPressed() { - try { - newNode = parentNode.addNode(titleTxt.getText(), - itemTypes[typeCmb.getSelectionIndex()]); - newNode.setProperty(Property.JCR_TITLE, titleTxt.getText()); - } catch (RepositoryException e) { - throw new AkbException("unable to create Item", e); - } - super.okPressed(); - } - - public Node getNewNode() { - return newNode; - } - - /** Creates label and text. */ - protected Text createLT(Composite parent, String label) { - new Label(parent, SWT.NONE).setText(label); - Text text = new Text(parent, SWT.SINGLE | SWT.LEAD | SWT.BORDER); - text.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - return text; - } - - protected void configureShell(Shell shell) { - super.configureShell(shell); - shell.setText(title); - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java deleted file mode 100644 index 92c771b5f..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java +++ /dev/null @@ -1,238 +0,0 @@ -package org.argeo.slc.akb.ui.editors; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.jcr.JcrUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.AkbTypes; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.forms.IManagedForm; -import org.eclipse.ui.forms.editor.FormEditor; -import org.eclipse.ui.forms.editor.FormPage; -import org.eclipse.ui.forms.widgets.ScrolledForm; - -/** - * Parent Abstract Node editor for AKB. Manage life cycle of the JCR session - * that is bound to it. - */ -public abstract class AbstractAkbNodeEditor extends FormEditor { - // private final static Log log = LogFactory - // .getLog(AbstractEntityEditor.class); - - // We use a one session per editor pattern to secure various nodes and - // changes life cycle - private Repository repository; - private Session session; - private AkbService akbService; - - // Business Objects - private Node akbNode; - // a template or an active environment - private Node envNode; - // shortcut - private boolean isTemplate; - - // Some constants - private final static int SHORT_NAME_LENGHT = 10; - - // to implement methods - protected abstract String getEditorId(); - - protected abstract void populateMainPage(Composite parent, - IManagedForm managedForm); - - public void init(IEditorSite site, IEditorInput input) - throws PartInitException { - setSite(site); - setInput(input); - try { - session = repository.login(); - AkbNodeEditorInput anei = (AkbNodeEditorInput) getEditorInput(); - akbNode = session.getNodeByIdentifier(anei.getIdentifier()); - envNode = session.getNodeByIdentifier(anei.getEnvIdentifier()); - isTemplate = envNode.isNodeType(AkbTypes.AKB_ENV_TEMPLATE); - updatePartNameAndToolTip(); - } catch (RepositoryException e) { - throw new AkbException("Unable open editor for akb node", e); - } - } - - /** - * Overwrite to provide a specific part Name and / or tooltip - */ - protected void updatePartNameAndToolTip() { - String name = JcrUtils.get(akbNode, Property.JCR_TITLE); - - // Name - if (AkbJcrUtils.checkNotEmptyString(name)) { - if (name.length() > SHORT_NAME_LENGHT) - name = name.substring(0, SHORT_NAME_LENGHT - 1) + "..."; - setPartName(name); - } - - // Tooltip - if (AkbJcrUtils.isEmptyString(name)) - name = "current akb object"; - if (isTemplate) { - setTitleToolTip("Display and edit " + name); - } else - setTitleToolTip("Display " + name); - - } - - /** Overwrite to provide supplementary pages between main and history page */ - protected void addOtherPages() throws PartInitException { - } - - /* Pages management */ - @SuppressWarnings("unused") - @Override - protected void addPages() { - try { - if (isTemplate || akbNode.isNodeType(AkbTypes.AKB_ENV)) - addPage(new ConnectorAliasPage(this, "mainPage", "Main")); - // Add AKB Type specific pages - addOtherPages(); - // Use this when versioning is implemented - // if (isTemplate) - if (false) - addPage(new HistoryPage(this, "historyPage", "History")); - } catch (PartInitException e) { - throw new AkbException("Unable to initialise pages for editor " - + getEditorId(), e); - } catch (RepositoryException e) { - throw new AkbException("Unable to initialise pages for editor " - + getEditorId(), e); - } - } - - /** - * Display and edit info - */ - private class ConnectorAliasPage extends FormPage { - - public ConnectorAliasPage(FormEditor editor, String id, String title) { - super(editor, id, title); - } - - protected void createFormContent(IManagedForm managedForm) { - super.createFormContent(managedForm); - ScrolledForm form = managedForm.getForm(); - form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - populateMainPage(form.getBody(), managedForm); - } - } - - /** - * Display history - */ - private class HistoryPage extends FormPage { - - public HistoryPage(FormEditor editor, String id, String title) { - super(editor, id, title); - } - - protected void createFormContent(IManagedForm managedForm) { - super.createFormContent(managedForm); - ScrolledForm form = managedForm.getForm(); - form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - Composite parent = form.getBody(); - parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); - getToolkit().createLabel(parent, - "This page will display history " + "for current AKB Node"); - } - } - - /* EXPOSES TO CHILDREN CLASSES */ - protected Session getSession() { - return session; - } - - protected AkbService getAkbService() { - return akbService; - } - - protected Node getAkbNode() { - return akbNode; - } - - protected Node getEnvNode() { - return envNode; - } - - protected boolean isTemplate() { - return isTemplate; - } - - /* LIFE CYCLE MANAGEMENT */ - @Override - public void dispose() { - try { - // if (cNode != null) - // CommonsJcrUtils.cancelAndCheckin(cNode); - } - - finally { - JcrUtils.logoutQuietly(session); - } - super.dispose(); - } - - @Override - public void doSaveAs() { - // unused compulsory method - } - - @Override - public void doSave(IProgressMonitor monitor) { - try { - if (getSession().hasPendingChanges()) - JcrUtils.updateLastModified(getAkbNode()); - getSession().save(); - updatePartNameAndToolTip(); - this.firePropertyChange(PROP_DIRTY); - } catch (Exception e) { - throw new AkbException("Error getting session status.", e); - } - } - - @Override - public boolean isDirty() { - try { - return session.hasPendingChanges(); - } catch (Exception e) { - throw new AkbException("Error getting session status.", e); - } - } - - @Override - public boolean isSaveAsAllowed() { - return false; - } - - @Override - public void setFocus() { - } - - /* DEPENDENCY INJECTION */ - public void setRepository(Repository repository) { - this.repository = repository; - } - - public void setAkbService(AkbService akbService) { - this.akbService = akbService; - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbItemTemplateEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbItemTemplateEditor.java deleted file mode 100644 index ba71a3de2..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbItemTemplateEditor.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.argeo.slc.akb.ui.editors; - -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.ui.composites.ItemTemplateTitleComposite; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.forms.IManagedForm; -import org.eclipse.ui.forms.editor.FormEditor; -import org.eclipse.ui.forms.editor.FormPage; -import org.eclipse.ui.forms.widgets.ScrolledForm; - -/** - * Parent class for most akb items editor. Factorizes UI parts that are common - * in various item types. - */ -public abstract class AkbItemTemplateEditor extends AbstractAkbNodeEditor { - - /* CONTENT CREATION */ - @Override - public void populateMainPage(Composite parent, IManagedForm managedForm) { - parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); - // First line main info - ItemTemplateTitleComposite ittCmp = new ItemTemplateTitleComposite( - parent, SWT.NO_FOCUS, getToolkit(), managedForm, getEnvNode(), - getAkbNode(), getAkbService()); - GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false); - gd.minimumHeight = 250; - ittCmp.setLayoutData(gd); - - Composite bottomCmp = getToolkit().createComposite(parent); - gd = new GridData(SWT.FILL, SWT.FILL, true, true); - bottomCmp.setLayoutData(gd); - populateBottomPart(bottomCmp, managedForm); - } - - @Override - protected void addOtherPages() throws PartInitException { - addPage(new TestPage(this, "testPage", "Test")); - } - - /** Overwrite to add specific bottom part depending on the item type */ - abstract protected void populateBottomPart(Composite parent, - IManagedForm managedForm); - - /** - * Display history - */ - private class TestPage extends FormPage { - - public TestPage(FormEditor editor, String id, String title) { - super(editor, id, title); - } - - protected void createFormContent(IManagedForm managedForm) { - super.createFormContent(managedForm); - ScrolledForm form = managedForm.getForm(); - form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - Composite parent = form.getBody(); - populateTestPage(parent, managedForm); - } - } - - protected void populateTestPage(Composite parent, IManagedForm managedForm) { - parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); - getToolkit().createLabel( - parent, - "This page will display a test page " - + "using default connection for the chosen alias"); - } - -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbNodeEditorInput.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbNodeEditorInput.java deleted file mode 100644 index 5903f1d32..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbNodeEditorInput.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.argeo.slc.akb.ui.editors; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IPersistableElement; - -/** - * Editor input for all editors that display info on a given AKB JCR Node. - * - * Relies on the Jcr ID, - */ -public class AkbNodeEditorInput implements IEditorInput { - - private final String envJcrId; - // Only null if current node is a environment (active or template) - private final String jcrId; - - /** - * @param envJcrId - * can be null when current node is an environment (active or - * template) - * @param jcrId - * cannot be null - */ - - public AkbNodeEditorInput(String envJcrId, String jcrId) { - this.envJcrId = envJcrId; - this.jcrId = jcrId; - } - - public String getIdentifier() { - return jcrId; - } - - public String getEnvIdentifier() { - if (envJcrId == null) - return jcrId; - else - return envJcrId; - } - - public boolean exists() { - return true; - } - - public ImageDescriptor getImageDescriptor() { - return null; - } - - public String getName() { - return jcrId; - } - - public IPersistableElement getPersistable() { - return null; - } - - public String getToolTipText() { - return "Display and edit information about a given AKB Jcr Node"; - } - - @SuppressWarnings("rawtypes") - public Object getAdapter(Class adapter) { - return null; - } - - public int hashCode() { - return jcrId.hashCode(); - } - - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - AkbNodeEditorInput other = (AkbNodeEditorInput) obj; - if (!jcrId.equals(other.getIdentifier()) - || !getEnvIdentifier().equals(other.getEnvIdentifier())) - return false; - return true; - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/ConnectorAliasEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/ConnectorAliasEditor.java deleted file mode 100644 index 95bfa0c58..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/ConnectorAliasEditor.java +++ /dev/null @@ -1,191 +0,0 @@ -package org.argeo.slc.akb.ui.editors; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.RepositoryException; - -import org.argeo.eclipse.ui.ErrorFeedback; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -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.Group; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.forms.AbstractFormPart; -import org.eclipse.ui.forms.IManagedForm; - -/** - * Display and edit a connector Alias - */ -public class ConnectorAliasEditor extends AbstractAkbNodeEditor { - // private final static Log log = LogFactory - // .getLog(AkbConnectorAliasEditor.class); - - public final static String ID = AkbUiPlugin.PLUGIN_ID - + ".connectorAliasEditor"; - - private IManagedForm managedForm; - private Node activeConnector; - - /* CONTENT CREATION */ - @Override - public void populateMainPage(Composite parent, IManagedForm managedForm) { - parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); - - // TODO clean this - // Initialization - this.managedForm = managedForm; - // enable dynamic change of the active connector - try { - activeConnector = getAkbNode().getNode( - AkbNames.AKB_DEFAULT_TEST_CONNECTOR); - } catch (RepositoryException e) { - throw new AkbException("unable to retrieve active connector node", - e); - } - - // First line main info - Composite firstLine = getToolkit() - .createComposite(parent, SWT.NO_FOCUS); - firstLine.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - createConnectorAliasInfoCmp(firstLine); - - // Second line define defaut connector and test abilities - Composite secondLine = getToolkit().createComposite(parent, - SWT.NO_FOCUS); - secondLine.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - createDefaultTestConnectorCmp(secondLine); - - } - - private void createConnectorAliasInfoCmp(Composite parent) { - parent.setLayout(new GridLayout(2, false)); - - // Name - final Text titleTxt = getToolkit().createText(parent, "", SWT.BORDER); - GridData gd = new GridData(SWT.FILL, SWT.TOP, false, false); - gd.minimumWidth = 200; - gd.widthHint = 200; - titleTxt.setLayoutData(gd); - - // Description - final Text descTxt = getToolkit().createText(parent, "", SWT.BORDER); - gd = new GridData(SWT.FILL, SWT.TOP, true, false); - descTxt.setLayoutData(gd); - - // Part Management - final AbstractFormPart part = new AbstractFormPart() { - public void refresh() { - super.refresh(); - // update display value - AkbUiUtils.refreshFormTextWidget(titleTxt, getAkbNode(), - Property.JCR_TITLE, "Name"); - AkbUiUtils.refreshFormTextWidget(descTxt, getAkbNode(), - Property.JCR_DESCRIPTION, "Short description"); - } - }; - // Listeners - AkbUiUtils.addTextModifyListener(titleTxt, getAkbNode(), - Property.JCR_TITLE, part); - AkbUiUtils.addTextModifyListener(descTxt, getAkbNode(), - Property.JCR_DESCRIPTION, part); - - managedForm.addPart(part); - } - - protected void updatePartNameAndToolTip() { - super.updatePartNameAndToolTip(); - // TODO update editor image - } - - private void createDefaultTestConnectorCmp(Composite parent) { - String groupTitle = "Default test instance"; - parent.setLayout(new GridLayout()); - Group group = new Group(parent, SWT.NONE); - group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - getToolkit().adapt(group, false, false); - - group.setText(groupTitle); - group.setLayout(AkbUiUtils.gridLayoutNoBorder()); - - // 1st line: the URL - Composite firstLine = getToolkit().createComposite(group); - firstLine.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - firstLine.setLayout(new GridLayout(2, false)); - - getToolkit().createLabel(firstLine, "URL"); - final Text urlTxt = getToolkit().createText(firstLine, "", SWT.BORDER); - urlTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - - getToolkit().createLabel(firstLine, "User"); - final Text userTxt = getToolkit().createText(firstLine, "", SWT.BORDER); - userTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - - final Button testBtn = getToolkit().createButton(firstLine, - "Test connection", SWT.PUSH); - // testBtn.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, - // false)); - - // Part Management - final AbstractFormPart part = new AbstractFormPart() { - public void refresh() { - super.refresh(); - // update display value - AkbUiUtils.refreshFormTextWidget(urlTxt, activeConnector, - AkbNames.AKB_CONNECTOR_URL); - AkbUiUtils.refreshFormTextWidget(userTxt, activeConnector, - AkbNames.AKB_CONNECTOR_USER); - } - }; - // Listeners - AkbUiUtils.addTextModifyListener(urlTxt, activeConnector, - AkbNames.AKB_CONNECTOR_URL, part); - AkbUiUtils.addTextModifyListener(userTxt, activeConnector, - AkbNames.AKB_CONNECTOR_USER, part); - - testBtn.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - boolean testSuccesfull; - - try { - testSuccesfull = getAkbService().testConnector( - activeConnector); - } catch (Exception e1) { - testSuccesfull = false; - ErrorFeedback.show("Cannot test connection", e1); - } - - String name = AkbJcrUtils.get(activeConnector, - Property.JCR_TITLE); - String url = AkbJcrUtils.get(activeConnector, - AkbNames.AKB_CONNECTOR_URL); - - String msg = "to " + name + " (" + url + ")"; - if (testSuccesfull) - MessageDialog.openInformation(getSite().getShell(), - "Test successful", "Successfully connected " + msg); - else - MessageDialog.openError(getSite().getShell(), - "Test failure", "Unable to connect" + msg); - } - }); - - managedForm.addPart(part); - - } - - @Override - protected String getEditorId() { - return ID; - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/EnvTemplateEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/EnvTemplateEditor.java deleted file mode 100644 index d75e24cac..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/EnvTemplateEditor.java +++ /dev/null @@ -1,259 +0,0 @@ -package org.argeo.slc.akb.ui.editors; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.jcr.ItemNotFoundException; -import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.observation.Event; -import javax.jcr.observation.ObservationManager; - -import org.argeo.eclipse.ui.jcr.AsyncUiEventListener; -import org.argeo.eclipse.ui.utils.CommandUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.AkbTypes; -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.ui.commands.ForceRefresh; -import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor; -import org.argeo.slc.akb.ui.composites.AliasListItemComposite; -import org.argeo.slc.akb.ui.composites.MixTitleComposite; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.jface.action.IContributionItem; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.forms.AbstractFormPart; -import org.eclipse.ui.forms.IFormPart; -import org.eclipse.ui.forms.IManagedForm; - -/** - * Display and edit an environment template - */ -public class EnvTemplateEditor extends AbstractAkbNodeEditor { - - public final static String ID = AkbUiPlugin.PLUGIN_ID - + ".envTemplateEditor"; - - // Observer - private final static String[] observedNodes = { AkbTypes.AKB_CONNECTOR_FOLDER }; - private ConnectorObserver connectorObserver; - - /* CONTENT CREATION */ - @Override - public void populateMainPage(Composite parent, IManagedForm managedForm) { - parent.setLayout(new GridLayout()); - // First line main info - MixTitleComposite mixTitleCmp = new MixTitleComposite(parent, - SWT.NO_FOCUS, getToolkit(), managedForm, getAkbNode()); - GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false); - gd.heightHint = 200; - mixTitleCmp.setLayoutData(gd); - - // Second line : the defined editor - Group group = new Group(parent, SWT.NONE); - group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - getToolkit().adapt(group, false, false); - String groupTitle = "Connector Aliases"; - group.setText(groupTitle); - populateDisplayConnectorPanel(managedForm, group, getAkbNode()); - - // add context menu - MenuManager menuManager = new MenuManager(); - Menu menu = menuManager.createContextMenu(group); - menuManager.addMenuListener(new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - aboutToShow(manager); - } - }); - group.setMenu(menu); - menuManager.setRemoveAllWhenShown(true); - } - - protected void aboutToShow(IMenuManager menu) { - try { - // initialization - IWorkbenchWindow window = AkbUiPlugin.getDefault().getWorkbench() - .getActiveWorkbenchWindow(); - Node connectorParent = getAkbNode(); - - // Refresh - CommandUtils.refreshCommand(menu, window, ForceRefresh.ID, - "Refresh", null, true); - - String submenuID = "subMenu.addAlias"; - IContributionItem ici = menu.find(submenuID); - if (ici != null) - menu.remove(ici); - Map params = new HashMap(); - params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID, - connectorParent.getIdentifier()); - params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, - AkbTypes.AKB_CONNECTOR_ALIAS); - - MenuManager subMenu = new MenuManager("Add connector alias", - submenuID); - // JDBC - Map tmpParams = new HashMap(); - tmpParams.putAll(params); - tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_SUBTYPE, - AkbTypes.AKB_JDBC_CONNECTOR); - String currItemId = "cmd.createJDBCAlias"; - IContributionItem currItem = subMenu.find(currItemId); - if (currItem != null) - subMenu.remove(currItem); - subMenu.add(AkbUiUtils.createContributionItem(subMenu, window, - currItemId, OpenAkbNodeEditor.ID, "JDBC", null, tmpParams)); - - // SSH - tmpParams = new HashMap(); - tmpParams.putAll(params); - tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_SUBTYPE, - AkbTypes.AKB_SSH_CONNECTOR); - currItemId = "cmd.createSSHAlias"; - currItem = subMenu.find(currItemId); - if (currItem != null) - subMenu.remove(currItem); - subMenu.add(AkbUiUtils.createContributionItem(subMenu, window, - currItemId, OpenAkbNodeEditor.ID, "SSH", null, tmpParams)); - - if (isTemplate()) - menu.add(subMenu); - - } catch (RepositoryException e) { - throw new AkbException("Unable to refresh context menu", e); - } - } - - /** Manage display and update of defined connector aliases */ - public void populateDisplayConnectorPanel(final IManagedForm managedForm, - final Composite panel, final Node entity) { - GridLayout gl = AkbUiUtils.gridLayoutNoBorder(); - gl.marginTop = 10; - panel.setLayout(gl); - - final Map connectorsCmps = new HashMap(); - AbstractFormPart formPart = new AbstractFormPart() { - public void refresh() { - try { - super.refresh(); - // first: initialise composite for new connectors - - Node connectorPar = getAkbNode().getNode( - AkbTypes.AKB_CONNECTOR_FOLDER); - NodeIterator ni = connectorPar.getNodes(); - - boolean isTemplate = getEnvNode().isNodeType( - AkbTypes.AKB_ENV_TEMPLATE); - - aliases: while (ni.hasNext()) { - Node currNode = ni.nextNode(); - String currJcrId = currNode.getIdentifier(); - if (!connectorsCmps.containsKey(currJcrId)) { - Composite currCmp; - if (isTemplate) - currCmp = new AliasListItemComposite(panel, - SWT.NO_FOCUS, getToolkit(), - managedForm, getAkbNode(), - currNode.getPath(), getAkbService()); - else { - String aliasPath = AkbJcrUtils.get(currNode, - AkbNames.AKB_CONNECTOR_ALIAS_PATH); - if (AkbJcrUtils.isEmptyString(aliasPath) - || !getSession().nodeExists(aliasPath)) - continue aliases; - - currCmp = new AliasListItemComposite(panel, - SWT.NO_FOCUS, getToolkit(), - managedForm, getAkbNode(), aliasPath, - getAkbService()); - } - currCmp.setLayoutData(new GridData(SWT.FILL, - SWT.TOP, true, false)); - connectorsCmps.put(currJcrId, currCmp); - - } - } - - // then remove necessary composites - Session session = connectorPar.getSession(); - for (String jcrId : connectorsCmps.keySet()) { - // TODO: enhance this - Composite currCmp = connectorsCmps.get(jcrId); - try { - session.getNodeByIdentifier(jcrId); - } catch (ItemNotFoundException infe) { - currCmp.dispose(); - } - } - panel.layout(); - } catch (RepositoryException e) { - throw new AkbException("Cannot refresh connectors group", e); - } - } - }; - formPart.refresh(); - managedForm.addPart(formPart); - - // Initialize observer - try { - ObservationManager observationManager = getSession().getWorkspace() - .getObservationManager(); - connectorObserver = new ConnectorObserver(panel.getDisplay(), - managedForm); - // observe tree changes under All results - observationManager.addEventListener(connectorObserver, - Event.NODE_ADDED | Event.NODE_REMOVED, getAkbNode() - .getNode(AkbTypes.AKB_CONNECTOR_FOLDER).getPath(), - true, null, observedNodes, false); - } catch (RepositoryException e) { - throw new AkbException("Cannot register listeners", e); - } - - } - - class ConnectorObserver extends AsyncUiEventListener { - - private IManagedForm managedForm; - - public ConnectorObserver(Display display, IManagedForm managedForm) { - super(display); - this.managedForm = managedForm; - } - - @Override - protected Boolean willProcessInUiThread(List events) - throws RepositoryException { - return true; - } - - protected void onEventInUiThread(List events) - throws RepositoryException { - try { - for (IFormPart part : managedForm.getParts()) - part.refresh(); - } catch (Exception e) { - // silently fail - e.printStackTrace(); - } - } - } - - @Override - protected String getEditorId() { - return ID; - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcQueryTemplateEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcQueryTemplateEditor.java deleted file mode 100644 index 2bc5a047c..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcQueryTemplateEditor.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.argeo.slc.akb.ui.editors; - -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.forms.AbstractFormPart; -import org.eclipse.ui.forms.IManagedForm; - -/** - * Display and edit a jdbc query - */ -public class JdbcQueryTemplateEditor extends AkbItemTemplateEditor { - - public final static String ID = AkbUiPlugin.PLUGIN_ID - + ".jdbcQueryTemplateEditor"; - - @Override - protected String getEditorId() { - return ID; - } - - @Override - protected void populateBottomPart(Composite parent, IManagedForm managedForm) { - parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); - Group group = new Group(parent, SWT.NO_FOCUS); - getToolkit().adapt(group, false, false); - group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - group.setLayout(new GridLayout(1, false)); - - // first line: Description - getToolkit().createLabel(group, "Enter below a valid JDBC Query"); - - // 2nd line: the query - final Text queryTxt = getToolkit().createText(group, "", - SWT.BORDER | SWT.MULTI | SWT.WRAP); - GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); - queryTxt.setLayoutData(gd); - - // Part Management - final AbstractFormPart part = new AbstractFormPart() { - public void refresh() { - super.refresh(); - // update display value - AkbUiUtils.refreshFormTextWidget(queryTxt, getAkbNode(), - AkbNames.AKB_QUERY_TEXT); - } - }; - // Listeners - AkbUiUtils.addTextModifyListener(queryTxt, getAkbNode(), - AkbNames.AKB_QUERY_TEXT, part); - managedForm.addPart(part); - } - - @Override - protected void addOtherPages() throws PartInitException { - addPage(new JdbcTestPage(getAkbService(), this, "testPage", "Test", - getEnvNode(), getAkbNode())); - } - -} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcTestPage.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcTestPage.java deleted file mode 100644 index f159195b3..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcTestPage.java +++ /dev/null @@ -1,245 +0,0 @@ -package org.argeo.slc.akb.ui.editors; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; - -import javax.jcr.Node; - -import org.argeo.security.ui.PrivilegedJob; -import org.argeo.slc.SlcException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.ui.composites.ActiveItemHeaderComposite; -import org.argeo.slc.akb.ui.utils.Refreshable; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.viewers.ColumnLabelProvider; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.ILazyContentProvider; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.TableViewerColumn; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Table; -import org.eclipse.ui.forms.IManagedForm; -import org.eclipse.ui.forms.editor.FormEditor; -import org.eclipse.ui.forms.editor.FormPage; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ScrolledForm; - -/** Test JDBC. */ -public class JdbcTestPage extends FormPage implements AkbNames, Refreshable { - private Node currItem; - // A template or an active environment - private Node currEnv; - private AkbService akbService; - - private TableViewer viewer = null; - private IContentProvider contentProvider; - - private PreparedStatement statement; - - public JdbcTestPage(AkbService akbService, FormEditor editor, String id, - String title, Node currEnv, Node currItem) { - super(editor, id, title); - this.akbService = akbService; - this.currItem = currItem; - this.currEnv = currEnv; - } - - protected void createFormContent(IManagedForm managedForm) { - super.createFormContent(managedForm); - ScrolledForm form = managedForm.getForm(); - form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - Composite parent = form.getBody(); - - parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); - FormToolkit toolkit = getEditor().getToolkit(); - - // the header - ActiveItemHeaderComposite header = new ActiveItemHeaderComposite( - parent, SWT.NONE, toolkit, managedForm, currEnv, currItem, - akbService); - header.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - - // the table - Table table = toolkit.createTable(parent, SWT.VIRTUAL); - table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - table.setHeaderVisible(true); - table.setLinesVisible(true); - viewer = new TableViewer(table); - contentProvider = new JdbcTestContentProvider(viewer); - viewer.setContentProvider(contentProvider); - // viewer.setLabelProvider(new ColumnLabelProvider(){}); - - forceRefresh(null); - } - - public void forceRefresh(Object object) { - silentlyCloseStatement(); - statement = akbService.prepareJdbcQuery(currEnv, currItem); - if (statement != null) { - PrivilegedJob job = new PrivilegedJob("Execute query on " - + currItem) { - - @Override - protected IStatus doRun(IProgressMonitor progressMonitor) { - try { - final ResultSet resultSet = statement.executeQuery(); - getEditorSite().getWorkbenchWindow().getShell() - .getDisplay().syncExec(new Runnable() { - - @Override - public void run() { - viewer.setInput(resultSet); - } - }); - return Status.OK_STATUS; - } catch (SQLException e) { - throw new SlcException("Cannot execute " + currItem, e); - } - } - }; - job.schedule(); - } - } - - private void silentlyCloseStatement() { - try { - if (statement != null) { - statement.close(); - statement.getConnection().close(); - } - } catch (SQLException e) { - // silent - } - } - - @Override - public void dispose() { - silentlyCloseStatement(); - } - - private class JdbcTestContentProvider implements ILazyContentProvider { - private TableViewer viewer; - private ResultSet resultSet; - private boolean isScrollable; - - private List buffer = new ArrayList(); - - private List columns = new ArrayList(); - private Integer columnCount = 0; - - private int rowCount = 0; - - public JdbcTestContentProvider(TableViewer viewer) { - this.viewer = viewer; - } - - public void dispose() { - try { - resultSet.close(); - } catch (SQLException e) { - // silent - } - } - - public void inputChanged(Viewer v, Object oldInput, Object newInput) { - if (newInput == null) - return; - - TableViewer viewer = (TableViewer) v; - - resultSet = (ResultSet) newInput; - try { - isScrollable = resultSet.getType() != ResultSet.TYPE_FORWARD_ONLY; - columnCount = resultSet.getMetaData().getColumnCount(); - for (int i = 1; i <= columnCount; i++) { - columns.add(new JdbcColumn(i, resultSet.getMetaData())); - if (oldInput == null)// first time - addColumn(viewer, i - 1); - } - - if (isScrollable) { - if (resultSet.next()) - rowCount = 1; - viewer.setItemCount(rowCount); - } else { - while (resultSet.next()) { - Object[] lst = new Object[columnCount]; - for (int i = 1; i <= columnCount; i++) { - lst[i - 1] = resultSet.getObject(i); - buffer.add(lst); - } - } - viewer.setItemCount(buffer.size()); - } - - } catch (SQLException e) { - throw new SlcException("Cannot configure JDBC column", e); - } - } - - protected void addColumn(TableViewer viewer, final int index) { - TableViewerColumn col = new TableViewerColumn(viewer, SWT.NONE); - col.getColumn().setWidth(100); - col.getColumn().setText(columns.get(index).name); - col.setLabelProvider(new ColumnLabelProvider() { - @Override - public String getText(Object element) { - Object obj = ((Object[]) element)[index]; - if (obj == null) - return null; - return obj.toString(); - } - }); - } - - public void updateElement(int index) { - if (resultSet == null) - return; - - try { - if (isScrollable) { - resultSet.absolute(index + 1); - Object[] lst = new Object[columnCount]; - for (int i = 1; i <= columnCount; i++) { - lst[i - 1] = resultSet.getObject(i); - } - viewer.replace(lst, index); - int itemCount = viewer.getTable().getItemCount(); - if (index == (itemCount - 1) && resultSet.next()) - viewer.setItemCount(itemCount + 1); - } else { - viewer.replace(buffer.get(index), index); - } - } catch (Exception e) { - throw new SlcException("Cannot update element", e); - } - } - } - - private class JdbcColumn { - // public final Integer index; - public final String name; - - // public final Integer type; - - public JdbcColumn(int index, ResultSetMetaData metaData) - throws SQLException { - // this.index = index; - this.name = metaData.getColumnName(index); - // this.type = metaData.getColumnType(index); - - } - } - -} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshCommandTemplateEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshCommandTemplateEditor.java deleted file mode 100644 index 415e8713a..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshCommandTemplateEditor.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.argeo.slc.akb.ui.editors; - -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.ui.composites.ActiveItemHeaderComposite; -import org.argeo.slc.akb.ui.utils.Refreshable; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.forms.AbstractFormPart; -import org.eclipse.ui.forms.IManagedForm; - -/** - * Display and edit a SSH Command Template ITEM - */ -public class SshCommandTemplateEditor extends AkbItemTemplateEditor implements - Refreshable { - - public final static String ID = AkbUiPlugin.PLUGIN_ID - + ".sshCommandTemplateEditor"; - - private Text outputDisplay; - - @Override - protected String getEditorId() { - return ID; - } - - @Override - protected void populateTestPage(Composite parent, IManagedForm managedForm) { - parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); - - ActiveItemHeaderComposite header = new ActiveItemHeaderComposite( - parent, SWT.NONE, getToolkit(), managedForm, getEnvNode(), - getAkbNode(), getAkbService()); - header.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - - outputDisplay = getToolkit().createText(parent, "", SWT.MULTI); - outputDisplay.setFont(new Font(parent.getDisplay(), "Monospaced", 10, - SWT.NONE)); - outputDisplay.setEditable(false); - outputDisplay - .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - forceRefresh(null); - } - - public void forceRefresh(Object object) { - String output = getAkbService().executeCommand(getEnvNode(), - getAkbNode()); - if (AkbJcrUtils.checkNotEmptyString(output)) - outputDisplay.setText(output); - else - outputDisplay.setText(""); - } - - @Override - protected void populateBottomPart(Composite parent, IManagedForm managedForm) { - parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); - Group group = new Group(parent, SWT.NO_FOCUS); - getToolkit().adapt(group, false, false); - group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - group.setLayout(new GridLayout(1, false)); - - // first line: Description - getToolkit().createLabel(group, "Enter below a valid SSH command"); - - // 2nd line: the query - final Text queryTxt = getToolkit().createText(group, "", - SWT.BORDER | SWT.MULTI | SWT.WRAP); - GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); - queryTxt.setLayoutData(gd); - - // Part Management - final AbstractFormPart part = new AbstractFormPart() { - public void refresh() { - super.refresh(); - // update display value - AkbUiUtils.refreshFormTextWidget(queryTxt, getAkbNode(), - AkbNames.AKB_COMMAND_TEXT); - } - }; - // Listeners - AkbUiUtils.addTextModifyListener(queryTxt, getAkbNode(), - AkbNames.AKB_COMMAND_TEXT, part); - managedForm.addPart(part); - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshFileTemplateEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshFileTemplateEditor.java deleted file mode 100644 index 57382a476..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshFileTemplateEditor.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.argeo.slc.akb.ui.editors; - -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.ui.composites.ActiveItemHeaderComposite; -import org.argeo.slc.akb.ui.utils.Refreshable; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.forms.AbstractFormPart; -import org.eclipse.ui.forms.IManagedForm; - -/** - * Display and edit a connection to a file on a distant accessible by SSH server - */ -public class SshFileTemplateEditor extends AkbItemTemplateEditor implements - Refreshable { - - public final static String ID = AkbUiPlugin.PLUGIN_ID - + ".sshFileTemplateEditor"; - - private Text outputDisplay; - - @Override - protected String getEditorId() { - return ID; - } - - @Override - protected void populateTestPage(Composite parent, IManagedForm managedForm) { - parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); - - ActiveItemHeaderComposite header = new ActiveItemHeaderComposite( - parent, SWT.NONE, getToolkit(), managedForm, getEnvNode(), - getAkbNode(), getAkbService()); - header.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - - outputDisplay = getToolkit().createText(parent, "", SWT.MULTI); - outputDisplay.setFont(new Font(parent.getDisplay(), "Monospaced", 10, - SWT.NONE)); - outputDisplay.setEditable(false); - outputDisplay - .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - forceRefresh(null); - } - - public void forceRefresh(Object object) { - String output = getAkbService() - .retrieveFile(getEnvNode(), getAkbNode()); - if (AkbJcrUtils.checkNotEmptyString(output)) - outputDisplay.setText(output); - else - outputDisplay.setText(""); - } - - @Override - protected void populateBottomPart(Composite parent, IManagedForm managedForm) { - parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); - Group group = new Group(parent, SWT.NO_FOCUS); - getToolkit().adapt(group, false, false); - group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - group.setLayout(new GridLayout(1, false)); - - // first line: Description - getToolkit().createLabel(group, - "Enter below a valid path in the target server"); - - // 2nd line: the path - final Text pathTxt = getToolkit().createText(group, "", - SWT.BORDER | SWT.SINGLE); - GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false); - pathTxt.setLayoutData(gd); - - // Part Management - final AbstractFormPart part = new AbstractFormPart() { - public void refresh() { - super.refresh(); - // update display value - AkbUiUtils.refreshFormTextWidget(pathTxt, getAkbNode(), - AkbNames.AKB_FILE_PATH); - } - }; - // Listeners - AkbUiUtils.addTextModifyListener(pathTxt, getAkbNode(), - AkbNames.AKB_FILE_PATH, part); - managedForm.addPart(part); - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveEnvsTreeContentProvider.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveEnvsTreeContentProvider.java deleted file mode 100644 index d15d510d2..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveEnvsTreeContentProvider.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 2007-2012 Argeo GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.slc.akb.ui.providers; - -import java.util.ArrayList; -import java.util.List; - -import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.AkbTypes; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.Viewer; - -/** - * Content provider for a tree of active AKB environments. Displays - * ActiveTreeItem to be able to display subtrees of item without - * duplicating the information from the corresponding template. - */ -public class ActiveEnvsTreeContentProvider implements ITreeContentProvider { - // private final static Log log = LogFactory - // .getLog(ActiveEnvsTreeContentProvider.class); - - /** - * @param parent - * Pass base parent node as parameter - * - */ - public Object[] getElements(Object parent) { - if (parent instanceof Node) - return initializeTree((Node) parent); - else - return null; - } - - private ActiveTreeItem[] initializeTree(Node activeEnvsParentNode) { - try { - NodeIterator ni = activeEnvsParentNode.getNodes(); - List envs = new ArrayList(); - while (ni.hasNext()) { - Node currNode = ni.nextNode(); - if (currNode.isNodeType(AkbTypes.AKB_ENV)) { - envs.add(new ActiveTreeItem(null, currNode, currNode)); - } - } - ActiveTreeItem[] envArr = envs.toArray(new ActiveTreeItem[envs - .size()]); - return envArr; - } catch (RepositoryException re) { - throw new AkbException("Error while initializing the " - + "tree of active environments.", re); - } - } - - public Object getParent(Object child) { - return ((ActiveTreeItem) child).getParent(); - } - - public Object[] getChildren(Object parent) { - try { - ActiveTreeItem currItem = (ActiveTreeItem) parent; - Node parNode = currItem.getNode(); - Node envNode = currItem.getEnvironment(); - - if (parNode.isNodeType(AkbTypes.AKB_ENV)) { - Session session = parNode.getSession(); - if (parNode.hasProperty(AkbNames.AKB_ENV_TEMPLATE_PATH) - && session.nodeExists(parNode.getProperty( - AkbNames.AKB_ENV_TEMPLATE_PATH).getString())) - parNode = session.getNode(parNode.getProperty( - AkbNames.AKB_ENV_TEMPLATE_PATH).getString()); - else - return null; - } - - NodeIterator ni = parNode.getNodes(); - List children = new ArrayList(); - while (ni.hasNext()) { - Node currNode = ni.nextNode(); - if (!currNode.isNodeType(AkbTypes.AKB_CONNECTOR_FOLDER)) { - ActiveTreeItem currChild = new ActiveTreeItem(currItem, - currNode, envNode); - children.add(currChild); - } - } - return children.toArray(); - } catch (RepositoryException e) { - throw new AkbException("Error while getting children nodes", e); - } - } - - public boolean hasChildren(Object parent) { - try { - ActiveTreeItem currItem = (ActiveTreeItem) parent; - Node parNode = currItem.getNode(); - - if (parNode.isNodeType(AkbTypes.AKB_ENV)) { - Session session = parNode.getSession(); - if (parNode.hasProperty(AkbNames.AKB_ENV_TEMPLATE_PATH) - && session.nodeExists(parNode.getProperty( - AkbNames.AKB_ENV_TEMPLATE_PATH).getString())) - parNode = session.getNode(parNode.getProperty( - AkbNames.AKB_ENV_TEMPLATE_PATH).getString()); - else - return false; - } - - return parNode.hasNodes(); - } catch (RepositoryException e) { - throw new AkbException("Error while checking children nodes", e); - } - } - - public void dispose() { - // FIXME implement if needed - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveTreeItem.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveTreeItem.java deleted file mode 100644 index efa94b4a0..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveTreeItem.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.argeo.slc.akb.ui.providers; - -import javax.jcr.Node; - -/** - * Simply wraps a JCR AKB Node to be able to also store corresponding current - * environment (active or template) - */ -public class ActiveTreeItem { - - private final ActiveTreeItem parent; - private final Node akbNode; - private final Node akbEnvironment; - - public ActiveTreeItem(ActiveTreeItem parent, Node akbNode, - Node akbEnvironment) { - this.parent = parent; - this.akbNode = akbNode; - this.akbEnvironment = akbEnvironment; - } - - public Node getNode() { - return akbNode; - } - - public Node getEnvironment() { - return akbEnvironment; - } - - public ActiveTreeItem getParent() { - return parent; - } -} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/AkbImageProvider.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/AkbImageProvider.java deleted file mode 100644 index d25e719bf..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/AkbImageProvider.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.argeo.slc.akb.ui.providers; - -import javax.jcr.Node; -import javax.jcr.RepositoryException; - -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbTypes; -import org.argeo.slc.akb.ui.AkbImages; -import org.eclipse.swt.graphics.Image; - -public class AkbImageProvider { - public Image getImage(Object element) { - try { - if (element instanceof ActiveTreeItem) - element = ((ActiveTreeItem) element).getNode(); - - if (element instanceof Node) { - Node node = (Node) element; - if (node.isNodeType(AkbTypes.AKB_ITEM_FOLDER)) - return AkbImages.ITEM_FOLDER; - else if (node.isNodeType(AkbTypes.AKB_SSH_CONNECTOR)) - return AkbImages.SSH_CONNECTOR; - else if (node.isNodeType(AkbTypes.AKB_SSH_COMMAND)) - return AkbImages.SSH_COMMAND; - else if (node.isNodeType(AkbTypes.AKB_SSH_FILE)) - return AkbImages.SSH_FILE; - else if (node.isNodeType(AkbTypes.AKB_JDBC_CONNECTOR)) - return AkbImages.JDBC_CONNECTOR; - else if (node.isNodeType(AkbTypes.AKB_JDBC_QUERY)) - return AkbImages.JDBC_QUERY; - else if (node.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) - return AkbImages.TEMPLATE; - else if (node.isNodeType(AkbTypes.AKB_ENV)) - return AkbImages.ACTIVE_ENV; - else if (node.isNodeType(AkbTypes.AKB_CONNECTOR_FOLDER)) - return AkbImages.CONNECTOR_FOLDER; - else if (node.isNodeType(AkbTypes.AKB_CONNECTOR_ALIAS)) - return AkbImages.CONNECTOR_ALIAS; - else if (node.isNodeType(AkbTypes.AKB_CONNECTOR)) - return AkbImages.DEFAULT_CONNECTOR; - } - } catch (RepositoryException e) { - throw new AkbException("Unexpected error while getting " - + "Custom node label", e); - } - return null; - } -} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/AkbTreeLabelProvider.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/AkbTreeLabelProvider.java deleted file mode 100644 index 0f3993f87..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/AkbTreeLabelProvider.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.argeo.slc.akb.ui.providers; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.RepositoryException; -import javax.jcr.nodetype.NodeType; - -import org.argeo.eclipse.ui.TreeParent; -import org.argeo.slc.akb.AkbException; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.swt.graphics.Image; - -/** Basic label provider for an AKB tree */ -public class AkbTreeLabelProvider extends LabelProvider { - // private final static Log log = LogFactory - // .getLog(ResultTreeLabelProvider.class); - - AkbImageProvider imageProvider = new AkbImageProvider(); - - @Override - public String getText(Object element) { - try { - if (element instanceof ActiveTreeItem) - element = ((ActiveTreeItem) element).getNode(); - - if (element instanceof Node) { - Node node = (Node) element; - if (node.isNodeType(NodeType.MIX_TITLE)) - return node.getProperty(Property.JCR_TITLE).getString(); - else - return node.getName(); - } - if (element instanceof String) - return (String) element; - - } catch (RepositoryException e) { - throw new AkbException("Unexpected error while getting " - + "Custom node label", e); - } - return ((TreeParent) element).getName(); - } - - public Image getImage(Object element) { - return imageProvider.getImage(element); - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/TemplatesTreeContentProvider.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/TemplatesTreeContentProvider.java deleted file mode 100644 index 9fe2df1cc..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/TemplatesTreeContentProvider.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2007-2012 Argeo GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.slc.akb.ui.providers; - -import java.util.ArrayList; -import java.util.List; - -import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.RepositoryException; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbTypes; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.Viewer; - -/** Basic content provider for a tree of active AKB environments */ -public class TemplatesTreeContentProvider implements ITreeContentProvider { - private final static Log log = LogFactory - .getLog(TemplatesTreeContentProvider.class); - - /** - * @param parent - */ - public Object[] getElements(Object parent) { - if (parent instanceof Object[]) - return (Object[]) parent; - else - return null; - } - - public Object getParent(Object child) { - try { - Node node = (Node) child; - - // Manual sanity check to avoid exception when trying to refresh an - // element that displays a node which has been removed - try { - String id = node.getIdentifier(); - node.getSession().getNodeByIdentifier(id); - } catch (Exception e) { - log.warn("Trying to refresh an unexisting node"); - return null; - } - - if (node.getDepth() == 0) - return null; - else - return node.getParent(); - - } catch (RepositoryException e) { - throw new AkbException("Error while getting parent node", e); - } - } - - public Object[] getChildren(Object parent) { - try { - NodeIterator ni = ((Node) parent).getNodes(); - List nodes = new ArrayList(); - - while (ni.hasNext()) { - Node currNode = ni.nextNode(); - if (!currNode.isNodeType(AkbTypes.AKB_CONNECTOR_FOLDER)) - nodes.add(currNode); - } - - return nodes.toArray(); - } catch (RepositoryException e) { - throw new AkbException("Error while getting children nodes", e); - } - } - - public boolean hasChildren(Object parent) { - try { - // refine this - return ((Node) parent).hasNodes(); - } catch (RepositoryException e) { - throw new AkbException("Error while checking children nodes", e); - } - } - - public void dispose() { - // FIXME implement if needed - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - - -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/utils/AkbItemsComparator.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/utils/AkbItemsComparator.java deleted file mode 100644 index bb45ff45e..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/utils/AkbItemsComparator.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.argeo.slc.akb.ui.utils; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.RepositoryException; - -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbTypes; -import org.argeo.slc.akb.ui.providers.ActiveTreeItem; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerComparator; - -/** Enable specific sorting of the ResultTreeView */ -public class AkbItemsComparator extends ViewerComparator { - - @Override - public int category(Object element) { - Node currNode = null; - if (element instanceof ActiveTreeItem) - currNode = ((ActiveTreeItem) element).getNode(); - else if (element instanceof Node) - currNode = (Node) element; - else if (element instanceof String) - // TODO why do we have strings - return 10; - else - throw new AkbException("Unsupported tree item element type " - + element); - - try { - if (currNode.isNodeType(AkbTypes.AKB_ITEM_FOLDER)) - // folder always first - return 5; - } catch (RepositoryException e) { - throw new AkbException("Cannot retrieve category for item", e); - } - return 10; - } - - @Override - public int compare(Viewer viewer, Object e1, Object e2) { - int cat1 = category(e1); - int cat2 = category(e2); - - if (cat1 != cat2) { - return cat1 - cat2; - } - - // TODO we only check on one item, types are not mixed for the time - // being - Node an = null; - Node bn = null; - if (e1 instanceof ActiveTreeItem) { - an = ((ActiveTreeItem) e1).getNode(); - bn = ((ActiveTreeItem) e2).getNode(); - } else if (e1 instanceof Node) { - an = ((Node) e1); - bn = ((Node) e2); - } else - throw new AkbException("Unsupported tree item element type " + e1); - - return super.compare(viewer, AkbJcrUtils.get(an, Property.JCR_TITLE), - AkbJcrUtils.get(bn, Property.JCR_TITLE)); - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/utils/Refreshable.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/utils/Refreshable.java deleted file mode 100644 index f7c01daaa..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/utils/Refreshable.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.argeo.slc.akb.ui.utils; - -/** - * WorkbenchPart should implement this interface to enable refresh command to - * refresh them - */ -public interface Refreshable { - - public void forceRefresh(Object object); - -} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbDefaultView.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbDefaultView.java deleted file mode 100644 index 03cfabab4..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbDefaultView.java +++ /dev/null @@ -1,216 +0,0 @@ -package org.argeo.slc.akb.ui.views; - -import java.util.HashMap; -import java.util.Map; - -import javax.jcr.Node; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.eclipse.ui.utils.CommandUtils; -import org.argeo.jcr.JcrUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor; -import org.argeo.slc.akb.ui.composites.AkbItemsTableComposite; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.part.ViewPart; - -/** Basic view that display a list of items with a quick search field. */ -public class AkbDefaultView extends ViewPart { - // private final static Log log = LogFactory.getLog(QuickSearchView.class); - - public static final String ID = AkbUiPlugin.PLUGIN_ID + ".akbDefaultView"; - - /* DEPENDENCY INJECTION */ - private Session session; - - // This page widgets - private AkbItemsTableComposite userTableCmp; - - @Override - public void createPartControl(Composite parent) { - GridLayout gl = new GridLayout(); - gl.horizontalSpacing = gl.verticalSpacing = gl.marginWidth = 0; - parent.setLayout(gl); - - // Create the composite that displays the list and a filter - AkbItemsTableComposite userTableCmp = new AkbItemsTableComposite( - parent, SWT.NO_FOCUS, session); - userTableCmp.populate(true, false); - userTableCmp - .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - // Configure - userTableCmp.getTableViewer().addDoubleClickListener( - new ViewDoubleClickListener()); - getViewSite().setSelectionProvider(userTableCmp.getTableViewer()); - - // // Filter - // Composite cmp = new Composite(parent, SWT.NO_FOCUS); - // cmp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - // createFilterPart(cmp); - // - // // Table - // cmp = new Composite(parent, SWT.NO_FOCUS); - // cmp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - // itemViewer = createListPart(cmp); - // - // // refreshFilteredList(); - } - - class ViewDoubleClickListener implements IDoubleClickListener { - public void doubleClick(DoubleClickEvent evt) { - Object obj = ((IStructuredSelection) evt.getSelection()) - .getFirstElement(); - try { - if (obj instanceof Node) { - Node node = (Node) obj; - Node currEnv = AkbJcrUtils.getCurrentTemplate(node); - - // Add Connector Alias - Map params = new HashMap(); - params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID, - node.getIdentifier()); - params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, - currEnv.getIdentifier()); - - CommandUtils.callCommand(OpenAkbNodeEditor.ID, params); - } - } catch (RepositoryException e) { - throw new AkbException("Cannot open " + obj, e); - } - } - } - - // private void createFilterPart(Composite parent) { - // parent.setLayout(new GridLayout()); - // // Text Area for the filter - // filterTxt = new Text(parent, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH - // | SWT.ICON_CANCEL); - // filterTxt.setMessage(FILTER_HELP_MSG); - // filterTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - // filterTxt.addModifyListener(new ModifyListener() { - // - // public void modifyText(ModifyEvent event) { - // refreshFilteredList(); - // } - // }); - // } - // - // protected TableViewer createListPart(Composite parent) { - // TableViewer v = new TableViewer(parent); - // - // TableColumn singleColumn = new TableColumn(v.getTable(), SWT.V_SCROLL); - // TableColumnLayout tableColumnLayout = new TableColumnLayout(); - // tableColumnLayout.setColumnData(singleColumn, new ColumnWeightData(85)); - // parent.setLayout(tableColumnLayout); - // - // // Corresponding table & style - // Table table = v.getTable(); - // table.setLinesVisible(true); - // table.setHeaderVisible(false); - // - // v.setContentProvider(new BasicNodeListContentProvider()); - // v.addDoubleClickListener(peopleUiService - // .getNewNodeListDoubleClickListener(peopleService, null)); - // return v; - // } - - @Override - public void dispose() { - userTableCmp.dispose(); - JcrUtils.logoutQuietly(session); - super.dispose(); - } - - @Override - public void setFocus() { - } - - // protected void refreshFilteredList() { - // try { - // List persons = JcrUtils.nodeIteratorToList(doSearch(session, - // filterTxt.getText(), PeopleTypes.PEOPLE_PERSON, - // PeopleNames.PEOPLE_LAST_NAME, - // PeopleNames.PEOPLE_PRIMARY_EMAIL)); - // personViewer.setInput(persons); - // } catch (RepositoryException e) { - // throw new PeopleException("Unable to list persons", e); - // } - // } - // - // /** Build repository request */ - // private NodeIterator doSearch(Session session, String filter, - // String typeName, String orderProperty, String orderProperty2) - // throws RepositoryException { - // QueryManager queryManager = session.getWorkspace().getQueryManager(); - // QueryObjectModelFactory factory = queryManager.getQOMFactory(); - // - // Selector source = factory.selector(typeName, typeName); - // - // // no Default Constraint - // Constraint defaultC = null; - // - // // Parse the String - // String[] strs = filter.trim().split(" "); - // if (strs.length == 0) { - // // StaticOperand so = factory.literal(session.getValueFactory() - // // .createValue("*")); - // // defaultC = factory.fullTextSearch("selector", null, so); - // } else { - // for (String token : strs) { - // StaticOperand so = factory.literal(session.getValueFactory() - // .createValue("*" + token + "*")); - // Constraint currC = factory.fullTextSearch( - // source.getSelectorName(), null, so); - // if (defaultC == null) - // defaultC = currC; - // else - // defaultC = factory.and(defaultC, currC); - // } - // } - // - // Ordering order = null, order2 = null; - // - // if (orderProperty != null && !"".equals(orderProperty.trim())) - // order = factory.ascending(factory.lowerCase(factory.propertyValue( - // source.getSelectorName(), orderProperty))); - // if (orderProperty2 != null && !"".equals(orderProperty2.trim())) - // order2 = factory.ascending(factory.propertyValue( - // source.getSelectorName(), orderProperty2)); - // - // QueryObjectModel query; - // if (order == null) { - // query = factory.createQuery(source, defaultC, null, null); - // } else { - // if (order2 == null) - // query = factory.createQuery(source, defaultC, - // new Ordering[] { order }, null); - // else - // query = factory.createQuery(source, defaultC, new Ordering[] { - // order, order2 }, null); - // } - // query.setLimit(ROW_LIMIT.longValue()); - // QueryResult result = query.execute(); - // return result.getNodes(); - // } - - /* DEPENDENCY INJECTION */ - public void setRepository(Repository repository) { - try { - session = repository.login(); - } catch (RepositoryException e) { - throw new AkbException("Unable to initialize " - + "session for view " + ID, e); - } - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbTemplatesTreeView.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbTemplatesTreeView.java deleted file mode 100644 index 2686a486d..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbTemplatesTreeView.java +++ /dev/null @@ -1,515 +0,0 @@ -/* - * Copyright (C) 2007-2012 Argeo GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.slc.akb.ui.views; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.jcr.Node; -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.EventListener; -import javax.jcr.observation.ObservationManager; - -import org.argeo.eclipse.ui.jcr.AsyncUiEventListener; -import org.argeo.eclipse.ui.utils.CommandUtils; -import org.argeo.jcr.JcrUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.AkbTypes; -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.ui.commands.DeleteAkbNodes; -import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor; -import org.argeo.slc.akb.ui.providers.AkbTreeLabelProvider; -import org.argeo.slc.akb.ui.providers.TemplatesTreeContentProvider; -import org.argeo.slc.akb.ui.utils.AkbItemsComparator; -import org.argeo.slc.akb.ui.utils.Refreshable; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.jface.action.IContributionItem; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.part.ViewPart; -import org.eclipse.ui.services.IServiceLocator; - -/** AKB template tree view. */ -public class AkbTemplatesTreeView extends ViewPart implements Refreshable { - // private final static Log log = - // LogFactory.getLog(AkbTemplatesTreeView.class); - - public final static String ID = AkbUiPlugin.PLUGIN_ID - + ".akbTemplatesTreeView"; - - /* DEPENDENCY INJECTION */ - private Session session; - private AkbService akbService; - - // This page widgets - private TreeViewer envTreeViewer; - - // Usefull business objects - private Node templatesParentNode; - - // Observer - private EventListener akbNodesObserver = null; - private final static String[] observedNodeTypes = { - AkbTypes.AKB_ENV_TEMPLATE, AkbTypes.AKB_CONNECTOR_ALIAS, - AkbTypes.AKB_ITEM, AkbTypes.AKB_ITEM_FOLDER, - AkbTypes.AKB_CONNECTOR_FOLDER }; - - private void initialize() { - try { - templatesParentNode = session - .getNode(AkbNames.AKB_TEMPLATES_BASE_PATH); - } catch (RepositoryException e) { - throw new AkbException("unable to initialize AKB Browser view", e); - } - } - - @Override - public void createPartControl(Composite parent) { - initialize(); - - envTreeViewer = createTreeViewer(parent); - envTreeViewer.setInput(initializeTree()); - envTreeViewer.setComparator(new AkbItemsComparator()); - } - - // The main tree viewer - protected TreeViewer createTreeViewer(Composite parent) { - parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); - int style = SWT.BORDER | SWT.MULTI; - - TreeViewer viewer = new TreeViewer(parent, style); - viewer.getTree().setLayoutData( - new GridData(SWT.FILL, SWT.FILL, true, true)); - - viewer.setContentProvider(new TemplatesTreeContentProvider()); - viewer.setLabelProvider(new AkbTreeLabelProvider()); - viewer.addDoubleClickListener(new ViewDoubleClickListener()); - - // Add label provider with label decorator - // ResultTreeLabelProvider rtLblProvider = new - // ResultTreeLabelProvider(); - // ILabelDecorator decorator = AkbUiPlugin.getDefault().getWorkbench() - // .getDecoratorManager().getLabelDecorator(); - // viewer.setLabelProvider(new DecoratingLabelProvider(rtLblProvider, - // decorator)); - - getSite().setSelectionProvider(viewer); - - // // add drag & drop support - // int operations = DND.DROP_COPY | DND.DROP_MOVE; - // Transfer[] tt = new Transfer[] { TextTransfer.getInstance() }; - // viewer.addDragSupport(operations, tt, new ViewDragListener()); - // viewer.addDropSupport(operations, tt, new ViewDropListener(viewer)); - - // add context menu - MenuManager menuManager = new MenuManager(); - Menu menu = menuManager.createContextMenu(viewer.getTree()); - menuManager.addMenuListener(new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - contextMenuAboutToShow(manager); - } - }); - viewer.getTree().setMenu(menu); - menuManager.setRemoveAllWhenShown(true); - - getSite().registerContextMenu(menuManager, viewer); - - // Initialize observer - try { - ObservationManager observationManager = session.getWorkspace() - .getObservationManager(); - - akbNodesObserver = new AkbNodesObserver(viewer.getTree() - .getDisplay()); - observationManager.addEventListener(akbNodesObserver, - Event.NODE_ADDED | Event.NODE_REMOVED, - templatesParentNode.getPath(), true, null, - observedNodeTypes, false); - } catch (RepositoryException e) { - throw new AkbException("Cannot register listeners", e); - } - return viewer; - } - - @Override - public void setFocus() { - } - - private Node[] initializeTree() { - try { - NodeIterator ni = templatesParentNode.getNodes(); - List templates = new ArrayList(); - while (ni.hasNext()) { - Node currNode = ni.nextNode(); - if (currNode.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) - templates.add(currNode); - } - Node[] templateArr = templates.toArray(new Node[templates.size()]); - return templateArr; - } catch (RepositoryException re) { - throw new AkbException("Error while initializing templates Tree.", - re); - } - } - - @Override - public void forceRefresh(Object object) { - envTreeViewer.setInput(initializeTree()); - } - - // /////////////////////////// - // CONTEXT MENU MANAGEMENT - - /** - * Defines the commands that will pop up in the context menu. - **/ - protected void contextMenuAboutToShow(IMenuManager menuManager) { - IWorkbenchWindow window = AkbUiPlugin.getDefault().getWorkbench() - .getActiveWorkbenchWindow(); - try { - - // Build conditions - IStructuredSelection selection = (IStructuredSelection) envTreeViewer - .getSelection(); - - Node selected = (Node) selection.getFirstElement(); - Node currEnv = null; - - boolean hasSelection = selected != null; - - if (hasSelection) - currEnv = AkbJcrUtils.getCurrentTemplate(selected); - - boolean isTemplate = hasSelection ? selected - .isNodeType(AkbTypes.AKB_ENV_TEMPLATE) : false; - boolean isParentItemsFolder = hasSelection ? selected - .isNodeType(AkbTypes.AKB_ITEM_FOLDER) : false; - // boolean isParentConnectorsFolder = hasSelection ? selected - // .isNodeType(AkbTypes.AKB_CONNECTOR_FOLDER) : false; - boolean isDeletable = hasSelection ? true : false; - - // Add Connector Alias - Map params = new HashMap(); - if (hasSelection && isTemplate) { - params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID, - selected.getIdentifier()); - params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, - currEnv.getIdentifier()); - } - params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, - AkbTypes.AKB_CONNECTOR_ALIAS); - - // Connector Alias submenu - refreshAliasesSubmenu(menuManager, window, "menu.aliasesSubmenu", - "Add Connector Alias", isTemplate, params); - - // Item Submenu - params = new HashMap(); - if (hasSelection) { - params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID, - selected.getIdentifier()); - params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, - currEnv.getIdentifier()); - } - refreshItemsSubmenu(menuManager, window, "menu.itemsSubmenu", - "Add Item", isParentItemsFolder || isTemplate, params); - - // Add Item Folder - params = new HashMap(); - if (hasSelection) { - params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID, - selected.getIdentifier()); - params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, - currEnv.getIdentifier()); - } - params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, - AkbTypes.AKB_ITEM_FOLDER); - - AkbUiUtils.refreshParameterizedCommand(menuManager, window, - "cmd.addItemFolder", OpenAkbNodeEditor.ID, - "Add item folder", null, isParentItemsFolder || isTemplate, - params); - - // Delete Item - params = new HashMap(); - if (hasSelection) - params.put(DeleteAkbNodes.PARAM_NODE_JCR_ID, - selected.getIdentifier()); - AkbUiUtils.refreshParameterizedCommand(menuManager, window, - "cmd.deleteItem", DeleteAkbNodes.ID, - "Delete selected item(s)", null, isDeletable, params); - - // create template - params = new HashMap(); - params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID, - templatesParentNode.getIdentifier()); - params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, - AkbTypes.AKB_ENV_TEMPLATE); - AkbUiUtils.refreshParameterizedCommand(menuManager, window, - "cmd.createTemplate", OpenAkbNodeEditor.ID, - "Create new template...", null, - !hasSelection || isTemplate, params); - - } catch (RepositoryException re) { - throw new AkbException("Error while refreshing context menu", re); - } - } - - /** - * - * refreshes submenu with various connector types - * - * @param menuManager - * @param locator - * @param itemId - * @param label - * @param isVisible - * @param params - */ - private void refreshItemsSubmenu(IMenuManager menuManager, - IServiceLocator locator, String itemId, String label, - boolean isVisible, Map params) { - - // clean - IContributionItem ici = menuManager.find(itemId); - if (ici != null) - menuManager.remove(ici); - - MenuManager subMenu = new MenuManager(label, itemId); - - // JDBC Query - Map tmpParams = new HashMap(); - tmpParams.putAll(params); - tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, - AkbTypes.AKB_JDBC_QUERY); - String currItemId = "cmd.createJDBCQuery"; - IContributionItem currItem = subMenu.find(currItemId); - if (currItem != null) - subMenu.remove(currItem); - subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator, - currItemId, OpenAkbNodeEditor.ID, "JDBC Query", null, tmpParams)); - - // SSH COMMAND - tmpParams = new HashMap(); - tmpParams.putAll(params); - tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, - AkbTypes.AKB_SSH_COMMAND); - currItemId = "cmd.createSSHCommand"; - currItem = subMenu.find(currItemId); - if (currItem != null) - subMenu.remove(currItem); - subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator, - currItemId, OpenAkbNodeEditor.ID, "SSH Command", null, - tmpParams)); - - // SSH FILE - tmpParams = new HashMap(); - tmpParams.putAll(params); - tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, AkbTypes.AKB_SSH_FILE); - currItemId = "cmd.createSSHFile"; - currItem = subMenu.find(currItemId); - if (currItem != null) - subMenu.remove(currItem); - subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator, - currItemId, OpenAkbNodeEditor.ID, "SSH File", null, tmpParams)); - - // refresh - menuManager.add(subMenu); - subMenu.setVisible(isVisible); - } - - /** - * - * refreshes submenu with various connector types - * - * @param menuManager - * @param locator - * @param itemId - * @param label - * @param isVisible - * @param params - */ - private void refreshAliasesSubmenu(IMenuManager menuManager, - IServiceLocator locator, String itemId, String label, - boolean isVisible, Map params) { - - // clean - IContributionItem ici = menuManager.find(itemId); - if (ici != null) - menuManager.remove(ici); - - // TODO use dynamic contribution to dynamically retrieve specific - // connector types - // CompoundContributionItem comConI = new MyCompoundCI(menuManager, - // locator, itemId); - MenuManager subMenu = new MenuManager(label, itemId); - - // JDBC - Map tmpParams = new HashMap(); - tmpParams.putAll(params); - tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_SUBTYPE, - AkbTypes.AKB_JDBC_CONNECTOR); - String currItemId = "cmd.createJDBCAlias"; - IContributionItem currItem = subMenu.find(currItemId); - if (currItem != null) - subMenu.remove(currItem); - subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator, - currItemId, OpenAkbNodeEditor.ID, "JDBC", null, tmpParams)); - - // SSH - tmpParams = new HashMap(); - tmpParams.putAll(params); - tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_SUBTYPE, - AkbTypes.AKB_SSH_CONNECTOR); - currItemId = "cmd.createSSHAlias"; - currItem = subMenu.find(currItemId); - if (currItem != null) - subMenu.remove(currItem); - subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator, - currItemId, OpenAkbNodeEditor.ID, "SSH", null, tmpParams)); - - // refresh - menuManager.add(subMenu); - subMenu.setVisible(isVisible); - } - - // private class MyCompoundCI extends CompoundContributionItem { - // private IMenuManager menuManager; - // private IServiceLocator locator; - // - // public MyCompoundCI(IMenuManager menuManager, IServiceLocator locator, - // String itemId) { - // super(itemId); - // this.menuManager = menuManager; - // this.locator = locator; - // } - // - // @Override - // protected IContributionItem[] getContributionItems() { - // - // CommandContributionItem[] submenu = new CommandContributionItem[2]; - // submenu[0] = createContributionItem(menuManager, locator, "uid.1", - // OpenAkbNodeEditor.ID, "test1" + System.currentTimeMillis(), - // null, null); - // submenu[1] = createContributionItem(menuManager, locator, "uid.2", - // OpenAkbNodeEditor.ID, "test2", null, null); - // return submenu; - // } - // } - - /* INNER CLASSES */ - private class AkbNodesObserver extends AsyncUiEventListener { - - public AkbNodesObserver(Display display) { - super(display); - } - - @Override - protected Boolean willProcessInUiThread(List events) - throws RepositoryException { - // unfiltered for the time being - return true; - } - - protected void onEventInUiThread(List events) - throws RepositoryException { - boolean fullRefresh = false; - - eventLoop: for (Event event : events) { - String currPath = event.getPath(); - if (session.nodeExists(currPath)) { - Node node = session.getNode(currPath); - if (node.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) { - fullRefresh = true; - break eventLoop; - } - } - } - - Object[] visibles = envTreeViewer.getExpandedElements(); - if (fullRefresh) - envTreeViewer.setInput(initializeTree()); - else - envTreeViewer.refresh(); - - envTreeViewer.setExpandedElements(visibles); - } - } - - class ViewDoubleClickListener implements IDoubleClickListener { - public void doubleClick(DoubleClickEvent evt) { - Object obj = ((IStructuredSelection) evt.getSelection()) - .getFirstElement(); - try { - if (obj instanceof Node) { - Node node = (Node) obj; - Node currEnv = AkbJcrUtils.getCurrentTemplate(node); - - // Add Connector Alias - Map params = new HashMap(); - params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID, - node.getIdentifier()); - params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, - currEnv.getIdentifier()); - - CommandUtils.callCommand(OpenAkbNodeEditor.ID, params); - } - } catch (RepositoryException e) { - throw new AkbException("Cannot open " + obj, e); - } - } - } - - @Override - public void dispose() { - JcrUtils.logoutQuietly(session); - super.dispose(); - } - - /* DEPENDENCY INJECTION */ - public void setRepository(Repository repository) { - try { - session = repository.login(); - } catch (RepositoryException e) { - throw new AkbException("unable to log in for " + ID + " view"); - } - } - - public void setAkbService(AkbService akbService) { - this.akbService = akbService; - - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/EnvironmentsTreeView.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/EnvironmentsTreeView.java deleted file mode 100644 index 63e398280..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/EnvironmentsTreeView.java +++ /dev/null @@ -1,208 +0,0 @@ -package org.argeo.slc.akb.ui.views; - -import java.util.HashMap; -import java.util.Map; - -import javax.jcr.Node; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.eclipse.ui.utils.CommandUtils; -import org.argeo.jcr.JcrUtils; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.AkbTypes; -import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.ui.commands.CreateAkbNode; -import org.argeo.slc.akb.ui.commands.DeleteAkbNodes; -import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor; -import org.argeo.slc.akb.ui.providers.ActiveEnvsTreeContentProvider; -import org.argeo.slc.akb.ui.providers.ActiveTreeItem; -import org.argeo.slc.akb.ui.providers.AkbTreeLabelProvider; -import org.argeo.slc.akb.ui.utils.AkbItemsComparator; -import org.argeo.slc.akb.ui.utils.Refreshable; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.part.ViewPart; - -/** AKB Active environment tree view. */ -public class EnvironmentsTreeView extends ViewPart implements Refreshable { - - public final static String ID = AkbUiPlugin.PLUGIN_ID - + ".environmentsTreeView"; - - /* DEPENDENCY INJECTION */ - private Session session; - private AkbService akbService; - - // This page widgets - private TreeViewer envTreeViewer; - - // Usefull business objects - private Node activeEnvsParentNode; - - private void initialize() { - try { - activeEnvsParentNode = session - .getNode(AkbNames.AKB_ENVIRONMENTS_BASE_PATH); - } catch (RepositoryException e) { - throw new AkbException("unable to initialize AKB Browser view", e); - } - } - - @Override - public void createPartControl(Composite parent) { - initialize(); - envTreeViewer = createTreeViewer(parent); - envTreeViewer.setInput(activeEnvsParentNode); - envTreeViewer.setComparator(new AkbItemsComparator()); - } - - // The main tree viewer - protected TreeViewer createTreeViewer(Composite parent) { - parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); - int style = SWT.BORDER | SWT.MULTI; - - TreeViewer viewer = new TreeViewer(parent, style); - viewer.getTree().setLayoutData( - new GridData(SWT.FILL, SWT.FILL, true, true)); - - viewer.setContentProvider(new ActiveEnvsTreeContentProvider()); - viewer.setLabelProvider(new AkbTreeLabelProvider()); - viewer.addDoubleClickListener(new ViewDoubleClickListener()); - - getSite().setSelectionProvider(viewer); - - // context menu - MenuManager menuManager = new MenuManager(); - Menu menu = menuManager.createContextMenu(viewer.getTree()); - menuManager.addMenuListener(new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - contextMenuAboutToShow(manager); - } - }); - viewer.getTree().setMenu(menu); - menuManager.setRemoveAllWhenShown(true); - getSite().registerContextMenu(menuManager, viewer); - - return viewer; - } - - // //////////////////// - // / LIFE CYCLE - - @Override - public void forceRefresh(Object object) { - envTreeViewer.setInput(activeEnvsParentNode); - } - - @Override - public void setFocus() { - } - - @Override - public void dispose() { - JcrUtils.logoutQuietly(session); - super.dispose(); - } - - // /////////////////////////// - // CONTEXT MENU MANAGEMENT - /** - * Defines the commands that will pop up in the context menu. - **/ - protected void contextMenuAboutToShow(IMenuManager menuManager) { - IWorkbenchWindow window = AkbUiPlugin.getDefault().getWorkbench() - .getActiveWorkbenchWindow(); - try { - // Build conditions - IStructuredSelection selection = (IStructuredSelection) envTreeViewer - .getSelection(); - - ActiveTreeItem item = (ActiveTreeItem) selection.getFirstElement(); - - boolean hasSelection = item != null; - Node selected = null, currEnv = null; - - if (hasSelection) { - selected = item.getNode(); - currEnv = item.getEnvironment(); - } - boolean isEnv = hasSelection ? selected - .isNodeType(AkbTypes.AKB_ENV) : false; - boolean isDeletable = hasSelection ? isEnv : false; - Map params = new HashMap(); - - // Delete Item - params = new HashMap(); - if (hasSelection) - params.put(DeleteAkbNodes.PARAM_NODE_JCR_ID, - selected.getIdentifier()); - AkbUiUtils.refreshParameterizedCommand(menuManager, window, - "cmd.deleteItem", DeleteAkbNodes.ID, - "Delete selected active environment", null, isDeletable, - params); - - // create template - params = new HashMap(); - params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, AkbTypes.AKB_ENV); - AkbUiUtils.refreshParameterizedCommand(menuManager, window, - "cmd.instanciateEnv", CreateAkbNode.ID, - "Create new environment instance", null, !hasSelection - || isEnv, params); - - } catch (RepositoryException re) { - throw new AkbException("Error while refreshing context menu", re); - } - } - - /* INNER CLASSES */ - class ViewDoubleClickListener implements IDoubleClickListener { - public void doubleClick(DoubleClickEvent evt) { - Object obj = ((IStructuredSelection) evt.getSelection()) - .getFirstElement(); - try { - if (obj instanceof ActiveTreeItem) { - ActiveTreeItem currItem = (ActiveTreeItem) obj; - Node node = currItem.getNode(); - Node currEnv = currItem.getEnvironment(); - Map params = new HashMap(); - params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID, - node.getIdentifier()); - params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, - currEnv.getIdentifier()); - CommandUtils.callCommand(OpenAkbNodeEditor.ID, params); - } - } catch (RepositoryException e) { - throw new AkbException("Cannot open " + obj, e); - } - } - } - - /* DEPENDENCY INJECTION */ - public void setRepository(Repository repository) { - try { - session = repository.login(); - } catch (RepositoryException e) { - throw new AkbException("unable to log in for " + ID + " view"); - } - } - - public void setAkbService(AkbService akbService) { - this.akbService = akbService; - - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/ActiveConnectorWizard.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/ActiveConnectorWizard.java deleted file mode 100644 index 0867a6802..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/ActiveConnectorWizard.java +++ /dev/null @@ -1,186 +0,0 @@ -package org.argeo.slc.akb.ui.wizards; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.PropertyType; -import javax.jcr.RepositoryException; - -import org.argeo.eclipse.ui.ErrorFeedback; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.ui.AkbUiUtils; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Link; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; - -/** Creates or edit a connector instance */ -public class ActiveConnectorWizard extends Wizard { - - // private Session session; - private AkbService akbService; - private Node activeConnector; - // private Node createdNode; - - // pages - private EditConnectorPage editConnectorPage; - - public ActiveConnectorWizard(AkbService akbService, Node activeConnector) { - this.akbService = akbService; - this.activeConnector = activeConnector; - } - - @Override - public void addPages() { - editConnectorPage = new EditConnectorPage(); - addPage(editConnectorPage); - } - - @Override - public boolean performFinish() { - if (!canFinish()) - return false; - doUpdate(); - return true; - } - - private void doUpdate() { - try { - boolean changed = false; - changed |= AkbUiUtils.setJcrProperty(activeConnector, - AkbNames.AKB_CONNECTOR_URL, PropertyType.STRING, - editConnectorPage.getUrl()); - changed |= AkbUiUtils.setJcrProperty(activeConnector, - AkbNames.AKB_CONNECTOR_USER, PropertyType.STRING, - editConnectorPage.getUser()); - if (changed) - activeConnector.getSession().save(); - // return changed; - } catch (RepositoryException re) { - throw new AkbException("Unable to update active connector", re); - } - } - - private boolean doTest() { - boolean testSuccesfull; - try { - testSuccesfull = akbService.testConnector(activeConnector); - } catch (Exception e1) { - testSuccesfull = false; - ErrorFeedback.show("Cannot test connection", e1); - } - String name = AkbJcrUtils.get(activeConnector, Property.JCR_TITLE); - String url = AkbJcrUtils.get(activeConnector, - AkbNames.AKB_CONNECTOR_URL); - String msg = " to " + name + " (" + url + ")"; - Shell shell = ActiveConnectorWizard.this.getShell(); - if (testSuccesfull) { - MessageDialog.openInformation(shell, "Test successful", - "Successfully connected " + msg); - } else - MessageDialog.openError(shell, "Test failure", "Unable to connect" - + msg); - return testSuccesfull; - } - - public boolean canFinish() { - if (AkbJcrUtils.isEmptyString(editConnectorPage.getUrl()) - || AkbJcrUtils.isEmptyString(editConnectorPage.getUser())) - return false; - else - return true; - } - - // ////////////////////// - // Pages definition - /** - * Displays a combo box that enables user to choose which action to perform - */ - private class EditConnectorPage extends WizardPage { - private Text urlTxt; - private Text userTxt; - - public EditConnectorPage() { - super("Edit connector"); - setTitle("Edit connector"); - setDescription("Edit or create an active connector"); - } - - @Override - public void createControl(Composite parent) { - Composite container = new Composite(parent, SWT.NO_FOCUS); - GridLayout gl = new GridLayout(2, false); - container.setLayout(gl); - - new Label(container, NONE).setText("URL"); - urlTxt = new Text(container, SWT.NONE); - urlTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - AkbUiUtils.refreshFormTextWidget(urlTxt, activeConnector, - AkbNames.AKB_CONNECTOR_URL); - urlTxt.addModifyListener(new ModifyListener() { - @Override - public void modifyText(ModifyEvent e) { - // TODO implement here name validation. - getWizard().getContainer().updateButtons(); - } - }); - - new Label(container, NONE).setText("User"); - userTxt = new Text(container, SWT.NONE); - userTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - AkbUiUtils.refreshFormTextWidget(userTxt, activeConnector, - AkbNames.AKB_CONNECTOR_USER); - userTxt.addModifyListener(new ModifyListener() { - @Override - public void modifyText(ModifyEvent e) { - // TODO implement here name validation. - getWizard().getContainer().updateButtons(); - } - }); - - new Label(container, SWT.SEPARATOR | SWT.SHADOW_OUT - | SWT.HORIZONTAL).setLayoutData(new GridData(SWT.FILL, - SWT.FILL, false, false, 2, 1)); - - Link testBtn = new Link(container, SWT.NONE); - testBtn.setText("Save and test"); - - testBtn.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - doUpdate(); - doTest(); - } - }); - - setControl(container); - } - - protected String getUrl() { - return - // String url = - urlTxt.getText(); - // if (AkbJcrUtils.isEmptyString(url)) - // return null; - // else - // return url; - } - - protected String getUser() { - return userTxt.getText(); - } - } -} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/CreateEnvInstanceWizard.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/CreateEnvInstanceWizard.java deleted file mode 100644 index 1b8426617..000000000 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/CreateEnvInstanceWizard.java +++ /dev/null @@ -1,162 +0,0 @@ -package org.argeo.slc.akb.ui.wizards; - -import java.util.List; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -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.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -/** Creates a new active instance of an AKB env template */ -public class CreateEnvInstanceWizard extends Wizard { - // private final static Log log = LogFactory - // .getLog(CreateEnvInstanceWizard.class); - - private Session session; - private AkbService akbService; - private Node createdNode; - - // pages - private ChooseTemplatePage chooseTemplatePage; - - public CreateEnvInstanceWizard(AkbService akbService, Session session) { - this.akbService = akbService; - this.session = session; - } - - @Override - public void addPages() { - chooseTemplatePage = new ChooseTemplatePage(); - addPage(chooseTemplatePage); - } - - public Node getCreatedNode() { - return createdNode; - } - - @Override - public boolean performFinish() { - if (!canFinish()) - return false; - try { - createdNode = akbService.createActiveEnv( - chooseTemplatePage.getTemplate(), - chooseTemplatePage.getActiveEnvName(), - chooseTemplatePage.getUseDefaultConnectors()); - - return true; - } catch (RepositoryException re) { - throw new AkbException("Unable to create environment instance", re); - } - } - - public boolean canFinish() { - if (chooseTemplatePage.getActiveEnvName() != null - && chooseTemplatePage.getTemplate() != null) - return true; - else - return false; - } - - // ////////////////////// - // Pages definition - /** - * Displays a combo box that enables user to choose which action to perform - */ - private class ChooseTemplatePage extends WizardPage { - private Text valueTxt; - private Combo chooseTemplateCmb; - private Button useDefaultConnChk; - - public ChooseTemplatePage() { - super("Choose template"); - setTitle("Choose template."); - setDescription("Define the new instance parameters"); - } - - @Override - public void createControl(Composite parent) { - Composite container = new Composite(parent, SWT.NO_FOCUS); - GridLayout gl = new GridLayout(2, false); - container.setLayout(gl); - - new Label(container, NONE).setText("Name"); - valueTxt = new Text(container, SWT.NONE); - valueTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - valueTxt.addModifyListener(new ModifyListener() { - @Override - public void modifyText(ModifyEvent e) { - // TODO implement here name validation. - getWizard().getContainer().updateButtons(); - } - }); - - new Label(container, NONE).setText("Parent template"); - chooseTemplateCmb = new Combo(container, SWT.NO_FOCUS); - chooseTemplateCmb.setItems(getTemplates()); - chooseTemplateCmb.setLayoutData(new GridData(SWT.FILL, SWT.TOP, - true, false)); - - chooseTemplateCmb.addModifyListener(new ModifyListener() { - @Override - public void modifyText(ModifyEvent e) { - getWizard().getContainer().updateButtons(); - } - }); - - new Label(container, SWT.SEPARATOR | SWT.SHADOW_OUT - | SWT.HORIZONTAL).setLayoutData(new GridData(SWT.FILL, - SWT.FILL, false, false, 3, 1)); - - useDefaultConnChk = new Button(container, SWT.CHECK); - useDefaultConnChk.setText("Import default connectors"); - useDefaultConnChk.setSelection(true); - - setControl(container); - } - - private String[] getTemplates() { - List templates = AkbJcrUtils.getDefinedTemplate(session); - String[] values = new String[templates.size()]; - int i = 0; - for (Node node : templates) { - values[i++] = AkbJcrUtils.get(node, Property.JCR_TITLE); - } - return values; - } - - protected String getActiveEnvName() { - return AkbJcrUtils.isEmptyString(valueTxt.getText()) ? null - : valueTxt.getText(); - } - - protected Node getTemplate() { - int index = chooseTemplateCmb.getSelectionIndex(); - if (index >= 0) { - return AkbJcrUtils.getTemplateByName(session, - chooseTemplateCmb.getItem(index)); - } else - return null; - } - - protected boolean getUseDefaultConnectors() { - return useDefaultConnChk.getSelection(); - } - } -} \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/.classpath b/runtime/org.argeo.slc.akb/.classpath deleted file mode 100644 index 0611249ba..000000000 --- a/runtime/org.argeo.slc.akb/.classpath +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/.project b/runtime/org.argeo.slc.akb/.project deleted file mode 100644 index d5cad462c..000000000 --- a/runtime/org.argeo.slc.akb/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - org.argeo.slc.akb - - - org.argeo.connect.people - - - - 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/runtime/org.argeo.slc.akb/build.properties b/runtime/org.argeo.slc.akb/build.properties deleted file mode 100644 index f700a650c..000000000 --- a/runtime/org.argeo.slc.akb/build.properties +++ /dev/null @@ -1,5 +0,0 @@ -source.. = src/main/java/,\ - src/main/resources, - -output.. = target/classes/ -bin.includes = META-INF/,\ \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/pom.xml b/runtime/org.argeo.slc.akb/pom.xml deleted file mode 100644 index f6e27e7e5..000000000 --- a/runtime/org.argeo.slc.akb/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - 4.0.0 - - org.argeo.slc - 1.1.15-SNAPSHOT - runtime - .. - - org.argeo.slc.akb - SLC AKB - Specifications and Core - - - - org.apache.felix - maven-bundle-plugin - - - - *, - javax.jcr.nodetype, - com.microsoft.sqlserver.jdbc;resolution:=optional, - com.mysql.jdbc;resolution:=optional, - net.sourceforge.jtds.jdbc;resolution:=optional, - oracle.jdbc;resolution:=optional, - org.apache.derby.jdbc;resolution:=optional, - org.h2;resolution:=optional, - org.hsqldb;resolution:=optional, - org.postgresql;resolution:=optional - - - - - - - - - org.argeo.commons.server - org.argeo.server.jcr - ${version.argeo-commons} - - - org.argeo.commons.security - org.argeo.security.core - ${version.argeo-commons} - - - - - org.argeo.slc - org.argeo.slc.support.simple - 1.1.15-SNAPSHOT - - - diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbConstants.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbConstants.java deleted file mode 100644 index 5d725ccac..000000000 --- a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbConstants.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.argeo.slc.akb; - -/** Centralizes all AKB specific constants */ -public interface AkbConstants { - public final static String AKB_BASE_PATH = "/akb:system"; -} diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbException.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbException.java deleted file mode 100644 index 81f69e2d2..000000000 --- a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbException.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.argeo.slc.akb; - -/** - * SLC AKB's specific exception. For the time being, it just wraps a usual - * RuntimeException - */ -public class AkbException extends RuntimeException { - private static final long serialVersionUID = 1L; - - public AkbException(String message) { - super(message); - } - - public AkbException(String message, Throwable e) { - super(message, e); - } - -} diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java deleted file mode 100644 index 79f622892..000000000 --- a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.argeo.slc.akb; - -/** Maps AKB specific JCR Property names with java constants */ -public interface AkbNames { - - public final static String AKB_NAMESPACE = "http://www.argeo.org/ns/akb"; - - /* DEFAULT BASE PATHS */ - public final static String AKB_BASE_PATH = "/akb:system"; - public final static String AKB_TEMPLATES_BASE_PATH = AKB_BASE_PATH + "/" - + "akb:templates"; - - public final static String AKB_ENVIRONMENTS_BASE_PATH = AKB_BASE_PATH + "/" - + "akb:environments"; - - /* ENVIRONMENT PROPERTIES */ - public final static String AKB_ENV_TEMPLATE_PATH = "akb:envTemplatePath"; - - /* CONNECTOR PROPERTIES */ - public final static String AKB_CONNECTOR_URL = "akb:connectorUrl"; - public final static String AKB_CONNECTOR_ALIAS_PATH = "akb:connectorAliasPath"; - public final static String AKB_CONNECTOR_USER = "akb:connectorUser"; - // Alias specific - public final static String AKB_DEFAULT_TEST_CONNECTOR = "defaultTestConnector"; - public final static String AKB_CONNECTOR_TYPE = "akb:connectorType"; - - /* ITEMS PROPERTIES */ - public final static String AKB_USED_CONNECTOR = "akb:usedConnector"; - - public final static String AKB_FILE_PATH = "akb:filePath"; - public final static String AKB_COMMAND_TEXT = "akb:commandText"; - public final static String AKB_QUERY_TEXT = "akb:queryText"; - -} \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbService.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbService.java deleted file mode 100644 index d39e3baa3..000000000 --- a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbService.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.argeo.slc.akb; - -import java.sql.PreparedStatement; - -import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; - -/** Provides method interfaces to manage an AKB repository */ -public interface AkbService { - - /** Exposes injected Repository */ - public Repository getRepository(); - - /** Creates a pre-configured AKB Template */ - public Node createAkbTemplate(Node parent, String name) - throws RepositoryException; - - /** Creates an instance of a template */ - public Node createActiveEnv(Node template, String name, - boolean copyDefaultConnectors) throws RepositoryException; - - /** Creates a new pre-configured AKB connector Alias for the given template */ - public Node createConnectorAlias(Node templateNode, String name, - String connectorType) throws RepositoryException; - - /** - * @param templateNode - * @param connectorType - * if null, returns all defined connector for this template - * @return - * @throws RepositoryException - */ - public NodeIterator getDefinedAliases(Node templateNode, - String connectorType) throws RepositoryException; - - - /** - * @param envNode - * an environment or a template - * @param aliasPath - * the path of the parent alias in the corresponding template - * environment used as key - * @return the corresponding active connector if found - * @throws RepositoryException - */ - public Node getActiveConnectorByAlias(Node envNode, String aliasPath) - throws RepositoryException; - - /** - * Shortcut to perform whatever test on a given connector only to check if - * URL is correctly defined, if the target system is there and if the - * current user has the sufficient credentials to connect - * - * If no active environment is defined, try to - */ - public boolean testConnector(Node connector); - - /** - * If no active environment is defined, tries to execute query with default - * connector defined for the template - * - * @param activeEnvironment - * @param itemNode - * @return - */ - public PreparedStatement prepareJdbcQuery(Node activeEnvironment, - Node itemNode); - - /** - * - * @param activeEnvironment - * @param itemNode - * @return - */ - public String executeCommand(Node activeEnvironment, Node itemNode); - - /** - * - * @param activeEnvironment - * @param itemNode - * @return - */ - public String retrieveFile(Node activeEnvironment, Node itemNode); -} \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbTypes.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbTypes.java deleted file mode 100644 index 20c8e072a..000000000 --- a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbTypes.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.argeo.slc.akb; - -/** Maps AKB specific JCR node types with java constants */ -public interface AkbTypes { - - public final static String ARGEO_NOTE = "argeo:note"; - - // Env and templates - public final static String AKB_ENV_TEMPLATE = "akb:envTemplate"; - public final static String AKB_ENV = "akb:env"; - - // Connectors - public final static String AKB_CONNECTOR_FOLDER = "akb:connectorFolder"; - public final static String AKB_CONNECTOR = "akb:connector"; - public final static String AKB_CONNECTOR_ALIAS = "akb:connectorAlias"; - - // Various connector mixin types - public final static String AKB_SSH_CONNECTOR = "akb:sshConnector"; - public final static String AKB_JDBC_CONNECTOR = "akb:jdbcConnector"; - public final static String AKB_JCR_CONNECTOR = "akb:jcrConnector"; - - // Item tree - public final static String AKB_ITEM_FOLDER = "akb:itemsFolder"; - public final static String AKB_ITEM = "akb:item"; - - // Various items types - public final static String AKB_SSH_FILE = "akb:sshFile"; - public final static String AKB_SSH_COMMAND = "akb:sshCommand"; - public final static String AKB_JDBC_QUERY = "akb:jdbcQuery"; - public final static String AKB_NOTE = "akb:note"; - -} \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java deleted file mode 100644 index 0f45c5b6c..000000000 --- a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java +++ /dev/null @@ -1,570 +0,0 @@ -package org.argeo.slc.akb.core; - -import java.net.URI; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLFeatureNotSupportedException; -import java.util.Map; - -import javax.annotation.Resource; -import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.Property; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.query.QueryManager; -import javax.jcr.query.QueryResult; -import javax.jcr.query.qom.Constraint; -import javax.jcr.query.qom.Ordering; -import javax.jcr.query.qom.QueryObjectModel; -import javax.jcr.query.qom.QueryObjectModelConstants; -import javax.jcr.query.qom.QueryObjectModelFactory; -import javax.jcr.query.qom.Selector; - -import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.jcr.ArgeoNames; -import org.argeo.jcr.JcrUtils; -import org.argeo.jcr.UserJcrUtils; -import org.argeo.slc.SlcException; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.AkbService; -import org.argeo.slc.akb.AkbTypes; -import org.argeo.slc.akb.utils.AkbJcrUtils; -import org.argeo.slc.jsch.SimpleUserInfo; -import org.argeo.util.security.Keyring; - -import com.jcraft.jsch.ChannelExec; -import com.jcraft.jsch.JSch; - -/** - * Concrete access to akb services. It provides among other an initialized - * environment - */ -public class AkbServiceImpl implements AkbService, AkbNames { - private final static Log log = LogFactory.getLog(AkbServiceImpl.class); - - /* DEPENDENCY INJECTION */ - private Repository repository; - - private Keyring keyring; - - // Populate the repository in a demo context. - private Map demoData = null; - - /* Life cycle management */ - /** - * Call by each startup in order to make sure the backend is ready to - * receive/provide data. - */ - public void init() { - // JDBC drivers - // TODO make it configurable - initJdbcDriver("org.postgresql.Driver"); - - Session adminSession = null; - try { - adminSession = repository.login(); - - // Initialization of the model - if (!adminSession.nodeExists(AKB_TEMPLATES_BASE_PATH)) { - JcrUtils.mkdirs(adminSession, AKB_TEMPLATES_BASE_PATH); - JcrUtils.mkdirs(adminSession, AKB_ENVIRONMENTS_BASE_PATH); - adminSession.save(); - log.info("Repository has been initialized " - + "with AKB's model"); - } - - // Fill the repository in a demo context - if (demoData != null) { - // Dev only force reload at each start - // if (true) { - // if (!projectsPar.hasNodes()) { - } - } catch (Exception e) { - throw new AkbException("Cannot initialize backend", e); - } finally { - JcrUtils.logoutQuietly(adminSession); - } - } - - protected Boolean initJdbcDriver(String driver) { - try { - Class.forName(driver); - return true; - } catch (ClassNotFoundException e) { - if (log.isDebugEnabled()) - log.debug("Cannot load JDBC driver : " + driver + ", " - + e.getMessage()); - return false; - } - } - - /** Clean shutdown of the backend. */ - public void destroy() { - } - - @Override - public Node createAkbTemplate(Node parentNode, String name) - throws RepositoryException { - Node newTemplate = parentNode.addNode(name, AkbTypes.AKB_ENV_TEMPLATE); - newTemplate.setProperty(Property.JCR_TITLE, name); - newTemplate.addNode(AkbTypes.AKB_CONNECTOR_FOLDER, - AkbTypes.AKB_CONNECTOR_FOLDER); - return newTemplate; - } - - // ////////////////////////// - // ENVIRONMENTS - @Override - public Node createActiveEnv(Node template, String name, - boolean copyDefaultConnectors) throws RepositoryException { - - Session session = template.getSession(); - Node parentEnvNode = session.getNode(AKB_ENVIRONMENTS_BASE_PATH); - Node createdEnv = parentEnvNode.addNode(name, AkbTypes.AKB_ENV); - createdEnv.setProperty(AKB_ENV_TEMPLATE_PATH, template.getPath()); - createdEnv.setProperty(Property.JCR_TITLE, name); - - Node connectorParent = createdEnv.addNode( - AkbTypes.AKB_CONNECTOR_FOLDER, AkbTypes.AKB_CONNECTOR_FOLDER); - - NodeIterator ni = template.getNode(AkbTypes.AKB_CONNECTOR_FOLDER) - .getNodes(); - activeConns: while (ni.hasNext()) { - Node currNode = ni.nextNode(); - if (currNode.isNodeType(AkbTypes.AKB_CONNECTOR_ALIAS)) { - String connType = currNode.getProperty(AKB_CONNECTOR_TYPE) - .getString(); - - if (AkbJcrUtils.isEmptyString(connType)) - // Cannot create an instance if the type is undefined - continue activeConns; - - Node newConnector = connectorParent.addNode(currNode.getName(), - connType); - newConnector.setProperty(AKB_CONNECTOR_ALIAS_PATH, - currNode.getPath()); - if (copyDefaultConnectors - && currNode - .hasNode(AkbNames.AKB_DEFAULT_TEST_CONNECTOR)) { - Node defaultConn = currNode - .getNode(AkbNames.AKB_DEFAULT_TEST_CONNECTOR); - if (defaultConn.hasProperty(AkbNames.AKB_CONNECTOR_URL)) - newConnector - .setProperty( - AkbNames.AKB_CONNECTOR_URL, - defaultConn.getProperty( - AkbNames.AKB_CONNECTOR_URL) - .getString()); - if (defaultConn.hasProperty(AkbNames.AKB_CONNECTOR_USER)) - newConnector.setProperty( - AkbNames.AKB_CONNECTOR_USER, - defaultConn.getProperty( - AkbNames.AKB_CONNECTOR_USER) - .getString()); - } - } - } - return createdEnv; - } - - // /////////////////////////////////////// - // CONNECTORS - - @Override - public Node createConnectorAlias(Node templateNode, String name, - String connectorType) throws RepositoryException { - Node parent = JcrUtils.mkdirs(templateNode, - AkbTypes.AKB_CONNECTOR_FOLDER, AkbTypes.AKB_CONNECTOR_FOLDER); - Node newConnector = parent.addNode(name, AkbTypes.AKB_CONNECTOR_ALIAS); - newConnector.setProperty(Property.JCR_TITLE, name); - newConnector.setProperty(AkbNames.AKB_CONNECTOR_TYPE, connectorType); - - // Node defaultConnector = - Node defaultConn = newConnector.addNode( - AkbNames.AKB_DEFAULT_TEST_CONNECTOR, connectorType); - defaultConn.setProperty(AkbNames.AKB_CONNECTOR_ALIAS_PATH, - newConnector.getPath()); - return newConnector; - } - - @Override - public NodeIterator getDefinedAliases(Node itemTemplate, - String connectorType) throws RepositoryException { - try { - Session session = itemTemplate.getSession(); - QueryManager queryManager = session.getWorkspace() - .getQueryManager(); - QueryObjectModelFactory factory = queryManager.getQOMFactory(); - - Selector source = factory.selector(AkbTypes.AKB_CONNECTOR_ALIAS, - AkbTypes.AKB_CONNECTOR_ALIAS); - Constraint defaultC = factory.descendantNode( - source.getSelectorName(), itemTemplate.getPath()); - - if (connectorType != null) { - Constraint connType = factory.comparison(factory.propertyValue( - source.getSelectorName(), AkbNames.AKB_CONNECTOR_TYPE), - QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, - factory.literal(session.getValueFactory().createValue( - connectorType))); - defaultC = factory.and(defaultC, connType); - } - - // Order by default by JCR TITLE - // TODO check if node definition has MIX_TITLE mixin - // TODO Apparently case insensitive ordering is not implemented in - // current used JCR implementation - Ordering order = factory - .ascending(factory.upperCase(factory.propertyValue( - source.getSelectorName(), Property.JCR_TITLE))); - QueryObjectModel query; - query = factory.createQuery(source, defaultC, - new Ordering[] { order }, null); - QueryResult result = query.execute(); - return result.getNodes(); - } catch (RepositoryException e) { - throw new AkbException("Unable to list connector", e); - } - } - - @Override - public Node getActiveConnectorByAlias(Node envNode, String aliasPath) - throws RepositoryException { - try { - Session session = envNode.getSession(); - QueryManager queryManager = session.getWorkspace() - .getQueryManager(); - QueryObjectModelFactory factory = queryManager.getQOMFactory(); - - Selector source = factory.selector(AkbTypes.AKB_CONNECTOR, - AkbTypes.AKB_CONNECTOR); - Constraint defaultC = factory.descendantNode( - source.getSelectorName(), envNode.getPath()); - - Constraint connType = factory.comparison( - factory.propertyValue(source.getSelectorName(), - AkbNames.AKB_CONNECTOR_ALIAS_PATH), - QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, factory - .literal(session.getValueFactory().createValue( - aliasPath))); - defaultC = factory.and(defaultC, connType); - - QueryObjectModel query; - query = factory.createQuery(source, defaultC, null, null); - QueryResult result = query.execute(); - NodeIterator ni = result.getNodes(); - - if (!ni.hasNext()) - return null; - else { - Node connector = ni.nextNode(); - if (ni.hasNext()) - throw new AkbException("More than one alias with name " - + aliasPath + " has been defined for environment " - + envNode); - else - return connector; - } - } catch (RepositoryException e) { - throw new AkbException("Unable to get connector " + aliasPath - + " in " + envNode, e); - } - } - - @Override - public boolean testConnector(Node connectorNode) { - try { - if (connectorNode.isNodeType(AkbTypes.AKB_JDBC_CONNECTOR)) { - String connectorUrl = connectorNode.getProperty( - AKB_CONNECTOR_URL).getString(); - String connectorUser = connectorNode.getProperty( - AKB_CONNECTOR_USER).getString(); - - String pwdPath = getPasswordPath(connectorNode); - char[] pwd = keyring.getAsChars(pwdPath); - DriverManager.getConnection(connectorUrl, connectorUser, - new String(pwd)); - savePassword(connectorNode.getSession(), pwdPath, pwd); - return true; - } else if (connectorNode.isNodeType(AkbTypes.AKB_SSH_CONNECTOR)) { - String connectorUrl = connectorNode.getProperty( - AKB_CONNECTOR_URL).getString(); - String connectorUser = connectorNode.getProperty( - AKB_CONNECTOR_USER).getString(); - String pwdPath = getPasswordPath(connectorNode); - char[] pwd = keyring.getAsChars(pwdPath); - - URI url = new URI(connectorUrl); - String host = url.getHost(); - int port = url.getPort(); - if (port == -1) - port = 22; - JSch jsch = new JSch(); - com.jcraft.jsch.Session sess = jsch.getSession(connectorUser, - host, port); - SimpleUserInfo userInfo = new SimpleUserInfo(); - userInfo.setPassword(new String(pwd)); - sess.setUserInfo(userInfo); - sess.connect(); - sess.disconnect(); - - savePassword(connectorNode.getSession(), pwdPath, pwd); - return true; - } else { - throw new SlcException("Unsupported connector " + connectorNode); - } - } catch (Exception e) { - throw new SlcException("Cannot test connection", e); - } - } - - /** - * Opens a new connection each time. All resources must be cleaned by - * caller. - */ - public PreparedStatement prepareJdbcQuery(Node activeEnv, Node node) { - PreparedStatement statement = null; - try { - - if (node.isNodeType(AkbTypes.AKB_JDBC_QUERY)) { - String connectorAliasStr = node.getProperty(AKB_USED_CONNECTOR) - .getString(); - // in case of a template passed env can be null - if (activeEnv == null) { - activeEnv = AkbJcrUtils.getCurrentTemplate(node); - } - Node connectorNode = getActiveConnectorByAlias(activeEnv, - connectorAliasStr); - - // Sanity check - if (connectorNode == null) - // should never happen - return null; - // FIXME hack to force saving of password in keyring on never - // used connector instance for active env - testConnector(connectorNode); - - String sqlQuery = AkbJcrUtils.get(node, AKB_QUERY_TEXT); - String connectorUrl = AkbJcrUtils.get(connectorNode, - AKB_CONNECTOR_URL); - String connectorUser = AkbJcrUtils.get(connectorNode, - AKB_CONNECTOR_USER); - - // Sanity check - if (AkbJcrUtils.isEmptyString(connectorUrl) - || AkbJcrUtils.isEmptyString(connectorUser) - || AkbJcrUtils.isEmptyString(sqlQuery)) - return null; - - String pwdPath = getPasswordPath(connectorNode); - // String pwdPath = connectorNode.getPath() + '/' - // + ArgeoNames.ARGEO_PASSWORD; - char[] pwd = keyring.getAsChars(pwdPath); - Connection connection = DriverManager.getConnection( - connectorUrl, connectorUser, new String(pwd)); - try { - statement = connection.prepareStatement(sqlQuery, - ResultSet.TYPE_SCROLL_INSENSITIVE, - ResultSet.CONCUR_READ_ONLY); - } catch (SQLFeatureNotSupportedException e) { - log.warn("Scroll not supported for " + connectorUrl); - statement = connection.prepareStatement(sqlQuery); - } - } else { - throw new SlcException("Unsupported node " + node); - } - return statement; - } catch (Exception e) { - throw new SlcException("Cannot execute test JDBC query on " + node, - e); - } - } - - public String executeCommand(Node activeEnv, Node node) { - try { - String connectorAliasStr = node.getProperty(AKB_USED_CONNECTOR) - .getString(); - // in case of a template passed env can be null - if (activeEnv == null) { - activeEnv = AkbJcrUtils.getCurrentTemplate(node); - } - - Node connectorNode = getActiveConnectorByAlias(activeEnv, - connectorAliasStr); - // Sanity check - if (connectorNode == null) - // should never happen - return null; - // FIXME hack to force saving of password in keyring on never used - // connector instance for active env - testConnector(connectorNode); - - String command = AkbJcrUtils.get(node, AKB_COMMAND_TEXT); - String connectorUrl = AkbJcrUtils.get(connectorNode, - AKB_CONNECTOR_URL); - String connectorUser = AkbJcrUtils.get(connectorNode, - AKB_CONNECTOR_USER); - - // Sanity check - if (AkbJcrUtils.isEmptyString(connectorUrl) - || AkbJcrUtils.isEmptyString(connectorUser) - || AkbJcrUtils.isEmptyString(command)) - return null; - - String pwdPath = getPasswordPath(connectorNode); - char[] pwd = keyring.getAsChars(pwdPath); - - URI url = new URI(connectorUrl); - String host = url.getHost(); - int port = url.getPort(); - if (port == -1) - port = 22; - JSch jsch = new JSch(); - com.jcraft.jsch.Session sess = jsch.getSession(connectorUser, host, - port); - SimpleUserInfo userInfo = new SimpleUserInfo(); - userInfo.setPassword(new String(pwd)); - sess.setUserInfo(userInfo); - sess.connect(); - - sess.openChannel("exec"); - final ChannelExec channel = (ChannelExec) sess.openChannel("exec"); - channel.setCommand(command); - - channel.setInputStream(null); - channel.setXForwarding(false); - channel.setAgentForwarding(false); - channel.setErrStream(null); - - channel.connect(); - - String output = IOUtils.toString(channel.getInputStream()); - channel.disconnect(); - - sess.disconnect(); - - return output; - } catch (Exception e) { - throw new SlcException("Cannot execute command", e); - } - - } - - public String retrieveFile(Node activeEnv, Node node) { - try { - String filePath = node.getProperty(AkbNames.AKB_FILE_PATH) - .getString(); - String command = "cat " + filePath; - - String connectorAliasStr = node.getProperty(AKB_USED_CONNECTOR) - .getString(); - // in case of a template passed env can be null - if (activeEnv == null) { - activeEnv = AkbJcrUtils.getCurrentTemplate(node); - } - Node connectorNode = getActiveConnectorByAlias(activeEnv, - connectorAliasStr); - - // Sanity check - if (connectorNode == null) - // should never happen - return null; - // FIXME hack to force saving of password in keyring on never used - // connector instance for active env - testConnector(connectorNode); - - // TODO do a proper scp - String connectorUrl = AkbJcrUtils.get(connectorNode, - AKB_CONNECTOR_URL); - String connectorUser = AkbJcrUtils.get(connectorNode, - AKB_CONNECTOR_USER); - - // Sanity check - if (AkbJcrUtils.isEmptyString(connectorUrl) - || AkbJcrUtils.isEmptyString(connectorUser)) - return null; - - String pwdPath = getPasswordPath(connectorNode); - char[] pwd = keyring.getAsChars(pwdPath); - - URI url = new URI(connectorUrl); - String host = url.getHost(); - int port = url.getPort(); - if (port == -1) - port = 22; - JSch jsch = new JSch(); - com.jcraft.jsch.Session sess = jsch.getSession(connectorUser, host, - port); - SimpleUserInfo userInfo = new SimpleUserInfo(); - userInfo.setPassword(new String(pwd)); - sess.setUserInfo(userInfo); - sess.connect(); - - sess.openChannel("exec"); - final ChannelExec channel = (ChannelExec) sess.openChannel("exec"); - channel.setCommand(command); - - channel.setInputStream(null); - channel.setXForwarding(false); - channel.setAgentForwarding(false); - channel.setErrStream(null); - - channel.connect(); - - String output = IOUtils.toString(channel.getInputStream()); - channel.disconnect(); - - sess.disconnect(); - - return output; - } catch (Exception e) { - throw new SlcException("Cannot execute command", e); - } - - } - - protected String getPasswordPath(Node node) throws RepositoryException { - Node home = UserJcrUtils.getUserHome(node.getSession()); - if (node.getPath().startsWith(home.getPath())) - return node.getPath() + '/' + ArgeoNames.ARGEO_PASSWORD; - else - return home.getPath() + node.getPath() + '/' - + ArgeoNames.ARGEO_PASSWORD; - } - - private void savePassword(Session session, String pwdPath, char[] pwd) - throws RepositoryException { - if (!session.itemExists(pwdPath)) { - JcrUtils.mkdirs(session, JcrUtils.parentPath(pwdPath)); - session.save(); - keyring.set(pwdPath, pwd); - } - - } - - /** Expose injected repository */ - public Repository getRepository() { - return repository; - } - - /* DEPENDENCY INJECTION */ - public void setRepository(Repository repository) { - this.repository = repository; - } - - public void setDemoData(Map demoData) { - this.demoData = demoData; - } - - public void setKeyring(Keyring keyring) { - this.keyring = keyring; - } - -} \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/utils/AkbJcrUtils.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/utils/AkbJcrUtils.java deleted file mode 100644 index b7d0ba7df..000000000 --- a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/utils/AkbJcrUtils.java +++ /dev/null @@ -1,435 +0,0 @@ -package org.argeo.slc.akb.utils; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.Property; -import javax.jcr.PropertyIterator; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.Value; -import javax.jcr.query.Row; -import javax.jcr.query.RowIterator; - -import org.argeo.jcr.JcrUtils; -import org.argeo.jcr.PropertyDiff; -import org.argeo.slc.akb.AkbException; -import org.argeo.slc.akb.AkbNames; -import org.argeo.slc.akb.AkbTypes; - -/** Some static utils methods that might be factorized in a near future */ -public class AkbJcrUtils { - - // ///////////////////////// - // SPECIFIC METHOS - /** - * Returns the list of environment templates that are visible for the - * current user. - */ - public static List getDefinedTemplate(Session session) { - try { - if (session.nodeExists(AkbNames.AKB_TEMPLATES_BASE_PATH)) { - NodeIterator ni = session.getNode( - AkbNames.AKB_TEMPLATES_BASE_PATH).getNodes(); - List templates = new ArrayList(); - while (ni.hasNext()) { - Node currN = ni.nextNode(); - if (currN.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) - templates.add(currN); - } - return templates; - } - return null; - } catch (RepositoryException re) { - throw new AkbException("Unable to list templates", re); - } - } - - /** - * Returns a template given it's name - */ - public static Node getTemplateByName(Session session, String name) { - try { - if (name == null) - return null; - if (session.nodeExists(AkbNames.AKB_TEMPLATES_BASE_PATH)) { - NodeIterator ni = session.getNode( - AkbNames.AKB_TEMPLATES_BASE_PATH).getNodes(); - while (ni.hasNext()) { - Node currN = ni.nextNode(); - if (name.equals(AkbJcrUtils.get(currN, Property.JCR_TITLE))) - return currN; - } - } - return null; - } catch (RepositoryException re) { - throw new AkbException("Unable to list templates", re); - } - } - - /** - * Return the type of alias that must be used given current item type - */ - public static String getAliasTypeForNode(Node itemTemplate) { - try { - if (itemTemplate.isNodeType(AkbTypes.AKB_JDBC_QUERY)) - return AkbTypes.AKB_JDBC_CONNECTOR; - else if (itemTemplate.isNodeType(AkbTypes.AKB_SSH_COMMAND) - || itemTemplate.isNodeType(AkbTypes.AKB_SSH_FILE)) - return AkbTypes.AKB_SSH_CONNECTOR; - else - throw new AkbException("No connector type define for node " - + itemTemplate); - } catch (RepositoryException re) { - throw new AkbException("Unable to login", re); - } - } - - /** - * Return current template depending on the passed node - */ - public static Node getCurrentTemplate(Node akbNode) { - try { - if (akbNode.getDepth() == 0) - // no base path for root node - return null; - Node parNode = akbNode.getParent(); - - while (parNode != null) - if (akbNode.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) - return akbNode; - else if (parNode.getDepth() == 0) - // we found not fitting node - return null; - else { - akbNode = parNode; - parNode = parNode.getParent(); - } - return null; - } catch (RepositoryException re) { - throw new AkbException("Unable to find template for node " - + akbNode, re); - } - } - - /** - * Return the current env base path - */ - public static String getCurrentEnvBasePath(Node akbNode) { - try { - if (akbNode.getDepth() == 0) - // no base path for root node - return null; - - Node parNode = akbNode.getParent(); - - while (parNode != null) - if (akbNode.isNodeType(AkbTypes.AKB_ENV) - || akbNode.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) - return akbNode.getPath(); - else if (parNode.getDepth() == 0) - // we found not fitting node - return null; - else { - akbNode = parNode; - parNode = parNode.getParent(); - } - return null; - } catch (RepositoryException re) { - throw new AkbException("Unable to login", re); - } - } - - // ////////////////////////////////// - // METHODS THAT CAN BE FACTORIZED - /** - * Call {@link Repository#login()} without exceptions (useful in super - * constructors and dependency injection). - */ - public static Session login(Repository repository) { - try { - return repository.login(); - } catch (RepositoryException re) { - throw new AkbException("Unable to login", re); - } - } - - /** - * Convert a {@link rowIterator} to a list of {@link Node} given a selector - * name. It relies on the Row.getNode(String selectorName) - * method. - */ - public static List rowIteratorToList(RowIterator rowIterator, - String selectorName) throws RepositoryException { - List nodes = new ArrayList(); - while (rowIterator.hasNext()) { - Row row = rowIterator.nextRow(); - if (row.getNode(selectorName) != null) - nodes.add(row.getNode(selectorName)); - } - return nodes; - } - - /** - * Check if a string is null or an empty string (a string with only spaces - * is considered as empty - */ - public static boolean isEmptyString(String stringToTest) { - return stringToTest == null || "".equals(stringToTest.trim()); - } - - /** - * Check if a string is null or an empty string (a string with only spaces - * is considered as empty - */ - public static boolean checkNotEmptyString(String string) { - return string != null && !"".equals(string.trim()); - } - - /** - * Wraps the versionMananger.isCheckedOut(path) method to adapt it to the - * current check in / check out policy. - * - * TODO : add management of check out by others. - */ - public static boolean isNodeCheckedOut(Node node) { - try { - return node.getSession().getWorkspace().getVersionManager() - .isCheckedOut(node.getPath()); - } catch (RepositoryException re) { - throw new AkbException("Unable to get check out status for node", - re); - } - } - - /** - * For the time being, same as isNodeCheckedOut(Node node). - * - * TODO : add management of check out by others. - */ - public static boolean isNodeCheckedOutByMe(Node node) { - return isNodeCheckedOut(node); - } - - /** - * Wraps the versionMananger.checkedOut(path) method to adapt it to the - * current check in / check out policy. - * - * TODO : add management of check out by others. - */ - public static void checkout(Node node) { - try { - node.getSession().getWorkspace().getVersionManager() - .checkout(node.getPath()); - } catch (RepositoryException re) { - throw new AkbException("Unable to check out Node", re); - } - } - - /** - * Wraps the versionMananger.checkedIn(path) method to adapt it to the - * current check in / check out policy. - * - * It also checked if the current entity has to be moved or not. TODO : add - * management of check out by others. - */ - public static void saveAndCheckin(Node node) { - try { - JcrUtils.updateLastModified(node); - node.getSession().save(); - node.getSession().getWorkspace().getVersionManager() - .checkin(node.getPath()); - } catch (RepositoryException re) { - throw new AkbException("Unable to save and chek in node", re); - } - } - - /** - * Wraps the versionMananger.checkedIn(path) method to adapt it to the - * current check in / check out policy. - * - * TODO : add management of check out by others. TODO : manage usecase where - * a node that has never been checked in (draft node) is canceled and thus - * must be deleted - */ - public static void cancelAndCheckin(Node node) { - try { - String path = node.getPath(); - Session session = node.getSession(); - JcrUtils.discardUnderlyingSessionQuietly(node); - // if the node has never been saved, it does not exist anymore. - if (session.nodeExists(path)) - session.getWorkspace().getVersionManager().checkin(path); - } catch (RepositoryException re) { - throw new AkbException("Unable to save and chek in node", re); - } - } - - /** - * Concisely get the string value of a property. It returns an empty String - * rather than null if this node doesn't have this property or if the - * corresponding property is an empty string. - */ - public static String get(Node node, String propertyName) { - try { - if (!node.hasProperty(propertyName)) - return ""; - else - return node.getProperty(propertyName).getString(); - } catch (RepositoryException e) { - throw new AkbException("Cannot get property " + propertyName - + " of " + node, e); - } - } - - /** - * Concisely get the value of a property or null if this node doesn't have - * this property - */ - public static Boolean getBooleanValue(Node node, String propertyName) { - try { - if (!node.hasProperty(propertyName)) - return null; - else - return node.getProperty(propertyName).getBoolean(); - } catch (RepositoryException e) { - throw new AkbException("Cannot get boolean property " - + propertyName + " of " + node, e); - } - } - - /** - * Concisely get the identifier of a node in Ui listener for instance - * */ - public static String getIdentifierQuietly(Node node) { - try { - return node.getIdentifier(); - } catch (RepositoryException e) { - throw new AkbException("Cannot get identifier for node " + node, e); - } - } - - public static Map diffProperties(Node reference, - Node observed) { - Map diffs = new TreeMap(); - diffPropertiesLevel(diffs, null, reference, observed); - return diffs; - } - - /** - * Compare the properties of two nodes. Extends - * JcrUtils.diffPropertiesLevel to also track differences in - * multiple value properties and sub graph. No property is skipped (among - * other all technical jcr:... properties) to be able to track jcr:title and - * description properties, among other. Filtering must be applied afterwards - * to only keep relevant properties. - */ - static void diffPropertiesLevel(Map diffs, - String baseRelPath, Node reference, Node observed) { - try { - // check removed and modified - PropertyIterator pit = reference.getProperties(); - while (pit.hasNext()) { - Property p = pit.nextProperty(); - String name = p.getName(); - // if (name.startsWith("jcr:")) - // continue props; - - if (!observed.hasProperty(name)) { - String relPath = propertyRelPath(baseRelPath, name); - PropertyDiff pDiff = new PropertyDiff(PropertyDiff.REMOVED, - relPath, p.getValue(), null); - diffs.put(relPath, pDiff); - } else { - if (p.isMultiple()) { - int i = 0; - - Value[] refValues = p.getValues(); - Value[] newValues = observed.getProperty(name) - .getValues(); - String relPath = propertyRelPath(baseRelPath, name); - refValues: for (Value refValue : refValues) { - for (Value newValue : newValues) { - if (refValue.equals(newValue)) - continue refValues; - } - PropertyDiff pDiff = new PropertyDiff( - PropertyDiff.REMOVED, relPath, refValue, - null); - diffs.put(relPath + "_" + i++, pDiff); - } - - newValues: for (Value newValue : newValues) { - for (Value refValue : refValues) { - if (refValue.equals(newValue)) - continue newValues; - } - PropertyDiff pDiff = new PropertyDiff( - PropertyDiff.ADDED, relPath, null, newValue); - diffs.put(relPath + "_" + i++, pDiff); - } - - } else { - Value referenceValue = p.getValue(); - Value newValue = observed.getProperty(name).getValue(); - if (!referenceValue.equals(newValue)) { - String relPath = propertyRelPath(baseRelPath, name); - PropertyDiff pDiff = new PropertyDiff( - PropertyDiff.MODIFIED, relPath, - referenceValue, newValue); - diffs.put(relPath, pDiff); - } - } - } - } - // check added - pit = observed.getProperties(); - // props: - while (pit.hasNext()) { - Property p = pit.nextProperty(); - String name = p.getName(); - // if (name.startsWith("jcr:")) - // continue props; - if (!reference.hasProperty(name)) { - String relPath = propertyRelPath(baseRelPath, name); - if (p.isMultiple()) { - Value[] newValues = observed.getProperty(name) - .getValues(); - int i = 0; - for (Value newValue : newValues) { - PropertyDiff pDiff = new PropertyDiff( - PropertyDiff.ADDED, relPath, null, newValue); - diffs.put(relPath + "_" + i++, pDiff); - } - } else { - PropertyDiff pDiff = new PropertyDiff( - PropertyDiff.ADDED, relPath, null, p.getValue()); - diffs.put(relPath, pDiff); - } - } - } - } catch (RepositoryException e) { - throw new AkbException("Cannot diff " + reference + " and " - + observed, e); - } - } - - /** Builds a property relPath to be used in the diff. */ - private static String propertyRelPath(String baseRelPath, - String propertyName) { - if (baseRelPath == null) - return propertyName; - else - return baseRelPath + '/' + propertyName; - } - - /** prevent instantiation by others */ - private AkbJcrUtils() { - } - -} \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd b/runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd deleted file mode 100644 index 773fac49b..000000000 --- a/runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd +++ /dev/null @@ -1,91 +0,0 @@ - - -// -// MOVE THIS TO ITS CORRECT LOCATION -// -[argeo:note] > mix:title, mix:versionable, mix:created, mix:lastModified -mixin - -// -// TEMPLATES AND ENVIRONMENTS -// - -// Abstract description of whole or part of an IT environment -[akb:envTemplate] > nt:unstructured, mix:title - -// An environment template (1..1 relationship) applied to a real environment -[akb:env] > nt:unstructured, mix:title -// the path to the corresponding template -- akb:envTemplatePath (STRING) - -// -// CONNECTORS -// - -// GENERIC TYPE FOR A CONNECTOR -[akb:connector] > nt:unstructured, mix:title -- akb:connectorUrl (STRING) -// the path to the corresponding alias -- akb:connectorAliasPath (STRING) - -// add argeo keyring - -// ease retrieval and enable adding alias specific properties -[akb:connectorAlias] > nt:unstructured, mix:title -+ defaultTestConnector (akb:connector) -- akb:connectorType (STRING) - -// HELPER -[akb:connectorFolder] > nt:unstructured, mix:title -+ * (akb:connector, akb:connectorAlias) * - - -// Various connectors -[akb:sshConnector] > akb:connector - - -[akb:jdbcConnector] > akb:connector - -[akb:jcrConnector] > akb:connector - -// -// GENERIC ITEM -// -[akb:item] > nt:unstructured, mix:title -// the alias name of the corresponding connector -// Must be unique in a given template environment -- akb:usedConnector (STRING) - - -// -// GENERIC ITEM FOLDER -// -[akb:itemsFolder] > nt:unstructured, mix:title -+ * (akb:item) * -+ * (akb:itemsFolder) * - -// -// SSH FILE -// -[akb:sshFile] > akb:item -- akb:filePath (STRING) - -// -// SSH COMMAND -// -[akb:sshCommand] > akb:item -- akb:commandText (STRING) - -// -// JDBC QUERY -// -[akb:jdbcQuery] > akb:item -- akb:queryText (STRING) - - - -// -// NOTE -// -[akb:note] > akb:item, argeo:note - -- 2.39.5