From: Bruno Sinou Date: Fri, 8 Mar 2013 18:23:46 +0000 (+0000) Subject: + fix bugs for workspace CRUD commands introduced with multi-repo management X-Git-Tag: argeo-slc-2.1.7~423 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=de4970e4ea18056ef32137834bb0ac59b23117ce;p=gpl%2Fargeo-slc.git + fix bugs for workspace CRUD commands introduced with multi-repo management + fix a few single sourcing issues git-svn-id: https://svn.argeo.org/slc/trunk@6116 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/plugins/org.argeo.slc.client.ui.dist/META-INF/spring/commands.xml b/plugins/org.argeo.slc.client.ui.dist/META-INF/spring/commands.xml index b5cf3fc0b..ec6176f1a 100644 --- a/plugins/org.argeo.slc.client.ui.dist/META-INF/spring/commands.xml +++ b/plugins/org.argeo.slc.client.ui.dist/META-INF/spring/commands.xml @@ -17,11 +17,6 @@ - - - @@ -34,10 +29,6 @@ - - - diff --git a/plugins/org.argeo.slc.client.ui.dist/plugin.xml b/plugins/org.argeo.slc.client.ui.dist/plugin.xml index 8521a2271..b88672131 100644 --- a/plugins/org.argeo.slc.client.ui.dist/plugin.xml +++ b/plugins/org.argeo.slc.client.ui.dist/plugin.xml @@ -100,6 +100,17 @@ defaultHandler="org.argeo.slc.client.ui.dist.commands.DeleteWorkspace" name="Delete chosen Workspace"> + + + + + - - - - - - - - - nodes; + private String filter; + + public RefreshJob(Session session, String filter, List nodes) { + super("Get bundle list"); + this.session = session; + } + + @Override + protected IStatus run(IProgressMonitor progressMonitor) { + try { + ArgeoMonitor monitor = new EclipseArgeoMonitor(progressMonitor); + monitor.beginTask("Getting bundle list", -1); + List result = JcrUtils + .nodeIteratorToList(listBundleArtifacts(session, filter)); + nodes.addAll(result); + } catch (Exception e) { + return new Status(IStatus.ERROR, DistPlugin.ID, + "Cannot get bundle list", e); + } + return Status.OK_STATUS; + } + } + @Override protected void createFormContent(IManagedForm managedForm) { ScrolledForm form = managedForm.getForm(); @@ -117,12 +157,10 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { createFilterPart(body); // Add the table createTableViewer(body); - - viewer.setInput(session); - resetFilter(); - + viewer.setInput(null); // Add a listener to enable custom resize process form.addControlListener(new ControlListener() { + // form.addListener(SWT.RESIZE, new Listener() does not work public void controlResized(ControlEvent e) { refreshLayout(); } @@ -130,20 +168,11 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { public void controlMoved(ControlEvent e) { } }); - - // This below doesn not work; the listener must be added as a control - // listener to be correctly notified when resize events happen - - // form.addListener(SWT.RESIZE, new Listener() { - // public void handleEvent(Event event) { - // log.debug("Form resized ...."); - // } - // }); - + asynchronousRefresh(); } /** Build repository request */ - private NodeIterator listBundleArtifacts(Session session) + private NodeIterator listBundleArtifacts(Session session, String filter) throws RepositoryException { QueryManager queryManager = session.getWorkspace().getQueryManager(); QueryObjectModelFactory factory = queryManager.getQOMFactory(); @@ -168,10 +197,9 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { "%.source")))); // Build constraints based the textArea content - String artifactTxtVal = artifactTxt.getText(); - if (!"".equals(artifactTxtVal.trim())) { + if (filter != null && !"".equals(filter.trim())) { // Parse the String - String[] strs = artifactTxtVal.trim().split(" "); + String[] strs = filter.trim().split(" "); for (String token : strs) { token = token.replace('*', '%'); StaticOperand so = factory.literal(session.getValueFactory() @@ -220,13 +248,16 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { // Text Area to filter artifactTxt = tk.createText(header, "", SWT.BORDER | SWT.SINGLE); + artifactTxt.setMessage(FILTER_HELP_MSG); gd = new GridData(SWT.FILL, SWT.FILL, false, false); gd.grabExcessHorizontalSpace = true; artifactTxt.setLayoutData(gd); artifactTxt.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent event) { - refreshFilteredList(); + if ("".equals(artifactTxt.getText().trim())) + asynchronousRefresh(); + else + refreshFilteredList(); } }); @@ -246,12 +277,18 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { private void resetFilter() { artifactTxt.setText(""); - artifactTxt.setMessage("Enter filter criterion separated by a space"); - viewer.refresh(); + artifactTxt.setMessage(FILTER_HELP_MSG); } private void refreshFilteredList() { - viewer.refresh(); + List nodes; + try { + nodes = JcrUtils.nodeIteratorToList(listBundleArtifacts(session, + artifactTxt.getText())); + viewer.setInput(nodes); + } catch (RepositoryException e) { + throw new SlcException("Unable to list bundles", e); + } } private void createTableViewer(Composite parent) { @@ -340,21 +377,18 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { /** force refresh of the artifact list */ public void refresh() { - viewer.refresh(); + asynchronousRefresh(); } /** Programmatically configure the context menu */ protected void contextMenuAboutToShow(IMenuManager menuManager) { IWorkbenchWindow window = DistPlugin.getDefault().getWorkbench() .getActiveWorkbenchWindow(); - // Build conditions - // Delete selected artifacts CommandHelpers.refreshCommand(menuManager, window, DeleteArtifacts.ID, DeleteArtifacts.DEFAULT_LABEL, DeleteArtifacts.DEFAULT_ICON_PATH, true); - } private SelectionAdapter getSelectionAdapter(final int index) { @@ -380,24 +414,21 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { /* LOCAL CLASSES */ private class DistributionsContentProvider implements IStructuredContentProvider { - // private Session session; + // we keep a cache of the Nodes in the content provider to be able to + // manage long request + private List nodes; public void dispose() { } + // We expect a list of nodes as a new input + @SuppressWarnings("unchecked") public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - // session = (Session) newInput; + nodes = (List) newInput; } public Object[] getElements(Object arg0) { - try { - List nodes = JcrUtils - .nodeIteratorToList(listBundleArtifacts(session)); - return nodes.toArray(); - } catch (RepositoryException e) { - ErrorFeedback.show("Cannot list bundles", e); - return null; - } + return nodes.toArray(); } } diff --git a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/DistributionsView.java b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/DistributionsView.java index 140b7d489..458df44a9 100644 --- a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/DistributionsView.java +++ b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/DistributionsView.java @@ -226,7 +226,6 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames if (firstElement instanceof TreeParent || firstElement instanceof BrowserElem) { - String wsName = null; String targetRepoPath = null; // Build conditions depending on element type @@ -236,7 +235,6 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames if (firstElement instanceof DistributionElem) { DistributionElem de = (DistributionElem) firstElement; isDistribElem = true; - wsName = de.getName(); isReadOnly = de.isReadOnly(); } else if (firstElement instanceof RepoElem) { RepoElem re = (RepoElem) firstElement; @@ -292,21 +290,17 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames isRepoElem && singleElement && !isReadOnly, params); // Normalize workspace - params = new HashMap(); - params.put(NormalizeDistribution.PARAM_WORKSPACE, wsName); - CommandHelpers.refreshParameterizedCommand(menuManager, window, + CommandHelpers.refreshCommand(menuManager, window, NormalizeDistribution.ID, NormalizeDistribution.DEFAULT_LABEL, NormalizeDistribution.DEFAULT_ICON_PATH, isDistribElem - && singleElement && !isReadOnly, params); + && singleElement && !isReadOnly); // Copy workspace - params = new HashMap(); - params.put(CopyWorkspace.PARAM_WORKSPACE_NAME, wsName); - CommandHelpers.refreshParameterizedCommand(menuManager, window, + CommandHelpers.refreshCommand(menuManager, window, CopyWorkspace.ID, CopyWorkspace.DEFAULT_LABEL, CopyWorkspace.DEFAULT_ICON_PATH, isDistribElem - && singleElement, params); + && singleElement); // Clear Workspace CommandHelpers.refreshCommand(menuManager, window,