Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-09-21 17:32:05 +0000
committerEike Stepper2012-09-21 17:32:05 +0000
commit941e96bbe04dfebd8c75e850b201c2024725d31e (patch)
treef8169e8f9aae98e4af90de8d153db8f8f486f297
parentcc5314e56b8777e3cf2bdcb03092b870d8115675 (diff)
downloadcdo-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
-rw-r--r--plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDialog.java67
-rw-r--r--plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDropAdapter.java58
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)

Back to the top