]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrFileProvider.java
Update license headers
[lgpl/argeo-commons.git] / eclipse / runtime / org.argeo.eclipse.ui.jcr / src / main / java / org / argeo / eclipse / ui / jcr / utils / JcrFileProvider.java
index 94cb80992702fadd18c31084ca0f5dc3cf46cb43..2906197f2d3a78c78b843f22a812da1d404fbdcb 100644 (file)
@@ -1,21 +1,30 @@
+/*
+ * 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 java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
 
 import javax.jcr.Node;
 import javax.jcr.Property;
-import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.nodetype.NodeType;
 
 import org.apache.commons.io.IOUtils;
 import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.jcr.browser.RepositoryNode;
 import org.argeo.eclipse.ui.specific.FileProvider;
-import org.argeo.jcr.RepositoryRegister;
 
 /**
  * Implements a FileProvider for UI purposes. Note that it might not be very
@@ -30,7 +39,21 @@ import org.argeo.jcr.RepositoryRegister;
 
 public class JcrFileProvider implements FileProvider {
 
-       private Object[] rootNodes;
+       // 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
@@ -39,25 +62,25 @@ public class JcrFileProvider implements FileProvider {
         * 
         * @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 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;
@@ -101,27 +124,26 @@ public class JcrFileProvider implements FileProvider {
         */
        private Node getFileNodeFromId(String fileId) {
                try {
-                       Node result = null;
-
-                       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];
-                                       result = curNode.getSession().getNodeByIdentifier(fileId);
-                                       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;
-                                       }
-                               }
-                       }
+                       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)