X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=plugins%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Feditors%2FDistributionOverviewPage.java;h=3c27a960728b9135ba98f994b8a7fce9dc13a75e;hb=7af5edc4d006d39174dba9665b0f78ccc2f9dfe6;hp=403617654b0c443a5d04f4b09eaefa08e9ccce47;hpb=de4970e4ea18056ef32137834bb0ac59b23117ce;p=gpl%2Fargeo-slc.git diff --git a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/editors/DistributionOverviewPage.java b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/editors/DistributionOverviewPage.java index 403617654..3c27a9607 100644 --- a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/editors/DistributionOverviewPage.java +++ b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/editors/DistributionOverviewPage.java @@ -36,20 +36,20 @@ import javax.jcr.query.qom.StaticOperand; import org.argeo.ArgeoException; import org.argeo.ArgeoMonitor; import org.argeo.eclipse.ui.EclipseArgeoMonitor; +import org.argeo.eclipse.ui.utils.CommandUtils; import org.argeo.jcr.JcrUtils; import org.argeo.slc.SlcException; import org.argeo.slc.client.ui.dist.DistConstants; import org.argeo.slc.client.ui.dist.DistImages; import org.argeo.slc.client.ui.dist.DistPlugin; +import org.argeo.slc.client.ui.dist.PrivilegedJob; import org.argeo.slc.client.ui.dist.commands.DeleteArtifacts; -import org.argeo.slc.client.ui.dist.utils.CommandHelpers; import org.argeo.slc.client.ui.dist.utils.NodeViewerComparator; import org.argeo.slc.jcr.SlcNames; import org.argeo.slc.jcr.SlcTypes; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; @@ -73,6 +73,7 @@ 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.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Table; @@ -97,9 +98,9 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { // This page widgets private NodeViewerComparator comparator; private TableViewer viewer; - private Text artifactTxt; private FormToolkit tk; private Composite header; + private Text artifactTxt; private final static String FILTER_HELP_MSG = "Enter filter criterion separated by a space"; public DistributionOverviewPage(FormEditor formEditor, String title, @@ -109,32 +110,37 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { } private void asynchronousRefresh() { - refreshFilteredList(); - // FIXME Does not work yet: how can the job set the viewer input ? - // RefreshJob job = new RefreshJob(session, artifactTxt.getText()); - // job.setUser(true); - // job.schedule(); - // viewer.setInput(nodes); + RefreshJob job = new RefreshJob(artifactTxt.getText(), viewer, + getSite().getShell().getDisplay()); + job.setUser(true); + job.schedule(); } - private class RefreshJob extends Job { - private Session session; - private List nodes; + private class RefreshJob extends PrivilegedJob { + private TableViewer viewer; private String filter; + private Display display; - public RefreshJob(Session session, String filter, List nodes) { + public RefreshJob(String filter, TableViewer viewer, Display display) { super("Get bundle list"); - this.session = session; + this.filter = filter; + this.viewer = viewer; + this.display = display; } @Override - protected IStatus run(IProgressMonitor progressMonitor) { + protected IStatus doRun(IProgressMonitor progressMonitor) { try { ArgeoMonitor monitor = new EclipseArgeoMonitor(progressMonitor); monitor.beginTask("Getting bundle list", -1); - List result = JcrUtils + final List result = JcrUtils .nodeIteratorToList(listBundleArtifacts(session, filter)); - nodes.addAll(result); + + display.asyncExec(new Runnable() { + public void run() { + viewer.setInput(result); + } + }); } catch (Exception e) { return new Status(IStatus.ERROR, DistPlugin.ID, "Cannot get bundle list", e); @@ -157,7 +163,7 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { createFilterPart(body); // Add the table createTableViewer(body); - viewer.setInput(null); + // viewer.setInput(null); // Add a listener to enable custom resize process form.addControlListener(new ControlListener() { // form.addListener(SWT.RESIZE, new Listener() does not work @@ -233,6 +239,8 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { private void createFilterPart(Composite parent) { header = tk.createComposite(parent); GridLayout layout = new GridLayout(2, false); + layout.marginWidth = layout.marginHeight = layout.verticalSpacing = 0; + layout.horizontalSpacing = 5; header.setLayout(layout); GridData gd = new GridData(SWT.FILL, SWT.FILL, false, false); header.setLayoutData(gd); @@ -247,7 +255,8 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { lbl.setLayoutData(gd); // Text Area to filter - artifactTxt = tk.createText(header, "", SWT.BORDER | SWT.SINGLE); + artifactTxt = tk.createText(header, "", SWT.BORDER | SWT.SINGLE + | SWT.SEARCH | SWT.CANCEL); artifactTxt.setMessage(FILTER_HELP_MSG); gd = new GridData(SWT.FILL, SWT.FILL, false, false); gd.grabExcessHorizontalSpace = true; @@ -318,7 +327,7 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { // Symbolic name col = new TableViewerColumn(viewer, SWT.V_SCROLL); col.getColumn().setWidth(300); - col.getColumn().setText("Symbolic name"); + col.getColumn().setText("Symbolic Name"); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { @@ -331,7 +340,7 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { // Version col = new TableViewerColumn(viewer, SWT.NONE); - col.getColumn().setWidth(100); + col.getColumn().setWidth(130); col.getColumn().setText("Version"); col.setLabelProvider(new ColumnLabelProvider() { @Override @@ -386,9 +395,9 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { .getActiveWorkbenchWindow(); // Build conditions // Delete selected artifacts - CommandHelpers.refreshCommand(menuManager, window, DeleteArtifacts.ID, - DeleteArtifacts.DEFAULT_LABEL, - DeleteArtifacts.DEFAULT_ICON_PATH, true); + CommandUtils.refreshCommand(menuManager, window, DeleteArtifacts.ID, + DeleteArtifacts.DEFAULT_LABEL, DeleteArtifacts.DEFAULT_ICON, + true); } private SelectionAdapter getSelectionAdapter(final int index) { @@ -472,7 +481,7 @@ public class DistributionOverviewPage extends FormPage implements SlcNames { // when table height is less than 200 px, we let the scroll bar on the // scrollForm - // FIXME substract some spare space. Here is room for optimization + // FIXME substract some spare space. There is room here for optimization gd.heightHint = Math.max(maxH - 35, 200); gd.widthHint = Math.max(maxW - 35, 200);