diff --git a/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/wizards/AbapGitWizardPull.java b/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/wizards/AbapGitWizardPull.java index bd5778a..b596fc5 100644 --- a/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/wizards/AbapGitWizardPull.java +++ b/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/wizards/AbapGitWizardPull.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import org.abapgit.adt.backend.IApackManifest; import org.abapgit.adt.backend.IApackManifest.IApackDependency; @@ -14,14 +15,19 @@ import org.abapgit.adt.backend.model.agitpullmodifiedobjects.IAbapGitPullModifiedObjects; import org.abapgit.adt.ui.AbapGitUIPlugin; import org.abapgit.adt.ui.internal.i18n.Messages; +import org.abapgit.adt.ui.internal.repositories.IRepositoryModifiedObjects; import org.abapgit.adt.ui.internal.util.AbapGitUIServiceFactory; import org.abapgit.adt.ui.internal.wizards.AbapGitWizard.CloneData; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.Assert; 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.DialogPage; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.dialogs.IPageChangingListener; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.PageChangingEvent; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.wizard.IWizardContainer; @@ -29,6 +35,8 @@ import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; @@ -148,63 +156,69 @@ public void addPages() { @Override public boolean performFinish() { - try { - getContainer().run(true, true, new IRunnableWithProgress() { + // Extracting variable earlier to ensure consistency in asynchronous code flow + Set overwriteObjects = AbapGitWizardPull.this.pageOverwriteObjectsSelection.getSelectedObjects(); + Set packageWarningObjects = AbapGitWizardPull.this.pagePackageWarningObjectsSelection + .getSelectedObjects(); + + Job pullRepoJob = new Job(Messages.AbapGitWizard_task_pulling_repository) { + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + monitor.beginTask(Messages.AbapGitWizard_task_pulling_repository, 100); - @Override - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - monitor.beginTask(Messages.AbapGitWizard_task_pulling_repository, IProgressMonitor.UNKNOWN); IRepositoryService repoService = RepositoryServiceFactory.createRepositoryService(AbapGitWizardPull.this.destination, monitor); - //get the selected objects to be pulled + // Get the selected objects to be pulled AbapGitWizardPull.this.repoToSelectedObjects = AbapGitUIServiceFactory.createAbapGitPullService() - .getSelectedObjectsToPullforRepo(AbapGitWizardPull.this.pageOverwriteObjectsSelection.getSelectedObjects(), - AbapGitWizardPull.this.pagePackageWarningObjectsSelection.getSelectedObjects()); + .getSelectedObjectsToPullforRepo(overwriteObjects, packageWarningObjects); - //pull the selected objects + // Pull the selected objects repoService.pullRepository(AbapGitWizardPull.this.selRepoData, AbapGitWizardPull.this.selRepoData.getBranchName(), AbapGitWizardPull.this.transportPage.getTransportRequestNumber(), AbapGitWizardPull.this.cloneData.user, AbapGitWizardPull.this.cloneData.pass, AbapGitWizardPull.this.repoToSelectedObjects.get(AbapGitWizardPull.this.selRepoData.getUrl()), monitor); + // Pull dependencies if any if (AbapGitWizardPull.this.cloneData.hasDependencies()) { pullDependencies(monitor, repoService); } + + return Status.OK_STATUS; + } catch (ResourceException e) { + Display.getDefault().asyncExec(() -> { + Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); + MessageDialog.openError(shell, "Error", e.getMessage()); //$NON-NLS-1$ + }); + return new Status(IStatus.ERROR, AbapGitUIPlugin.PLUGIN_ID, e.getMessage(), e); } + } - private void pullDependencies(IProgressMonitor monitor, IRepositoryService repoService) { - for (IApackDependency apackDependency : AbapGitWizardPull.this.cloneData.apackManifest.getDescriptor() - .getDependencies()) { - if (apackDependency.requiresSynchronization()) { - IRepository dependencyRepository = repoService.getRepositoryByURL(AbapGitWizardPull.this.cloneData.repositories, - apackDependency.getGitUrl()); - if (dependencyRepository != null) { - repoService.pullRepository(dependencyRepository, IApackManifest.MASTER_BRANCH, - AbapGitWizardPull.this.transportPage.getTransportRequestNumber(), - AbapGitWizardPull.this.cloneData.user, AbapGitWizardPull.this.cloneData.pass, - AbapGitWizardPull.this.repoToSelectedObjects.get(dependencyRepository.getUrl()), monitor); - } + private void pullDependencies(IProgressMonitor monitor, IRepositoryService repoService) { + for (IApackDependency apackDependency : AbapGitWizardPull.this.cloneData.apackManifest.getDescriptor().getDependencies()) { + if (apackDependency.requiresSynchronization()) { + IRepository dependencyRepository = repoService.getRepositoryByURL(AbapGitWizardPull.this.cloneData.repositories, + apackDependency.getGitUrl()); + if (dependencyRepository != null) { + repoService.pullRepository(dependencyRepository, IApackManifest.MASTER_BRANCH, + AbapGitWizardPull.this.transportPage.getTransportRequestNumber(), AbapGitWizardPull.this.cloneData.user, + AbapGitWizardPull.this.cloneData.pass, + AbapGitWizardPull.this.repoToSelectedObjects.get(dependencyRepository.getUrl()), monitor); } } } - }); + } - return true; + }; - } catch (InterruptedException e) { - return false; - } catch (InvocationTargetException e) { - ((WizardPage) getContainer().getCurrentPage()).setPageComplete(false); - ((WizardPage) getContainer().getCurrentPage()).setMessage(e.getTargetException().getMessage(), DialogPage.ERROR); - return false; - } catch (ResourceException e) { - ((WizardPage) getContainer().getCurrentPage()).setPageComplete(false); - ((WizardPage) getContainer().getCurrentPage()).setMessage(e.getMessage(), DialogPage.ERROR); - return false; - } + pullRepoJob.setUser(true); // Shows the job in progress view + pullRepoJob.schedule(); + + return true; } + @Override public void setContainer(IWizardContainer wizardContainer) { super.setContainer(wizardContainer); diff --git a/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/wizards/AbapGitWizardSelectivePullAfterLink.java b/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/wizards/AbapGitWizardSelectivePullAfterLink.java index 30c4b53..16977ba 100644 --- a/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/wizards/AbapGitWizardSelectivePullAfterLink.java +++ b/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/wizards/AbapGitWizardSelectivePullAfterLink.java @@ -1,8 +1,8 @@ package org.abapgit.adt.ui.internal.wizards; -import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; +import java.util.Set; import org.abapgit.adt.backend.IApackManifest; import org.abapgit.adt.backend.IApackManifest.IApackDependency; @@ -13,20 +13,25 @@ import org.abapgit.adt.backend.model.agitpullmodifiedobjects.IAbapGitPullModifiedObjects; import org.abapgit.adt.ui.AbapGitUIPlugin; import org.abapgit.adt.ui.internal.i18n.Messages; +import org.abapgit.adt.ui.internal.repositories.IRepositoryModifiedObjects; import org.abapgit.adt.ui.internal.util.AbapGitUIServiceFactory; import org.abapgit.adt.ui.internal.wizards.AbapGitWizard.CloneData; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.dialogs.DialogPage; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.IMessageProvider; -import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.wizard.IWizardContainer; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; import com.sap.adt.communication.resources.ResourceException; @@ -75,18 +80,19 @@ public void addPages() { @Override public boolean performFinish() { + Set overwriteObjects = this.pageOverwriteObjectsSelection.getSelectedObjects(); + Set packageWarningObjects = this.pagePackageWarningObjectsSelection.getSelectedObjects(); try { - getContainer().run(true, true, new IRunnableWithProgress() { + Job pullJob = new Job(Messages.AbapGitWizard_task_pulling_repository) { @Override - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + protected IStatus run(IProgressMonitor monitor) { monitor.beginTask(Messages.AbapGitWizard_task_pulling_repository, IProgressMonitor.UNKNOWN); IRepositories repositories = AbapGitWizardSelectivePullAfterLink.this.repoService.getRepositories(monitor); AbapGitWizardSelectivePullAfterLink.this.repoToSelectedObjectsMap = AbapGitUIServiceFactory.createAbapGitPullService() .getSelectedObjectsToPullforRepo( - AbapGitWizardSelectivePullAfterLink.this.pageOverwriteObjectsSelection.getSelectedObjects(), - AbapGitWizardSelectivePullAfterLink.this.pagePackageWarningObjectsSelection.getSelectedObjects()); + overwriteObjects, packageWarningObjects); IRepository repository = AbapGitWizardSelectivePullAfterLink.this.repoService.getRepositoryByURL(repositories, AbapGitWizardSelectivePullAfterLink.this.cloneData.url); @@ -100,6 +106,8 @@ public void run(IProgressMonitor monitor) throws InvocationTargetException, Inte if (AbapGitWizardSelectivePullAfterLink.this.cloneData.hasDependencies()) { pullDependencies(monitor, AbapGitWizardSelectivePullAfterLink.this.repoService); } + + return Status.OK_STATUS; } private void pullDependencies(IProgressMonitor monitor, IRepositoryService repoService) { @@ -119,15 +127,18 @@ private void pullDependencies(IProgressMonitor monitor, IRepositoryService repoS } } } - }); + }; + + pullJob.setUser(true); + pullJob.schedule(); return true; - } catch (InterruptedException e) { - return false; - } catch (InvocationTargetException e) { - ((WizardPage) getContainer().getCurrentPage()).setPageComplete(false); - ((WizardPage) getContainer().getCurrentPage()).setMessage(e.getTargetException().getMessage(), DialogPage.ERROR); + } catch (Exception e) { + Display.getDefault().asyncExec(() -> { + Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); + MessageDialog.openError(shell, "Error", e.getMessage()); //$NON-NLS-1$ + }); return false; } }