Move to Commons Base
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 17 Jul 2012 12:29:52 +0000 (12:29 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 17 Jul 2012 12:29:52 +0000 (12:29 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@5476 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

84 files changed:
base/runtime/org.argeo.eclipse.ui.jcr/.classpath [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/.project [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/.settings/org.eclipse.pde.core.prefs [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/build.properties [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/binary.png [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/file.gif [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/folder.gif [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/home.gif [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/node.gif [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/remote_connected.gif [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/remote_disconnected.gif [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/repositories.gif [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/repository_connected.gif [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/repository_disconnected.gif [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/sort.gif [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_connected.png [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_disconnected.png [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/pom.xml [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AbstractNodeContentProvider.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/DefaultNodeLabelProvider.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrImages.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrPreferenceStore.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrUiPlugin.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodeElementComparer.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodesWrapper.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/SimpleNodeContentProvider.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/WrappedNode.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/AddFileFolder.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNodes.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/OpenGenericJcrQueryEditor.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/Refresh.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/JcrQueryEditorInput.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/NodeEditorInput.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrFileProvider.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/NodeViewerComparer.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/SingleSessionFileProvider.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java [new file with mode: 0644]
base/runtime/org.argeo.eclipse.ui.jcr/src/main/resources/org/argeo/eclipse/ui/jcr/messages.properties [new file with mode: 0644]
eclipse/runtime/org.argeo.eclipse.ui.jcr/.classpath [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/.project [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/.settings/org.eclipse.jdt.core.prefs [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/.settings/org.eclipse.pde.core.prefs [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/build.properties [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/binary.png [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/file.gif [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/folder.gif [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/home.gif [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/node.gif [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/remote_connected.gif [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/remote_disconnected.gif [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/repositories.gif [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/repository_connected.gif [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/repository_disconnected.gif [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/sort.gif [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_connected.png [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_disconnected.png [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/pom.xml [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AbstractNodeContentProvider.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/DefaultNodeLabelProvider.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrImages.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrPreferenceStore.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrUiPlugin.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodeElementComparer.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodesWrapper.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/SimpleNodeContentProvider.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/WrappedNode.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/AddFileFolder.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNodes.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/OpenGenericJcrQueryEditor.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/Refresh.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/JcrQueryEditorInput.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/NodeEditorInput.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrFileProvider.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/NodeViewerComparer.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/SingleSessionFileProvider.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java [deleted file]
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/resources/org/argeo/eclipse/ui/jcr/messages.properties [deleted file]

diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/.classpath b/base/runtime/org.argeo.eclipse.ui.jcr/.classpath
new file mode 100644 (file)
index 0000000..cf1efe7
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>>>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src/main/java"/>
+       <classpathentry kind="src" path="src/main/resources"/>
+       <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/.project b/base/runtime/org.argeo.eclipse.ui.jcr/.project
new file mode 100644 (file)
index 0000000..d152683
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.argeo.eclipse.ui.jcr</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+       </natures>
+</projectDescription>
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/.settings/org.eclipse.jdt.core.prefs b/base/runtime/org.argeo.eclipse.ui.jcr/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..57d3f00
--- /dev/null
@@ -0,0 +1,8 @@
+#Sat Jan 22 14:25:47 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/.settings/org.eclipse.pde.core.prefs b/base/runtime/org.argeo.eclipse.ui.jcr/.settings/org.eclipse.pde.core.prefs
new file mode 100644 (file)
index 0000000..81635e9
--- /dev/null
@@ -0,0 +1,4 @@
+#Sat Jan 22 14:25:47 CET 2011
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/build.properties b/base/runtime/org.argeo.eclipse.ui.jcr/build.properties
new file mode 100644 (file)
index 0000000..0f2736b
--- /dev/null
@@ -0,0 +1,6 @@
+source.. = src/main/java/,\
+                       src/main/resources
+output.. = target/classes/
+bin.includes = META-INF/,\
+               .,\
+               icons/
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/binary.png b/base/runtime/org.argeo.eclipse.ui.jcr/icons/binary.png
new file mode 100644 (file)
index 0000000..fdf4f82
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/binary.png differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/file.gif b/base/runtime/org.argeo.eclipse.ui.jcr/icons/file.gif
new file mode 100644 (file)
index 0000000..ef30288
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/file.gif differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/folder.gif b/base/runtime/org.argeo.eclipse.ui.jcr/icons/folder.gif
new file mode 100644 (file)
index 0000000..42e027c
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/folder.gif differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/home.gif b/base/runtime/org.argeo.eclipse.ui.jcr/icons/home.gif
new file mode 100644 (file)
index 0000000..fd0c669
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/home.gif differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/node.gif b/base/runtime/org.argeo.eclipse.ui.jcr/icons/node.gif
new file mode 100644 (file)
index 0000000..364c0e7
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/node.gif differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/remote_connected.gif b/base/runtime/org.argeo.eclipse.ui.jcr/icons/remote_connected.gif
new file mode 100644 (file)
index 0000000..1492b4e
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/remote_connected.gif differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/remote_disconnected.gif b/base/runtime/org.argeo.eclipse.ui.jcr/icons/remote_disconnected.gif
new file mode 100644 (file)
index 0000000..6c54da9
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/remote_disconnected.gif differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/repositories.gif b/base/runtime/org.argeo.eclipse.ui.jcr/icons/repositories.gif
new file mode 100644 (file)
index 0000000..c13bea1
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/repositories.gif differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/repository_connected.gif b/base/runtime/org.argeo.eclipse.ui.jcr/icons/repository_connected.gif
new file mode 100644 (file)
index 0000000..a15fa55
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/repository_connected.gif differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/repository_disconnected.gif b/base/runtime/org.argeo.eclipse.ui.jcr/icons/repository_disconnected.gif
new file mode 100644 (file)
index 0000000..4576dc5
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/repository_disconnected.gif differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/sort.gif b/base/runtime/org.argeo.eclipse.ui.jcr/icons/sort.gif
new file mode 100644 (file)
index 0000000..23c5d0b
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/sort.gif differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_connected.png b/base/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_connected.png
new file mode 100644 (file)
index 0000000..0430baa
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_connected.png differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_disconnected.png b/base/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_disconnected.png
new file mode 100644 (file)
index 0000000..fddcb8c
Binary files /dev/null and b/base/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_disconnected.png differ
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/pom.xml b/base/runtime/org.argeo.eclipse.ui.jcr/pom.xml
new file mode 100644 (file)
index 0000000..304cbaf
--- /dev/null
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.argeo.commons.eclipse</groupId>
+               <version>1.1.4-SNAPSHOT</version>
+               <artifactId>runtime</artifactId>
+               <relativePath>..</relativePath>
+       </parent>
+       <artifactId>org.argeo.eclipse.ui.jcr</artifactId>
+       <name>Commons Eclipse UI JCR</name>
+       <packaging>jar</packaging>
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-compiler-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-source-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-jar-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+
+                               <configuration>
+                                       <instructions>
+                                               <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
+                                               <Require-Bundle>org.eclipse.ui;resolution:=optional,org.eclipse.rap.ui;resolution:=optional,org.eclipse.core.runtime</Require-Bundle>
+                                               <Import-Package>
+                                                       org.eclipse.swt,
+                                                       org.argeo.eclipse.ui.specific,
+                                                       *
+                                               </Import-Package>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </build>
+       <dependencies>
+               <dependency>
+                       <groupId>org.argeo.commons.eclipse</groupId>
+                       <artifactId>org.argeo.eclipse.ui</artifactId>
+                       <version>1.1.4-SNAPSHOT</version>
+               </dependency>
+
+               <!-- JCR -->
+               <dependency>
+                       <groupId>org.argeo.tp</groupId>
+                       <artifactId>javax.jcr</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.argeo.commons.server</groupId>
+                       <artifactId>org.argeo.server.jcr</artifactId>
+                       <version>1.1.4-SNAPSHOT</version>
+               </dependency>
+
+               <!-- RCP only dependency, needed at compile time -->
+               <dependency>
+                       <groupId>org.argeo.commons.eclipse</groupId>
+                       <artifactId>org.argeo.eclipse.dep.rcp</artifactId>
+                       <version>1.1.4-SNAPSHOT</version>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.argeo.commons.eclipse</groupId>
+                       <artifactId>org.argeo.eclipse.ui.rcp</artifactId>
+                       <version>1.1.4-SNAPSHOT</version>
+                       <scope>provided</scope>
+               </dependency>
+
+               <!-- Argeo Commons -->
+               <dependency>
+                       <groupId>org.argeo.commons.basic</groupId>
+                       <artifactId>org.argeo.basic.nodeps</artifactId>
+                       <version>1.1.4-SNAPSHOT</version>
+               </dependency>
+
+               <!-- Logging -->
+               <dependency>
+                       <groupId>org.argeo.tp</groupId>
+                       <artifactId>slf4j.org.apache.commons.logging</artifactId>
+               </dependency>
+       </dependencies>
+</project>
\ No newline at end of file
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AbstractNodeContentProvider.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AbstractNodeContentProvider.java
new file mode 100644 (file)
index 0000000..85f487b
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr;
+
+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.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.AbstractTreeContentProvider;
+
+/** Canonic implementation of tree content provider manipulating JCR nodes. */
+public abstract class AbstractNodeContentProvider extends
+               AbstractTreeContentProvider {
+       private final static Log log = LogFactory
+                       .getLog(AbstractNodeContentProvider.class);
+
+       private Session session;
+
+       public AbstractNodeContentProvider(Session session) {
+               this.session = session;
+       }
+
+       /**
+        * Whether this path is a base path (and thus has no parent). By default it
+        * returns true if path is '/' (root node)
+        */
+       protected Boolean isBasePath(String path) {
+               // root node
+               return path.equals("/");
+       }
+
+       @Override
+       public Object[] getChildren(Object element) {
+               Object[] children;
+               if (element instanceof Node) {
+                       try {
+                               Node node = (Node) element;
+                               children = getChildren(node);
+                       } catch (RepositoryException e) {
+                               throw new ArgeoException("Cannot get children of " + element, e);
+                       }
+               } else if (element instanceof WrappedNode) {
+                       WrappedNode wrappedNode = (WrappedNode) element;
+                       try {
+                               children = getChildren(wrappedNode.getNode());
+                       } catch (RepositoryException e) {
+                               throw new ArgeoException("Cannot get children of "
+                                               + wrappedNode, e);
+                       }
+               } else if (element instanceof NodesWrapper) {
+                       NodesWrapper node = (NodesWrapper) element;
+                       children = node.getChildren();
+               } else {
+                       children = super.getChildren(element);
+               }
+
+               children = sort(element, children);
+               return children;
+       }
+
+       /** Do not sort by default. To be overidden to provide custom sort. */
+       protected Object[] sort(Object parent, Object[] children) {
+               return children;
+       }
+
+       /**
+        * To be overridden in order to filter out some nodes. Does nothing by
+        * default. The provided list is a temporary one and can thus be modified
+        * directly . (e.g. via an iterator)
+        */
+       protected List<Node> filterChildren(List<Node> children)
+                       throws RepositoryException {
+               return children;
+       }
+
+       protected Object[] getChildren(Node node) throws RepositoryException {
+               List<Node> nodes = new ArrayList<Node>();
+               for (NodeIterator nit = node.getNodes(); nit.hasNext();)
+                       nodes.add(nit.nextNode());
+               nodes = filterChildren(nodes);
+               return nodes.toArray();
+       }
+
+       @Override
+       public Object getParent(Object element) {
+               if (element instanceof Node) {
+                       Node node = (Node) element;
+                       try {
+                               String path = node.getPath();
+                               if (isBasePath(path))
+                                       return null;
+                               else
+                                       return node.getParent();
+                       } catch (RepositoryException e) {
+                               log.warn("Cannot get parent of " + element + ": " + e);
+                               return null;
+                       }
+               } else if (element instanceof WrappedNode) {
+                       WrappedNode wrappedNode = (WrappedNode) element;
+                       return wrappedNode.getParent();
+               } else if (element instanceof NodesWrapper) {
+                       NodesWrapper nodesWrapper = (NodesWrapper) element;
+                       return this.getParent(nodesWrapper.getNode());
+               }
+               return super.getParent(element);
+       }
+
+       @Override
+       public boolean hasChildren(Object element) {
+               try {
+                       if (element instanceof Node) {
+                               Node node = (Node) element;
+                               return node.hasNodes();
+                       } else if (element instanceof WrappedNode) {
+                               WrappedNode wrappedNode = (WrappedNode) element;
+                               return wrappedNode.getNode().hasNodes();
+                       } else if (element instanceof NodesWrapper) {
+                               NodesWrapper nodesWrapper = (NodesWrapper) element;
+                               return nodesWrapper.hasChildren();
+                       }
+
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot check whether " + element
+                                       + " has children", e);
+               }
+               return super.hasChildren(element);
+       }
+
+       public Session getSession() {
+               return session;
+       }
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java
new file mode 100644 (file)
index 0000000..72aa3c2
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.observation.Event;
+import javax.jcr.observation.EventIterator;
+import javax.jcr.observation.EventListener;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoException;
+import org.eclipse.swt.widgets.Display;
+
+/** {@link EventListener} which simplifies running actions within the UI thread. */
+public abstract class AsyncUiEventListener implements EventListener {
+//     private final static Log logSuper = LogFactory
+//                     .getLog(AsyncUiEventListener.class);
+       private final Log logThis = LogFactory.getLog(getClass());
+
+       private final Display display;
+
+       public AsyncUiEventListener(Display display) {
+               super();
+               this.display = display;
+       }
+
+       /** Called asynchronously in the UI thread. */
+       protected abstract void onEventInUiThread(List<Event> events)
+                       throws RepositoryException;
+
+       /**
+        * Whether these events should be processed in the UI or skipped with no UI
+        * job created.
+        */
+       protected Boolean willProcessInUiThread(List<Event> events)
+                       throws RepositoryException {
+               return true;
+       }
+
+       protected Log getLog() {
+               return logThis;
+       }
+
+       public final void onEvent(final EventIterator eventIterator) {
+               final List<Event> events = new ArrayList<Event>();
+               while (eventIterator.hasNext())
+                       events.add(eventIterator.nextEvent());
+
+               if (logThis.isTraceEnabled())
+                       logThis.trace("Received " + events.size() + " events");
+
+               try {
+                       if (!willProcessInUiThread(events))
+                               return;
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot test skip events " + events, e);
+               }
+
+//             Job job = new Job("JCR Events") {
+//                     protected IStatus run(IProgressMonitor monitor) {
+//                             if (display.isDisposed()) {
+//                                     logSuper.warn("Display is disposed cannot update UI");
+//                                     return Status.CANCEL_STATUS;
+//                             }
+
+                               display.asyncExec(new Runnable() {
+                                       public void run() {
+                                               try {
+                                                       onEventInUiThread(events);
+                                               } catch (RepositoryException e) {
+                                                       throw new ArgeoException("Cannot process events "
+                                                                       + events, e);
+                                               }
+                                       }
+                               });
+
+//                             return Status.OK_STATUS;
+//                     }
+//             };
+//             job.schedule();
+       }
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/DefaultNodeLabelProvider.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/DefaultNodeLabelProvider.java
new file mode 100644 (file)
index 0000000..1b8e745
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr;
+
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeType;
+
+import org.argeo.ArgeoException;
+import org.argeo.jcr.ArgeoTypes;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+/** Provides reasonable overridable defaults for know JCR types. */
+public class DefaultNodeLabelProvider extends ColumnLabelProvider {
+       // Images
+       /**
+        * @deprecated Use {@link JcrImages#NODE} instead
+        */
+       public final static Image NODE = JcrImages.NODE;
+       /**
+        * @deprecated Use {@link JcrImages#FOLDER} instead
+        */
+       public final static Image FOLDER = JcrImages.FOLDER;
+       /**
+        * @deprecated Use {@link JcrImages#FILE} instead
+        */
+       public final static Image FILE = JcrImages.FILE;
+       /**
+        * @deprecated Use {@link JcrImages#BINARY} instead
+        */
+       public final static Image BINARY = JcrImages.BINARY;
+       /**
+        * @deprecated Use {@link JcrImages#HOME} instead
+        */
+       public final static Image HOME = JcrImages.HOME;
+
+       public String getText(Object element) {
+               try {
+                       if (element instanceof Node) {
+                               return getText((Node) element);
+                       } else if (element instanceof WrappedNode) {
+                               return getText(((WrappedNode) element).getNode());
+                       } else if (element instanceof NodesWrapper) {
+                               return getText(((NodesWrapper) element).getNode());
+                       }
+                       return super.getText(element);
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot get text for of " + element, e);
+               }
+       }
+
+       protected String getText(Node node) throws RepositoryException {
+               if (node.isNodeType(NodeType.MIX_TITLE)
+                               && node.hasProperty(Property.JCR_TITLE))
+                       return node.getProperty(Property.JCR_TITLE).getString();
+               else
+                       return node.getName();
+       }
+
+       @Override
+       public Image getImage(Object element) {
+               try {
+                       if (element instanceof Node) {
+                               return getImage((Node) element);
+                       } else if (element instanceof WrappedNode) {
+                               return getImage(((WrappedNode) element).getNode());
+                       } else if (element instanceof NodesWrapper) {
+                               return getImage(((NodesWrapper) element).getNode());
+                       }
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot retrieve image for " + element, e);
+               }
+               return super.getImage(element);
+       }
+
+       protected Image getImage(Node node) throws RepositoryException {
+               // optimized order
+               if (node.getPrimaryNodeType().isNodeType(NodeType.NT_FILE))
+                       return JcrImages.FILE;
+               else if (node.getPrimaryNodeType().isNodeType(NodeType.NT_FOLDER))
+                       return JcrImages.FOLDER;
+               else if (node.getPrimaryNodeType().isNodeType(NodeType.NT_RESOURCE))
+                       return JcrImages.BINARY;
+               else if (node.isNodeType(ArgeoTypes.ARGEO_USER_HOME))
+                       return JcrImages.HOME;
+               else
+                       return JcrImages.NODE;
+       }
+
+       @Override
+       public String getToolTipText(Object element) {
+               try {
+                       if (element instanceof Node) {
+                               return getToolTipText((Node) element);
+                       } else if (element instanceof WrappedNode) {
+                               return getToolTipText(((WrappedNode) element).getNode());
+                       } else if (element instanceof NodesWrapper) {
+                               return getToolTipText(((NodesWrapper) element).getNode());
+                       }
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot get tooltip for " + element, e);
+               }
+               return super.getToolTipText(element);
+       }
+
+       protected String getToolTipText(Node node) throws RepositoryException {
+               return null;
+       }
+
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrImages.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrImages.java
new file mode 100644 (file)
index 0000000..8bfb6ea
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr;
+
+import org.eclipse.swt.graphics.Image;
+
+/** Shared icons. */
+public class JcrImages {
+       public final static Image NODE = JcrUiPlugin.getImageDescriptor(
+                       "icons/node.gif").createImage();
+       public final static Image FOLDER = JcrUiPlugin.getImageDescriptor(
+                       "icons/folder.gif").createImage();
+       public final static Image FILE = JcrUiPlugin.getImageDescriptor(
+                       "icons/file.gif").createImage();
+       public final static Image BINARY = JcrUiPlugin.getImageDescriptor(
+                       "icons/binary.png").createImage();
+       public final static Image HOME = JcrUiPlugin.getImageDescriptor(
+                       "icons/home.gif").createImage();
+       public final static Image SORT = JcrUiPlugin.getImageDescriptor(
+                       "icons/sort.gif").createImage();
+
+       public final static Image REPOSITORIES = JcrUiPlugin.getImageDescriptor(
+                       "icons/repositories.gif").createImage();
+       public final static Image REPOSITORY_DISCONNECTED = JcrUiPlugin
+                       .getImageDescriptor("icons/repository_disconnected.gif")
+                       .createImage();
+       public final static Image REPOSITORY_CONNECTED = JcrUiPlugin
+                       .getImageDescriptor("icons/repository_connected.gif").createImage();
+       public final static Image REMOTE_DISCONNECTED = JcrUiPlugin
+                       .getImageDescriptor("icons/remote_disconnected.gif").createImage();
+       public final static Image REMOTE_CONNECTED = JcrUiPlugin
+                       .getImageDescriptor("icons/remote_connected.gif").createImage();
+       public final static Image WORKSPACE_DISCONNECTED = JcrUiPlugin
+                       .getImageDescriptor("icons/workspace_disconnected.png")
+                       .createImage();
+       public final static Image WORKSPACE_CONNECTED = JcrUiPlugin
+                       .getImageDescriptor("icons/workspace_connected.png").createImage();
+
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrPreferenceStore.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrPreferenceStore.java
new file mode 100644 (file)
index 0000000..7090055
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.PropertyIterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.version.VersionManager;
+
+import org.apache.commons.io.IOUtils;
+import org.argeo.ArgeoException;
+import org.argeo.jcr.ArgeoNames;
+import org.argeo.jcr.ArgeoTypes;
+import org.argeo.jcr.JcrUtils;
+import org.eclipse.jface.preference.PreferenceStore;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Persist preferences as key/value pairs under ~/argeo:preferences.<br>
+ * TODO: better integrate JCR and Eclipse:<br>
+ * - typing<br>
+ * - use eclipse preferences<br>
+ * - better integrate with {@link ScopedPreferenceStore} provided by RAP
+ */
+public class JcrPreferenceStore extends PreferenceStore implements ArgeoNames {
+       private Session session;
+       private BundleContext bundleContext;
+
+       /** Retrieves the preference node */
+       protected Node getPreferenceNode() {
+               try {
+                       if (session.hasPendingChanges())
+                               session.save();
+                       Node userHome = JcrUtils.getUserHome(session);
+                       if (userHome == null)
+                               throw new ArgeoException("No user home for "
+                                               + session.getUserID());
+                       Node preferences;
+                       if (!userHome.hasNode(ARGEO_PREFERENCES)) {
+                               preferences = userHome.addNode(ARGEO_PREFERENCES);
+                               preferences.addMixin(ArgeoTypes.ARGEO_PREFERENCE_NODE);
+                               session.save();
+                       } else
+                               preferences = userHome.getNode(ARGEO_PREFERENCES);
+
+                       String pluginPreferencesName = bundleContext.getBundle()
+                                       .getSymbolicName();
+                       Node pluginPreferences;
+                       if (!preferences.hasNode(pluginPreferencesName)) {
+                               VersionManager vm = session.getWorkspace().getVersionManager();
+                               vm.checkout(preferences.getPath());
+                               pluginPreferences = preferences.addNode(pluginPreferencesName);
+                               pluginPreferences.addMixin(ArgeoTypes.ARGEO_PREFERENCE_NODE);
+                               session.save();
+                               vm.checkin(preferences.getPath());
+                       } else
+                               pluginPreferences = preferences.getNode(pluginPreferencesName);
+                       return pluginPreferences;
+               } catch (RepositoryException e) {
+                       e.printStackTrace();
+                       JcrUtils.discardQuietly(session);
+                       throw new ArgeoException("Cannot retrieve preferences", e);
+               }
+
+       }
+
+       @Override
+       public void load() throws IOException {
+               ByteArrayOutputStream out = null;
+               ByteArrayInputStream in = null;
+               try {
+                       Properties props = new Properties();
+                       PropertyIterator it = getPreferenceNode().getProperties();
+                       while (it.hasNext()) {
+                               Property p = it.nextProperty();
+                               if (!p.isMultiple() && !p.getDefinition().isProtected()) {
+                                       props.setProperty(p.getName(), p.getValue().getString());
+                               }
+                       }
+                       out = new ByteArrayOutputStream();
+                       props.store(out, "");
+                       in = new ByteArrayInputStream(out.toByteArray());
+                       load(in);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       throw new ArgeoException("Cannot load preferences", e);
+               } finally {
+                       IOUtils.closeQuietly(in);
+                       IOUtils.closeQuietly(out);
+               }
+       }
+
+       @Override
+       public void save() throws IOException {
+               ByteArrayOutputStream out = null;
+               ByteArrayInputStream in = null;
+               Node pluginPreferences = null;
+               try {
+                       out = new ByteArrayOutputStream();
+                       save(out, "");
+                       in = new ByteArrayInputStream(out.toByteArray());
+                       Properties props = new Properties();
+                       props.load(in);
+                       pluginPreferences = getPreferenceNode();
+                       VersionManager vm = pluginPreferences.getSession().getWorkspace()
+                                       .getVersionManager();
+                       vm.checkout(pluginPreferences.getPath());
+                       for (Object key : props.keySet()) {
+                               String name = key.toString();
+                               String value = props.getProperty(name);
+                               pluginPreferences.setProperty(name, value);
+                       }
+                       JcrUtils.updateLastModified(pluginPreferences);
+                       pluginPreferences.getSession().save();
+                       vm.checkin(pluginPreferences.getPath());
+               } catch (Exception e) {
+                       JcrUtils.discardUnderlyingSessionQuietly(pluginPreferences);
+                       throw new ArgeoException("Cannot save preferences", e);
+               } finally {
+                       IOUtils.closeQuietly(in);
+                       IOUtils.closeQuietly(out);
+               }
+       }
+
+       public void init() {
+               try {
+                       load();
+               } catch (IOException e) {
+                       throw new ArgeoException("Cannot initialize preference store", e);
+               }
+       }
+
+       public void setSession(Session session) {
+               this.session = session;
+       }
+
+       public void setBundleContext(BundleContext bundleContext) {
+               this.bundleContext = bundleContext;
+       }
+
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrUiPlugin.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrUiPlugin.java
new file mode 100644 (file)
index 0000000..7d2c4d5
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr;
+
+import java.util.ResourceBundle;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+public class JcrUiPlugin extends AbstractUIPlugin {
+       private final static Log log = LogFactory.getLog(JcrUiPlugin.class);
+
+       public final static String ID = "org.argeo.eclipse.ui.jcr";
+
+       private ResourceBundle messages;
+
+       private static JcrUiPlugin plugin;
+
+       public void start(BundleContext context) throws Exception {
+               super.start(context);
+               plugin = this;
+               messages = ResourceBundle.getBundle("org.argeo.eclipse.ui.jcr");
+       }
+
+       public static JcrUiPlugin getDefault() {
+               return plugin;
+       }
+
+       public static ImageDescriptor getImageDescriptor(String path) {
+               return imageDescriptorFromPlugin(ID, path);
+       }
+
+       /** Returns the internationalized label for the given key */
+       public static String getMessage(String key) {
+               try {
+                       return getDefault().messages.getString(key);
+               } catch (NullPointerException npe) {
+                       log.warn(key + " not found.");
+                       return key;
+               }
+       }
+
+       /**
+        * Gives access to the internationalization message bundle. Returns null in
+        * case the ClientUiPlugin is not started (for JUnit tests, by instance)
+        */
+       public static ResourceBundle getMessagesBundle() {
+               if (getDefault() != null)
+                       // To avoid NPE
+                       return getDefault().messages;
+               else
+                       return null;
+       }
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodeElementComparer.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodeElementComparer.java
new file mode 100644 (file)
index 0000000..16ff444
--- /dev/null
@@ -0,0 +1,51 @@
+/*\r
+ * Copyright (C) 2007-2012 Mathieu Baudier\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.eclipse.ui.jcr;\r
+\r
+import javax.jcr.Node;\r
+import javax.jcr.RepositoryException;\r
+\r
+import org.argeo.ArgeoException;\r
+import org.eclipse.jface.viewers.IElementComparer;\r
+\r
+/** Element comparer for JCR node, to be used in JFace viewers. */\r
+public class NodeElementComparer implements IElementComparer {\r
+\r
+       public boolean equals(Object a, Object b) {\r
+               try {\r
+                       if ((a instanceof Node) && (b instanceof Node)) {\r
+                               Node nodeA = (Node) a;\r
+                               Node nodeB = (Node) b;\r
+                               return nodeA.getIdentifier().equals(nodeB.getIdentifier());\r
+                       } else {\r
+                               return a.equals(b);\r
+                       }\r
+               } catch (RepositoryException e) {\r
+                       throw new ArgeoException("Cannot compare nodes", e);\r
+               }\r
+       }\r
+\r
+       public int hashCode(Object element) {\r
+               try {\r
+                       if (element instanceof Node)\r
+                               return ((Node) element).getIdentifier().hashCode();\r
+                       return element.hashCode();\r
+               } catch (RepositoryException e) {\r
+                       throw new ArgeoException("Cannot get hash code", e);\r
+               }\r
+       }\r
+\r
+}\r
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodesWrapper.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodesWrapper.java
new file mode 100644 (file)
index 0000000..25d8d03
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.RepositoryException;
+
+import org.argeo.ArgeoException;
+
+/**
+ * Element of tree which is based on a node, but whose children are not
+ * necessarily this node children.
+ */
+public class NodesWrapper {
+       private final Node node;
+
+       public NodesWrapper(Node node) {
+               super();
+               this.node = node;
+       }
+
+       protected NodeIterator getNodeIterator() throws RepositoryException {
+               return node.getNodes();
+       }
+
+       protected List<WrappedNode> getWrappedNodes() throws RepositoryException {
+               List<WrappedNode> nodes = new ArrayList<WrappedNode>();
+               for (NodeIterator nit = getNodeIterator(); nit.hasNext();)
+                       nodes.add(new WrappedNode(this, nit.nextNode()));
+               return nodes;
+       }
+
+       public Object[] getChildren() {
+               try {
+                       return getWrappedNodes().toArray();
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot get wrapped children", e);
+               }
+       }
+
+       /**
+        * @return true by default because we don't want to compute the wrapped
+        *         nodes twice
+        */
+       public Boolean hasChildren() {
+               return true;
+       }
+
+       public Node getNode() {
+               return node;
+       }
+
+       @Override
+       public int hashCode() {
+               return node.hashCode();
+       }
+
+       @Override
+       public boolean equals(Object obj) {
+               if (obj instanceof NodesWrapper)
+                       return node.equals(((NodesWrapper) obj).getNode());
+               else
+                       return false;
+       }
+
+       public String toString() {
+               return "nodes wrapper based on " + node;
+       }
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/SimpleNodeContentProvider.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/SimpleNodeContentProvider.java
new file mode 100644 (file)
index 0000000..28e014d
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.argeo.ArgeoException;
+import org.argeo.jcr.JcrUtils;
+
+/** Simple JCR node content provider taking a list of String as base path. */
+public class SimpleNodeContentProvider extends AbstractNodeContentProvider {
+       private final List<String> basePaths;
+       private Boolean mkdirs = false;
+
+       public SimpleNodeContentProvider(Session session, String... basePaths) {
+               this(session, Arrays.asList(basePaths));
+       }
+
+       public SimpleNodeContentProvider(Session session, List<String> basePaths) {
+               super(session);
+               this.basePaths = basePaths;
+       }
+
+       @Override
+       protected Boolean isBasePath(String path) {
+               if (basePaths.contains(path))
+                       return true;
+               return super.isBasePath(path);
+       }
+
+       public Object[] getElements(Object inputElement) {
+               try {
+                       List<Node> baseNodes = new ArrayList<Node>();
+                       for (String basePath : basePaths)
+                               if (mkdirs && !getSession().itemExists(basePath))
+                                       baseNodes.add(JcrUtils.mkdirs(getSession(), basePath));
+                               else
+                                       baseNodes.add(getSession().getNode(basePath));
+                       return baseNodes.toArray();
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot get base nodes for " + basePaths,
+                                       e);
+               }
+       }
+
+       public List<String> getBasePaths() {
+               return basePaths;
+       }
+
+       public void setMkdirs(Boolean mkdirs) {
+               this.mkdirs = mkdirs;
+       }
+
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/WrappedNode.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/WrappedNode.java
new file mode 100644 (file)
index 0000000..56e940b
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr;
+
+import javax.jcr.Node;
+
+/** Wraps a node (created from a {@link NodesWrapper}) */
+public class WrappedNode {
+       private final NodesWrapper parent;
+       private final Node node;
+
+       public WrappedNode(NodesWrapper parent, Node node) {
+               super();
+               this.parent = parent;
+               this.node = node;
+       }
+
+       public NodesWrapper getParent() {
+               return parent;
+       }
+
+       public Node getNode() {
+               return node;
+       }
+
+       public String toString() {
+               return "wrapped " + node;
+       }
+
+       @Override
+       public int hashCode() {
+               return node.hashCode();
+       }
+
+       @Override
+       public boolean equals(Object obj) {
+               if (obj instanceof WrappedNode)
+                       return node.equals(((WrappedNode) obj).getNode());
+               else
+                       return false;
+       }
+
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/AddFileFolder.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/AddFileFolder.java
new file mode 100644 (file)
index 0000000..42eff5e
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr.commands;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeType;
+
+import org.argeo.eclipse.ui.ErrorFeedback;
+import org.argeo.eclipse.ui.dialogs.SingleValue;
+import org.argeo.eclipse.ui.jcr.JcrUiPlugin;
+import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/** Adds a node of type nt:folder */
+public class AddFileFolder extends AbstractHandler {
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
+                               .getActivePage().getSelection();
+               AbstractJcrBrowser view = (AbstractJcrBrowser) HandlerUtil
+                               .getActiveWorkbenchWindow(event).getActivePage()
+                               .findView(HandlerUtil.getActivePartId(event));
+               if (selection != null && !selection.isEmpty()
+                               && selection instanceof IStructuredSelection) {
+                       Object obj = ((IStructuredSelection) selection).getFirstElement();
+
+                       if (obj instanceof Node) {
+                               String folderName = SingleValue.ask("Folder name",
+                                               "Enter folder name");
+                               if (folderName != null) {
+                                       Node parentNode = (Node) obj;
+                                       try {
+                                               Node newNode = parentNode.addNode(folderName,
+                                                               NodeType.NT_FOLDER);
+                                               view.nodeAdded(parentNode, newNode);
+                                               parentNode.getSession().save();
+                                       } catch (RepositoryException e) {
+                                               ErrorFeedback.show("Cannot create folder " + folderName
+                                                               + " under " + parentNode, e);
+                                       }
+                               }
+                       } else {
+                               ErrorFeedback.show(JcrUiPlugin
+                                               .getMessage("errorUnvalidNtFolderNodeType"));
+                       }
+               }
+               return null;
+       }
+
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNodes.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNodes.java
new file mode 100644 (file)
index 0000000..6cde09e
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr.commands;
+
+import java.util.Iterator;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.ErrorFeedback;
+import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Deletes the selected nodes and refresh the corresponding AbstractJcrView.
+ * Note that no model specific check is done to see if the node can be removed
+ * or not. Extend or override to implement specific behaviour.
+ */
+public class DeleteNodes extends AbstractHandler {
+       public final static String ID = "org.argeo.eclipse.ui.jcr.deleteNodes";
+       public final static String DEFAULT_LABEL = "Delete selected nodes";
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
+                               .getActivePage().getSelection();
+               AbstractJcrBrowser view = (AbstractJcrBrowser) HandlerUtil
+                               .getActiveWorkbenchWindow(event).getActivePage()
+                               .findView(HandlerUtil.getActivePartId(event));
+
+               if (selection != null && selection instanceof IStructuredSelection) {
+                       Iterator<?> it = ((IStructuredSelection) selection).iterator();
+                       Object obj = null;
+                       Node ancestor = null;
+                       try {
+                               while (it.hasNext()) {
+                                       obj = it.next();
+                                       if (obj instanceof Node) {
+                                               Node node = (Node) obj;
+                                               Node parentNode = node.getParent();
+                                               node.remove();
+                                               node.getSession().save();
+                                               ancestor = getOlder(ancestor, parentNode);
+                                       }
+                               }
+                               if (ancestor != null)
+                                       view.nodeRemoved(ancestor);
+                       } catch (Exception e) {
+                               ErrorFeedback.show("Cannot delete node " + obj, e);
+                       }
+               }
+               return null;
+       }
+
+       protected Node getOlder(Node A, Node B) {
+               try {
+
+                       if (A == null)
+                               return B == null ? null : B;
+                       // Todo enhanced this method
+                       else
+                               return A.getDepth() <= B.getDepth() ? A : B;
+               } catch (RepositoryException re) {
+                       throw new ArgeoException("Cannot find ancestor", re);
+               }
+       }
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/OpenGenericJcrQueryEditor.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/OpenGenericJcrQueryEditor.java
new file mode 100644 (file)
index 0000000..20edc8c
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr.commands;
+
+import org.argeo.eclipse.ui.jcr.editors.JcrQueryEditorInput;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/** Open a JCR query editor. */
+public class OpenGenericJcrQueryEditor extends AbstractHandler {
+       private String editorId;
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               try {
+                       JcrQueryEditorInput editorInput = new JcrQueryEditorInput("", null);
+                       IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(
+                                       event).getActivePage();
+                       activePage.openEditor(editorInput, editorId);
+               } catch (Exception e) {
+                       throw new ExecutionException("Cannot open editor", e);
+               }
+               return null;
+       }
+
+       public void setEditorId(String editorId) {
+               this.editorId = editorId;
+       }
+
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/Refresh.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/Refresh.java
new file mode 100644 (file)
index 0000000..fdb92bb
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr.commands;
+
+import java.util.Iterator;
+
+import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Call the refresh method of the active AbstractJcrBrowser instance.
+ * 
+ * Warning: this method only refreshes the viewer, if the model is "stale", e.g.
+ * if some changes in the underlying data have not yet been propagated to the
+ * model, the view will not display up-to-date information.
+ */
+@Deprecated
+public class Refresh extends AbstractHandler {
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
+                               .getActivePage().getSelection();
+               AbstractJcrBrowser view = (AbstractJcrBrowser) HandlerUtil
+                               .getActiveWorkbenchWindow(event).getActivePage()
+                               .findView(HandlerUtil.getActivePartId(event));
+               if (selection != null && selection instanceof IStructuredSelection) {
+                       Iterator<?> it = ((IStructuredSelection) selection).iterator();
+                       while (it.hasNext()) {
+                               Object obj = it.next();
+                               view.refresh(obj);
+                       }
+               }
+               return null;
+       }
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java
new file mode 100644 (file)
index 0000000..f41c7ca
--- /dev/null
@@ -0,0 +1,354 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr.editors;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.query.QueryResult;
+import javax.jcr.query.Row;
+import javax.jcr.query.RowIterator;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.GenericTableComparator;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+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.custom.SashForm;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.EditorPart;
+
+/** Executes any JCR query. */
+public abstract class AbstractJcrQueryEditor extends EditorPart {
+       private final static Log log = LogFactory
+                       .getLog(AbstractJcrQueryEditor.class);
+
+       protected String initialQuery;
+       protected String initialQueryType;
+
+       /* DEPENDENCY INJECTION */
+       private Session session;
+
+       // Widgets
+       private TableViewer viewer;
+       private List<TableViewerColumn> tableViewerColumns = new ArrayList<TableViewerColumn>();
+       private GenericTableComparator comparator;
+
+       /** Override to layout a form enabling the end user to build his query */
+       protected abstract void createQueryForm(Composite parent);
+
+       @Override
+       public void init(IEditorSite site, IEditorInput input)
+                       throws PartInitException {
+               JcrQueryEditorInput editorInput = (JcrQueryEditorInput) input;
+               initialQuery = editorInput.getQuery();
+               initialQueryType = editorInput.getQueryType();
+               setSite(site);
+               setInput(editorInput);
+       }
+
+       @Override
+       public final void createPartControl(final Composite parent) {
+               parent.setLayout(new FillLayout());
+
+               SashForm sashForm = new SashForm(parent, SWT.VERTICAL);
+               sashForm.setSashWidth(4);
+               sashForm.setLayout(new FillLayout());
+
+               Composite top = new Composite(sashForm, SWT.NONE);
+               GridLayout gl = new GridLayout(1, false);
+               top.setLayout(gl);
+
+               createQueryForm(top);
+
+               Composite bottom = new Composite(sashForm, SWT.NONE);
+               bottom.setLayout(new GridLayout(1, false));
+               sashForm.setWeights(getWeights());
+
+               viewer = new TableViewer(bottom);
+               viewer.getTable().setLayoutData(
+                               new GridData(SWT.FILL, SWT.FILL, true, true));
+               viewer.getTable().setHeaderVisible(true);
+               viewer.setContentProvider(getQueryResultContentProvider());
+               viewer.setInput(getEditorSite());
+
+               if (getComparator() != null) {
+                       comparator = getComparator();
+                       viewer.setComparator(comparator);
+               }
+               if (getTableDoubleClickListener() != null)
+                       viewer.addDoubleClickListener(getTableDoubleClickListener());
+
+       }
+
+       protected void executeQuery(String statement) {
+               try {
+                       if (log.isDebugEnabled())
+                               log.debug("Query : " + statement);
+
+                       QueryResult qr = session.getWorkspace().getQueryManager()
+                                       .createQuery(statement, initialQueryType).execute();
+
+                       // remove previous columns
+                       for (TableViewerColumn tvc : tableViewerColumns)
+                               tvc.getColumn().dispose();
+
+                       int i = 0;
+                       for (final String columnName : qr.getColumnNames()) {
+                               TableViewerColumn tvc = new TableViewerColumn(viewer, SWT.NONE);
+                               configureColumn(columnName, tvc, i);
+                               tvc.setLabelProvider(getLabelProvider(columnName));
+                               tableViewerColumns.add(tvc);
+                               i++;
+                       }
+
+                       // Must create a local list: QueryResults can only be read once.
+                       try {
+                               List<Row> rows = new ArrayList<Row>();
+                               RowIterator rit = qr.getRows();
+                               while (rit.hasNext()) {
+                                       rows.add(rit.nextRow());
+                               }
+                               viewer.setInput(rows);
+                       } catch (RepositoryException e) {
+                               throw new ArgeoException("Cannot read query result", e);
+                       }
+
+               } catch (RepositoryException e) {
+                       ErrorDialog.openError(null, "Error", "Cannot execute JCR query: "
+                                       + statement, new Status(IStatus.ERROR,
+                                       "org.argeo.eclipse.ui.jcr", e.getMessage()));
+               }
+       }
+
+       /**
+        * To be overidden to adapt size of form and result frames.
+        * 
+        * @return
+        */
+       protected int[] getWeights() {
+               return new int[] { 30, 70 };
+       }
+
+       /**
+        * To be overidden to implement a doubleclick Listener on one of the rows of
+        * the table.
+        * 
+        * @return
+        */
+       protected IDoubleClickListener getTableDoubleClickListener() {
+               return null;
+       }
+
+       /**
+        * To be overiden in order to implement a specific
+        * QueryResultContentProvider
+        */
+       protected IStructuredContentProvider getQueryResultContentProvider() {
+               return new QueryResultContentProvider();
+       }
+
+       /**
+        * Enable specific implementation for columns
+        */
+       protected List<TableViewerColumn> getTableViewerColumns() {
+               return tableViewerColumns;
+       }
+
+       /**
+        * Enable specific implementation for columns
+        */
+       protected TableViewer getTableViewer() {
+               return viewer;
+       }
+
+       /**
+        * To be overridden in order to configure column label providers .
+        */
+       protected ColumnLabelProvider getLabelProvider(final String columnName) {
+               return new ColumnLabelProvider() {
+                       public String getText(Object element) {
+                               Row row = (Row) element;
+                               try {
+                                       return row.getValue(columnName).getString();
+                               } catch (RepositoryException e) {
+                                       throw new ArgeoException("Cannot display row " + row, e);
+                               }
+                       }
+
+                       public Image getImage(Object element) {
+                               return null;
+                       }
+               };
+       }
+
+       /**
+        * To be overridden in order to configure the columns.
+        * 
+        * @deprecated use {@link
+        *             org.argeo.eclipse.ui.jcr.editors.AbstractJcrQueryEditor.
+        *             configureColumn(String jcrColumnName, TableViewerColumn
+        *             column, int columnIndex)} instead
+        */
+       protected void configureColumn(String jcrColumnName,
+                       TableViewerColumn column) {
+               column.getColumn().setWidth(50);
+               column.getColumn().setText(jcrColumnName);
+       }
+
+       /** To be overridden in order to configure the columns. */
+       protected void configureColumn(String jcrColumnName,
+                       TableViewerColumn column, int columnIndex) {
+               column.getColumn().setWidth(50);
+               column.getColumn().setText(jcrColumnName);
+       }
+
+       private class QueryResultContentProvider implements
+                       IStructuredContentProvider {
+
+               public void dispose() {
+               }
+
+               public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+               }
+
+               public Object[] getElements(Object inputElement) {
+
+                       if (inputElement instanceof List)
+                               return ((List<?>) inputElement).toArray();
+
+                       // Never reached might be deleted in future release
+                       if (!(inputElement instanceof QueryResult))
+                               return new String[] {};
+
+                       try {
+                               QueryResult queryResult = (QueryResult) inputElement;
+                               List<Row> rows = new ArrayList<Row>();
+                               RowIterator rit = queryResult.getRows();
+                               while (rit.hasNext()) {
+                                       rows.add(rit.nextRow());
+                               }
+
+                               // List<Node> elems = new ArrayList<Node>();
+                               // NodeIterator nit = queryResult.getNodes();
+                               // while (nit.hasNext()) {
+                               // elems.add(nit.nextNode());
+                               // }
+                               return rows.toArray();
+                       } catch (RepositoryException e) {
+                               throw new ArgeoException("Cannot read query result", e);
+                       }
+               }
+
+       }
+
+       /**
+        * Might be used by children classes to sort columns.
+        * 
+        * @param column
+        * @param index
+        * @return
+        */
+       protected SelectionAdapter getSelectionAdapter(final TableColumn column,
+                       final int index) {
+
+               // A comparator must be define
+               if (comparator == null)
+                       return null;
+
+               SelectionAdapter selectionAdapter = new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+
+                               try {
+
+                                       comparator.setColumn(index);
+                                       int dir = viewer.getTable().getSortDirection();
+                                       if (viewer.getTable().getSortColumn() == column) {
+                                               dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
+                                       } else {
+
+                                               dir = SWT.DOWN;
+                                       }
+                                       viewer.getTable().setSortDirection(dir);
+                                       viewer.getTable().setSortColumn(column);
+                                       viewer.refresh();
+                               } catch (Exception exc) {
+                                       exc.printStackTrace();
+                               }
+                       }
+               };
+               return selectionAdapter;
+       }
+
+       /**
+        * To be overridden to enable sorting.
+        */
+       protected GenericTableComparator getComparator() {
+               return null;
+       }
+
+       @Override
+       public boolean isDirty() {
+               return false;
+       }
+
+       @Override
+       public void doSave(IProgressMonitor monitor) {
+               // TODO save the query in JCR?
+       }
+
+       @Override
+       public void doSaveAs() {
+       }
+
+       @Override
+       public boolean isSaveAsAllowed() {
+               return false;
+       }
+
+       /** Returns the injected current session */
+       protected Session getSession() {
+               return session;
+       }
+
+       /* DEPENDENCY INJECTION */
+       public void setSession(Session session) {
+               this.session = session;
+       }
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/JcrQueryEditorInput.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/JcrQueryEditorInput.java
new file mode 100644 (file)
index 0000000..458c212
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr.editors;
+
+import javax.jcr.query.Query;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+
+public class JcrQueryEditorInput implements IEditorInput {
+       private final String query;
+       private final String queryType;
+
+       public JcrQueryEditorInput(String query, String queryType) {
+               this.query = query;
+               if (queryType == null)
+                       this.queryType = Query.JCR_SQL2;
+               else
+                       this.queryType = queryType;
+       }
+
+       public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) {
+               return null;
+       }
+
+       public boolean exists() {
+               return true;
+       }
+
+       public ImageDescriptor getImageDescriptor() {
+               return null;
+       }
+
+       public String getName() {
+               return query;
+       }
+
+       public IPersistableElement getPersistable() {
+               return null;
+       }
+
+       public String getToolTipText() {
+               return query;
+       }
+
+       public String getQuery() {
+               return query;
+       }
+
+       public String getQueryType() {
+               return queryType;
+       }
+
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/NodeEditorInput.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/NodeEditorInput.java
new file mode 100644 (file)
index 0000000..8a6ee40
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr.editors;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+
+/**
+ * A canonical editor input based on a path to a node. In a multirepository
+ * environment, path can be enriched with Repository Alias and workspace
+ */
+
+public class NodeEditorInput implements IEditorInput {
+       private final String path;
+
+       public NodeEditorInput(String path) {
+               this.path = path;
+       }
+
+       public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) {
+               return null;
+       }
+
+       public boolean exists() {
+               return true;
+       }
+
+       public ImageDescriptor getImageDescriptor() {
+               return null;
+       }
+
+       public String getName() {
+               return path;
+       }
+
+       public IPersistableElement getPersistable() {
+               return null;
+       }
+
+       public String getToolTipText() {
+               return path;
+       }
+
+       public String getPath() {
+               return path;
+       }
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrFileProvider.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrFileProvider.java
new file mode 100644 (file)
index 0000000..2906197
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr.utils;
+
+import java.io.InputStream;
+
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeType;
+
+import org.apache.commons.io.IOUtils;
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.specific.FileProvider;
+
+/**
+ * Implements a FileProvider for UI purposes. Note that it might not be very
+ * reliable as long as we have not fixed login & multi repository issues that
+ * will be addressed in the next version.
+ * 
+ * NOTE: id used here is the real id of the JCR Node, not the JCR Path
+ * 
+ * Relies on common approach for JCR file handling implementation.
+ * 
+ */
+
+public class JcrFileProvider implements FileProvider {
+
+       // private Object[] rootNodes;
+       private Node refNode;
+
+       /**
+        * Must be set in order for the provider to be able to get current session
+        * and thus have the ability to get the file node corresponding to a given
+        * file ID
+        * 
+        * FIXME : this introduces some concurrences ISSUES.
+        * 
+        * @param repositoryNode
+        */
+       public void setReferenceNode(Node refNode) {
+               this.refNode = refNode;
+       }
+
+       /**
+        * Must be set in order for the provider to be able to search the repository
+        * Provided object might be either JCR Nodes or UI RepositoryNode for the
+        * time being.
+        * 
+        * @param repositoryNode
+        */
+       // public void setRootNodes(Object[] rootNodes) {
+       // List<Object> tmpNodes = new ArrayList<Object>();
+       // for (int i = 0; i < rootNodes.length; i++) {
+       // Object obj = rootNodes[i];
+       // if (obj instanceof Node) {
+       // tmpNodes.add(obj);
+       // } else if (obj instanceof RepositoryRegister) {
+       // RepositoryRegister repositoryRegister = (RepositoryRegister) obj;
+       // Map<String, Repository> repositories = repositoryRegister
+       // .getRepositories();
+       // for (String name : repositories.keySet()) {
+       // // tmpNodes.add(new RepositoryNode(name, repositories
+       // // .get(name)));
+       // }
+       //
+       // }
+       // }
+       // this.rootNodes = tmpNodes.toArray();
+       // }
+
+       public byte[] getByteArrayFileFromId(String fileId) {
+               InputStream fis = null;
+               byte[] ba = null;
+               Node child = getFileNodeFromId(fileId);
+               try {
+                       fis = (InputStream) child.getProperty(Property.JCR_DATA)
+                                       .getBinary().getStream();
+                       ba = IOUtils.toByteArray(fis);
+
+               } catch (Exception e) {
+                       throw new ArgeoException("Stream error while opening file", e);
+               } finally {
+                       IOUtils.closeQuietly(fis);
+               }
+               return ba;
+       }
+
+       public InputStream getInputStreamFromFileId(String fileId) {
+               try {
+                       InputStream fis = null;
+
+                       Node child = getFileNodeFromId(fileId);
+                       fis = (InputStream) child.getProperty(Property.JCR_DATA)
+                                       .getBinary().getStream();
+                       return fis;
+               } catch (RepositoryException re) {
+                       throw new ArgeoException("Cannot get stream from file node for Id "
+                                       + fileId, re);
+               }
+       }
+
+       /**
+        * Throws an exception if the node is not found in the current repository (a
+        * bit like a FileNotFoundException)
+        * 
+        * @param fileId
+        * @return Returns the child node of the nt:file node. It is the child node
+        *         that have the jcr:data property where actual file is stored.
+        *         never null
+        */
+       private Node getFileNodeFromId(String fileId) {
+               try {
+                       Node result = refNode.getSession().getNodeByIdentifier(fileId);
+
+                       // rootNodes: for (int j = 0; j < rootNodes.length; j++) {
+                       // // in case we have a classic JCR Node
+                       // if (rootNodes[j] instanceof Node) {
+                       // Node curNode = (Node) rootNodes[j];
+                       // if (result != null)
+                       // break rootNodes;
+                       // } // Case of a repository Node
+                       // else if (rootNodes[j] instanceof RepositoryNode) {
+                       // Object[] nodes = ((RepositoryNode) rootNodes[j])
+                       // .getChildren();
+                       // for (int i = 0; i < nodes.length; i++) {
+                       // Node node = (Node) nodes[i];
+                       // result = node.getSession().getNodeByIdentifier(fileId);
+                       // if (result != null)
+                       // break rootNodes;
+                       // }
+                       // }
+                       // }
+
+                       // Sanity checks
+                       if (result == null)
+                               throw new ArgeoException("File node not found for ID" + fileId);
+
+                       // Ensure that the node have the correct type.
+                       if (!result.isNodeType(NodeType.NT_FILE))
+                               throw new ArgeoException(
+                                               "Cannot open file children Node that are not of '"
+                                                               + NodeType.NT_RESOURCE + "' type.");
+
+                       // Get the usefull part of the Node
+                       Node child = result.getNodes().nextNode();
+                       if (child == null || !child.isNodeType(NodeType.NT_RESOURCE))
+                               throw new ArgeoException(
+                                               "ERROR: IN the current implemented model, '"
+                                                               + NodeType.NT_FILE
+                                                               + "' file node must have one and only one child of the nt:ressource, where actual data is stored");
+                       return child;
+
+               } catch (RepositoryException re) {
+                       throw new ArgeoException("Erreur while getting file node of ID "
+                                       + fileId, re);
+               }
+       }
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java
new file mode 100644 (file)
index 0000000..3c18572
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr.utils;
+
+import java.util.Comparator;
+
+import javax.jcr.Item;
+import javax.jcr.RepositoryException;
+
+import org.argeo.ArgeoException;
+
+/** Compares two JCR items (node or properties) based on their names. */
+public class JcrItemsComparator implements Comparator<Item> {
+       public int compare(Item o1, Item o2) {
+               try {
+                       // TODO: put folder before files
+                       return o1.getName().compareTo(o2.getName());
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot compare " + o1 + " and " + o2, e);
+               }
+       }
+
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/NodeViewerComparer.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/NodeViewerComparer.java
new file mode 100644 (file)
index 0000000..4e627b0
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr.utils;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.argeo.ArgeoException;
+import org.eclipse.jface.viewers.IElementComparer;
+
+/** Compare JCR nodes based on their JCR identifiers, for use in JFace viewers. */
+public class NodeViewerComparer implements IElementComparer {
+
+       // force comparison on Node IDs only.
+       public boolean equals(Object elementA, Object elementB) {
+               if (!(elementA instanceof Node) || !(elementB instanceof Node)) {
+                       return elementA == null ? elementB == null : elementA
+                                       .equals(elementB);
+               } else {
+
+                       boolean result = false;
+                       try {
+                               String idA = ((Node) elementA).getIdentifier();
+                               String idB = ((Node) elementB).getIdentifier();
+                               result = idA == null ? idB == null : idA.equals(idB);
+                       } catch (RepositoryException re) {
+                               throw new ArgeoException("cannot compare nodes", re);
+                       }
+
+                       return result;
+               }
+       }
+
+       public int hashCode(Object element) {
+               // TODO enhanced this method.
+               return element.getClass().toString().hashCode();
+       }
+}
\ No newline at end of file
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/SingleSessionFileProvider.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/SingleSessionFileProvider.java
new file mode 100644 (file)
index 0000000..eb1d961
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr.utils;
+
+import java.io.InputStream;
+
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.nodetype.NodeType;
+
+import org.apache.commons.io.IOUtils;
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.specific.FileProvider;
+
+/**
+ * Implements a FileProvider for UI purposes. Unlike the
+ * <code> JcrFileProvider </code>, it relies on a single session and manages
+ * nodes with path only.
+ * 
+ * Note that considered id is the JCR path
+ * 
+ * Relies on common approach for JCR file handling implementation.
+ * 
+ * @author bsinou
+ * 
+ */
+
+public class SingleSessionFileProvider implements FileProvider {
+
+       private Session session;
+
+       public SingleSessionFileProvider(Session session) {
+               this.session = session;
+       }
+
+       public byte[] getByteArrayFileFromId(String fileId) {
+               InputStream fis = null;
+               byte[] ba = null;
+               Node child = getFileNodeFromId(fileId);
+               try {
+                       fis = (InputStream) child.getProperty(Property.JCR_DATA)
+                                       .getBinary().getStream();
+                       ba = IOUtils.toByteArray(fis);
+
+               } catch (Exception e) {
+                       throw new ArgeoException("Stream error while opening file", e);
+               } finally {
+                       IOUtils.closeQuietly(fis);
+               }
+               return ba;
+       }
+
+       public InputStream getInputStreamFromFileId(String fileId) {
+               try {
+                       InputStream fis = null;
+
+                       Node child = getFileNodeFromId(fileId);
+                       fis = (InputStream) child.getProperty(Property.JCR_DATA)
+                                       .getBinary().getStream();
+                       return fis;
+               } catch (RepositoryException re) {
+                       throw new ArgeoException("Cannot get stream from file node for Id "
+                                       + fileId, re);
+               }
+       }
+
+       /**
+        * 
+        * @param fileId
+        * @return Returns the child node of the nt:file node. It is the child node
+        *         that have the jcr:data property where actual file is stored.
+        *         never null
+        */
+       private Node getFileNodeFromId(String fileId) {
+               try {
+                       Node result = null;
+                       result = session.getNode(fileId);
+
+                       // Sanity checks
+                       if (result == null)
+                               throw new ArgeoException("File node not found for ID" + fileId);
+
+                       // Ensure that the node have the correct type.
+                       if (!result.isNodeType(NodeType.NT_FILE))
+                               throw new ArgeoException(
+                                               "Cannot open file children Node that are not of "
+                                                               + NodeType.NT_RESOURCE + " type.");
+
+                       Node child = result.getNodes().nextNode();
+                       if (child == null || !child.isNodeType(NodeType.NT_RESOURCE))
+                               throw new ArgeoException(
+                                               "ERROR: IN the current implemented model, "
+                                                               + NodeType.NT_FILE
+                                                               + "  file node must have one and only one child of the nt:ressource, where actual data is stored");
+                       return child;
+               } catch (RepositoryException re) {
+                       throw new ArgeoException("Erreur while getting file node of ID "
+                                       + fileId, re);
+               }
+       }
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java
new file mode 100644 (file)
index 0000000..90ed7fc
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * 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.eclipse.ui.jcr.views;
+
+import javax.jcr.Node;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+public abstract class AbstractJcrBrowser extends ViewPart {
+
+       @Override
+       public abstract void createPartControl(Composite parent);
+
+       /**
+        * To be overridden to adapt size of form and result frames.
+        */
+       abstract protected int[] getWeights();
+
+       /**
+        * To be overridden to provide an adapted size nodeViewer
+        */
+       abstract protected TreeViewer createNodeViewer(Composite parent,
+                       ITreeContentProvider nodeContentProvider);
+
+       /**
+        * To be overridden to retrieve the current nodeViewer
+        */
+       abstract protected TreeViewer getNodeViewer();
+
+       /*
+        * Enables the refresh of the tree.
+        */
+       @Override
+       public void setFocus() {
+               getNodeViewer().getTree().setFocus();
+       }
+
+       public void refresh(Object obj) {
+               // getNodeViewer().update(obj, null);
+               getNodeViewer().refresh(obj);
+               // getNodeViewer().expandToLevel(obj, 1);
+       }
+
+       public void nodeAdded(Node parentNode, Node newNode) {
+               getNodeViewer().refresh(parentNode);
+               getNodeViewer().expandToLevel(newNode, 0);
+       }
+
+       public void nodeRemoved(Node parentNode) {
+               IStructuredSelection newSel = new StructuredSelection(parentNode);
+               getNodeViewer().setSelection(newSel, true);
+               // Force refresh
+               IStructuredSelection tmpSel = (IStructuredSelection) getNodeViewer()
+                               .getSelection();
+               getNodeViewer().refresh(tmpSel.getFirstElement());
+       }
+}
diff --git a/base/runtime/org.argeo.eclipse.ui.jcr/src/main/resources/org/argeo/eclipse/ui/jcr/messages.properties b/base/runtime/org.argeo.eclipse.ui.jcr/src/main/resources/org/argeo/eclipse/ui/jcr/messages.properties
new file mode 100644 (file)
index 0000000..a24aa38
--- /dev/null
@@ -0,0 +1,7 @@
+## English labels for Agreo base JCR UI application 
+
+## Generic labels 
+
+## Errors
+errorUnvalidNtFolderNodeType= Error: folder can only be created on a Jcr Node
+
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/.classpath b/eclipse/runtime/org.argeo.eclipse.ui.jcr/.classpath
deleted file mode 100644 (file)
index cf1efe7..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>>>
-       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="src" path="src/main/java"/>
-       <classpathentry kind="src" path="src/main/resources"/>
-       <classpathentry kind="output" path="target/classes"/>
-</classpath>
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/.project b/eclipse/runtime/org.argeo.eclipse.ui.jcr/.project
deleted file mode 100644 (file)
index d152683..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-       <name>org.argeo.eclipse.ui.jcr</name>
-       <comment></comment>
-       <projects>
-       </projects>
-       <buildSpec>
-               <buildCommand>
-                       <name>org.eclipse.jdt.core.javabuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-               <buildCommand>
-                       <name>org.eclipse.pde.ManifestBuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-               <buildCommand>
-                       <name>org.eclipse.pde.SchemaBuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-       </buildSpec>
-       <natures>
-               <nature>org.eclipse.pde.PluginNature</nature>
-               <nature>org.eclipse.jdt.core.javanature</nature>
-       </natures>
-</projectDescription>
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/.settings/org.eclipse.jdt.core.prefs b/eclipse/runtime/org.argeo.eclipse.ui.jcr/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644 (file)
index 57d3f00..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#Sat Jan 22 14:25:47 CET 2011
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/.settings/org.eclipse.pde.core.prefs b/eclipse/runtime/org.argeo.eclipse.ui.jcr/.settings/org.eclipse.pde.core.prefs
deleted file mode 100644 (file)
index 81635e9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#Sat Jan 22 14:25:47 CET 2011
-eclipse.preferences.version=1
-pluginProject.extensions=false
-resolve.requirebundle=false
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/build.properties b/eclipse/runtime/org.argeo.eclipse.ui.jcr/build.properties
deleted file mode 100644 (file)
index 0f2736b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-source.. = src/main/java/,\
-                       src/main/resources
-output.. = target/classes/
-bin.includes = META-INF/,\
-               .,\
-               icons/
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/binary.png b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/binary.png
deleted file mode 100644 (file)
index fdf4f82..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/binary.png and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/file.gif b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/file.gif
deleted file mode 100644 (file)
index ef30288..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/file.gif and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/folder.gif b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/folder.gif
deleted file mode 100644 (file)
index 42e027c..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/folder.gif and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/home.gif b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/home.gif
deleted file mode 100644 (file)
index fd0c669..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/home.gif and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/node.gif b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/node.gif
deleted file mode 100644 (file)
index 364c0e7..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/node.gif and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/remote_connected.gif b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/remote_connected.gif
deleted file mode 100644 (file)
index 1492b4e..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/remote_connected.gif and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/remote_disconnected.gif b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/remote_disconnected.gif
deleted file mode 100644 (file)
index 6c54da9..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/remote_disconnected.gif and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/repositories.gif b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/repositories.gif
deleted file mode 100644 (file)
index c13bea1..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/repositories.gif and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/repository_connected.gif b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/repository_connected.gif
deleted file mode 100644 (file)
index a15fa55..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/repository_connected.gif and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/repository_disconnected.gif b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/repository_disconnected.gif
deleted file mode 100644 (file)
index 4576dc5..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/repository_disconnected.gif and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/sort.gif b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/sort.gif
deleted file mode 100644 (file)
index 23c5d0b..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/sort.gif and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_connected.png b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_connected.png
deleted file mode 100644 (file)
index 0430baa..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_connected.png and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_disconnected.png b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_disconnected.png
deleted file mode 100644 (file)
index fddcb8c..0000000
Binary files a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/workspace_disconnected.png and /dev/null differ
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/pom.xml b/eclipse/runtime/org.argeo.eclipse.ui.jcr/pom.xml
deleted file mode 100644 (file)
index 304cbaf..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-       <modelVersion>4.0.0</modelVersion>
-       <parent>
-               <groupId>org.argeo.commons.eclipse</groupId>
-               <version>1.1.4-SNAPSHOT</version>
-               <artifactId>runtime</artifactId>
-               <relativePath>..</relativePath>
-       </parent>
-       <artifactId>org.argeo.eclipse.ui.jcr</artifactId>
-       <name>Commons Eclipse UI JCR</name>
-       <packaging>jar</packaging>
-       <build>
-               <plugins>
-                       <plugin>
-                               <groupId>org.apache.maven.plugins</groupId>
-                               <artifactId>maven-compiler-plugin</artifactId>
-                       </plugin>
-                       <plugin>
-                               <groupId>org.apache.maven.plugins</groupId>
-                               <artifactId>maven-source-plugin</artifactId>
-                       </plugin>
-                       <plugin>
-                               <groupId>org.apache.maven.plugins</groupId>
-                               <artifactId>maven-jar-plugin</artifactId>
-                       </plugin>
-                       <plugin>
-                               <groupId>org.apache.felix</groupId>
-                               <artifactId>maven-bundle-plugin</artifactId>
-
-                               <configuration>
-                                       <instructions>
-                                               <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
-                                               <Require-Bundle>org.eclipse.ui;resolution:=optional,org.eclipse.rap.ui;resolution:=optional,org.eclipse.core.runtime</Require-Bundle>
-                                               <Import-Package>
-                                                       org.eclipse.swt,
-                                                       org.argeo.eclipse.ui.specific,
-                                                       *
-                                               </Import-Package>
-                                       </instructions>
-                               </configuration>
-                       </plugin>
-               </plugins>
-       </build>
-       <dependencies>
-               <dependency>
-                       <groupId>org.argeo.commons.eclipse</groupId>
-                       <artifactId>org.argeo.eclipse.ui</artifactId>
-                       <version>1.1.4-SNAPSHOT</version>
-               </dependency>
-
-               <!-- JCR -->
-               <dependency>
-                       <groupId>org.argeo.tp</groupId>
-                       <artifactId>javax.jcr</artifactId>
-               </dependency>
-               <dependency>
-                       <groupId>org.argeo.commons.server</groupId>
-                       <artifactId>org.argeo.server.jcr</artifactId>
-                       <version>1.1.4-SNAPSHOT</version>
-               </dependency>
-
-               <!-- RCP only dependency, needed at compile time -->
-               <dependency>
-                       <groupId>org.argeo.commons.eclipse</groupId>
-                       <artifactId>org.argeo.eclipse.dep.rcp</artifactId>
-                       <version>1.1.4-SNAPSHOT</version>
-                       <scope>provided</scope>
-               </dependency>
-               <dependency>
-                       <groupId>org.argeo.commons.eclipse</groupId>
-                       <artifactId>org.argeo.eclipse.ui.rcp</artifactId>
-                       <version>1.1.4-SNAPSHOT</version>
-                       <scope>provided</scope>
-               </dependency>
-
-               <!-- Argeo Commons -->
-               <dependency>
-                       <groupId>org.argeo.commons.basic</groupId>
-                       <artifactId>org.argeo.basic.nodeps</artifactId>
-                       <version>1.1.4-SNAPSHOT</version>
-               </dependency>
-
-               <!-- Logging -->
-               <dependency>
-                       <groupId>org.argeo.tp</groupId>
-                       <artifactId>slf4j.org.apache.commons.logging</artifactId>
-               </dependency>
-       </dependencies>
-</project>
\ No newline at end of file
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AbstractNodeContentProvider.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AbstractNodeContentProvider.java
deleted file mode 100644 (file)
index 85f487b..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr;
-
-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.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.AbstractTreeContentProvider;
-
-/** Canonic implementation of tree content provider manipulating JCR nodes. */
-public abstract class AbstractNodeContentProvider extends
-               AbstractTreeContentProvider {
-       private final static Log log = LogFactory
-                       .getLog(AbstractNodeContentProvider.class);
-
-       private Session session;
-
-       public AbstractNodeContentProvider(Session session) {
-               this.session = session;
-       }
-
-       /**
-        * Whether this path is a base path (and thus has no parent). By default it
-        * returns true if path is '/' (root node)
-        */
-       protected Boolean isBasePath(String path) {
-               // root node
-               return path.equals("/");
-       }
-
-       @Override
-       public Object[] getChildren(Object element) {
-               Object[] children;
-               if (element instanceof Node) {
-                       try {
-                               Node node = (Node) element;
-                               children = getChildren(node);
-                       } catch (RepositoryException e) {
-                               throw new ArgeoException("Cannot get children of " + element, e);
-                       }
-               } else if (element instanceof WrappedNode) {
-                       WrappedNode wrappedNode = (WrappedNode) element;
-                       try {
-                               children = getChildren(wrappedNode.getNode());
-                       } catch (RepositoryException e) {
-                               throw new ArgeoException("Cannot get children of "
-                                               + wrappedNode, e);
-                       }
-               } else if (element instanceof NodesWrapper) {
-                       NodesWrapper node = (NodesWrapper) element;
-                       children = node.getChildren();
-               } else {
-                       children = super.getChildren(element);
-               }
-
-               children = sort(element, children);
-               return children;
-       }
-
-       /** Do not sort by default. To be overidden to provide custom sort. */
-       protected Object[] sort(Object parent, Object[] children) {
-               return children;
-       }
-
-       /**
-        * To be overridden in order to filter out some nodes. Does nothing by
-        * default. The provided list is a temporary one and can thus be modified
-        * directly . (e.g. via an iterator)
-        */
-       protected List<Node> filterChildren(List<Node> children)
-                       throws RepositoryException {
-               return children;
-       }
-
-       protected Object[] getChildren(Node node) throws RepositoryException {
-               List<Node> nodes = new ArrayList<Node>();
-               for (NodeIterator nit = node.getNodes(); nit.hasNext();)
-                       nodes.add(nit.nextNode());
-               nodes = filterChildren(nodes);
-               return nodes.toArray();
-       }
-
-       @Override
-       public Object getParent(Object element) {
-               if (element instanceof Node) {
-                       Node node = (Node) element;
-                       try {
-                               String path = node.getPath();
-                               if (isBasePath(path))
-                                       return null;
-                               else
-                                       return node.getParent();
-                       } catch (RepositoryException e) {
-                               log.warn("Cannot get parent of " + element + ": " + e);
-                               return null;
-                       }
-               } else if (element instanceof WrappedNode) {
-                       WrappedNode wrappedNode = (WrappedNode) element;
-                       return wrappedNode.getParent();
-               } else if (element instanceof NodesWrapper) {
-                       NodesWrapper nodesWrapper = (NodesWrapper) element;
-                       return this.getParent(nodesWrapper.getNode());
-               }
-               return super.getParent(element);
-       }
-
-       @Override
-       public boolean hasChildren(Object element) {
-               try {
-                       if (element instanceof Node) {
-                               Node node = (Node) element;
-                               return node.hasNodes();
-                       } else if (element instanceof WrappedNode) {
-                               WrappedNode wrappedNode = (WrappedNode) element;
-                               return wrappedNode.getNode().hasNodes();
-                       } else if (element instanceof NodesWrapper) {
-                               NodesWrapper nodesWrapper = (NodesWrapper) element;
-                               return nodesWrapper.hasChildren();
-                       }
-
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot check whether " + element
-                                       + " has children", e);
-               }
-               return super.hasChildren(element);
-       }
-
-       public Session getSession() {
-               return session;
-       }
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java
deleted file mode 100644 (file)
index 72aa3c2..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.observation.Event;
-import javax.jcr.observation.EventIterator;
-import javax.jcr.observation.EventListener;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.ArgeoException;
-import org.eclipse.swt.widgets.Display;
-
-/** {@link EventListener} which simplifies running actions within the UI thread. */
-public abstract class AsyncUiEventListener implements EventListener {
-//     private final static Log logSuper = LogFactory
-//                     .getLog(AsyncUiEventListener.class);
-       private final Log logThis = LogFactory.getLog(getClass());
-
-       private final Display display;
-
-       public AsyncUiEventListener(Display display) {
-               super();
-               this.display = display;
-       }
-
-       /** Called asynchronously in the UI thread. */
-       protected abstract void onEventInUiThread(List<Event> events)
-                       throws RepositoryException;
-
-       /**
-        * Whether these events should be processed in the UI or skipped with no UI
-        * job created.
-        */
-       protected Boolean willProcessInUiThread(List<Event> events)
-                       throws RepositoryException {
-               return true;
-       }
-
-       protected Log getLog() {
-               return logThis;
-       }
-
-       public final void onEvent(final EventIterator eventIterator) {
-               final List<Event> events = new ArrayList<Event>();
-               while (eventIterator.hasNext())
-                       events.add(eventIterator.nextEvent());
-
-               if (logThis.isTraceEnabled())
-                       logThis.trace("Received " + events.size() + " events");
-
-               try {
-                       if (!willProcessInUiThread(events))
-                               return;
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot test skip events " + events, e);
-               }
-
-//             Job job = new Job("JCR Events") {
-//                     protected IStatus run(IProgressMonitor monitor) {
-//                             if (display.isDisposed()) {
-//                                     logSuper.warn("Display is disposed cannot update UI");
-//                                     return Status.CANCEL_STATUS;
-//                             }
-
-                               display.asyncExec(new Runnable() {
-                                       public void run() {
-                                               try {
-                                                       onEventInUiThread(events);
-                                               } catch (RepositoryException e) {
-                                                       throw new ArgeoException("Cannot process events "
-                                                                       + events, e);
-                                               }
-                                       }
-                               });
-
-//                             return Status.OK_STATUS;
-//                     }
-//             };
-//             job.schedule();
-       }
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/DefaultNodeLabelProvider.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/DefaultNodeLabelProvider.java
deleted file mode 100644 (file)
index 1b8e745..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
-
-import org.argeo.ArgeoException;
-import org.argeo.jcr.ArgeoTypes;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.swt.graphics.Image;
-
-/** Provides reasonable overridable defaults for know JCR types. */
-public class DefaultNodeLabelProvider extends ColumnLabelProvider {
-       // Images
-       /**
-        * @deprecated Use {@link JcrImages#NODE} instead
-        */
-       public final static Image NODE = JcrImages.NODE;
-       /**
-        * @deprecated Use {@link JcrImages#FOLDER} instead
-        */
-       public final static Image FOLDER = JcrImages.FOLDER;
-       /**
-        * @deprecated Use {@link JcrImages#FILE} instead
-        */
-       public final static Image FILE = JcrImages.FILE;
-       /**
-        * @deprecated Use {@link JcrImages#BINARY} instead
-        */
-       public final static Image BINARY = JcrImages.BINARY;
-       /**
-        * @deprecated Use {@link JcrImages#HOME} instead
-        */
-       public final static Image HOME = JcrImages.HOME;
-
-       public String getText(Object element) {
-               try {
-                       if (element instanceof Node) {
-                               return getText((Node) element);
-                       } else if (element instanceof WrappedNode) {
-                               return getText(((WrappedNode) element).getNode());
-                       } else if (element instanceof NodesWrapper) {
-                               return getText(((NodesWrapper) element).getNode());
-                       }
-                       return super.getText(element);
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot get text for of " + element, e);
-               }
-       }
-
-       protected String getText(Node node) throws RepositoryException {
-               if (node.isNodeType(NodeType.MIX_TITLE)
-                               && node.hasProperty(Property.JCR_TITLE))
-                       return node.getProperty(Property.JCR_TITLE).getString();
-               else
-                       return node.getName();
-       }
-
-       @Override
-       public Image getImage(Object element) {
-               try {
-                       if (element instanceof Node) {
-                               return getImage((Node) element);
-                       } else if (element instanceof WrappedNode) {
-                               return getImage(((WrappedNode) element).getNode());
-                       } else if (element instanceof NodesWrapper) {
-                               return getImage(((NodesWrapper) element).getNode());
-                       }
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot retrieve image for " + element, e);
-               }
-               return super.getImage(element);
-       }
-
-       protected Image getImage(Node node) throws RepositoryException {
-               // optimized order
-               if (node.getPrimaryNodeType().isNodeType(NodeType.NT_FILE))
-                       return JcrImages.FILE;
-               else if (node.getPrimaryNodeType().isNodeType(NodeType.NT_FOLDER))
-                       return JcrImages.FOLDER;
-               else if (node.getPrimaryNodeType().isNodeType(NodeType.NT_RESOURCE))
-                       return JcrImages.BINARY;
-               else if (node.isNodeType(ArgeoTypes.ARGEO_USER_HOME))
-                       return JcrImages.HOME;
-               else
-                       return JcrImages.NODE;
-       }
-
-       @Override
-       public String getToolTipText(Object element) {
-               try {
-                       if (element instanceof Node) {
-                               return getToolTipText((Node) element);
-                       } else if (element instanceof WrappedNode) {
-                               return getToolTipText(((WrappedNode) element).getNode());
-                       } else if (element instanceof NodesWrapper) {
-                               return getToolTipText(((NodesWrapper) element).getNode());
-                       }
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot get tooltip for " + element, e);
-               }
-               return super.getToolTipText(element);
-       }
-
-       protected String getToolTipText(Node node) throws RepositoryException {
-               return null;
-       }
-
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrImages.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrImages.java
deleted file mode 100644 (file)
index 8bfb6ea..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr;
-
-import org.eclipse.swt.graphics.Image;
-
-/** Shared icons. */
-public class JcrImages {
-       public final static Image NODE = JcrUiPlugin.getImageDescriptor(
-                       "icons/node.gif").createImage();
-       public final static Image FOLDER = JcrUiPlugin.getImageDescriptor(
-                       "icons/folder.gif").createImage();
-       public final static Image FILE = JcrUiPlugin.getImageDescriptor(
-                       "icons/file.gif").createImage();
-       public final static Image BINARY = JcrUiPlugin.getImageDescriptor(
-                       "icons/binary.png").createImage();
-       public final static Image HOME = JcrUiPlugin.getImageDescriptor(
-                       "icons/home.gif").createImage();
-       public final static Image SORT = JcrUiPlugin.getImageDescriptor(
-                       "icons/sort.gif").createImage();
-
-       public final static Image REPOSITORIES = JcrUiPlugin.getImageDescriptor(
-                       "icons/repositories.gif").createImage();
-       public final static Image REPOSITORY_DISCONNECTED = JcrUiPlugin
-                       .getImageDescriptor("icons/repository_disconnected.gif")
-                       .createImage();
-       public final static Image REPOSITORY_CONNECTED = JcrUiPlugin
-                       .getImageDescriptor("icons/repository_connected.gif").createImage();
-       public final static Image REMOTE_DISCONNECTED = JcrUiPlugin
-                       .getImageDescriptor("icons/remote_disconnected.gif").createImage();
-       public final static Image REMOTE_CONNECTED = JcrUiPlugin
-                       .getImageDescriptor("icons/remote_connected.gif").createImage();
-       public final static Image WORKSPACE_DISCONNECTED = JcrUiPlugin
-                       .getImageDescriptor("icons/workspace_disconnected.png")
-                       .createImage();
-       public final static Image WORKSPACE_CONNECTED = JcrUiPlugin
-                       .getImageDescriptor("icons/workspace_connected.png").createImage();
-
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrPreferenceStore.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrPreferenceStore.java
deleted file mode 100644 (file)
index 7090055..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Properties;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.version.VersionManager;
-
-import org.apache.commons.io.IOUtils;
-import org.argeo.ArgeoException;
-import org.argeo.jcr.ArgeoNames;
-import org.argeo.jcr.ArgeoTypes;
-import org.argeo.jcr.JcrUtils;
-import org.eclipse.jface.preference.PreferenceStore;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
-import org.osgi.framework.BundleContext;
-
-/**
- * Persist preferences as key/value pairs under ~/argeo:preferences.<br>
- * TODO: better integrate JCR and Eclipse:<br>
- * - typing<br>
- * - use eclipse preferences<br>
- * - better integrate with {@link ScopedPreferenceStore} provided by RAP
- */
-public class JcrPreferenceStore extends PreferenceStore implements ArgeoNames {
-       private Session session;
-       private BundleContext bundleContext;
-
-       /** Retrieves the preference node */
-       protected Node getPreferenceNode() {
-               try {
-                       if (session.hasPendingChanges())
-                               session.save();
-                       Node userHome = JcrUtils.getUserHome(session);
-                       if (userHome == null)
-                               throw new ArgeoException("No user home for "
-                                               + session.getUserID());
-                       Node preferences;
-                       if (!userHome.hasNode(ARGEO_PREFERENCES)) {
-                               preferences = userHome.addNode(ARGEO_PREFERENCES);
-                               preferences.addMixin(ArgeoTypes.ARGEO_PREFERENCE_NODE);
-                               session.save();
-                       } else
-                               preferences = userHome.getNode(ARGEO_PREFERENCES);
-
-                       String pluginPreferencesName = bundleContext.getBundle()
-                                       .getSymbolicName();
-                       Node pluginPreferences;
-                       if (!preferences.hasNode(pluginPreferencesName)) {
-                               VersionManager vm = session.getWorkspace().getVersionManager();
-                               vm.checkout(preferences.getPath());
-                               pluginPreferences = preferences.addNode(pluginPreferencesName);
-                               pluginPreferences.addMixin(ArgeoTypes.ARGEO_PREFERENCE_NODE);
-                               session.save();
-                               vm.checkin(preferences.getPath());
-                       } else
-                               pluginPreferences = preferences.getNode(pluginPreferencesName);
-                       return pluginPreferences;
-               } catch (RepositoryException e) {
-                       e.printStackTrace();
-                       JcrUtils.discardQuietly(session);
-                       throw new ArgeoException("Cannot retrieve preferences", e);
-               }
-
-       }
-
-       @Override
-       public void load() throws IOException {
-               ByteArrayOutputStream out = null;
-               ByteArrayInputStream in = null;
-               try {
-                       Properties props = new Properties();
-                       PropertyIterator it = getPreferenceNode().getProperties();
-                       while (it.hasNext()) {
-                               Property p = it.nextProperty();
-                               if (!p.isMultiple() && !p.getDefinition().isProtected()) {
-                                       props.setProperty(p.getName(), p.getValue().getString());
-                               }
-                       }
-                       out = new ByteArrayOutputStream();
-                       props.store(out, "");
-                       in = new ByteArrayInputStream(out.toByteArray());
-                       load(in);
-               } catch (Exception e) {
-                       e.printStackTrace();
-                       throw new ArgeoException("Cannot load preferences", e);
-               } finally {
-                       IOUtils.closeQuietly(in);
-                       IOUtils.closeQuietly(out);
-               }
-       }
-
-       @Override
-       public void save() throws IOException {
-               ByteArrayOutputStream out = null;
-               ByteArrayInputStream in = null;
-               Node pluginPreferences = null;
-               try {
-                       out = new ByteArrayOutputStream();
-                       save(out, "");
-                       in = new ByteArrayInputStream(out.toByteArray());
-                       Properties props = new Properties();
-                       props.load(in);
-                       pluginPreferences = getPreferenceNode();
-                       VersionManager vm = pluginPreferences.getSession().getWorkspace()
-                                       .getVersionManager();
-                       vm.checkout(pluginPreferences.getPath());
-                       for (Object key : props.keySet()) {
-                               String name = key.toString();
-                               String value = props.getProperty(name);
-                               pluginPreferences.setProperty(name, value);
-                       }
-                       JcrUtils.updateLastModified(pluginPreferences);
-                       pluginPreferences.getSession().save();
-                       vm.checkin(pluginPreferences.getPath());
-               } catch (Exception e) {
-                       JcrUtils.discardUnderlyingSessionQuietly(pluginPreferences);
-                       throw new ArgeoException("Cannot save preferences", e);
-               } finally {
-                       IOUtils.closeQuietly(in);
-                       IOUtils.closeQuietly(out);
-               }
-       }
-
-       public void init() {
-               try {
-                       load();
-               } catch (IOException e) {
-                       throw new ArgeoException("Cannot initialize preference store", e);
-               }
-       }
-
-       public void setSession(Session session) {
-               this.session = session;
-       }
-
-       public void setBundleContext(BundleContext bundleContext) {
-               this.bundleContext = bundleContext;
-       }
-
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrUiPlugin.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrUiPlugin.java
deleted file mode 100644 (file)
index 7d2c4d5..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr;
-
-import java.util.ResourceBundle;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-public class JcrUiPlugin extends AbstractUIPlugin {
-       private final static Log log = LogFactory.getLog(JcrUiPlugin.class);
-
-       public final static String ID = "org.argeo.eclipse.ui.jcr";
-
-       private ResourceBundle messages;
-
-       private static JcrUiPlugin plugin;
-
-       public void start(BundleContext context) throws Exception {
-               super.start(context);
-               plugin = this;
-               messages = ResourceBundle.getBundle("org.argeo.eclipse.ui.jcr");
-       }
-
-       public static JcrUiPlugin getDefault() {
-               return plugin;
-       }
-
-       public static ImageDescriptor getImageDescriptor(String path) {
-               return imageDescriptorFromPlugin(ID, path);
-       }
-
-       /** Returns the internationalized label for the given key */
-       public static String getMessage(String key) {
-               try {
-                       return getDefault().messages.getString(key);
-               } catch (NullPointerException npe) {
-                       log.warn(key + " not found.");
-                       return key;
-               }
-       }
-
-       /**
-        * Gives access to the internationalization message bundle. Returns null in
-        * case the ClientUiPlugin is not started (for JUnit tests, by instance)
-        */
-       public static ResourceBundle getMessagesBundle() {
-               if (getDefault() != null)
-                       // To avoid NPE
-                       return getDefault().messages;
-               else
-                       return null;
-       }
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodeElementComparer.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodeElementComparer.java
deleted file mode 100644 (file)
index 16ff444..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*\r
- * Copyright (C) 2007-2012 Mathieu Baudier\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.eclipse.ui.jcr;\r
-\r
-import javax.jcr.Node;\r
-import javax.jcr.RepositoryException;\r
-\r
-import org.argeo.ArgeoException;\r
-import org.eclipse.jface.viewers.IElementComparer;\r
-\r
-/** Element comparer for JCR node, to be used in JFace viewers. */\r
-public class NodeElementComparer implements IElementComparer {\r
-\r
-       public boolean equals(Object a, Object b) {\r
-               try {\r
-                       if ((a instanceof Node) && (b instanceof Node)) {\r
-                               Node nodeA = (Node) a;\r
-                               Node nodeB = (Node) b;\r
-                               return nodeA.getIdentifier().equals(nodeB.getIdentifier());\r
-                       } else {\r
-                               return a.equals(b);\r
-                       }\r
-               } catch (RepositoryException e) {\r
-                       throw new ArgeoException("Cannot compare nodes", e);\r
-               }\r
-       }\r
-\r
-       public int hashCode(Object element) {\r
-               try {\r
-                       if (element instanceof Node)\r
-                               return ((Node) element).getIdentifier().hashCode();\r
-                       return element.hashCode();\r
-               } catch (RepositoryException e) {\r
-                       throw new ArgeoException("Cannot get hash code", e);\r
-               }\r
-       }\r
-\r
-}\r
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodesWrapper.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodesWrapper.java
deleted file mode 100644 (file)
index 25d8d03..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.RepositoryException;
-
-import org.argeo.ArgeoException;
-
-/**
- * Element of tree which is based on a node, but whose children are not
- * necessarily this node children.
- */
-public class NodesWrapper {
-       private final Node node;
-
-       public NodesWrapper(Node node) {
-               super();
-               this.node = node;
-       }
-
-       protected NodeIterator getNodeIterator() throws RepositoryException {
-               return node.getNodes();
-       }
-
-       protected List<WrappedNode> getWrappedNodes() throws RepositoryException {
-               List<WrappedNode> nodes = new ArrayList<WrappedNode>();
-               for (NodeIterator nit = getNodeIterator(); nit.hasNext();)
-                       nodes.add(new WrappedNode(this, nit.nextNode()));
-               return nodes;
-       }
-
-       public Object[] getChildren() {
-               try {
-                       return getWrappedNodes().toArray();
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot get wrapped children", e);
-               }
-       }
-
-       /**
-        * @return true by default because we don't want to compute the wrapped
-        *         nodes twice
-        */
-       public Boolean hasChildren() {
-               return true;
-       }
-
-       public Node getNode() {
-               return node;
-       }
-
-       @Override
-       public int hashCode() {
-               return node.hashCode();
-       }
-
-       @Override
-       public boolean equals(Object obj) {
-               if (obj instanceof NodesWrapper)
-                       return node.equals(((NodesWrapper) obj).getNode());
-               else
-                       return false;
-       }
-
-       public String toString() {
-               return "nodes wrapper based on " + node;
-       }
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/SimpleNodeContentProvider.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/SimpleNodeContentProvider.java
deleted file mode 100644 (file)
index 28e014d..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.argeo.ArgeoException;
-import org.argeo.jcr.JcrUtils;
-
-/** Simple JCR node content provider taking a list of String as base path. */
-public class SimpleNodeContentProvider extends AbstractNodeContentProvider {
-       private final List<String> basePaths;
-       private Boolean mkdirs = false;
-
-       public SimpleNodeContentProvider(Session session, String... basePaths) {
-               this(session, Arrays.asList(basePaths));
-       }
-
-       public SimpleNodeContentProvider(Session session, List<String> basePaths) {
-               super(session);
-               this.basePaths = basePaths;
-       }
-
-       @Override
-       protected Boolean isBasePath(String path) {
-               if (basePaths.contains(path))
-                       return true;
-               return super.isBasePath(path);
-       }
-
-       public Object[] getElements(Object inputElement) {
-               try {
-                       List<Node> baseNodes = new ArrayList<Node>();
-                       for (String basePath : basePaths)
-                               if (mkdirs && !getSession().itemExists(basePath))
-                                       baseNodes.add(JcrUtils.mkdirs(getSession(), basePath));
-                               else
-                                       baseNodes.add(getSession().getNode(basePath));
-                       return baseNodes.toArray();
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot get base nodes for " + basePaths,
-                                       e);
-               }
-       }
-
-       public List<String> getBasePaths() {
-               return basePaths;
-       }
-
-       public void setMkdirs(Boolean mkdirs) {
-               this.mkdirs = mkdirs;
-       }
-
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/WrappedNode.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/WrappedNode.java
deleted file mode 100644 (file)
index 56e940b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr;
-
-import javax.jcr.Node;
-
-/** Wraps a node (created from a {@link NodesWrapper}) */
-public class WrappedNode {
-       private final NodesWrapper parent;
-       private final Node node;
-
-       public WrappedNode(NodesWrapper parent, Node node) {
-               super();
-               this.parent = parent;
-               this.node = node;
-       }
-
-       public NodesWrapper getParent() {
-               return parent;
-       }
-
-       public Node getNode() {
-               return node;
-       }
-
-       public String toString() {
-               return "wrapped " + node;
-       }
-
-       @Override
-       public int hashCode() {
-               return node.hashCode();
-       }
-
-       @Override
-       public boolean equals(Object obj) {
-               if (obj instanceof WrappedNode)
-                       return node.equals(((WrappedNode) obj).getNode());
-               else
-                       return false;
-       }
-
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/AddFileFolder.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/AddFileFolder.java
deleted file mode 100644 (file)
index 42eff5e..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr.commands;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
-
-import org.argeo.eclipse.ui.ErrorFeedback;
-import org.argeo.eclipse.ui.dialogs.SingleValue;
-import org.argeo.eclipse.ui.jcr.JcrUiPlugin;
-import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-/** Adds a node of type nt:folder */
-public class AddFileFolder extends AbstractHandler {
-
-       public Object execute(ExecutionEvent event) throws ExecutionException {
-               ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
-                               .getActivePage().getSelection();
-               AbstractJcrBrowser view = (AbstractJcrBrowser) HandlerUtil
-                               .getActiveWorkbenchWindow(event).getActivePage()
-                               .findView(HandlerUtil.getActivePartId(event));
-               if (selection != null && !selection.isEmpty()
-                               && selection instanceof IStructuredSelection) {
-                       Object obj = ((IStructuredSelection) selection).getFirstElement();
-
-                       if (obj instanceof Node) {
-                               String folderName = SingleValue.ask("Folder name",
-                                               "Enter folder name");
-                               if (folderName != null) {
-                                       Node parentNode = (Node) obj;
-                                       try {
-                                               Node newNode = parentNode.addNode(folderName,
-                                                               NodeType.NT_FOLDER);
-                                               view.nodeAdded(parentNode, newNode);
-                                               parentNode.getSession().save();
-                                       } catch (RepositoryException e) {
-                                               ErrorFeedback.show("Cannot create folder " + folderName
-                                                               + " under " + parentNode, e);
-                                       }
-                               }
-                       } else {
-                               ErrorFeedback.show(JcrUiPlugin
-                                               .getMessage("errorUnvalidNtFolderNodeType"));
-                       }
-               }
-               return null;
-       }
-
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNodes.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNodes.java
deleted file mode 100644 (file)
index 6cde09e..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr.commands;
-
-import java.util.Iterator;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.ErrorFeedback;
-import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-/**
- * Deletes the selected nodes and refresh the corresponding AbstractJcrView.
- * Note that no model specific check is done to see if the node can be removed
- * or not. Extend or override to implement specific behaviour.
- */
-public class DeleteNodes extends AbstractHandler {
-       public final static String ID = "org.argeo.eclipse.ui.jcr.deleteNodes";
-       public final static String DEFAULT_LABEL = "Delete selected nodes";
-
-       public Object execute(ExecutionEvent event) throws ExecutionException {
-               ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
-                               .getActivePage().getSelection();
-               AbstractJcrBrowser view = (AbstractJcrBrowser) HandlerUtil
-                               .getActiveWorkbenchWindow(event).getActivePage()
-                               .findView(HandlerUtil.getActivePartId(event));
-
-               if (selection != null && selection instanceof IStructuredSelection) {
-                       Iterator<?> it = ((IStructuredSelection) selection).iterator();
-                       Object obj = null;
-                       Node ancestor = null;
-                       try {
-                               while (it.hasNext()) {
-                                       obj = it.next();
-                                       if (obj instanceof Node) {
-                                               Node node = (Node) obj;
-                                               Node parentNode = node.getParent();
-                                               node.remove();
-                                               node.getSession().save();
-                                               ancestor = getOlder(ancestor, parentNode);
-                                       }
-                               }
-                               if (ancestor != null)
-                                       view.nodeRemoved(ancestor);
-                       } catch (Exception e) {
-                               ErrorFeedback.show("Cannot delete node " + obj, e);
-                       }
-               }
-               return null;
-       }
-
-       protected Node getOlder(Node A, Node B) {
-               try {
-
-                       if (A == null)
-                               return B == null ? null : B;
-                       // Todo enhanced this method
-                       else
-                               return A.getDepth() <= B.getDepth() ? A : B;
-               } catch (RepositoryException re) {
-                       throw new ArgeoException("Cannot find ancestor", re);
-               }
-       }
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/OpenGenericJcrQueryEditor.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/OpenGenericJcrQueryEditor.java
deleted file mode 100644 (file)
index 20edc8c..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr.commands;
-
-import org.argeo.eclipse.ui.jcr.editors.JcrQueryEditorInput;
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-/** Open a JCR query editor. */
-public class OpenGenericJcrQueryEditor extends AbstractHandler {
-       private String editorId;
-
-       public Object execute(ExecutionEvent event) throws ExecutionException {
-               try {
-                       JcrQueryEditorInput editorInput = new JcrQueryEditorInput("", null);
-                       IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(
-                                       event).getActivePage();
-                       activePage.openEditor(editorInput, editorId);
-               } catch (Exception e) {
-                       throw new ExecutionException("Cannot open editor", e);
-               }
-               return null;
-       }
-
-       public void setEditorId(String editorId) {
-               this.editorId = editorId;
-       }
-
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/Refresh.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/Refresh.java
deleted file mode 100644 (file)
index fdb92bb..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr.commands;
-
-import java.util.Iterator;
-
-import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-/**
- * Call the refresh method of the active AbstractJcrBrowser instance.
- * 
- * Warning: this method only refreshes the viewer, if the model is "stale", e.g.
- * if some changes in the underlying data have not yet been propagated to the
- * model, the view will not display up-to-date information.
- */
-@Deprecated
-public class Refresh extends AbstractHandler {
-
-       public Object execute(ExecutionEvent event) throws ExecutionException {
-               ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
-                               .getActivePage().getSelection();
-               AbstractJcrBrowser view = (AbstractJcrBrowser) HandlerUtil
-                               .getActiveWorkbenchWindow(event).getActivePage()
-                               .findView(HandlerUtil.getActivePartId(event));
-               if (selection != null && selection instanceof IStructuredSelection) {
-                       Iterator<?> it = ((IStructuredSelection) selection).iterator();
-                       while (it.hasNext()) {
-                               Object obj = it.next();
-                               view.refresh(obj);
-                       }
-               }
-               return null;
-       }
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java
deleted file mode 100644 (file)
index f41c7ca..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr.editors;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.query.QueryResult;
-import javax.jcr.query.Row;
-import javax.jcr.query.RowIterator;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.GenericTableComparator;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-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.custom.SashForm;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.part.EditorPart;
-
-/** Executes any JCR query. */
-public abstract class AbstractJcrQueryEditor extends EditorPart {
-       private final static Log log = LogFactory
-                       .getLog(AbstractJcrQueryEditor.class);
-
-       protected String initialQuery;
-       protected String initialQueryType;
-
-       /* DEPENDENCY INJECTION */
-       private Session session;
-
-       // Widgets
-       private TableViewer viewer;
-       private List<TableViewerColumn> tableViewerColumns = new ArrayList<TableViewerColumn>();
-       private GenericTableComparator comparator;
-
-       /** Override to layout a form enabling the end user to build his query */
-       protected abstract void createQueryForm(Composite parent);
-
-       @Override
-       public void init(IEditorSite site, IEditorInput input)
-                       throws PartInitException {
-               JcrQueryEditorInput editorInput = (JcrQueryEditorInput) input;
-               initialQuery = editorInput.getQuery();
-               initialQueryType = editorInput.getQueryType();
-               setSite(site);
-               setInput(editorInput);
-       }
-
-       @Override
-       public final void createPartControl(final Composite parent) {
-               parent.setLayout(new FillLayout());
-
-               SashForm sashForm = new SashForm(parent, SWT.VERTICAL);
-               sashForm.setSashWidth(4);
-               sashForm.setLayout(new FillLayout());
-
-               Composite top = new Composite(sashForm, SWT.NONE);
-               GridLayout gl = new GridLayout(1, false);
-               top.setLayout(gl);
-
-               createQueryForm(top);
-
-               Composite bottom = new Composite(sashForm, SWT.NONE);
-               bottom.setLayout(new GridLayout(1, false));
-               sashForm.setWeights(getWeights());
-
-               viewer = new TableViewer(bottom);
-               viewer.getTable().setLayoutData(
-                               new GridData(SWT.FILL, SWT.FILL, true, true));
-               viewer.getTable().setHeaderVisible(true);
-               viewer.setContentProvider(getQueryResultContentProvider());
-               viewer.setInput(getEditorSite());
-
-               if (getComparator() != null) {
-                       comparator = getComparator();
-                       viewer.setComparator(comparator);
-               }
-               if (getTableDoubleClickListener() != null)
-                       viewer.addDoubleClickListener(getTableDoubleClickListener());
-
-       }
-
-       protected void executeQuery(String statement) {
-               try {
-                       if (log.isDebugEnabled())
-                               log.debug("Query : " + statement);
-
-                       QueryResult qr = session.getWorkspace().getQueryManager()
-                                       .createQuery(statement, initialQueryType).execute();
-
-                       // remove previous columns
-                       for (TableViewerColumn tvc : tableViewerColumns)
-                               tvc.getColumn().dispose();
-
-                       int i = 0;
-                       for (final String columnName : qr.getColumnNames()) {
-                               TableViewerColumn tvc = new TableViewerColumn(viewer, SWT.NONE);
-                               configureColumn(columnName, tvc, i);
-                               tvc.setLabelProvider(getLabelProvider(columnName));
-                               tableViewerColumns.add(tvc);
-                               i++;
-                       }
-
-                       // Must create a local list: QueryResults can only be read once.
-                       try {
-                               List<Row> rows = new ArrayList<Row>();
-                               RowIterator rit = qr.getRows();
-                               while (rit.hasNext()) {
-                                       rows.add(rit.nextRow());
-                               }
-                               viewer.setInput(rows);
-                       } catch (RepositoryException e) {
-                               throw new ArgeoException("Cannot read query result", e);
-                       }
-
-               } catch (RepositoryException e) {
-                       ErrorDialog.openError(null, "Error", "Cannot execute JCR query: "
-                                       + statement, new Status(IStatus.ERROR,
-                                       "org.argeo.eclipse.ui.jcr", e.getMessage()));
-               }
-       }
-
-       /**
-        * To be overidden to adapt size of form and result frames.
-        * 
-        * @return
-        */
-       protected int[] getWeights() {
-               return new int[] { 30, 70 };
-       }
-
-       /**
-        * To be overidden to implement a doubleclick Listener on one of the rows of
-        * the table.
-        * 
-        * @return
-        */
-       protected IDoubleClickListener getTableDoubleClickListener() {
-               return null;
-       }
-
-       /**
-        * To be overiden in order to implement a specific
-        * QueryResultContentProvider
-        */
-       protected IStructuredContentProvider getQueryResultContentProvider() {
-               return new QueryResultContentProvider();
-       }
-
-       /**
-        * Enable specific implementation for columns
-        */
-       protected List<TableViewerColumn> getTableViewerColumns() {
-               return tableViewerColumns;
-       }
-
-       /**
-        * Enable specific implementation for columns
-        */
-       protected TableViewer getTableViewer() {
-               return viewer;
-       }
-
-       /**
-        * To be overridden in order to configure column label providers .
-        */
-       protected ColumnLabelProvider getLabelProvider(final String columnName) {
-               return new ColumnLabelProvider() {
-                       public String getText(Object element) {
-                               Row row = (Row) element;
-                               try {
-                                       return row.getValue(columnName).getString();
-                               } catch (RepositoryException e) {
-                                       throw new ArgeoException("Cannot display row " + row, e);
-                               }
-                       }
-
-                       public Image getImage(Object element) {
-                               return null;
-                       }
-               };
-       }
-
-       /**
-        * To be overridden in order to configure the columns.
-        * 
-        * @deprecated use {@link
-        *             org.argeo.eclipse.ui.jcr.editors.AbstractJcrQueryEditor.
-        *             configureColumn(String jcrColumnName, TableViewerColumn
-        *             column, int columnIndex)} instead
-        */
-       protected void configureColumn(String jcrColumnName,
-                       TableViewerColumn column) {
-               column.getColumn().setWidth(50);
-               column.getColumn().setText(jcrColumnName);
-       }
-
-       /** To be overridden in order to configure the columns. */
-       protected void configureColumn(String jcrColumnName,
-                       TableViewerColumn column, int columnIndex) {
-               column.getColumn().setWidth(50);
-               column.getColumn().setText(jcrColumnName);
-       }
-
-       private class QueryResultContentProvider implements
-                       IStructuredContentProvider {
-
-               public void dispose() {
-               }
-
-               public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-               }
-
-               public Object[] getElements(Object inputElement) {
-
-                       if (inputElement instanceof List)
-                               return ((List<?>) inputElement).toArray();
-
-                       // Never reached might be deleted in future release
-                       if (!(inputElement instanceof QueryResult))
-                               return new String[] {};
-
-                       try {
-                               QueryResult queryResult = (QueryResult) inputElement;
-                               List<Row> rows = new ArrayList<Row>();
-                               RowIterator rit = queryResult.getRows();
-                               while (rit.hasNext()) {
-                                       rows.add(rit.nextRow());
-                               }
-
-                               // List<Node> elems = new ArrayList<Node>();
-                               // NodeIterator nit = queryResult.getNodes();
-                               // while (nit.hasNext()) {
-                               // elems.add(nit.nextNode());
-                               // }
-                               return rows.toArray();
-                       } catch (RepositoryException e) {
-                               throw new ArgeoException("Cannot read query result", e);
-                       }
-               }
-
-       }
-
-       /**
-        * Might be used by children classes to sort columns.
-        * 
-        * @param column
-        * @param index
-        * @return
-        */
-       protected SelectionAdapter getSelectionAdapter(final TableColumn column,
-                       final int index) {
-
-               // A comparator must be define
-               if (comparator == null)
-                       return null;
-
-               SelectionAdapter selectionAdapter = new SelectionAdapter() {
-                       @Override
-                       public void widgetSelected(SelectionEvent e) {
-
-                               try {
-
-                                       comparator.setColumn(index);
-                                       int dir = viewer.getTable().getSortDirection();
-                                       if (viewer.getTable().getSortColumn() == column) {
-                                               dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
-                                       } else {
-
-                                               dir = SWT.DOWN;
-                                       }
-                                       viewer.getTable().setSortDirection(dir);
-                                       viewer.getTable().setSortColumn(column);
-                                       viewer.refresh();
-                               } catch (Exception exc) {
-                                       exc.printStackTrace();
-                               }
-                       }
-               };
-               return selectionAdapter;
-       }
-
-       /**
-        * To be overridden to enable sorting.
-        */
-       protected GenericTableComparator getComparator() {
-               return null;
-       }
-
-       @Override
-       public boolean isDirty() {
-               return false;
-       }
-
-       @Override
-       public void doSave(IProgressMonitor monitor) {
-               // TODO save the query in JCR?
-       }
-
-       @Override
-       public void doSaveAs() {
-       }
-
-       @Override
-       public boolean isSaveAsAllowed() {
-               return false;
-       }
-
-       /** Returns the injected current session */
-       protected Session getSession() {
-               return session;
-       }
-
-       /* DEPENDENCY INJECTION */
-       public void setSession(Session session) {
-               this.session = session;
-       }
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/JcrQueryEditorInput.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/JcrQueryEditorInput.java
deleted file mode 100644 (file)
index 458c212..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr.editors;
-
-import javax.jcr.query.Query;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IPersistableElement;
-
-public class JcrQueryEditorInput implements IEditorInput {
-       private final String query;
-       private final String queryType;
-
-       public JcrQueryEditorInput(String query, String queryType) {
-               this.query = query;
-               if (queryType == null)
-                       this.queryType = Query.JCR_SQL2;
-               else
-                       this.queryType = queryType;
-       }
-
-       public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) {
-               return null;
-       }
-
-       public boolean exists() {
-               return true;
-       }
-
-       public ImageDescriptor getImageDescriptor() {
-               return null;
-       }
-
-       public String getName() {
-               return query;
-       }
-
-       public IPersistableElement getPersistable() {
-               return null;
-       }
-
-       public String getToolTipText() {
-               return query;
-       }
-
-       public String getQuery() {
-               return query;
-       }
-
-       public String getQueryType() {
-               return queryType;
-       }
-
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/NodeEditorInput.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/NodeEditorInput.java
deleted file mode 100644 (file)
index 8a6ee40..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr.editors;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IPersistableElement;
-
-/**
- * A canonical editor input based on a path to a node. In a multirepository
- * environment, path can be enriched with Repository Alias and workspace
- */
-
-public class NodeEditorInput implements IEditorInput {
-       private final String path;
-
-       public NodeEditorInput(String path) {
-               this.path = path;
-       }
-
-       public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) {
-               return null;
-       }
-
-       public boolean exists() {
-               return true;
-       }
-
-       public ImageDescriptor getImageDescriptor() {
-               return null;
-       }
-
-       public String getName() {
-               return path;
-       }
-
-       public IPersistableElement getPersistable() {
-               return null;
-       }
-
-       public String getToolTipText() {
-               return path;
-       }
-
-       public String getPath() {
-               return path;
-       }
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrFileProvider.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrFileProvider.java
deleted file mode 100644 (file)
index 2906197..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr.utils;
-
-import java.io.InputStream;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
-
-import org.apache.commons.io.IOUtils;
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.specific.FileProvider;
-
-/**
- * Implements a FileProvider for UI purposes. Note that it might not be very
- * reliable as long as we have not fixed login & multi repository issues that
- * will be addressed in the next version.
- * 
- * NOTE: id used here is the real id of the JCR Node, not the JCR Path
- * 
- * Relies on common approach for JCR file handling implementation.
- * 
- */
-
-public class JcrFileProvider implements FileProvider {
-
-       // private Object[] rootNodes;
-       private Node refNode;
-
-       /**
-        * Must be set in order for the provider to be able to get current session
-        * and thus have the ability to get the file node corresponding to a given
-        * file ID
-        * 
-        * FIXME : this introduces some concurrences ISSUES.
-        * 
-        * @param repositoryNode
-        */
-       public void setReferenceNode(Node refNode) {
-               this.refNode = refNode;
-       }
-
-       /**
-        * Must be set in order for the provider to be able to search the repository
-        * Provided object might be either JCR Nodes or UI RepositoryNode for the
-        * time being.
-        * 
-        * @param repositoryNode
-        */
-       // public void setRootNodes(Object[] rootNodes) {
-       // List<Object> tmpNodes = new ArrayList<Object>();
-       // for (int i = 0; i < rootNodes.length; i++) {
-       // Object obj = rootNodes[i];
-       // if (obj instanceof Node) {
-       // tmpNodes.add(obj);
-       // } else if (obj instanceof RepositoryRegister) {
-       // RepositoryRegister repositoryRegister = (RepositoryRegister) obj;
-       // Map<String, Repository> repositories = repositoryRegister
-       // .getRepositories();
-       // for (String name : repositories.keySet()) {
-       // // tmpNodes.add(new RepositoryNode(name, repositories
-       // // .get(name)));
-       // }
-       //
-       // }
-       // }
-       // this.rootNodes = tmpNodes.toArray();
-       // }
-
-       public byte[] getByteArrayFileFromId(String fileId) {
-               InputStream fis = null;
-               byte[] ba = null;
-               Node child = getFileNodeFromId(fileId);
-               try {
-                       fis = (InputStream) child.getProperty(Property.JCR_DATA)
-                                       .getBinary().getStream();
-                       ba = IOUtils.toByteArray(fis);
-
-               } catch (Exception e) {
-                       throw new ArgeoException("Stream error while opening file", e);
-               } finally {
-                       IOUtils.closeQuietly(fis);
-               }
-               return ba;
-       }
-
-       public InputStream getInputStreamFromFileId(String fileId) {
-               try {
-                       InputStream fis = null;
-
-                       Node child = getFileNodeFromId(fileId);
-                       fis = (InputStream) child.getProperty(Property.JCR_DATA)
-                                       .getBinary().getStream();
-                       return fis;
-               } catch (RepositoryException re) {
-                       throw new ArgeoException("Cannot get stream from file node for Id "
-                                       + fileId, re);
-               }
-       }
-
-       /**
-        * Throws an exception if the node is not found in the current repository (a
-        * bit like a FileNotFoundException)
-        * 
-        * @param fileId
-        * @return Returns the child node of the nt:file node. It is the child node
-        *         that have the jcr:data property where actual file is stored.
-        *         never null
-        */
-       private Node getFileNodeFromId(String fileId) {
-               try {
-                       Node result = refNode.getSession().getNodeByIdentifier(fileId);
-
-                       // rootNodes: for (int j = 0; j < rootNodes.length; j++) {
-                       // // in case we have a classic JCR Node
-                       // if (rootNodes[j] instanceof Node) {
-                       // Node curNode = (Node) rootNodes[j];
-                       // if (result != null)
-                       // break rootNodes;
-                       // } // Case of a repository Node
-                       // else if (rootNodes[j] instanceof RepositoryNode) {
-                       // Object[] nodes = ((RepositoryNode) rootNodes[j])
-                       // .getChildren();
-                       // for (int i = 0; i < nodes.length; i++) {
-                       // Node node = (Node) nodes[i];
-                       // result = node.getSession().getNodeByIdentifier(fileId);
-                       // if (result != null)
-                       // break rootNodes;
-                       // }
-                       // }
-                       // }
-
-                       // Sanity checks
-                       if (result == null)
-                               throw new ArgeoException("File node not found for ID" + fileId);
-
-                       // Ensure that the node have the correct type.
-                       if (!result.isNodeType(NodeType.NT_FILE))
-                               throw new ArgeoException(
-                                               "Cannot open file children Node that are not of '"
-                                                               + NodeType.NT_RESOURCE + "' type.");
-
-                       // Get the usefull part of the Node
-                       Node child = result.getNodes().nextNode();
-                       if (child == null || !child.isNodeType(NodeType.NT_RESOURCE))
-                               throw new ArgeoException(
-                                               "ERROR: IN the current implemented model, '"
-                                                               + NodeType.NT_FILE
-                                                               + "' file node must have one and only one child of the nt:ressource, where actual data is stored");
-                       return child;
-
-               } catch (RepositoryException re) {
-                       throw new ArgeoException("Erreur while getting file node of ID "
-                                       + fileId, re);
-               }
-       }
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java
deleted file mode 100644 (file)
index 3c18572..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr.utils;
-
-import java.util.Comparator;
-
-import javax.jcr.Item;
-import javax.jcr.RepositoryException;
-
-import org.argeo.ArgeoException;
-
-/** Compares two JCR items (node or properties) based on their names. */
-public class JcrItemsComparator implements Comparator<Item> {
-       public int compare(Item o1, Item o2) {
-               try {
-                       // TODO: put folder before files
-                       return o1.getName().compareTo(o2.getName());
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot compare " + o1 + " and " + o2, e);
-               }
-       }
-
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/NodeViewerComparer.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/NodeViewerComparer.java
deleted file mode 100644 (file)
index 4e627b0..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr.utils;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.argeo.ArgeoException;
-import org.eclipse.jface.viewers.IElementComparer;
-
-/** Compare JCR nodes based on their JCR identifiers, for use in JFace viewers. */
-public class NodeViewerComparer implements IElementComparer {
-
-       // force comparison on Node IDs only.
-       public boolean equals(Object elementA, Object elementB) {
-               if (!(elementA instanceof Node) || !(elementB instanceof Node)) {
-                       return elementA == null ? elementB == null : elementA
-                                       .equals(elementB);
-               } else {
-
-                       boolean result = false;
-                       try {
-                               String idA = ((Node) elementA).getIdentifier();
-                               String idB = ((Node) elementB).getIdentifier();
-                               result = idA == null ? idB == null : idA.equals(idB);
-                       } catch (RepositoryException re) {
-                               throw new ArgeoException("cannot compare nodes", re);
-                       }
-
-                       return result;
-               }
-       }
-
-       public int hashCode(Object element) {
-               // TODO enhanced this method.
-               return element.getClass().toString().hashCode();
-       }
-}
\ No newline at end of file
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/SingleSessionFileProvider.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/SingleSessionFileProvider.java
deleted file mode 100644 (file)
index eb1d961..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr.utils;
-
-import java.io.InputStream;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.nodetype.NodeType;
-
-import org.apache.commons.io.IOUtils;
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.specific.FileProvider;
-
-/**
- * Implements a FileProvider for UI purposes. Unlike the
- * <code> JcrFileProvider </code>, it relies on a single session and manages
- * nodes with path only.
- * 
- * Note that considered id is the JCR path
- * 
- * Relies on common approach for JCR file handling implementation.
- * 
- * @author bsinou
- * 
- */
-
-public class SingleSessionFileProvider implements FileProvider {
-
-       private Session session;
-
-       public SingleSessionFileProvider(Session session) {
-               this.session = session;
-       }
-
-       public byte[] getByteArrayFileFromId(String fileId) {
-               InputStream fis = null;
-               byte[] ba = null;
-               Node child = getFileNodeFromId(fileId);
-               try {
-                       fis = (InputStream) child.getProperty(Property.JCR_DATA)
-                                       .getBinary().getStream();
-                       ba = IOUtils.toByteArray(fis);
-
-               } catch (Exception e) {
-                       throw new ArgeoException("Stream error while opening file", e);
-               } finally {
-                       IOUtils.closeQuietly(fis);
-               }
-               return ba;
-       }
-
-       public InputStream getInputStreamFromFileId(String fileId) {
-               try {
-                       InputStream fis = null;
-
-                       Node child = getFileNodeFromId(fileId);
-                       fis = (InputStream) child.getProperty(Property.JCR_DATA)
-                                       .getBinary().getStream();
-                       return fis;
-               } catch (RepositoryException re) {
-                       throw new ArgeoException("Cannot get stream from file node for Id "
-                                       + fileId, re);
-               }
-       }
-
-       /**
-        * 
-        * @param fileId
-        * @return Returns the child node of the nt:file node. It is the child node
-        *         that have the jcr:data property where actual file is stored.
-        *         never null
-        */
-       private Node getFileNodeFromId(String fileId) {
-               try {
-                       Node result = null;
-                       result = session.getNode(fileId);
-
-                       // Sanity checks
-                       if (result == null)
-                               throw new ArgeoException("File node not found for ID" + fileId);
-
-                       // Ensure that the node have the correct type.
-                       if (!result.isNodeType(NodeType.NT_FILE))
-                               throw new ArgeoException(
-                                               "Cannot open file children Node that are not of "
-                                                               + NodeType.NT_RESOURCE + " type.");
-
-                       Node child = result.getNodes().nextNode();
-                       if (child == null || !child.isNodeType(NodeType.NT_RESOURCE))
-                               throw new ArgeoException(
-                                               "ERROR: IN the current implemented model, "
-                                                               + NodeType.NT_FILE
-                                                               + "  file node must have one and only one child of the nt:ressource, where actual data is stored");
-                       return child;
-               } catch (RepositoryException re) {
-                       throw new ArgeoException("Erreur while getting file node of ID "
-                                       + fileId, re);
-               }
-       }
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java
deleted file mode 100644 (file)
index 90ed7fc..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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.eclipse.ui.jcr.views;
-
-import javax.jcr.Node;
-
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.part.ViewPart;
-
-public abstract class AbstractJcrBrowser extends ViewPart {
-
-       @Override
-       public abstract void createPartControl(Composite parent);
-
-       /**
-        * To be overridden to adapt size of form and result frames.
-        */
-       abstract protected int[] getWeights();
-
-       /**
-        * To be overridden to provide an adapted size nodeViewer
-        */
-       abstract protected TreeViewer createNodeViewer(Composite parent,
-                       ITreeContentProvider nodeContentProvider);
-
-       /**
-        * To be overridden to retrieve the current nodeViewer
-        */
-       abstract protected TreeViewer getNodeViewer();
-
-       /*
-        * Enables the refresh of the tree.
-        */
-       @Override
-       public void setFocus() {
-               getNodeViewer().getTree().setFocus();
-       }
-
-       public void refresh(Object obj) {
-               // getNodeViewer().update(obj, null);
-               getNodeViewer().refresh(obj);
-               // getNodeViewer().expandToLevel(obj, 1);
-       }
-
-       public void nodeAdded(Node parentNode, Node newNode) {
-               getNodeViewer().refresh(parentNode);
-               getNodeViewer().expandToLevel(newNode, 0);
-       }
-
-       public void nodeRemoved(Node parentNode) {
-               IStructuredSelection newSel = new StructuredSelection(parentNode);
-               getNodeViewer().setSelection(newSel, true);
-               // Force refresh
-               IStructuredSelection tmpSel = (IStructuredSelection) getNodeViewer()
-                               .getSelection();
-               getNodeViewer().refresh(tmpSel.getFirstElement());
-       }
-}
diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/resources/org/argeo/eclipse/ui/jcr/messages.properties b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/resources/org/argeo/eclipse/ui/jcr/messages.properties
deleted file mode 100644 (file)
index a24aa38..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-## English labels for Agreo base JCR UI application 
-
-## Generic labels 
-
-## Errors
-errorUnvalidNtFolderNodeType= Error: folder can only be created on a Jcr Node
-