diff options
author | Eike Stepper | 2012-09-21 17:32:05 +0000 |
---|---|---|
committer | Eike Stepper | 2012-09-21 17:32:05 +0000 |
commit | 941e96bbe04dfebd8c75e850b201c2024725d31e (patch) | |
tree | f8169e8f9aae98e4af90de8d153db8f8f486f297 | |
parent | cc5314e56b8777e3cf2bdcb03092b870d8115675 (diff) | |
download | cdo-941e96bbe04dfebd8c75e850b201c2024725d31e.tar.gz cdo-941e96bbe04dfebd8c75e850b201c2024725d31e.tar.xz cdo-941e96bbe04dfebd8c75e850b201c2024725d31e.zip |
[388928] Develop a resource transfer framework
https://bugs.eclipse.org/bugs/show_bug.cgi?id=388928
2 files changed, 97 insertions, 28 deletions
diff --git a/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDialog.java b/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDialog.java index 41254f2382..a8a2807e03 100644 --- a/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDialog.java +++ b/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDialog.java @@ -16,15 +16,13 @@ import org.eclipse.emf.cdo.ui.shared.SharedIcons; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.TitleAreaDialog; -import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; /** @@ -32,11 +30,13 @@ import org.eclipse.swt.widgets.Shell; */ public class TransferDialog extends TitleAreaDialog { - private CDOTransfer transfer; + private final CDOTransfer transfer; private TransferComposite transferComposite; - private Image wizban; + private InitializationState initializationState = InitializationState.MAPPING; + + private Button okButton; public TransferDialog(Shell parentShell, CDOTransfer transfer) { @@ -45,20 +45,42 @@ public class TransferDialog extends TitleAreaDialog this.transfer = transfer; } - public TransferComposite getTransferComposite() + public final CDOTransfer getTransfer() + { + return transfer; + } + + public final TransferComposite getTransferComposite() { return transferComposite; } + public InitializationState getInitializationState() + { + return initializationState; + } + + public void setInitializationState(InitializationState initializationState) + { + this.initializationState = initializationState; + + if (okButton != null) + { + okButton.getDisplay().asyncExec(new Runnable() + { + public void run() + { + updateOkButtonEnabledment(); + } + }); + } + } + @Override protected Control createDialogArea(Composite parent) { - ImageDescriptor descriptor = SharedIcons.getDescriptor(SharedIcons.WIZBAN_TRANSFER); - Display display = parent.getDisplay(); - wizban = descriptor.createImage(display); - setTitle("Transfer from " + transfer.getSourceSystem() + " to " + transfer.getTargetSystem()); - setTitleImage(wizban); + setTitleImage(SharedIcons.getImage(SharedIcons.WIZBAN_TRANSFER)); Composite area = (Composite)super.createDialogArea(parent); @@ -67,32 +89,33 @@ public class TransferDialog extends TitleAreaDialog container.setLayoutData(new GridData(GridData.FILL_BOTH)); transferComposite = new TransferComposite(container, transfer); - return area; } @Override protected void createButtonsForButtonBar(Composite parent) { - createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); + okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); + updateOkButtonEnabledment(); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } + protected void updateOkButtonEnabledment() + { + okButton.setEnabled(initializationState == InitializationState.MAPPED); + } + @Override protected Point getInitialSize() { return new Point(1000, 800); } - @Override - public boolean close() + /** + * @author Eike Stepper + */ + public static enum InitializationState { - if (wizban != null) - { - wizban.dispose(); - wizban = null; - } - - return super.close(); + MAPPING, MAPPED, FAILED, CANCELED } } diff --git a/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDropAdapter.java b/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDropAdapter.java index 05a7507d3d..1e17ce8805 100644 --- a/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDropAdapter.java +++ b/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDropAdapter.java @@ -15,11 +15,16 @@ import org.eclipse.emf.cdo.transfer.CDOTransferElement; import org.eclipse.emf.cdo.transfer.CDOTransferSystem; import org.eclipse.emf.cdo.transfer.spi.ui.TransferUIProvider; import org.eclipse.emf.cdo.transfer.spi.ui.TransferUIProvider.Factory; +import org.eclipse.emf.cdo.transfer.ui.TransferDialog.InitializationState; import org.eclipse.net4j.util.container.IManagedContainer; import org.eclipse.net4j.util.container.IPluginContainer; import org.eclipse.net4j.util.ui.dnd.DNDDropAdapter; +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.viewers.StructuredViewer; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.Transfer; @@ -81,13 +86,13 @@ public class TransferDropAdapter extends DNDDropAdapter<Object> return false; } - List<CDOTransferElement> sourceElements = getSourceElements(data); + final List<CDOTransferElement> sourceElements = getSourceElements(data); if (sourceElements == null || sourceElements.isEmpty()) { return false; } - CDOTransferElement targetElement = getTargetElement(target); + final CDOTransferElement targetElement = getTargetElement(target); if (targetElement == null || !targetElement.isDirectory()) { return false; @@ -96,14 +101,55 @@ public class TransferDropAdapter extends DNDDropAdapter<Object> CDOTransferSystem sourceSystem = sourceElements.get(0).getSystem(); CDOTransferSystem targetSystem = targetElement.getSystem(); - CDOTransfer transfer = new CDOTransfer(sourceSystem, targetSystem); + final CDOTransfer transfer = new CDOTransfer(sourceSystem, targetSystem); transfer.getRootMapping().setRelativePath(targetElement.getPath()); - for (CDOTransferElement sourceElement : sourceElements) + + Shell shell = getViewer().getControl().getShell(); + final TransferDialog dialog = new TransferDialog(shell, transfer); + + new Job("Mapping elements") + { + @Override + protected IStatus run(IProgressMonitor monitor) + { + monitor.beginTask(getName(), sourceElements.size()); + + try + { + for (CDOTransferElement sourceElement : sourceElements) + { + if (monitor.isCanceled() || dialog.getInitializationState() == InitializationState.CANCELED) + { + dialog.setInitializationState(InitializationState.CANCELED); + return Status.OK_STATUS; + } + + transfer.map(sourceElement); + monitor.worked(1); + } + + dialog.setInitializationState(InitializationState.MAPPED); + return Status.OK_STATUS; + } + catch (RuntimeException ex) + { + dialog.setInitializationState(InitializationState.FAILED); + throw ex; + } + finally + { + monitor.done(); + } + } + }.schedule(); + + if (dialog.open() == TransferDialog.OK) { - transfer.map(sourceElement); + transfer.perform(); + return true; } - return performTransfer(transfer); + return false; } protected boolean performTransfer(CDOTransfer transfer) |