From c389b02c5c9027ea7b7d83458584157989dcb1a0 Mon Sep 17 00:00:00 2001 From: Aarnav Pant Date: Wed, 14 May 2025 12:34:37 +0530 Subject: [PATCH 1/3] changes for push channel support --- .../internal/wizards/AbapGitWizardPull.java | 77 +++++++++++-------- .../AbapGitWizardSelectivePullAfterLink.java | 39 ++++++---- 2 files changed, 69 insertions(+), 47 deletions(-) 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..d73e212 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 @@ -19,9 +19,13 @@ 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 +33,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; @@ -147,64 +153,69 @@ public void addPages() { @Override public boolean performFinish() { + Job pullRepoJob = new Job("Pulling Repository") { //$NON-NLS-1$ + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + monitor.beginTask(Messages.AbapGitWizard_task_pulling_repository, 100); - try { - getContainer().run(true, true, new IRunnableWithProgress() { - - @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()); - //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) { + showErrorMessage(e.getMessage()); + return new Status(IStatus.ERROR, "", e.getMessage(), e); //$NON-NLS-1$ } + } - 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 dependency : AbapGitWizardPull.this.cloneData.apackManifest.getDescriptor().getDependencies()) { + if (dependency.requiresSynchronization()) { + IRepository dependencyRepo = repoService.getRepositoryByURL(AbapGitWizardPull.this.cloneData.repositories, + dependency.getGitUrl()); + if (dependencyRepo != null) { + repoService.pullRepository(dependencyRepo, IApackManifest.MASTER_BRANCH, + AbapGitWizardPull.this.transportPage.getTransportRequestNumber(), AbapGitWizardPull.this.cloneData.user, + AbapGitWizardPull.this.cloneData.pass, + AbapGitWizardPull.this.repoToSelectedObjects.get(dependencyRepo.getUrl()), monitor); } } } - }); + } - return true; + private void showErrorMessage(String message) { + Display.getDefault().asyncExec(() -> { + Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); + MessageDialog.openError(shell, "Error", message); //$NON-NLS-1$ + }); + } + }; - } 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..4c5715a 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 pageOverwriteObjects = this.pageOverwriteObjectsSelection.getSelectedObjects(); + Set pagePackageWarningObjects = this.pagePackageWarningObjectsSelection.getSelectedObjects(); try { - getContainer().run(true, true, new IRunnableWithProgress() { + Job pullJob = new Job("Pull Repository"){ //$NON-NLS-1$ @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()); + pageOverwriteObjects, pagePackageWarningObjects); 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; } } From 5c04b9235f3e6029fccd082c58c10cefb6faeb6a Mon Sep 17 00:00:00 2001 From: Aarnav Pant Date: Wed, 14 May 2025 12:56:01 +0530 Subject: [PATCH 2/3] extracting data in variables out of job --- .../adt/ui/internal/wizards/AbapGitWizardPull.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 d73e212..baa97ec 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,6 +15,7 @@ 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; @@ -153,6 +155,12 @@ public void addPages() { @Override public boolean performFinish() { + + // Extracting variable earlier to ensure consistency in asynchronous code flow + Set pageOverwriteObjects = AbapGitWizardPull.this.pageOverwriteObjectsSelection.getSelectedObjects(); + Set pacgePackageWarningObjects = AbapGitWizardPull.this.pagePackageWarningObjectsSelection + .getSelectedObjects(); + Job pullRepoJob = new Job("Pulling Repository") { //$NON-NLS-1$ @Override protected IStatus run(IProgressMonitor monitor) { @@ -164,8 +172,7 @@ protected IStatus run(IProgressMonitor monitor) { // Get the selected objects to be pulled AbapGitWizardPull.this.repoToSelectedObjects = AbapGitUIServiceFactory.createAbapGitPullService() - .getSelectedObjectsToPullforRepo(AbapGitWizardPull.this.pageOverwriteObjectsSelection.getSelectedObjects(), - AbapGitWizardPull.this.pagePackageWarningObjectsSelection.getSelectedObjects()); + .getSelectedObjectsToPullforRepo(pageOverwriteObjects, pacgePackageWarningObjects); // Pull the selected objects repoService.pullRepository(AbapGitWizardPull.this.selRepoData, AbapGitWizardPull.this.selRepoData.getBranchName(), From d11b055f3e8acd0423391788abe1428148668b44 Mon Sep 17 00:00:00 2001 From: Aarnav Pant Date: Thu, 22 May 2025 15:15:19 +0530 Subject: [PATCH 3/3] incorporated review changes --- .../internal/wizards/AbapGitWizardPull.java | 36 +++++++++---------- .../AbapGitWizardSelectivePullAfterLink.java | 8 ++--- 2 files changed, 20 insertions(+), 24 deletions(-) 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 baa97ec..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 @@ -157,11 +157,11 @@ public void addPages() { public boolean performFinish() { // Extracting variable earlier to ensure consistency in asynchronous code flow - Set pageOverwriteObjects = AbapGitWizardPull.this.pageOverwriteObjectsSelection.getSelectedObjects(); - Set pacgePackageWarningObjects = AbapGitWizardPull.this.pagePackageWarningObjectsSelection + Set overwriteObjects = AbapGitWizardPull.this.pageOverwriteObjectsSelection.getSelectedObjects(); + Set packageWarningObjects = AbapGitWizardPull.this.pagePackageWarningObjectsSelection .getSelectedObjects(); - Job pullRepoJob = new Job("Pulling Repository") { //$NON-NLS-1$ + Job pullRepoJob = new Job(Messages.AbapGitWizard_task_pulling_repository) { @Override protected IStatus run(IProgressMonitor monitor) { try { @@ -172,7 +172,7 @@ protected IStatus run(IProgressMonitor monitor) { // Get the selected objects to be pulled AbapGitWizardPull.this.repoToSelectedObjects = AbapGitUIServiceFactory.createAbapGitPullService() - .getSelectedObjectsToPullforRepo(pageOverwriteObjects, pacgePackageWarningObjects); + .getSelectedObjectsToPullforRepo(overwriteObjects, packageWarningObjects); // Pull the selected objects repoService.pullRepository(AbapGitWizardPull.this.selRepoData, AbapGitWizardPull.this.selRepoData.getBranchName(), @@ -186,34 +186,30 @@ protected IStatus run(IProgressMonitor monitor) { } return Status.OK_STATUS; - } catch (ResourceException e) { - showErrorMessage(e.getMessage()); - return new Status(IStatus.ERROR, "", e.getMessage(), e); //$NON-NLS-1$ + 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 dependency : AbapGitWizardPull.this.cloneData.apackManifest.getDescriptor().getDependencies()) { - if (dependency.requiresSynchronization()) { - IRepository dependencyRepo = repoService.getRepositoryByURL(AbapGitWizardPull.this.cloneData.repositories, - dependency.getGitUrl()); - if (dependencyRepo != null) { - repoService.pullRepository(dependencyRepo, IApackManifest.MASTER_BRANCH, + 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(dependencyRepo.getUrl()), monitor); + AbapGitWizardPull.this.repoToSelectedObjects.get(dependencyRepository.getUrl()), monitor); } } } } - private void showErrorMessage(String message) { - Display.getDefault().asyncExec(() -> { - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - MessageDialog.openError(shell, "Error", message); //$NON-NLS-1$ - }); - } }; pullRepoJob.setUser(true); // Shows the job in progress view 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 4c5715a..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 @@ -80,10 +80,10 @@ public void addPages() { @Override public boolean performFinish() { - Set pageOverwriteObjects = this.pageOverwriteObjectsSelection.getSelectedObjects(); - Set pagePackageWarningObjects = this.pagePackageWarningObjectsSelection.getSelectedObjects(); + Set overwriteObjects = this.pageOverwriteObjectsSelection.getSelectedObjects(); + Set packageWarningObjects = this.pagePackageWarningObjectsSelection.getSelectedObjects(); try { - Job pullJob = new Job("Pull Repository"){ //$NON-NLS-1$ + Job pullJob = new Job(Messages.AbapGitWizard_task_pulling_repository) { @Override protected IStatus run(IProgressMonitor monitor) { @@ -92,7 +92,7 @@ protected IStatus run(IProgressMonitor monitor) { AbapGitWizardSelectivePullAfterLink.this.repoToSelectedObjectsMap = AbapGitUIServiceFactory.createAbapGitPullService() .getSelectedObjectsToPullforRepo( - pageOverwriteObjects, pagePackageWarningObjects); + overwriteObjects, packageWarningObjects); IRepository repository = AbapGitWizardSelectivePullAfterLink.this.repoService.getRepositoryByURL(repositories, AbapGitWizardSelectivePullAfterLink.this.cloneData.url);