From: Bruno Sinou Date: Wed, 9 Mar 2011 22:43:32 +0000 (+0000) Subject: -> Finalisation of file download for RAP X-Git-Tag: argeo-commons-2.1.30~1380 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=5489d914ae3576354936390e980072792af6d6ef;p=lgpl%2Fargeo-commons.git -> Finalisation of file download for RAP -> some little UI Bugs git-svn-id: https://svn.argeo.org/commons/trunk@4275 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- 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 index 3d5ef58a4..71157aae1 100644 --- 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 @@ -40,8 +40,12 @@ public class NodeLabelProvider extends LabelProvider { for (NodeType type : node.getMixinNodeTypes()) mixins.append(' ').append(type.getName()); + // System.out.println("URL : " + // + createDownloadHtml("test.pdf", "Downlad")); + return label + " [" + node.getPrimaryNodeType().getName() + mixins + "]"; + // + createDownloadHtml("test.pdf", "Downlad"); } return element.toString(); } catch (RepositoryException e) { @@ -78,4 +82,5 @@ public class NodeLabelProvider extends LabelProvider { } return super.getImage(element); } + } diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java index 5133b04b6..fc8ad6a0c 100644 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/DeleteNode.java @@ -3,9 +3,11 @@ package org.argeo.eclipse.ui.jcr.commands; import java.util.Iterator; import javax.jcr.Node; +import javax.jcr.RepositoryException; 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.jcr.views.GenericJcrBrowser; import org.eclipse.core.commands.AbstractHandler; @@ -17,7 +19,7 @@ import org.eclipse.ui.handlers.HandlerUtil; /** Deletes the selected nodes */ public class DeleteNode extends AbstractHandler { - private static Log log = LogFactory.getLog(DeleteNode.class); + private final static Log log = LogFactory.getLog(DeleteNode.class); public Object execute(ExecutionEvent event) throws ExecutionException { ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event) @@ -25,32 +27,41 @@ public class DeleteNode extends AbstractHandler { GenericJcrBrowser view = (GenericJcrBrowser) 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(); - log.debug("Node ids : node :" + node.getIdentifier() - + " - pNode : " + parentNode.getIdentifier()); node.remove(); - - // Postpone the refresh after the session.save - // view.nodeRemoved(parentNode); - node.getSession().save(); - if (log.isDebugEnabled()) - log.debug("session saved"); - view.nodeRemoved(parentNode); + ancestor = getOlder(ancestor, parentNode); } } + if (ancestor != null) + view.nodeRemoved(ancestor); } catch (Exception e) { Error.show("Cannot delete node " + obj, e); } } return null; } + + private 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/ImportFileSystem.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/ImportFileSystem.java index dcaf137ed..b1e999f7e 100644 --- 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 @@ -2,6 +2,8 @@ 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.GenericJcrBrowser; import org.argeo.eclipse.ui.jcr.wizards.ImportFileSystemWizard; @@ -14,6 +16,7 @@ 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) @@ -27,11 +30,11 @@ public class ImportFileSystem extends AbstractHandler { 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; -// } + // 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( 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 index 414cb010a..cf7092315 100644 --- 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 @@ -1,9 +1,7 @@ package org.argeo.eclipse.ui.jcr.views; import java.io.InputStream; -import java.util.ArrayList; import java.util.Arrays; -import java.util.List; import javax.jcr.Node; import javax.jcr.Property; @@ -20,6 +18,8 @@ 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.RepositoryRegister; import org.eclipse.jface.action.MenuManager; @@ -43,7 +43,7 @@ import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.part.ViewPart; public class GenericJcrBrowser extends ViewPart { - private static Log log = LogFactory.getLog(GenericJcrBrowser.class); + private final static Log log = LogFactory.getLog(GenericJcrBrowser.class); private TreeViewer nodesViewer; private TableViewer propertiesViewer; @@ -52,6 +52,23 @@ public class GenericJcrBrowser extends ViewPart { @Override public void createPartControl(Composite parent) { + /* + * TEST + */ + + // Instantiate the generic object that fits for + // both RCP & RAP, must be final to be accessed in the double click + // listener. + // Not that in RAP, it registers a service handler that provide the + // access to the files. + + final JcrFileProvider jfp = new JcrFileProvider(); + final FileHandler fh = new FileHandler(jfp); + + /* + * TEST END + */ + parent.setLayout(new FillLayout()); SashForm sashForm = new SashForm(parent, SWT.VERTICAL); @@ -81,6 +98,7 @@ public class GenericJcrBrowser extends ViewPart { } } }); + nodesViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { if (event.getSelection() == null @@ -89,37 +107,62 @@ public class GenericJcrBrowser extends ViewPart { Object obj = ((IStructuredSelection) event.getSelection()) .getFirstElement(); if (obj instanceof RepositoryNode) { - ((RepositoryNode) obj).login(); + RepositoryNode rpNode = (RepositoryNode) obj; + rpNode.login(); + // For the file provider to be able to browse the repo. + // TODO : enhanced that. + jfp.setRepositoryNode(rpNode); + nodesViewer.refresh(obj); } else if (obj instanceof WorkspaceNode) { ((WorkspaceNode) obj).login(); nodesViewer.refresh(obj); } // call the openFile commands on node else if (obj instanceof Node) { + // Shell shell = + // aup.getWorkbench().getActiveWorkbenchWindow() + // .getShell(); + // we can also do + // event.getViewer().getControl().getShell(); + + // Browser browser = new Browser(shell, SWT.NONE); + // browser.setText(encodedURL); + // boolean check = browser.setUrl(encodedURL); + // System.out.println("soo ?? : " + check); + // System.out.println("script : " + browser.executeScript); + + // try { + // RWT.getResponse().sendRedirect(encodedURL); + // } catch (IOException e1) { + // // TODO Auto-generated catch block + // e1.printStackTrace(); + // } + + // final Browser browser = new Browser(parent, SWT.NONE); + // browser.setText(createDownloadHtml("test.pdf", + // "Download file")); + Node node = (Node) obj; try { if (node.isNodeType("nt:file")) { + String name = node.getName(); + String id = node.getIdentifier(); Node child = node.getNodes().nextNode(); if (!child.isNodeType("nt:resource")) { Error.show("Cannot open file children Node that are not of 'nt:resource' type."); return; } + InputStream fis = null; try { fis = (InputStream) child .getProperty("jcr:data").getBinary() .getStream(); - - String name = node.getName(); - // Instantiate the generic object that fits for - // both - // RCP & RAP. - FileHandler fh = new FileHandler(); - fh.openFile(name, fis); - // fh.openFile(file); + // both RCP & RAP. + fh.openFile(name, id, fis); } catch (Exception e) { throw new ArgeoException( "Stream error while opening file", e); @@ -131,6 +174,7 @@ public class GenericJcrBrowser extends ViewPart { re.printStackTrace(); } + } } @@ -205,6 +249,8 @@ public class GenericJcrBrowser extends ViewPart { sashForm.setWeights(getWeights()); + nodesViewer.setComparer(new NodeViewerComparer()); + } @Override @@ -235,71 +281,17 @@ public class GenericJcrBrowser extends ViewPart { public void nodeRemoved(Node parentNode) { - List al = new ArrayList(); - al.add(parentNode); - - IStructuredSelection newSel = new StructuredSelection(al); - // IStructuredSelection newSel = new StructuredSelection(parentNode); - - if (log.isDebugEnabled()) - log.debug("new selection size = " + newSel.size()); - + IStructuredSelection newSel = new StructuredSelection(parentNode); nodesViewer.setSelection(newSel, true); + // Force refresh IStructuredSelection tmpSel = (IStructuredSelection) nodesViewer .getSelection(); - - if (log.isDebugEnabled()) - log.debug("set selection size = " + tmpSel.size()); - - nodesViewer.refresh(); - - // - // log.debug(" Class selected (Parent 1ST element) : " - // + tmpSel.getFirstElement().getClass()); - // setFocus(); - // - // nodesViewer.refresh(parentNode); - - // // Call the refresh node command - // try { - // IWorkbench iw = JcrUiPlugin.getDefault().getWorkbench(); - // IHandlerService handlerService = (IHandlerService) iw - // .getService(IHandlerService.class); - // - // // get the command from plugin.xml - // IWorkbenchWindow window = iw.getActiveWorkbenchWindow(); - // ICommandService cmdService = (ICommandService) window - // .getService(ICommandService.class); - // Command cmd = cmdService - // .getCommand(OpenEbiDetailsEditor.COMMAND_NAME); - // - // // log.debug("cmd : " + cmd); - // ArrayList parameters = new - // ArrayList(); - // - // // get the parameter - // IParameter iparam = cmd - // .getParameter(OpenEbiDetailsEditor.PARAM_UUID); - // - // Parameterization params = new Parameterization(iparam, - // ((String[]) obj)[0]); - // parameters.add(params); - // - // // build the parameterized command - // ParameterizedCommand pc = new ParameterizedCommand(cmd, - // parameters.toArray(new Parameterization[parameters.size()])); - // - // // execute the command - // handlerService = (IHandlerService) window - // .getService(IHandlerService.class); - // handlerService.executeCommand(pc, null); - // - // } catch (Exception e) { - // throw new ArgeoException("Error opening EBI", e); - // } + nodesViewer.refresh(tmpSel.getFirstElement()); } + // IoC public void setRepositoryRegister(RepositoryRegister repositoryRegister) { this.repositoryRegister = repositoryRegister; } + } 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 index 14a301749..e52fa6768 100644 --- 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 @@ -38,8 +38,12 @@ public class ImportFileSystemWizard extends Wizard { @Override public void addPages() { - page1 = new ImportFileSystemWizardPage(); - addPage(page1); + try { + page1 = new ImportFileSystemWizardPage(); + addPage(page1); + } catch (Exception e) { + e.printStackTrace(); + } } /**