package com.tibco.as.spacebar.ui.wizards.space.browse; import java.text.NumberFormat; 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.dialogs.ProgressIndicator; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Text; import com.tibco.as.spacebar.ui.SpaceBarPlugin; import com.tibco.as.spacebar.ui.model.Space; import com.tibco.as.io.AbstractExport; import com.tibco.as.space.ASException; public class SizeControl extends Composite { private NumberFormat format = NumberFormat.getIntegerInstance(); private Text text; private Button button; private ProgressIndicator progressIndicator; private Space space; private AbstractExport export; public SizeControl(Composite parent, int style, Space space, AbstractExport export) { super(parent, style); this.space = space; this.export = export; createControl(parent); } private void createControl(Composite parent) { setLayout(new GridLayout(2, false)); text = new Text(this, SWT.BORDER | SWT.SINGLE | SWT.READ_ONLY); text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); Composite composite = new Composite(this, SWT.NONE); composite.setLayout(new GridLayout(2, false)); button = new Button(composite, SWT.NONE); button.setText("Retrieve"); progressIndicator = new ProgressIndicator(composite); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { retrieveSize(); } }); } protected void retrieveSize() { button.setEnabled(false); progressIndicator.beginAnimatedTask(); Job job = new Job("Space size") { @Override protected IStatus run(IProgressMonitor monitor) { com.tibco.as.space.Space sp; try { sp = space.getSpace(); } catch (ASException e) { return SpaceBarPlugin.createStatus(e, "Could not get space"); } try { final long size = sp.size(export.getFilter()); if (!isDisposed()) { getDisplay().asyncExec(new Runnable() { @Override public void run() { if (!isDisposed()) { text.setText(format.format(size)); } } }); } if (monitor.isCanceled()) { return Status.CANCEL_STATUS; } return Status.OK_STATUS; } catch (ASException e) { return SpaceBarPlugin.createStatus(e, "Could not retrieve space size"); } finally { try { sp.close(); } catch (ASException e) { return SpaceBarPlugin.createStatus(e, "Could not close space"); } finally { if (!isDisposed()) { getDisplay().asyncExec(new Runnable() { @Override public void run() { if (!isDisposed()) { progressIndicator.done(); button.setEnabled(true); } } }); } } } } }; job.setUser(true); job.setSystem(false); job.schedule(); } }