+++ /dev/null
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.argeo.slc</groupId>
- <artifactId>dep</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- <relativePath>..</relativePath>
- </parent>
- <artifactId>org.argeo.slc.akb.dep.rap</artifactId>
- <name>SLC AKB RAP Dependencies</name>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <configuration>
- <instructions>
- <SLC-ModularDistribution>default</SLC-ModularDistribution>
- </instructions>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.argeo.maven.plugins</groupId>
- <artifactId>maven-argeo-osgi-plugin</artifactId>
- <executions>
- <execution>
- <id>generate-descriptors</id>
- <goals>
- <goal>descriptors</goal>
- </goals>
- <phase>generate-resources</phase>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <!-- AKB -->
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.akb</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.akb.services</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.akb.ui</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
-
- <!-- SLC -->
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.support.simple</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.support.jcr</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
-<!-- <dependency> -->
-<!-- <groupId>org.argeo.slc</groupId> -->
-<!-- <artifactId>org.argeo.slc.client.rap</artifactId> -->
-<!-- <version>1.1.15-SNAPSHOT</version> -->
-<!-- <optional>true</optional> -->
-<!-- </dependency> -->
-
- <!-- Secure Application -->
- <dependency>
- <groupId>org.argeo.commons.security</groupId>
- <artifactId>org.argeo.security.dep.node.rap</artifactId>
- <version>${version.argeo-commons}</version>
- </dependency>
- </dependencies>
- <profiles>
- <profile>
- <id>check-osgi</id>
- <build>
- <plugins>
- <plugin>
- <groupId>org.argeo.maven.plugins</groupId>
- <artifactId>maven-argeo-osgi-plugin</artifactId>
- <executions>
- <execution>
- <id>check-osgi</id>
- <phase>test</phase>
- <goals>
- <goal>equinox</goal>
- </goals>
- <configuration>
- <onlyCheck>true</onlyCheck>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </profile>
- </profiles>
-</project>
\ No newline at end of file
+++ /dev/null
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.argeo.slc</groupId>
- <artifactId>dep</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- <relativePath>..</relativePath>
- </parent>
- <artifactId>org.argeo.slc.akb.dep.rcp</artifactId>
- <name>SLC AKB RCP Dependencies</name>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <configuration>
- <instructions>
- <SLC-ModularDistribution>default</SLC-ModularDistribution>
- </instructions>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.argeo.maven.plugins</groupId>
- <artifactId>maven-argeo-osgi-plugin</artifactId>
- <executions>
- <execution>
- <id>generate-descriptors</id>
- <goals>
- <goal>descriptors</goal>
- </goals>
- <phase>generate-resources</phase>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <!-- AKB -->
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.akb</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.akb.services</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.akb.ui</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
-
- <!-- SLC -->
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.support.simple</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.support.jcr</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
-<!-- <dependency> -->
-<!-- <groupId>org.argeo.slc</groupId> -->
-<!-- <artifactId>org.argeo.slc.client.rcp</artifactId> -->
-<!-- <version>1.1.15-SNAPSHOT</version> -->
-<!-- <optional>true</optional> -->
-<!-- </dependency> -->
-
- <!-- Secure Application -->
- <dependency>
- <groupId>org.argeo.commons.security</groupId>
- <artifactId>org.argeo.security.dep.node.rcp</artifactId>
- <version>${version.argeo-commons}</version>
- </dependency>
- </dependencies>
- <profiles>
- <profile>
- <id>check-osgi</id>
- <build>
- <plugins>
- <plugin>
- <groupId>org.argeo.maven.plugins</groupId>
- <artifactId>maven-argeo-osgi-plugin</artifactId>
- <executions>
- <execution>
- <id>check-osgi</id>
- <phase>test</phase>
- <goals>
- <goal>equinox</goal>
- </goals>
- <configuration>
- <onlyCheck>true</onlyCheck>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </profile>
- </profiles>
-</project>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.argeo.slc.akb.services</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- </natures>
-</projectDescription>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
-
- <bean id="akbRepository" class="org.argeo.jackrabbit.JackrabbitWrapper"
- init-method="init" destroy-method="destroy">
- <property name="cndFiles">
- <list>
- <value>/org/argeo/slc/akb/akb.cnd</value>
- </list>
- </property>
- <property name="repository" ref="nodeRepository" />
- <property name="bundleContext" ref="bundleContext" />
- </bean>
-</beans>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<beans:beans xmlns="http://www.springframework.org/schema/osgi"\r
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"\r
- xsi:schemaLocation="http://www.springframework.org/schema/osgi \r
- http://www.springframework.org/schema/osgi/spring-osgi-1.1.xsd\r
- http://www.springframework.org/schema/beans \r
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
-\r
- <!-- LABEL -->\r
- <beans:bean class="org.argeo.security.core.OsgiModuleLabel">\r
- <beans:property name="bundleContext" ref="bundleContext" />\r
- </beans:bean>\r
-\r
- <!-- REFERENCES -->\r
- <reference id="nodeRepository" interface="javax.jcr.Repository"\r
- filter="(argeo.jcr.repository.alias=node)" />\r
- <reference id="authenticationManager"\r
- interface="org.springframework.security.AuthenticationManager" />\r
- <!-- SERVICES -->\r
- <service ref="akbRepository" interface="javax.jcr.Repository">\r
- <service-properties>\r
- <beans:entry key="argeo.jcr.repository.alias" value="akb" />\r
- </service-properties>\r
- </service>\r
- <service ref="akbService" interface="org.argeo.slc.akb.AkbService" />\r
-\r
- <reference id="keyring" interface="org.argeo.security.crypto.CryptoKeyring" />\r
-\r
-</beans:beans>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<beans xmlns="http://www.springframework.org/schema/beans"\r
- xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
- xsi:schemaLocation="\r
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd\r
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">\r
-\r
- <bean id="akbService" class="org.argeo.slc.akb.core.AkbServiceImpl"\r
- init-method="init" destroy-method="destroy">\r
- <property name="repository" ref="akbRepository" />\r
- <property name="keyring" ref="keyring" />\r
- </bean>\r
- <bean\r
- class="org.argeo.security.core.AuthenticatedApplicationContextInitialization">\r
- <property name="authenticationManager" ref="authenticationManager" />\r
- </bean>\r
-</beans>
+++ /dev/null
-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
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.argeo.slc</groupId>
- <artifactId>modules</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- <relativePath>..</relativePath>
- </parent>
- <artifactId>org.argeo.slc.akb.services</artifactId>
- <name>SLC AKB - Services</name>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <configuration>
- <instructions>
- <Import-Package>
- *,
- org.argeo.slc.akb,
- </Import-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.akb</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
- </dependencies>
-</project>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src/main/java" />
- <classpathentry kind="src" path="src/main/resources" />
- <classpathentry kind="con"
- path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6" />
- <classpathentry kind="con"
- path="org.eclipse.pde.core.requiredPlugins" />
- <classpathentry kind="output" path="target/classes" />
-</classpath>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.argeo.slc.akb.ui</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
+++ /dev/null
-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
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd">
-
- <!-- Opens or show an AKB specific node given some params. -->
- <bean id="openAkbNodeEditor" class="org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor"
- scope="prototype">
- <property name="repository" ref="repository" />
- <property name="akbService" ref="akbService" />
- </bean>
-
- <!-- Creates an AKB node given some params. -->
- <bean id="createAkbNode" class="org.argeo.slc.akb.ui.commands.CreateAkbNode"
- scope="prototype">
- <property name="akbService" ref="akbService" />
- </bean>
-
- <!-- deletes an AKB specific node -->
- <bean id="deleteAkbNodes" class="org.argeo.slc.akb.ui.commands.DeleteAkbNodes"
- scope="prototype">
- <property name="repository" ref="repository" />
- </bean>
-</beans>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd">
- <bean id="envTemplateEditor" class="org.argeo.slc.akb.ui.editors.EnvTemplateEditor"
- scope="prototype">
- <property name="repository" ref="repository" />
- <property name="akbService" ref="akbService" />
- </bean>
-
- <bean id="connectorAliasEditor" class="org.argeo.slc.akb.ui.editors.ConnectorAliasEditor"
- scope="prototype">
- <property name="repository" ref="repository" />
- <property name="akbService" ref="akbService" />
- </bean>
-
- <!-- Various Items editors -->
- <bean id="jdbcQueryTemplateEditor" class="org.argeo.slc.akb.ui.editors.JdbcQueryTemplateEditor"
- scope="prototype">
- <property name="repository" ref="repository" />
- <property name="akbService" ref="akbService" />
- </bean>
- <bean id="sshCommandTemplateEditor" class="org.argeo.slc.akb.ui.editors.SshCommandTemplateEditor"
- scope="prototype">
- <property name="repository" ref="repository" />
- <property name="akbService" ref="akbService" />
- </bean>
- <bean id="sshFileTemplateEditor" class="org.argeo.slc.akb.ui.editors.SshFileTemplateEditor"
- scope="prototype">
- <property name="repository" ref="repository" />
- <property name="akbService" ref="akbService" />
- </bean>
-</beans>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<beans:beans xmlns="http://www.springframework.org/schema/osgi"\r
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"\r
- xmlns:osgi="http://www.springframework.org/schema/osgi"\r
- xsi:schemaLocation="http://www.springframework.org/schema/osgi \r
- http://www.springframework.org/schema/osgi/spring-osgi-1.1.xsd\r
- http://www.springframework.org/schema/beans \r
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"\r
- osgi:default-timeout="30000">\r
-\r
- <beans:description>AKB UI</beans:description>\r
- <!-- REFERENCES -->\r
- <reference id="repository" interface="javax.jcr.Repository"\r
- filter="(argeo.jcr.repository.alias=akb)" cardinality="0..1" />\r
- <reference id="akbService" interface="org.argeo.slc.akb.AkbService" />\r
-</beans:beans>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
- xmlns:util="http://www.springframework.org/schema/util"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
-
- <!-- Views -->
- <bean id="akbDefaultView" class="org.argeo.slc.akb.ui.views.AkbDefaultView"
- scope="prototype">
- <property name="repository" ref="repository" />
- </bean>
- <bean id="environmentsTreeView" class="org.argeo.slc.akb.ui.views.EnvironmentsTreeView"
- scope="prototype">
- <property name="repository" ref="repository" />
- </bean>
- <bean id="akbTemplatesTreeView" class="org.argeo.slc.akb.ui.views.AkbTemplatesTreeView"
- scope="prototype">
- <property name="repository" ref="repository" />
- </bean>
-</beans>
+++ /dev/null
-source.. = src/main/java/,\
- src/main/resources,
-
-output.. = target/classes/
-bin.includes = META-INF/,\
- .,\
- icons/,\
- plugin.xml
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
- <!-- Perspective -->
- <extension
- point="org.eclipse.ui.perspectives">
- <perspective
- class="org.argeo.slc.akb.ui.AkbEnvPerspective"
- icon="icons/akb.gif"
- id="org.argeo.slc.akb.ui.akbEnvPerspective"
- name="AKB">
- </perspective>
- <perspective
- class="org.argeo.slc.akb.ui.AkbTemplatesPerspective"
- icon="icons/template.gif"
- id="org.argeo.slc.akb.ui.akbTemplatesPerspective"
- name="AKB Templates">
- </perspective>
- </extension>
- <!-- Views -->
- <extension
- point="org.eclipse.ui.views">
- <view
- class="org.argeo.eclipse.spring.SpringExtensionFactory"
- icon="icons/searchView.png"
- id="org.argeo.slc.akb.ui.akbDefaultView"
- name="Search"
- restorable="true">
- </view>
- <view
- class="org.argeo.eclipse.spring.SpringExtensionFactory"
- icon="icons/treeView.png"
- id="org.argeo.slc.akb.ui.akbTemplatesTreeView"
- name="AKB Templates"
- restorable="true">
- </view>
- <view
- class="org.argeo.eclipse.spring.SpringExtensionFactory"
- icon="icons/treeView.png"
- id="org.argeo.slc.akb.ui.environmentsTreeView"
- name="AKB Environments"
- restorable="true">
- </view>
- </extension>
- <!-- Editors -->
- <extension
- point="org.eclipse.ui.editors">
- <editor
- class="org.argeo.eclipse.spring.SpringExtensionFactory"
- icon="icons/template.gif"
- id="org.argeo.slc.akb.ui.envTemplateEditor"
- name="Environment Template Editor">
- </editor>
- <editor
- class="org.argeo.eclipse.spring.SpringExtensionFactory"
- icon="icons/addConnector.gif"
- id="org.argeo.slc.akb.ui.connectorAliasEditor"
- name="Connector Alias Editor">
- </editor>
- <!-- ITEMS EDITORS -->
- <editor
- class="org.argeo.eclipse.spring.SpringExtensionFactory"
- icon="icons/jdbcQuery.gif"
- id="org.argeo.slc.akb.ui.jdbcQueryTemplateEditor"
- name="JDBC Query Template Editor">
- </editor>
- <editor
- class="org.argeo.eclipse.spring.SpringExtensionFactory"
- icon="icons/sshFile.gif"
- id="org.argeo.slc.akb.ui.sshFileTemplateEditor"
- name="SSH File Template Editor">
- </editor>
- <editor
- class="org.argeo.eclipse.spring.SpringExtensionFactory"
- icon="icons/sshCommand.png"
- id="org.argeo.slc.akb.ui.sshCommandTemplateEditor"
- name="SSH Command Template Editor">
- </editor>
- </extension>
- <!-- Commands -->
- <extension
- point="org.eclipse.ui.commands">
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringExtensionFactory"
- id="org.argeo.slc.akb.ui.openAkbNodeEditor"
- name="Open Akb Node editor">
- <commandParameter
- id="param.nodeType"
- name="Corresponding JCR node type">
- </commandParameter>
- <commandParameter
- id="param.nodeSubtype"
- name="A subtype if needed">
- </commandParameter>
- <commandParameter
- id="param.nodeJcrId"
- name="The Node JCR ID if needed">
- </commandParameter>
- <commandParameter
- id="param.currEnvJcrId"
- name="The current environment JCR ID, might be an active or a template env">
- </commandParameter>
- <commandParameter
- id="param.parentNodeJcrId"
- name="The Parent Node JCR ID if needed">
- </commandParameter>
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringExtensionFactory"
- id="org.argeo.slc.akb.ui.createAkbNode"
- name="Create a new Akb Node">
- <commandParameter
- id="param.nodeType"
- name="Corresponding JCR node type">
- </commandParameter>
- <commandParameter
- id="param.parentNodeJcrId"
- name="The Parent Node JCR ID if needed">
- </commandParameter>
- </command>
- <command
- defaultHandler="org.argeo.eclipse.spring.SpringExtensionFactory"
- id="org.argeo.slc.akb.ui.deleteAkbNodes"
- name="Delete Akb Node(s) and close corresponding editors">
- <commandParameter
- id="param.nodeJcrId"
- name="The Node JCR ID if needed">
- </commandParameter>
- </command>
- <command
- defaultHandler="org.argeo.slc.akb.ui.commands.ForceRefresh"
- id="org.argeo.slc.akb.ui.forceRefresh"
- name="Force refresh of the current active part if such an action is possible">
- </command>
- <command
- defaultHandler="org.argeo.slc.akb.ui.commands.OpenUrl"
- id="org.argeo.slc.akb.ui.openUrl"
- name="Open an URL in the end user browser">
- <commandParameter
- id="param.urlType"
- name="The type of the url">
- </commandParameter>
- </command>
- </extension>
- <!-- Menus -->
- <extension
- point="org.eclipse.ui.menus">
- <menuContribution
- locationURI="toolbar:org.argeo.slc.akb.ui.akbTemplatesTreeView">
- <command
- commandId="org.argeo.slc.akb.ui.forceRefresh"
- icon="icons/refresh.png"
- label="Refresh"
- tooltip="Refresh the whole browser">
- </command>
- </menuContribution>
- <menuContribution
- locationURI="toolbar:org.argeo.slc.akb.ui.environmentsTreeView">
- <command
- commandId="org.argeo.slc.akb.ui.forceRefresh"
- icon="icons/refresh.png"
- label="Refresh"
- tooltip="Refresh the whole browser">
- </command>
- </menuContribution>
-
- <menuContribution
- locationURI="menu:org.eclipse.ui.main.menu">
- <menu
- id="help"
- label="Help">
- <command
- commandId="org.argeo.slc.akb.ui.openUrl"
- label="Report a bug..."
- icon="icons/refresh.png"
- style="push"
- tooltip="Report a bug or an enhancement to Argeos tracker system">
- <parameter
- name="param.urlType"
- value="tracker" />
- </command>
-
- <!-- <command
- commandId="org.argeo.slc.akb.ui.openUrl"
- label="AKB's wiki
- style="push">
- <parameter name="param.urlType" value="wiki" />
- </command>-->
- <command
- commandId="org.argeo.slc.akb.ui.openUrl"
- label="AKB wiki"
- style="push">
- <parameter
- name="param.urlType"
- value="wiki" />
- </command>
- </menu>
- </menuContribution>
- </extension>
-</plugin>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.argeo.slc</groupId>
- <artifactId>plugins</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- <relativePath>..</relativePath>
- </parent>
- <artifactId>org.argeo.slc.akb.ui</artifactId>
- <name>SLC AKB UI</name>
- <packaging>jar</packaging>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <configuration>
- <instructions>
- <Bundle-Activator>org.argeo.slc.akb.ui.AkbUiPlugin</Bundle-Activator>
- <Require-Bundle>
- org.eclipse.ui;resolution:=optional,
- org.eclipse.core.runtime;resolution:=optional,
- org.eclipse.rap.ui;resolution:=optional,
- org.eclipse.rap.ui.workbench;resolution:=optional
- </Require-Bundle>
- <Import-Package>
- *,
- org.argeo.eclipse.spring,
- javax.jcr.nodetype
- </Import-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <dependencies>
-
- <!-- AKB -->
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.akb.services</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
-
- <!-- COMMONS -->
- <!-- Base Argeo Eclipse Utilities -->
- <dependency>
- <groupId>org.argeo.commons.base</groupId>
- <artifactId>org.argeo.eclipse.ui</artifactId>
- <version>${version.argeo-commons}</version>
- </dependency>
- <dependency>
- <groupId>org.argeo.commons.security</groupId>
- <artifactId>org.argeo.security.ui</artifactId>
- <version>${version.argeo-commons}</version>
- </dependency>
-
- <!-- RAP only dependency, needed at compile time -->
- <dependency>
- <groupId>org.argeo.commons.base</groupId>
- <artifactId>org.argeo.eclipse.ui.rap</artifactId>
- <version>${version.argeo-commons}</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>org.argeo.commons.base</groupId>
- <artifactId>org.argeo.eclipse.ui.jcr</artifactId>
- <version>${version.argeo-commons}</version>
- </dependency>
-
- <dependency>
- <groupId>org.argeo.commons.server</groupId>
- <artifactId>org.argeo.server.jcr</artifactId>
- <version>${version.argeo-commons}</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
+++ /dev/null
-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);
- }
-}
+++ /dev/null
-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
+++ /dev/null
-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<String, String> typeLabels = new HashMap<String, String>() {
- 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);
- }
-
-}
+++ /dev/null
-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);
- }
-}
+++ /dev/null
-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";
-}
+++ /dev/null
-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
+++ /dev/null
-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 <code>Text</code> 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 <code>Text</code> 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 <code>Text</code> 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 <code>Button</code> 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 <code>Text</code> 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<String, String> 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<String, String> 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
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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
- * <Code>Refreshable</code> 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
+++ /dev/null
-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 :
- * <ul>
- * <li>PARAM_NODE_JCR_ID: the corresponding JCR ID might be null to create a new
- * one</li>
- * <li>PARAM_NODE_TYPE: jcr type of the node to create</li>
- * <li>PARAM_PARENT_NODE_JCR_ID: Only used in the case of the creation of a new
- * node.</li>
- * </ul>
- */
-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
+++ /dev/null
-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
+++ /dev/null
-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("<a>Edit Connector</a>");
- 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("<a>Refresh</a>");
-
- 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<String, String> params = new HashMap<String,
- // String>();
- // 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
+++ /dev/null
-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<Node> selectedItems = new ArrayList<Node>();
-
- /**
- * Overwrite to display other columns
- */
- public List<ColumnDefinition> getColumnsDef() {
- List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
- // 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<String> propertiesList = new ArrayList<String>();
-
- 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<ColumnDefinition> 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<Node> 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
+++ /dev/null
-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("<a>Test</a>");
- 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("<a>Edit connector instance</a>");
- } else {
- titleTxt.setEditable(true);
- descTxt.setEditable(true);
- editActiveConnLk.setText("<a>Edit default connector</a>");
- }
- }
- };
-
- if (!isActive) {
- final Link removeBtn = new Link(firstLine, SWT.NONE);
- toolkit.adapt(removeBtn, false, false);
- removeBtn.setText("<a>Delete</a>");
- 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
+++ /dev/null
-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("<a>Test</a>");
-
- final Link removeBtn = new Link(firstLine, SWT.NONE);
- toolkit.adapt(removeBtn, false, false);
- removeBtn.setText("<a>Delete</a>");
-
- // 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();
- }
-}
+++ /dev/null
-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<Node> 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("<a>Edit Alias</a>");
- 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<String, String> params = new HashMap<String, String>();
- 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<Node> 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 <CODE>AkbNames.AKB_USED_CONNECTOR</CODE> 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();
- }
-}
+++ /dev/null
-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();
- }
-}
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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<String, String> params = new HashMap<String, String>();
- 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<String, String> tmpParams = new HashMap<String, String>();
- 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<String, String>();
- 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<String, Composite> connectorsCmps = new HashMap<String, Composite>();
- 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<Event> events)
- throws RepositoryException {
- return true;
- }
-
- protected void onEventInUiThread(List<Event> 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
+++ /dev/null
-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()));
- }
-
-}
+++ /dev/null
-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<Object> buffer = new ArrayList<Object>();
-
- private List<JdbcColumn> columns = new ArrayList<JdbcColumn>();
- 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);
-
- }
- }
-
-}
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-/*
- * 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
- * <CODE>ActiveTreeItem</CODE> 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<ActiveTreeItem> envs = new ArrayList<ActiveTreeItem>();
- 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<ActiveTreeItem> children = new ArrayList<ActiveTreeItem>();
- 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
+++ /dev/null
-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;
- }
-}
+++ /dev/null
-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;
- }
-}
+++ /dev/null
-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
+++ /dev/null
-/*
- * 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<Node> nodes = new ArrayList<Node>();
-
- 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
+++ /dev/null
-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
+++ /dev/null
-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);
-
-}
+++ /dev/null
-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<String, String> params = new HashMap<String, String>();
- 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<Node> 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
+++ /dev/null
-/*\r
- * Copyright (C) 2007-2012 Argeo GmbH\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-package org.argeo.slc.akb.ui.views;\r
-\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import javax.jcr.Node;\r
-import javax.jcr.NodeIterator;\r
-import javax.jcr.Repository;\r
-import javax.jcr.RepositoryException;\r
-import javax.jcr.Session;\r
-import javax.jcr.observation.Event;\r
-import javax.jcr.observation.EventListener;\r
-import javax.jcr.observation.ObservationManager;\r
-\r
-import org.argeo.eclipse.ui.jcr.AsyncUiEventListener;\r
-import org.argeo.eclipse.ui.utils.CommandUtils;\r
-import org.argeo.jcr.JcrUtils;\r
-import org.argeo.slc.akb.AkbException;\r
-import org.argeo.slc.akb.AkbNames;\r
-import org.argeo.slc.akb.AkbService;\r
-import org.argeo.slc.akb.AkbTypes;\r
-import org.argeo.slc.akb.ui.AkbUiPlugin;\r
-import org.argeo.slc.akb.ui.AkbUiUtils;\r
-import org.argeo.slc.akb.ui.commands.DeleteAkbNodes;\r
-import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor;\r
-import org.argeo.slc.akb.ui.providers.AkbTreeLabelProvider;\r
-import org.argeo.slc.akb.ui.providers.TemplatesTreeContentProvider;\r
-import org.argeo.slc.akb.ui.utils.AkbItemsComparator;\r
-import org.argeo.slc.akb.ui.utils.Refreshable;\r
-import org.argeo.slc.akb.utils.AkbJcrUtils;\r
-import org.eclipse.jface.action.IContributionItem;\r
-import org.eclipse.jface.action.IMenuListener;\r
-import org.eclipse.jface.action.IMenuManager;\r
-import org.eclipse.jface.action.MenuManager;\r
-import org.eclipse.jface.viewers.DoubleClickEvent;\r
-import org.eclipse.jface.viewers.IDoubleClickListener;\r
-import org.eclipse.jface.viewers.IStructuredSelection;\r
-import org.eclipse.jface.viewers.TreeViewer;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.Menu;\r
-import org.eclipse.ui.IWorkbenchWindow;\r
-import org.eclipse.ui.part.ViewPart;\r
-import org.eclipse.ui.services.IServiceLocator;\r
-\r
-/** AKB template tree view. */\r
-public class AkbTemplatesTreeView extends ViewPart implements Refreshable {\r
- // private final static Log log =\r
- // LogFactory.getLog(AkbTemplatesTreeView.class);\r
-\r
- public final static String ID = AkbUiPlugin.PLUGIN_ID\r
- + ".akbTemplatesTreeView";\r
-\r
- /* DEPENDENCY INJECTION */\r
- private Session session;\r
- private AkbService akbService;\r
-\r
- // This page widgets\r
- private TreeViewer envTreeViewer;\r
-\r
- // Usefull business objects\r
- private Node templatesParentNode;\r
-\r
- // Observer\r
- private EventListener akbNodesObserver = null;\r
- private final static String[] observedNodeTypes = {\r
- AkbTypes.AKB_ENV_TEMPLATE, AkbTypes.AKB_CONNECTOR_ALIAS,\r
- AkbTypes.AKB_ITEM, AkbTypes.AKB_ITEM_FOLDER,\r
- AkbTypes.AKB_CONNECTOR_FOLDER };\r
-\r
- private void initialize() {\r
- try {\r
- templatesParentNode = session\r
- .getNode(AkbNames.AKB_TEMPLATES_BASE_PATH);\r
- } catch (RepositoryException e) {\r
- throw new AkbException("unable to initialize AKB Browser view", e);\r
- }\r
- }\r
-\r
- @Override\r
- public void createPartControl(Composite parent) {\r
- initialize();\r
-\r
- envTreeViewer = createTreeViewer(parent);\r
- envTreeViewer.setInput(initializeTree());\r
- envTreeViewer.setComparator(new AkbItemsComparator());\r
- }\r
-\r
- // The main tree viewer\r
- protected TreeViewer createTreeViewer(Composite parent) {\r
- parent.setLayout(AkbUiUtils.gridLayoutNoBorder());\r
- int style = SWT.BORDER | SWT.MULTI;\r
-\r
- TreeViewer viewer = new TreeViewer(parent, style);\r
- viewer.getTree().setLayoutData(\r
- new GridData(SWT.FILL, SWT.FILL, true, true));\r
-\r
- viewer.setContentProvider(new TemplatesTreeContentProvider());\r
- viewer.setLabelProvider(new AkbTreeLabelProvider());\r
- viewer.addDoubleClickListener(new ViewDoubleClickListener());\r
-\r
- // Add label provider with label decorator\r
- // ResultTreeLabelProvider rtLblProvider = new\r
- // ResultTreeLabelProvider();\r
- // ILabelDecorator decorator = AkbUiPlugin.getDefault().getWorkbench()\r
- // .getDecoratorManager().getLabelDecorator();\r
- // viewer.setLabelProvider(new DecoratingLabelProvider(rtLblProvider,\r
- // decorator));\r
-\r
- getSite().setSelectionProvider(viewer);\r
-\r
- // // add drag & drop support\r
- // int operations = DND.DROP_COPY | DND.DROP_MOVE;\r
- // Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };\r
- // viewer.addDragSupport(operations, tt, new ViewDragListener());\r
- // viewer.addDropSupport(operations, tt, new ViewDropListener(viewer));\r
-\r
- // add context menu\r
- MenuManager menuManager = new MenuManager();\r
- Menu menu = menuManager.createContextMenu(viewer.getTree());\r
- menuManager.addMenuListener(new IMenuListener() {\r
- public void menuAboutToShow(IMenuManager manager) {\r
- contextMenuAboutToShow(manager);\r
- }\r
- });\r
- viewer.getTree().setMenu(menu);\r
- menuManager.setRemoveAllWhenShown(true);\r
-\r
- getSite().registerContextMenu(menuManager, viewer);\r
-\r
- // Initialize observer\r
- try {\r
- ObservationManager observationManager = session.getWorkspace()\r
- .getObservationManager();\r
-\r
- akbNodesObserver = new AkbNodesObserver(viewer.getTree()\r
- .getDisplay());\r
- observationManager.addEventListener(akbNodesObserver,\r
- Event.NODE_ADDED | Event.NODE_REMOVED,\r
- templatesParentNode.getPath(), true, null,\r
- observedNodeTypes, false);\r
- } catch (RepositoryException e) {\r
- throw new AkbException("Cannot register listeners", e);\r
- }\r
- return viewer;\r
- }\r
-\r
- @Override\r
- public void setFocus() {\r
- }\r
-\r
- private Node[] initializeTree() {\r
- try {\r
- NodeIterator ni = templatesParentNode.getNodes();\r
- List<Node> templates = new ArrayList<Node>();\r
- while (ni.hasNext()) {\r
- Node currNode = ni.nextNode();\r
- if (currNode.isNodeType(AkbTypes.AKB_ENV_TEMPLATE))\r
- templates.add(currNode);\r
- }\r
- Node[] templateArr = templates.toArray(new Node[templates.size()]);\r
- return templateArr;\r
- } catch (RepositoryException re) {\r
- throw new AkbException("Error while initializing templates Tree.",\r
- re);\r
- }\r
- }\r
-\r
- @Override\r
- public void forceRefresh(Object object) {\r
- envTreeViewer.setInput(initializeTree());\r
- }\r
-\r
- // ///////////////////////////\r
- // CONTEXT MENU MANAGEMENT\r
-\r
- /**\r
- * Defines the commands that will pop up in the context menu.\r
- **/\r
- protected void contextMenuAboutToShow(IMenuManager menuManager) {\r
- IWorkbenchWindow window = AkbUiPlugin.getDefault().getWorkbench()\r
- .getActiveWorkbenchWindow();\r
- try {\r
-\r
- // Build conditions\r
- IStructuredSelection selection = (IStructuredSelection) envTreeViewer\r
- .getSelection();\r
-\r
- Node selected = (Node) selection.getFirstElement();\r
- Node currEnv = null;\r
-\r
- boolean hasSelection = selected != null;\r
-\r
- if (hasSelection)\r
- currEnv = AkbJcrUtils.getCurrentTemplate(selected);\r
-\r
- boolean isTemplate = hasSelection ? selected\r
- .isNodeType(AkbTypes.AKB_ENV_TEMPLATE) : false;\r
- boolean isParentItemsFolder = hasSelection ? selected\r
- .isNodeType(AkbTypes.AKB_ITEM_FOLDER) : false;\r
- // boolean isParentConnectorsFolder = hasSelection ? selected\r
- // .isNodeType(AkbTypes.AKB_CONNECTOR_FOLDER) : false;\r
- boolean isDeletable = hasSelection ? true : false;\r
-\r
- // Add Connector Alias\r
- Map<String, String> params = new HashMap<String, String>();\r
- if (hasSelection && isTemplate) {\r
- params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID,\r
- selected.getIdentifier());\r
- params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
- currEnv.getIdentifier());\r
- }\r
- params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE,\r
- AkbTypes.AKB_CONNECTOR_ALIAS);\r
-\r
- // Connector Alias submenu\r
- refreshAliasesSubmenu(menuManager, window, "menu.aliasesSubmenu",\r
- "Add Connector Alias", isTemplate, params);\r
-\r
- // Item Submenu\r
- params = new HashMap<String, String>();\r
- if (hasSelection) {\r
- params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID,\r
- selected.getIdentifier());\r
- params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
- currEnv.getIdentifier());\r
- }\r
- refreshItemsSubmenu(menuManager, window, "menu.itemsSubmenu",\r
- "Add Item", isParentItemsFolder || isTemplate, params);\r
-\r
- // Add Item Folder\r
- params = new HashMap<String, String>();\r
- if (hasSelection) {\r
- params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID,\r
- selected.getIdentifier());\r
- params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
- currEnv.getIdentifier());\r
- }\r
- params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE,\r
- AkbTypes.AKB_ITEM_FOLDER);\r
-\r
- AkbUiUtils.refreshParameterizedCommand(menuManager, window,\r
- "cmd.addItemFolder", OpenAkbNodeEditor.ID,\r
- "Add item folder", null, isParentItemsFolder || isTemplate,\r
- params);\r
-\r
- // Delete Item\r
- params = new HashMap<String, String>();\r
- if (hasSelection)\r
- params.put(DeleteAkbNodes.PARAM_NODE_JCR_ID,\r
- selected.getIdentifier());\r
- AkbUiUtils.refreshParameterizedCommand(menuManager, window,\r
- "cmd.deleteItem", DeleteAkbNodes.ID,\r
- "Delete selected item(s)", null, isDeletable, params);\r
-\r
- // create template\r
- params = new HashMap<String, String>();\r
- params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID,\r
- templatesParentNode.getIdentifier());\r
- params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE,\r
- AkbTypes.AKB_ENV_TEMPLATE);\r
- AkbUiUtils.refreshParameterizedCommand(menuManager, window,\r
- "cmd.createTemplate", OpenAkbNodeEditor.ID,\r
- "Create new template...", null,\r
- !hasSelection || isTemplate, params);\r
-\r
- } catch (RepositoryException re) {\r
- throw new AkbException("Error while refreshing context menu", re);\r
- }\r
- }\r
-\r
- /**\r
- * \r
- * refreshes submenu with various connector types\r
- * \r
- * @param menuManager\r
- * @param locator\r
- * @param itemId\r
- * @param label\r
- * @param isVisible\r
- * @param params\r
- */\r
- private void refreshItemsSubmenu(IMenuManager menuManager,\r
- IServiceLocator locator, String itemId, String label,\r
- boolean isVisible, Map<String, String> params) {\r
-\r
- // clean\r
- IContributionItem ici = menuManager.find(itemId);\r
- if (ici != null)\r
- menuManager.remove(ici);\r
-\r
- MenuManager subMenu = new MenuManager(label, itemId);\r
-\r
- // JDBC Query\r
- Map<String, String> tmpParams = new HashMap<String, String>();\r
- tmpParams.putAll(params);\r
- tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_TYPE,\r
- AkbTypes.AKB_JDBC_QUERY);\r
- String currItemId = "cmd.createJDBCQuery";\r
- IContributionItem currItem = subMenu.find(currItemId);\r
- if (currItem != null)\r
- subMenu.remove(currItem);\r
- subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator,\r
- currItemId, OpenAkbNodeEditor.ID, "JDBC Query", null, tmpParams));\r
-\r
- // SSH COMMAND\r
- tmpParams = new HashMap<String, String>();\r
- tmpParams.putAll(params);\r
- tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_TYPE,\r
- AkbTypes.AKB_SSH_COMMAND);\r
- currItemId = "cmd.createSSHCommand";\r
- currItem = subMenu.find(currItemId);\r
- if (currItem != null)\r
- subMenu.remove(currItem);\r
- subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator,\r
- currItemId, OpenAkbNodeEditor.ID, "SSH Command", null,\r
- tmpParams));\r
-\r
- // SSH FILE\r
- tmpParams = new HashMap<String, String>();\r
- tmpParams.putAll(params);\r
- tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, AkbTypes.AKB_SSH_FILE);\r
- currItemId = "cmd.createSSHFile";\r
- currItem = subMenu.find(currItemId);\r
- if (currItem != null)\r
- subMenu.remove(currItem);\r
- subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator,\r
- currItemId, OpenAkbNodeEditor.ID, "SSH File", null, tmpParams));\r
-\r
- // refresh\r
- menuManager.add(subMenu);\r
- subMenu.setVisible(isVisible);\r
- }\r
-\r
- /**\r
- * \r
- * refreshes submenu with various connector types\r
- * \r
- * @param menuManager\r
- * @param locator\r
- * @param itemId\r
- * @param label\r
- * @param isVisible\r
- * @param params\r
- */\r
- private void refreshAliasesSubmenu(IMenuManager menuManager,\r
- IServiceLocator locator, String itemId, String label,\r
- boolean isVisible, Map<String, String> params) {\r
-\r
- // clean\r
- IContributionItem ici = menuManager.find(itemId);\r
- if (ici != null)\r
- menuManager.remove(ici);\r
-\r
- // TODO use dynamic contribution to dynamically retrieve specific\r
- // connector types\r
- // CompoundContributionItem comConI = new MyCompoundCI(menuManager,\r
- // locator, itemId);\r
- MenuManager subMenu = new MenuManager(label, itemId);\r
-\r
- // JDBC\r
- Map<String, String> tmpParams = new HashMap<String, String>();\r
- tmpParams.putAll(params);\r
- tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_SUBTYPE,\r
- AkbTypes.AKB_JDBC_CONNECTOR);\r
- String currItemId = "cmd.createJDBCAlias";\r
- IContributionItem currItem = subMenu.find(currItemId);\r
- if (currItem != null)\r
- subMenu.remove(currItem);\r
- subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator,\r
- currItemId, OpenAkbNodeEditor.ID, "JDBC", null, tmpParams));\r
-\r
- // SSH\r
- tmpParams = new HashMap<String, String>();\r
- tmpParams.putAll(params);\r
- tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_SUBTYPE,\r
- AkbTypes.AKB_SSH_CONNECTOR);\r
- currItemId = "cmd.createSSHAlias";\r
- currItem = subMenu.find(currItemId);\r
- if (currItem != null)\r
- subMenu.remove(currItem);\r
- subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator,\r
- currItemId, OpenAkbNodeEditor.ID, "SSH", null, tmpParams));\r
-\r
- // refresh\r
- menuManager.add(subMenu);\r
- subMenu.setVisible(isVisible);\r
- }\r
-\r
- // private class MyCompoundCI extends CompoundContributionItem {\r
- // private IMenuManager menuManager;\r
- // private IServiceLocator locator;\r
- //\r
- // public MyCompoundCI(IMenuManager menuManager, IServiceLocator locator,\r
- // String itemId) {\r
- // super(itemId);\r
- // this.menuManager = menuManager;\r
- // this.locator = locator;\r
- // }\r
- //\r
- // @Override\r
- // protected IContributionItem[] getContributionItems() {\r
- //\r
- // CommandContributionItem[] submenu = new CommandContributionItem[2];\r
- // submenu[0] = createContributionItem(menuManager, locator, "uid.1",\r
- // OpenAkbNodeEditor.ID, "test1" + System.currentTimeMillis(),\r
- // null, null);\r
- // submenu[1] = createContributionItem(menuManager, locator, "uid.2",\r
- // OpenAkbNodeEditor.ID, "test2", null, null);\r
- // return submenu;\r
- // }\r
- // }\r
-\r
- /* INNER CLASSES */\r
- private class AkbNodesObserver extends AsyncUiEventListener {\r
-\r
- public AkbNodesObserver(Display display) {\r
- super(display);\r
- }\r
-\r
- @Override\r
- protected Boolean willProcessInUiThread(List<Event> events)\r
- throws RepositoryException {\r
- // unfiltered for the time being\r
- return true;\r
- }\r
-\r
- protected void onEventInUiThread(List<Event> events)\r
- throws RepositoryException {\r
- boolean fullRefresh = false;\r
-\r
- eventLoop: for (Event event : events) {\r
- String currPath = event.getPath();\r
- if (session.nodeExists(currPath)) {\r
- Node node = session.getNode(currPath);\r
- if (node.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) {\r
- fullRefresh = true;\r
- break eventLoop;\r
- }\r
- }\r
- }\r
-\r
- Object[] visibles = envTreeViewer.getExpandedElements();\r
- if (fullRefresh)\r
- envTreeViewer.setInput(initializeTree());\r
- else\r
- envTreeViewer.refresh();\r
-\r
- envTreeViewer.setExpandedElements(visibles);\r
- }\r
- }\r
-\r
- class ViewDoubleClickListener implements IDoubleClickListener {\r
- public void doubleClick(DoubleClickEvent evt) {\r
- Object obj = ((IStructuredSelection) evt.getSelection())\r
- .getFirstElement();\r
- try {\r
- if (obj instanceof Node) {\r
- Node node = (Node) obj;\r
- Node currEnv = AkbJcrUtils.getCurrentTemplate(node);\r
-\r
- // Add Connector Alias\r
- Map<String, String> params = new HashMap<String, String>();\r
- params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID,\r
- node.getIdentifier());\r
- params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
- currEnv.getIdentifier());\r
-\r
- CommandUtils.callCommand(OpenAkbNodeEditor.ID, params);\r
- }\r
- } catch (RepositoryException e) {\r
- throw new AkbException("Cannot open " + obj, e);\r
- }\r
- }\r
- }\r
-\r
- @Override\r
- public void dispose() {\r
- JcrUtils.logoutQuietly(session);\r
- super.dispose();\r
- }\r
-\r
- /* DEPENDENCY INJECTION */\r
- public void setRepository(Repository repository) {\r
- try {\r
- session = repository.login();\r
- } catch (RepositoryException e) {\r
- throw new AkbException("unable to log in for " + ID + " view");\r
- }\r
- }\r
-\r
- public void setAkbService(AkbService akbService) {\r
- this.akbService = akbService;\r
-\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-package org.argeo.slc.akb.ui.views;\r
-\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import javax.jcr.Node;\r
-import javax.jcr.Repository;\r
-import javax.jcr.RepositoryException;\r
-import javax.jcr.Session;\r
-\r
-import org.argeo.eclipse.ui.utils.CommandUtils;\r
-import org.argeo.jcr.JcrUtils;\r
-import org.argeo.slc.akb.AkbException;\r
-import org.argeo.slc.akb.AkbNames;\r
-import org.argeo.slc.akb.AkbService;\r
-import org.argeo.slc.akb.AkbTypes;\r
-import org.argeo.slc.akb.ui.AkbUiPlugin;\r
-import org.argeo.slc.akb.ui.AkbUiUtils;\r
-import org.argeo.slc.akb.ui.commands.CreateAkbNode;\r
-import org.argeo.slc.akb.ui.commands.DeleteAkbNodes;\r
-import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor;\r
-import org.argeo.slc.akb.ui.providers.ActiveEnvsTreeContentProvider;\r
-import org.argeo.slc.akb.ui.providers.ActiveTreeItem;\r
-import org.argeo.slc.akb.ui.providers.AkbTreeLabelProvider;\r
-import org.argeo.slc.akb.ui.utils.AkbItemsComparator;\r
-import org.argeo.slc.akb.ui.utils.Refreshable;\r
-import org.eclipse.jface.action.IMenuListener;\r
-import org.eclipse.jface.action.IMenuManager;\r
-import org.eclipse.jface.action.MenuManager;\r
-import org.eclipse.jface.viewers.DoubleClickEvent;\r
-import org.eclipse.jface.viewers.IDoubleClickListener;\r
-import org.eclipse.jface.viewers.IStructuredSelection;\r
-import org.eclipse.jface.viewers.TreeViewer;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Menu;\r
-import org.eclipse.ui.IWorkbenchWindow;\r
-import org.eclipse.ui.part.ViewPart;\r
-\r
-/** AKB Active environment tree view. */\r
-public class EnvironmentsTreeView extends ViewPart implements Refreshable {\r
-\r
- public final static String ID = AkbUiPlugin.PLUGIN_ID\r
- + ".environmentsTreeView";\r
-\r
- /* DEPENDENCY INJECTION */\r
- private Session session;\r
- private AkbService akbService;\r
-\r
- // This page widgets\r
- private TreeViewer envTreeViewer;\r
-\r
- // Usefull business objects\r
- private Node activeEnvsParentNode;\r
-\r
- private void initialize() {\r
- try {\r
- activeEnvsParentNode = session\r
- .getNode(AkbNames.AKB_ENVIRONMENTS_BASE_PATH);\r
- } catch (RepositoryException e) {\r
- throw new AkbException("unable to initialize AKB Browser view", e);\r
- }\r
- }\r
-\r
- @Override\r
- public void createPartControl(Composite parent) {\r
- initialize();\r
- envTreeViewer = createTreeViewer(parent);\r
- envTreeViewer.setInput(activeEnvsParentNode);\r
- envTreeViewer.setComparator(new AkbItemsComparator());\r
- }\r
-\r
- // The main tree viewer\r
- protected TreeViewer createTreeViewer(Composite parent) {\r
- parent.setLayout(AkbUiUtils.gridLayoutNoBorder());\r
- int style = SWT.BORDER | SWT.MULTI;\r
-\r
- TreeViewer viewer = new TreeViewer(parent, style);\r
- viewer.getTree().setLayoutData(\r
- new GridData(SWT.FILL, SWT.FILL, true, true));\r
-\r
- viewer.setContentProvider(new ActiveEnvsTreeContentProvider());\r
- viewer.setLabelProvider(new AkbTreeLabelProvider());\r
- viewer.addDoubleClickListener(new ViewDoubleClickListener());\r
-\r
- getSite().setSelectionProvider(viewer);\r
-\r
- // context menu\r
- MenuManager menuManager = new MenuManager();\r
- Menu menu = menuManager.createContextMenu(viewer.getTree());\r
- menuManager.addMenuListener(new IMenuListener() {\r
- public void menuAboutToShow(IMenuManager manager) {\r
- contextMenuAboutToShow(manager);\r
- }\r
- });\r
- viewer.getTree().setMenu(menu);\r
- menuManager.setRemoveAllWhenShown(true);\r
- getSite().registerContextMenu(menuManager, viewer);\r
-\r
- return viewer;\r
- }\r
-\r
- // ////////////////////\r
- // / LIFE CYCLE\r
-\r
- @Override\r
- public void forceRefresh(Object object) {\r
- envTreeViewer.setInput(activeEnvsParentNode);\r
- }\r
-\r
- @Override\r
- public void setFocus() {\r
- }\r
-\r
- @Override\r
- public void dispose() {\r
- JcrUtils.logoutQuietly(session);\r
- super.dispose();\r
- }\r
-\r
- // ///////////////////////////\r
- // CONTEXT MENU MANAGEMENT\r
- /**\r
- * Defines the commands that will pop up in the context menu.\r
- **/\r
- protected void contextMenuAboutToShow(IMenuManager menuManager) {\r
- IWorkbenchWindow window = AkbUiPlugin.getDefault().getWorkbench()\r
- .getActiveWorkbenchWindow();\r
- try {\r
- // Build conditions\r
- IStructuredSelection selection = (IStructuredSelection) envTreeViewer\r
- .getSelection();\r
-\r
- ActiveTreeItem item = (ActiveTreeItem) selection.getFirstElement();\r
-\r
- boolean hasSelection = item != null;\r
- Node selected = null, currEnv = null;\r
-\r
- if (hasSelection) {\r
- selected = item.getNode();\r
- currEnv = item.getEnvironment();\r
- }\r
- boolean isEnv = hasSelection ? selected\r
- .isNodeType(AkbTypes.AKB_ENV) : false;\r
- boolean isDeletable = hasSelection ? isEnv : false;\r
- Map<String, String> params = new HashMap<String, String>();\r
-\r
- // Delete Item\r
- params = new HashMap<String, String>();\r
- if (hasSelection)\r
- params.put(DeleteAkbNodes.PARAM_NODE_JCR_ID,\r
- selected.getIdentifier());\r
- AkbUiUtils.refreshParameterizedCommand(menuManager, window,\r
- "cmd.deleteItem", DeleteAkbNodes.ID,\r
- "Delete selected active environment", null, isDeletable,\r
- params);\r
-\r
- // create template\r
- params = new HashMap<String, String>();\r
- params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, AkbTypes.AKB_ENV);\r
- AkbUiUtils.refreshParameterizedCommand(menuManager, window,\r
- "cmd.instanciateEnv", CreateAkbNode.ID,\r
- "Create new environment instance", null, !hasSelection\r
- || isEnv, params);\r
-\r
- } catch (RepositoryException re) {\r
- throw new AkbException("Error while refreshing context menu", re);\r
- }\r
- }\r
-\r
- /* INNER CLASSES */\r
- class ViewDoubleClickListener implements IDoubleClickListener {\r
- public void doubleClick(DoubleClickEvent evt) {\r
- Object obj = ((IStructuredSelection) evt.getSelection())\r
- .getFirstElement();\r
- try {\r
- if (obj instanceof ActiveTreeItem) {\r
- ActiveTreeItem currItem = (ActiveTreeItem) obj;\r
- Node node = currItem.getNode();\r
- Node currEnv = currItem.getEnvironment();\r
- Map<String, String> params = new HashMap<String, String>();\r
- params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID,\r
- node.getIdentifier());\r
- params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
- currEnv.getIdentifier());\r
- CommandUtils.callCommand(OpenAkbNodeEditor.ID, params);\r
- }\r
- } catch (RepositoryException e) {\r
- throw new AkbException("Cannot open " + obj, e);\r
- }\r
- }\r
- }\r
-\r
- /* DEPENDENCY INJECTION */\r
- public void setRepository(Repository repository) {\r
- try {\r
- session = repository.login();\r
- } catch (RepositoryException e) {\r
- throw new AkbException("unable to log in for " + ID + " view");\r
- }\r
- }\r
-\r
- public void setAkbService(AkbService akbService) {\r
- this.akbService = akbService;\r
-\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-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("<a>Save and test</a>");
-
- 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
+++ /dev/null
-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<Node> 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
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src/main/java" />
- <classpathentry kind="src" path="src/main/resources" />
- <classpathentry kind="con"
- path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6" />
- <classpathentry kind="con"
- path="org.eclipse.pde.core.requiredPlugins" />
- <classpathentry kind="output" path="target/classes" />
-</classpath>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.argeo.slc.akb</name>
- <comment></comment>
- <projects>
- <project>org.argeo.connect.people</project>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
+++ /dev/null
-source.. = src/main/java/,\
- src/main/resources,
-
-output.. = target/classes/
-bin.includes = META-INF/,\
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.argeo.slc</groupId>
- <version>1.1.15-SNAPSHOT</version>
- <artifactId>runtime</artifactId>
- <relativePath>..</relativePath>
- </parent>
- <artifactId>org.argeo.slc.akb</artifactId>
- <name>SLC AKB - Specifications and Core</name>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <configuration>
- <instructions>
- <Import-Package>
- *,
- 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
- </Import-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <dependency>
- <groupId>org.argeo.commons.server</groupId>
- <artifactId>org.argeo.server.jcr</artifactId>
- <version>${version.argeo-commons}</version>
- </dependency>
- <dependency>
- <groupId>org.argeo.commons.security</groupId>
- <artifactId>org.argeo.security.core</artifactId>
- <version>${version.argeo-commons}</version>
- </dependency>
-
- <!-- SLC -->
- <dependency>
- <groupId>org.argeo.slc</groupId>
- <artifactId>org.argeo.slc.support.simple</artifactId>
- <version>1.1.15-SNAPSHOT</version>
- </dependency>
- </dependencies>
-</project>
+++ /dev/null
-package org.argeo.slc.akb;
-
-/** Centralizes all AKB specific constants */
-public interface AkbConstants {
- public final static String AKB_BASE_PATH = "/akb:system";
-}
+++ /dev/null
-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);
- }
-
-}
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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<String, Resource> 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<String, Resource> demoData) {
- this.demoData = demoData;
- }
-
- public void setKeyring(Keyring keyring) {
- this.keyring = keyring;
- }
-
-}
\ No newline at end of file
+++ /dev/null
-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<Node> getDefinedTemplate(Session session) {
- try {
- if (session.nodeExists(AkbNames.AKB_TEMPLATES_BASE_PATH)) {
- NodeIterator ni = session.getNode(
- AkbNames.AKB_TEMPLATES_BASE_PATH).getNodes();
- List<Node> templates = new ArrayList<Node>();
- 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 <code>Row.getNode(String selectorName)</code>
- * method.
- */
- public static List<Node> rowIteratorToList(RowIterator rowIterator,
- String selectorName) throws RepositoryException {
- List<Node> nodes = new ArrayList<Node>();
- 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<String, PropertyDiff> diffProperties(Node reference,
- Node observed) {
- Map<String, PropertyDiff> diffs = new TreeMap<String, PropertyDiff>();
- diffPropertiesLevel(diffs, null, reference, observed);
- return diffs;
- }
-
- /**
- * Compare the properties of two nodes. Extends
- * <code>JcrUtils.diffPropertiesLevel</code> 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<String, PropertyDiff> 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
+++ /dev/null
-<akb = 'http://www.argeo.org/ns/akb'>
-
-//
-// 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
-