+/*
+ * 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
*
* Relies on common approach for JCR file handling implementation.
*
- * @author bsinou
- *
*/
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
*
* @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;
*/
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)