From 7dade07e711b6731b9e53d32a6af20735db772c9 Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Tue, 6 Sep 2011 10:07:27 +0000 Subject: [PATCH] Jcr Explorer refactoring and packaging git-svn-id: https://svn.argeo.org/commons/trunk@4720 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../ui/jcr/browser/HomeContentProvider.java | 14 - .../ui/jcr/browser/ItemComparator.java | 20 -- .../ui/jcr/browser/NodeContentProvider.java | 132 -------- .../ui/jcr/browser/NodeLabelProvider.java | 52 ---- .../browser/PropertiesContentProvider.java | 40 --- .../ui/jcr/browser/RepositoryNode.java | 49 --- .../eclipse/ui/jcr/browser/WorkspaceNode.java | 107 ------- .../eclipse/ui/jcr/commands/EditNode.java | 54 ---- .../ui/jcr/commands/ImportFileSystem.java | 54 ---- .../commands/OpenGenericJcrQueryEditor.java | 30 -- .../ui/jcr/dialogs/ChooseNameDialog.java | 52 ---- .../ui/jcr/editors/GenericJcrQueryEditor.java | 41 --- .../ui/jcr/editors/NodeEditorInput.java | 7 +- .../eclipse/ui/jcr/utils/JcrFileProvider.java | 150 --------- .../ui/jcr/views/GenericJcrBrowser.java | 290 ------------------ .../jcr/wizards/ImportFileSystemWizard.java | 220 ------------- 16 files changed, 5 insertions(+), 1307 deletions(-) delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/HomeContentProvider.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/ItemComparator.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/NodeContentProvider.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/NodeLabelProvider.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/PropertiesContentProvider.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/RepositoryNode.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/WorkspaceNode.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/EditNode.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/ImportFileSystem.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/OpenGenericJcrQueryEditor.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/dialogs/ChooseNameDialog.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/GenericJcrQueryEditor.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrFileProvider.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java delete mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/wizards/ImportFileSystemWizard.java diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/HomeContentProvider.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/HomeContentProvider.java deleted file mode 100644 index b3577a2bf..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/HomeContentProvider.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.argeo.eclipse.ui.jcr.browser; - -import javax.jcr.Session; - -import org.argeo.eclipse.ui.jcr.SimpleNodeContentProvider; -import org.argeo.jcr.JcrUtils; - -public class HomeContentProvider extends SimpleNodeContentProvider { - - public HomeContentProvider(Session session) { - super(session, new String[] { JcrUtils.getUserHomePath(session) }); - } - -} diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/ItemComparator.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/ItemComparator.java deleted file mode 100644 index 20519377b..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/ItemComparator.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.argeo.eclipse.ui.jcr.browser; - -import java.util.Comparator; - -import javax.jcr.Item; -import javax.jcr.RepositoryException; - -import org.argeo.ArgeoException; - -public class ItemComparator implements Comparator { - 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/browser/NodeContentProvider.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/NodeContentProvider.java deleted file mode 100644 index bab3c95b0..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/NodeContentProvider.java +++ /dev/null @@ -1,132 +0,0 @@ -package org.argeo.eclipse.ui.jcr.browser; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.ArgeoException; -import org.argeo.jcr.JcrUtils; -import org.argeo.jcr.RepositoryRegister; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.Viewer; - -public class NodeContentProvider implements ITreeContentProvider { - private ItemComparator itemComparator = new ItemComparator(); - - private RepositoryRegister repositoryRegister; - private Session userSession; - - public NodeContentProvider(Session userSession, - RepositoryRegister repositoryRegister) { - this.userSession = userSession; - this.repositoryRegister = repositoryRegister; - } - - /** - * Sends back the first level of the Tree. Independent from inputElement - * that can be null - */ - public Object[] getElements(Object inputElement) { - List objs = new ArrayList(); - if (userSession != null) { - Node userHome = JcrUtils.getUserHome(userSession); - if (userHome != null) - objs.add(userHome); - } - if (repositoryRegister != null) - objs.add(repositoryRegister); - return objs.toArray(); - } - - public Object[] getChildren(Object parentElement) { - if (parentElement instanceof Node) { - return childrenNodes((Node) parentElement); - } else if (parentElement instanceof RepositoryNode) { - return ((RepositoryNode) parentElement).getChildren(); - } else if (parentElement instanceof WorkspaceNode) { - Session session = ((WorkspaceNode) parentElement).getSession(); - if (session == null) - return new Object[0]; - - try { - return childrenNodes(session.getRootNode()); - } catch (RepositoryException e) { - throw new ArgeoException("Cannot retrieve root node of " - + session, e); - } - } else if (parentElement instanceof RepositoryRegister) { - RepositoryRegister repositoryRegister = (RepositoryRegister) parentElement; - List nodes = new ArrayList(); - Map repositories = repositoryRegister - .getRepositories(); - for (String name : repositories.keySet()) { - nodes.add(new RepositoryNode(name, repositories.get(name))); - } - return nodes.toArray(); - } else { - return new Object[0]; - } - } - - public Object getParent(Object element) { - try { - if (element instanceof Node) { - Node node = (Node) element; - if (!node.getPath().equals("/")) - return node.getParent(); - else - return null; - } - return null; - } catch (RepositoryException e) { - return null; - } - } - - public boolean hasChildren(Object element) { - try { - if (element instanceof Node) { - return ((Node) element).hasNodes(); - } else if (element instanceof RepositoryNode) { - return ((RepositoryNode) element).hasChildren(); - } else if (element instanceof WorkspaceNode) { - return ((WorkspaceNode) element).getSession() != null; - } else if (element instanceof RepositoryRegister) { - return ((RepositoryRegister) element).getRepositories().size() > 0; - } - return false; - } catch (RepositoryException e) { - throw new ArgeoException("Cannot check children of " + element, e); - } - } - - public void dispose() { - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - protected Object[] childrenNodes(Node parentNode) { - try { - List children = new ArrayList(); - NodeIterator nit = parentNode.getNodes(); - while (nit.hasNext()) { - Node node = nit.nextNode(); - children.add(node); - } - Node[] arr = children.toArray(new Node[children.size()]); - Arrays.sort(arr, itemComparator); - return arr; - } catch (RepositoryException e) { - throw new ArgeoException("Cannot list children of " + parentNode, e); - } - } - -} diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/NodeLabelProvider.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/NodeLabelProvider.java deleted file mode 100644 index 099231995..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/NodeLabelProvider.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.argeo.eclipse.ui.jcr.browser; - -import javax.jcr.Node; -import javax.jcr.RepositoryException; -import javax.jcr.nodetype.NodeType; - -import org.argeo.eclipse.ui.jcr.DefaultNodeLabelProvider; -import org.argeo.eclipse.ui.jcr.JcrUiPlugin; -import org.argeo.jcr.RepositoryRegister; -import org.eclipse.swt.graphics.Image; - -public class NodeLabelProvider extends DefaultNodeLabelProvider { - // Images - public final static Image REPOSITORIES = JcrUiPlugin.getImageDescriptor( - "icons/repositories.gif").createImage(); - - public String getText(Object element) { - if (element instanceof RepositoryRegister) { - return "Repositories"; - } - return super.getText(element); - } - - protected String getText(Node node) throws RepositoryException { - String label = node.getName(); - StringBuffer mixins = new StringBuffer(""); - for (NodeType type : node.getMixinNodeTypes()) - mixins.append(' ').append(type.getName()); - - return label + " [" + node.getPrimaryNodeType().getName() + mixins - + "]"; - } - - @Override - public Image getImage(Object element) { - if (element instanceof RepositoryNode) { - if (((RepositoryNode) element).getDefaultSession() == null) - return RepositoryNode.REPOSITORY_DISCONNECTED; - else - return RepositoryNode.REPOSITORY_CONNECTED; - } else if (element instanceof WorkspaceNode) { - if (((WorkspaceNode) element).getSession() == null) - return WorkspaceNode.WORKSPACE_DISCONNECTED; - else - return WorkspaceNode.WORKSPACE_CONNECTED; - } else if (element instanceof RepositoryRegister) { - return REPOSITORIES; - } - return super.getImage(element); - } - -} diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/PropertiesContentProvider.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/PropertiesContentProvider.java deleted file mode 100644 index 68f6fdc77..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/PropertiesContentProvider.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.argeo.eclipse.ui.jcr.browser; - -import java.util.Set; -import java.util.TreeSet; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.PropertyIterator; -import javax.jcr.RepositoryException; - -import org.argeo.ArgeoException; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.Viewer; - -public class PropertiesContentProvider implements IStructuredContentProvider { - private ItemComparator itemComparator = new ItemComparator(); - - public void dispose() { - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - public Object[] getElements(Object inputElement) { - try { - if (inputElement instanceof Node) { - Set props = new TreeSet(itemComparator); - PropertyIterator pit = ((Node) inputElement).getProperties(); - while (pit.hasNext()) - props.add(pit.nextProperty()); - return props.toArray(); - } - return new Object[] {}; - } catch (RepositoryException e) { - throw new ArgeoException("Cannot get element for " + inputElement, - e); - } - } - -} diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/RepositoryNode.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/RepositoryNode.java deleted file mode 100644 index 7158c749b..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/RepositoryNode.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.argeo.eclipse.ui.jcr.browser; - -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.ArgeoException; -import org.argeo.eclipse.ui.TreeParent; -import org.argeo.eclipse.ui.jcr.JcrUiPlugin; -import org.eclipse.swt.graphics.Image; - -public class RepositoryNode extends TreeParent { - private final String name; - private final Repository repository; - private Session defaultSession = null; - 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 RepositoryNode(String name, Repository repository) { - super(name); - this.name = name; - this.repository = repository; - } - - public void login() { - try { - defaultSession = repository.login(); - String[] wkpNames = defaultSession.getWorkspace() - .getAccessibleWorkspaceNames(); - for (String wkpName : wkpNames) { - if (wkpName.equals(defaultSession.getWorkspace().getName())) - addChild(new WorkspaceNode(repository, wkpName, - defaultSession)); - else - addChild(new WorkspaceNode(repository, wkpName)); - } - } catch (RepositoryException e) { - throw new ArgeoException("Cannot connect to repository " + name, e); - } - } - - public Session getDefaultSession() { - return defaultSession; - } - -} diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/WorkspaceNode.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/WorkspaceNode.java deleted file mode 100644 index 7621d37a0..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/browser/WorkspaceNode.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.argeo.eclipse.ui.jcr.browser; - -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.observation.EventIterator; -import javax.jcr.observation.EventListener; - -import org.argeo.ArgeoException; -import org.argeo.eclipse.ui.TreeParent; -import org.argeo.eclipse.ui.jcr.JcrUiPlugin; -import org.eclipse.swt.graphics.Image; - -public class WorkspaceNode extends TreeParent implements EventListener { - private final String name; - private final Repository repository; - private Session session = null; - 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(); - - public WorkspaceNode(Repository repository, String name) { - this(repository, name, null); - } - - public WorkspaceNode(Repository repository, String name, Session session) { - super(name); - this.name = name; - this.repository = repository; - this.session = session; - if (session != null) - processNewSession(session); - } - - public Session getSession() { - return session; - } - - public void login() { - try { - logout(); - session = repository.login(name); - processNewSession(session); - } catch (RepositoryException e) { - throw new ArgeoException("Cannot connect to repository " + name, e); - } - } - - public void logout() { - try { - if (session != null && session.isLive()) { - session.getWorkspace().getObservationManager() - .removeEventListener(this); - session.logout(); - } - } catch (RepositoryException e) { - throw new ArgeoException("Cannot connect to repository " + name, e); - } - } - - public void onEvent(final EventIterator events) { - // if (session == null) - // return; - // Display.getDefault().syncExec(new Runnable() { - // public void run() { - // while (events.hasNext()) { - // Event event = events.nextEvent(); - // try { - // String path = event.getPath(); - // String parentPath = path.substring(0, - // path.lastIndexOf('/')); - // final Object parent; - // if (parentPath.equals("/") || parentPath.equals("")) - // parent = this; - // else if (session.itemExists(parentPath)){ - // parent = session.getItem(parentPath); - // ((Item)parent).refresh(false); - // } - // else - // parent = null; - // if (parent != null) { - // nodesViewer.refresh(parent); - // } - // - // } catch (RepositoryException e) { - // log.warn("Error processing event " + event, e); - // } - // } - // } - // }); - } - - protected void processNewSession(Session session) { - // try { - // ObservationManager observationManager = session.getWorkspace() - // .getObservationManager(); - // observationManager.addEventListener(this, Event.NODE_ADDED - // | Event.NODE_REMOVED, "/", true, null, null, false); - // } catch (RepositoryException e) { - // throw new ArgeoException("Cannot process new session " - // + session, e); - // } - } - -} diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/EditNode.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/EditNode.java deleted file mode 100644 index 8d0e87dea..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/EditNode.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.argeo.eclipse.ui.jcr.commands; - -import java.util.HashMap; -import java.util.Map; - -import javax.jcr.Property; -import javax.jcr.nodetype.NodeType; - -import org.argeo.eclipse.ui.dialogs.Error; -import org.argeo.eclipse.ui.jcr.editors.NodeEditorInput; -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.handlers.HandlerUtil; - -/** Generic command to open a path in an editor. */ -public class EditNode extends AbstractHandler { - public final static String EDITOR_PARAM = "editor"; - - private String defaultEditorId; - - private Map nodeTypeToEditor = new HashMap(); - - public Object execute(ExecutionEvent event) throws ExecutionException { - String path = event.getParameter(Property.JCR_PATH); - - String type = event.getParameter(NodeType.NT_NODE_TYPE); - if (type == null) - type = NodeType.NT_UNSTRUCTURED; - - String editorId = event.getParameter(NodeType.NT_NODE_TYPE); - if (editorId == null) - editorId = nodeTypeToEditor.containsKey(type) ? nodeTypeToEditor - .get(type) : defaultEditorId; - - NodeEditorInput nei = new NodeEditorInput(path); - - try { - HandlerUtil.getActiveWorkbenchWindow(event).getActivePage() - .openEditor(nei, editorId); - } catch (PartInitException e) { - Error.show("Cannot open " + editorId + " with " + path - + " of type " + type, e); - } - // TODO Auto-generated method stub - return null; - } - - public void setDefaultEditorId(String defaultEditorId) { - this.defaultEditorId = defaultEditorId; - } - -} diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/ImportFileSystem.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/ImportFileSystem.java deleted file mode 100644 index 1dbcfb523..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/ImportFileSystem.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.argeo.eclipse.ui.jcr.commands; - -import javax.jcr.Node; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.eclipse.ui.dialogs.Error; -import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser; -import org.argeo.eclipse.ui.jcr.wizards.ImportFileSystemWizard; -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.jface.wizard.WizardDialog; -import org.eclipse.ui.handlers.HandlerUtil; - -public class ImportFileSystem extends AbstractHandler { - private static Log log = LogFactory.getLog(ImportFileSystem.class); - - 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(); - try { - if (obj instanceof Node) { - Node folder = (Node) obj; - // if (!folder.getPrimaryNodeType().getName() - // .equals(NodeType.NT_FOLDER)) { - // Error.show("Can only import to a folder node"); - // return null; - // } - ImportFileSystemWizard wizard = new ImportFileSystemWizard( - folder); - WizardDialog dialog = new WizardDialog( - HandlerUtil.getActiveShell(event), wizard); - dialog.open(); - view.refresh(folder); - } else { - Error.show("Can only import to a node"); - } - } catch (Exception e) { - Error.show("Cannot import files to " + obj, e); - } - } - return null; - } - -} 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 index 116974706..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/OpenGenericJcrQueryEditor.java +++ /dev/null @@ -1,30 +0,0 @@ -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/dialogs/ChooseNameDialog.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/dialogs/ChooseNameDialog.java deleted file mode 100644 index 267e51e3e..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/dialogs/ChooseNameDialog.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.argeo.eclipse.ui.jcr.dialogs; - -import org.eclipse.jface.dialogs.IMessageProvider; -import org.eclipse.jface.dialogs.TitleAreaDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; - -/** Dialog to change the current user password */ -public class ChooseNameDialog extends TitleAreaDialog { - private Text nameT; - - public ChooseNameDialog(Shell parentShell) { - super(parentShell); - setTitle("Choose name"); - } - - protected Point getInitialSize() { - return new Point(300, 250); - } - - protected Control createDialogArea(Composite parent) { - Composite dialogarea = (Composite) super.createDialogArea(parent); - dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - Composite composite = new Composite(dialogarea, SWT.NONE); - composite.setLayout(new GridLayout(2, false)); - composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - nameT = createLT(composite, "Name"); - - setMessage("Choose name", IMessageProvider.INFORMATION); - parent.pack(); - return composite; - } - - /** Creates label and text. */ - protected Text createLT(Composite parent, String label) { - new Label(parent, SWT.NONE).setText(label); - Text text = new Text(parent, SWT.SINGLE | SWT.LEAD | SWT.BORDER); - text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - return text; - } - - public String getName() { - return nameT.getText(); - } -} diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/GenericJcrQueryEditor.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/GenericJcrQueryEditor.java deleted file mode 100644 index a02268b7d..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/GenericJcrQueryEditor.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.argeo.eclipse.ui.jcr.editors; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Text; - -/** Executes any JCR query. */ -public class GenericJcrQueryEditor extends AbstractJcrQueryEditor { - private Text queryField; - - @Override - public void createQueryForm(Composite parent) { - parent.setLayout(new GridLayout(1, false)); - - queryField = new Text(parent, SWT.BORDER | SWT.MULTI | SWT.WRAP); - queryField.setText(initialQuery); - queryField.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - Button execute = new Button(parent, SWT.PUSH); - execute.setText("Execute"); - - Listener executeListener = new Listener() { - public void handleEvent(Event event) { - executeQuery(queryField.getText()); - } - }; - - execute.addListener(SWT.Selection, executeListener); - // queryField.addListener(SWT.DefaultSelection, executeListener); - } - - @Override - public void setFocus() { - queryField.setFocus(); - } -} 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 index 737613550..4b53c096e 100644 --- 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 @@ -4,7 +4,11 @@ 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. */ +/** + * 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; @@ -39,5 +43,4 @@ public class NodeEditorInput implements IEditorInput { 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 index 94cb80992..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrFileProvider.java +++ /dev/null @@ -1,150 +0,0 @@ -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 - * 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; - - /** - * 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 tmpNodes = new ArrayList(); - 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 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 = 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; - } - } - } - - // 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/views/GenericJcrBrowser.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java deleted file mode 100644 index 7d853f4ba..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java +++ /dev/null @@ -1,290 +0,0 @@ -package org.argeo.eclipse.ui.jcr.views; - -import java.util.Arrays; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.PropertyType; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.nodetype.NodeType; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.ArgeoException; -import org.argeo.eclipse.ui.jcr.browser.NodeContentProvider; -import org.argeo.eclipse.ui.jcr.browser.NodeLabelProvider; -import org.argeo.eclipse.ui.jcr.browser.PropertiesContentProvider; -import org.argeo.eclipse.ui.jcr.browser.RepositoryNode; -import org.argeo.eclipse.ui.jcr.browser.WorkspaceNode; -import org.argeo.eclipse.ui.jcr.utils.JcrFileProvider; -import org.argeo.eclipse.ui.jcr.utils.NodeViewerComparer; -import org.argeo.eclipse.ui.specific.FileHandler; -import org.argeo.jcr.ArgeoJcrConstants; -import org.argeo.jcr.JcrUtils; -import org.argeo.jcr.RepositoryRegister; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.viewers.ColumnLabelProvider; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.TableViewerColumn; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.SashForm; -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.Menu; - -public class GenericJcrBrowser extends AbstractJcrBrowser { - private final static Log log = LogFactory.getLog(GenericJcrBrowser.class); - - /** DEPENDENCY INJECTION **/ - private Session session; - private RepositoryRegister repositoryRegister; - - private TreeViewer nodesViewer; - private NodeContentProvider nodeContentProvider; - private TableViewer propertiesViewer; - - private JcrFileProvider jcrFileProvider; - private FileHandler fileHandler; - - @Override - public void createPartControl(Composite parent) { - - // look for session - Session nodeSession = session; - if (nodeSession == null) { - Repository nodeRepository = JcrUtils.getRepositoryByAlias( - repositoryRegister, ArgeoJcrConstants.ALIAS_NODE); - if (nodeRepository != null) - try { - nodeSession = nodeRepository.login(); - } catch (RepositoryException e1) { - throw new ArgeoException("Cannot login to node repository"); - } - } - - // Instantiate the generic object that fits for - // both RCP & RAP - // Note that in RAP, it registers a service handler that provide the - // access to the files. - jcrFileProvider = new JcrFileProvider(); - fileHandler = new FileHandler(jcrFileProvider); - - parent.setLayout(new FillLayout()); - SashForm sashForm = new SashForm(parent, SWT.VERTICAL); - sashForm.setSashWidth(4); - sashForm.setLayout(new FillLayout()); - - // Create the tree on top of the view - Composite top = new Composite(sashForm, SWT.NONE); - GridLayout gl = new GridLayout(1, false); - top.setLayout(gl); - - nodeContentProvider = new NodeContentProvider(nodeSession, - repositoryRegister); - - // nodes viewer - nodesViewer = createNodeViewer(top, nodeContentProvider); - - // context menu - MenuManager menuManager = new MenuManager(); - Menu menu = menuManager.createContextMenu(nodesViewer.getTree()); - nodesViewer.getTree().setMenu(menu); - getSite().registerContextMenu(menuManager, nodesViewer); - getSite().setSelectionProvider(nodesViewer); - nodesViewer.setInput(getViewSite()); - - // Create the property viewer on the bottom - Composite bottom = new Composite(sashForm, SWT.NONE); - bottom.setLayout(new GridLayout(1, false)); - propertiesViewer = new TableViewer(bottom); - propertiesViewer.getTable().setLayoutData( - new GridData(SWT.FILL, SWT.FILL, true, true)); - propertiesViewer.getTable().setHeaderVisible(true); - propertiesViewer.setContentProvider(new PropertiesContentProvider()); - TableViewerColumn col = new TableViewerColumn(propertiesViewer, - SWT.NONE); - col.getColumn().setText("Name"); - col.getColumn().setWidth(200); - col.setLabelProvider(new ColumnLabelProvider() { - public String getText(Object element) { - try { - return ((Property) element).getName(); - } catch (RepositoryException e) { - throw new ArgeoException( - "Unexpected exception in label provider", e); - } - } - }); - col = new TableViewerColumn(propertiesViewer, SWT.NONE); - col.getColumn().setText("Value"); - col.getColumn().setWidth(400); - col.setLabelProvider(new ColumnLabelProvider() { - public String getText(Object element) { - try { - Property property = (Property) element; - if (property.getType() == PropertyType.BINARY) - return ""; - else if (property.isMultiple()) - return Arrays.asList(property.getValues()).toString(); - else - return property.getValue().getString(); - } catch (RepositoryException e) { - throw new ArgeoException( - "Unexpected exception in label provider", e); - } - } - }); - col = new TableViewerColumn(propertiesViewer, SWT.NONE); - col.getColumn().setText("Type"); - col.getColumn().setWidth(200); - col.setLabelProvider(new ColumnLabelProvider() { - public String getText(Object element) { - try { - return PropertyType.nameFromValue(((Property) element) - .getType()); - } catch (RepositoryException e) { - throw new ArgeoException( - "Unexpected exception in label provider", e); - } - } - }); - propertiesViewer.setInput(getViewSite()); - - sashForm.setWeights(getWeights()); - nodesViewer.setComparer(new NodeViewerComparer()); - } - - /** - * To be overridden to adapt size of form and result frames. - */ - protected int[] getWeights() { - return new int[] { 70, 30 }; - } - - // @Override - // public void setFocus() { - // nodesViewer.getTree().setFocus(); - // } - // - // /* - // * NOTIFICATION - // */ - // public void refresh(Object obj) { - // nodesViewer.refresh(obj); - // } - // - // public void nodeAdded(Node parentNode, Node newNode) { - // nodesViewer.refresh(parentNode); - // nodesViewer.expandToLevel(newNode, 0); - // } - // - // public void nodeRemoved(Node parentNode) { - // - // IStructuredSelection newSel = new StructuredSelection(parentNode); - // nodesViewer.setSelection(newSel, true); - // // Force refresh - // IStructuredSelection tmpSel = (IStructuredSelection) nodesViewer - // .getSelection(); - // nodesViewer.refresh(tmpSel.getFirstElement()); - // } - - private JcrFileProvider getJcrFileProvider() { - return jcrFileProvider; - } - - private FileHandler getFileHandler() { - return fileHandler; - } - - protected TreeViewer createNodeViewer(Composite parent, - final ITreeContentProvider nodeContentProvider) { - - final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.MULTI); - - tmpNodeViewer.getTree().setLayoutData( - new GridData(SWT.FILL, SWT.FILL, true, true)); - - tmpNodeViewer.setContentProvider(nodeContentProvider); - tmpNodeViewer.setLabelProvider(new NodeLabelProvider()); - tmpNodeViewer - .addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - if (!event.getSelection().isEmpty()) { - IStructuredSelection sel = (IStructuredSelection) event - .getSelection(); - propertiesViewer.setInput(sel.getFirstElement()); - } else { - propertiesViewer.setInput(getViewSite()); - } - } - }); - - tmpNodeViewer.addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - if (event.getSelection() == null - || event.getSelection().isEmpty()) - return; - Object obj = ((IStructuredSelection) event.getSelection()) - .getFirstElement(); - if (obj instanceof RepositoryNode) { - RepositoryNode rpNode = (RepositoryNode) obj; - rpNode.login(); - tmpNodeViewer.refresh(obj); - } else if (obj instanceof WorkspaceNode) { - ((WorkspaceNode) obj).login(); - tmpNodeViewer.refresh(obj); - } else if (obj instanceof Node) { - Node node = (Node) obj; - - // double clic on a file node triggers its opening - try { - if (node.isNodeType(NodeType.NT_FILE)) { - String name = node.getName(); - String id = node.getIdentifier(); - // For the file provider to be able to browse the - // various - // repository. - // TODO : enhanced that. - getJcrFileProvider().setRootNodes( - (Object[]) nodeContentProvider - .getElements(null)); - - getFileHandler().openFile(name, id); - } - } catch (RepositoryException re) { - throw new ArgeoException( - "Repository error while getting Node file info", - re); - } - } - } - }); - return tmpNodeViewer; - } - - @Override - protected TreeViewer getNodeViewer() { - return nodesViewer; - } - - /** DEPENDENCY INJECTION **/ - public void setRepositoryRegister(RepositoryRegister repositoryRegister) { - this.repositoryRegister = repositoryRegister; - } - - 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/wizards/ImportFileSystemWizard.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/wizards/ImportFileSystemWizard.java deleted file mode 100644 index 01427a63c..000000000 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/wizards/ImportFileSystemWizard.java +++ /dev/null @@ -1,220 +0,0 @@ -package org.argeo.eclipse.ui.jcr.wizards; - -import java.io.File; -import java.io.FileInputStream; - -import javax.jcr.Binary; -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.nodetype.NodeType; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.ArgeoException; -import org.argeo.eclipse.ui.dialogs.Error; -import org.argeo.eclipse.ui.specific.ImportToServerWizardPage; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.wizard.Wizard; - -public class ImportFileSystemWizard extends Wizard { - private final static Log log = LogFactory - .getLog(ImportFileSystemWizard.class); - - private ImportToServerWizardPage importPage; - private final Node folder; - - public ImportFileSystemWizard(Node folder) { - this.folder = folder; - setWindowTitle("Import from file system"); - } - - @Override - public void addPages() { - importPage = new ImportToServerWizardPage(); - addPage(importPage); - setNeedsProgressMonitor(importPage.getNeedsProgressMonitor()); - } - - /** - * Called when the user click on 'Finish' in the wizard. The real upload to - * the JCR repository is done here. - */ - @Override - public boolean performFinish() { - - // Initialization - final String objectType = importPage.getObjectType(); - final String objectPath = importPage.getObjectPath(); - - // We do not display a progress bar for one file only - if (importPage.FILE_ITEM_TYPE.equals(objectType)) { - // In Rap we must force the "real" upload of the file - importPage.performFinish(); - try { - Node fileNode = folder.addNode(importPage.getObjectName(), - NodeType.NT_FILE); - Node resNode = fileNode.addNode(Property.JCR_CONTENT, - NodeType.NT_RESOURCE); - Binary binary = null; - try { - binary = folder.getSession().getValueFactory() - .createBinary(importPage.getFileInputStream()); - resNode.setProperty(Property.JCR_DATA, binary); - } finally { - if (binary != null) - binary.dispose(); - IOUtils.closeQuietly(importPage.getFileInputStream()); - } - folder.getSession().save(); - } catch (Exception e) { - e.printStackTrace(); - return false; - } - return true; - } else if (importPage.FOLDER_ITEM_TYPE.equals(objectType)) { - if (objectPath == null || !new File(objectPath).exists()) { - Error.show("Directory " + objectPath + " does not exist"); - return false; - } - - Boolean failed = false; - final File dir = new File(objectPath).getAbsoluteFile(); - final Long sizeB = directorySize(dir, 0l); - final Stats stats = new Stats(); - Long begin = System.currentTimeMillis(); - try { - getContainer().run(true, true, new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) { - try { - Integer sizeKB = (int) (sizeB / FileUtils.ONE_KB); - monitor.beginTask("", sizeKB); - importDirectory(folder, dir, monitor, stats); - monitor.done(); - } catch (Exception e) { - if (e instanceof RuntimeException) - throw (RuntimeException) e; - else - throw new ArgeoException("Cannot import " - + objectPath, e); - } - } - }); - } catch (Exception e) { - Error.show("Cannot import " + objectPath, e); - failed = true; - } - - Long duration = System.currentTimeMillis() - begin; - Long durationS = duration / 1000l; - String durationStr = (durationS / 60) + " min " + (durationS % 60) - + " s"; - StringBuffer message = new StringBuffer("Imported\n"); - message.append(stats.fileCount).append(" files\n"); - message.append(stats.dirCount).append(" directories\n"); - message.append(FileUtils.byteCountToDisplaySize(stats.sizeB)); - if (failed) - message.append(" of planned ").append( - FileUtils.byteCountToDisplaySize(sizeB)); - message.append("\n"); - message.append("in ").append(durationStr).append("\n"); - if (failed) - MessageDialog.openError(getShell(), "Import failed", - message.toString()); - else - MessageDialog.openInformation(getShell(), "Import successful", - message.toString()); - - return true; - } - return false; - - } - - /** Recursively computes the size of the directory in bytes. */ - protected Long directorySize(File dir, Long currentSize) { - Long size = currentSize; - File[] files = dir.listFiles(); - for (File file : files) { - if (file.isDirectory()) { - size = directorySize(file, size); - } else { - size = size + file.length(); - } - } - return size; - } - - /** - * Import recursively a directory and its content to the repository. - */ - protected void importDirectory(Node folder, File dir, - IProgressMonitor monitor, Stats stats) { - try { - File[] files = dir.listFiles(); - for (File file : files) { - if (file.isDirectory()) { - Node childFolder = folder.addNode(file.getName(), - NodeType.NT_FOLDER); - importDirectory(childFolder, file, monitor, stats); - folder.getSession().save(); - stats.dirCount++; - } else { - Long fileSize = file.length(); - - // we skip tempory files that are created by apps when a - // file is being edited. - // TODO : make this configurable. - if (file.getName().lastIndexOf('~') != file.getName() - .length() - 1) { - - monitor.subTask(file.getName() + " (" - + FileUtils.byteCountToDisplaySize(fileSize) - + ") " + file.getCanonicalPath()); - try { - Node fileNode = folder.addNode(file.getName(), - NodeType.NT_FILE); - Node resNode = fileNode.addNode( - Property.JCR_CONTENT, NodeType.NT_RESOURCE); - Binary binary = null; - try { - binary = folder - .getSession() - .getValueFactory() - .createBinary(new FileInputStream(file)); - resNode.setProperty(Property.JCR_DATA, binary); - } finally { - if (binary != null) - binary.dispose(); - } - folder.getSession().save(); - stats.fileCount++; - stats.sizeB = stats.sizeB + fileSize; - } catch (Exception e) { - log.warn("Import of " - + file - + " (" - + FileUtils - .byteCountToDisplaySize(fileSize) - + ") failed: " + e); - folder.getSession().refresh(false); - } - monitor.worked((int) (fileSize / FileUtils.ONE_KB)); - } - } - } - } catch (Exception e) { - throw new ArgeoException("Cannot import " + dir + " to " + folder, - e); - } - } - - static class Stats { - public Long fileCount = 0l; - public Long dirCount = 0l; - public Long sizeB = 0l; - } -} -- 2.30.2