From e567e77bace1738a88e06d09ec5c7f3c1fae3fc2 Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Wed, 20 Mar 2013 20:17:14 +0000 Subject: [PATCH] Merge Trigger view refresh after adding a new remote repository https://www.argeo.org/bugzilla/show_bug.cgi?id=142 git-svn-id: https://svn.argeo.org/commons/branches/1.x@6182 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../commands/AddRemoteRepository.java | 2 ++ .../jcr/ui/explorer/commands/Refresh.java | 25 +++++++++++++------ .../jcr/ui/explorer/utils/JcrUiUtils.java | 14 ++++++++--- .../ui/explorer/views/GenericJcrBrowser.java | 15 +++++++++++ 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddRemoteRepository.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddRemoteRepository.java index 5960fe858..e41edfca8 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddRemoteRepository.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddRemoteRepository.java @@ -26,6 +26,7 @@ import javax.jcr.SimpleCredentials; import org.argeo.ArgeoException; import org.argeo.eclipse.ui.ErrorFeedback; +import org.argeo.eclipse.ui.utils.CommandUtils; import org.argeo.jcr.ArgeoJcrConstants; import org.argeo.jcr.ArgeoNames; import org.argeo.jcr.ArgeoTypes; @@ -69,6 +70,7 @@ public class AddRemoteRepository extends AbstractHandler implements RemoteRepositoryLoginDialog dlg = new RemoteRepositoryLoginDialog( Display.getDefault().getActiveShell()); if (dlg.open() == Dialog.OK) { + CommandUtils.callCommand(Refresh.ID); } return null; } diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/Refresh.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/Refresh.java index 4d5e57761..21ce25658 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/Refresh.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/Refresh.java @@ -19,13 +19,14 @@ import java.util.Iterator; import org.argeo.eclipse.ui.TreeParent; import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser; +import org.argeo.jcr.ui.explorer.JcrExplorerPlugin; import org.argeo.jcr.ui.explorer.utils.JcrUiUtils; +import org.argeo.jcr.ui.explorer.views.GenericJcrBrowser; 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; /** * Force the selected objects of the active view to be refreshed doing the @@ -37,13 +38,19 @@ import org.eclipse.ui.handlers.HandlerUtil; */ public class Refresh extends AbstractHandler { + public final static String ID = JcrExplorerPlugin.ID + ".refresh"; + 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) { + + AbstractJcrBrowser view = (AbstractJcrBrowser) JcrExplorerPlugin + .getDefault().getWorkbench().getActiveWorkbenchWindow() + .getActivePage().getActivePart();// + + ISelection selection = JcrExplorerPlugin.getDefault().getWorkbench() + .getActiveWorkbenchWindow().getActivePage().getSelection(); + + if (selection != null && selection instanceof IStructuredSelection + && !selection.isEmpty()) { Iterator it = ((IStructuredSelection) selection).iterator(); while (it.hasNext()) { Object obj = it.next(); @@ -53,7 +60,9 @@ public class Refresh extends AbstractHandler { view.refresh(obj); } } - } + } else if (view instanceof GenericJcrBrowser) + ((GenericJcrBrowser) view).refresh(null); // force full refresh + return null; } } diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrUiUtils.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrUiUtils.java index ad327f098..ca32113ed 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrUiUtils.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrUiUtils.java @@ -53,10 +53,16 @@ public class JcrUiUtils { doRefresh = true; } } else if (element instanceof RepositoriesElem) { - RepositoriesElem rn = (RepositoriesElem) element; - if (element.getChildren().length != rn.getRepositoryRegister() - .getRepositories().size()) - doRefresh = true; + doRefresh = true; + // Always force refresh for RepositoriesElem : the condition + // below does not take remote repository into account and it is + // not trivial to do so. + + // RepositoriesElem rn = (RepositoriesElem) element; + // if (element.getChildren().length != + // rn.getRepositoryRegister() + // .getRepositories().size()) + // doRefresh = true; } if (doRefresh) { element.clearChildren(); diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java index c36b965b9..f401ae8fe 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java @@ -129,6 +129,21 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { nodesViewer.setComparer(new NodeViewerComparer()); } + @Override + public void refresh(Object obj) { + // Enable full refresh from a command when no element of the tree is + // selected + if (obj == null) { + Object[] elements = nodeContentProvider.getElements(null); + for (Object el : elements) { + if (el instanceof TreeParent) + JcrUiUtils.forceRefreshIfNeeded((TreeParent) el); + getNodeViewer().refresh(el); + } + } + super.refresh(obj); + } + /** * To be overridden to adapt size of form and result frames. */ -- 2.30.2