fix bug 142
authorBruno Sinou <bsinou@argeo.org>
Tue, 19 Mar 2013 15:58:18 +0000 (15:58 +0000)
committerBruno Sinou <bsinou@argeo.org>
Tue, 19 Mar 2013 15:58:18 +0000 (15:58 +0000)
https://www.argeo.org/bugzilla/show_bug.cgi?id=142

git-svn-id: https://svn.argeo.org/commons/trunk@6169 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddRemoteRepository.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/Refresh.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrUiUtils.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java

index 5960fe858a3c0e972e49b951ee035698b3dd84d0..e41edfca875163fa11fdd3353442e08f0e0fd1f2 100644 (file)
@@ -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;
        }
index 4d5e57761caf97eb69f476a44ee51c505c13deb4..21ce256581b2d63eb7549dcf92d32c63554e262e 100644 (file)
@@ -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;
        }
 }
index ad327f09853feb07773be9bb27c76dfde6aed4f8..ca32113ed52f523c544c7a897aff73b3ec720e5a 100644 (file)
@@ -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();
index c36b965b985ed5b79e848974af6d26238b1c094c..f401ae8fe3a352967e0a1b979d2b6abaa8d88e72 100644 (file)
@@ -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.
         */