From b1b9252cb17f45c5c64e5917595741682608b7d4 Mon Sep 17 00:00:00 2001 From: aarnapant-sap Date: Thu, 23 Oct 2025 14:36:38 +0530 Subject: [PATCH 1/4] background framework implementation chanegs --- .../adt/backend/IRepositoryService.java | 2 + .../backend/internal/RepositoryService.java | 13 ++- .../internal/wizards/AbapGitWizardPull.java | 80 +++++++++++-------- 3 files changed, 58 insertions(+), 37 deletions(-) diff --git a/org.abapgit.adt.backend/src/org/abapgit/adt/backend/IRepositoryService.java b/org.abapgit.adt.backend/src/org/abapgit/adt/backend/IRepositoryService.java index c059c1dd..d8c1913f 100644 --- a/org.abapgit.adt.backend/src/org/abapgit/adt/backend/IRepositoryService.java +++ b/org.abapgit.adt.backend/src/org/abapgit/adt/backend/IRepositoryService.java @@ -17,6 +17,8 @@ public interface IRepositoryService { + // CHNG: Remove new pull relation + String RELATION_PULL_NEW = "http://www.sap.com/adt/abapgit/relations/pullTry"; //$NON-NLS-1$ String RELATION_PULL = "http://www.sap.com/adt/abapgit/relations/pull"; //$NON-NLS-1$ String RELATION_STATUS = "http://www.sap.com/adt/abapgit/relations/status"; //$NON-NLS-1$ String RELATION_LOG = "http://www.sap.com/adt/abapgit/relations/log"; //$NON-NLS-1$ diff --git a/org.abapgit.adt.backend/src/org/abapgit/adt/backend/internal/RepositoryService.java b/org.abapgit.adt.backend/src/org/abapgit/adt/backend/internal/RepositoryService.java index 9b0c593a..ab912c46 100644 --- a/org.abapgit.adt.backend/src/org/abapgit/adt/backend/internal/RepositoryService.java +++ b/org.abapgit.adt.backend/src/org/abapgit/adt/backend/internal/RepositoryService.java @@ -33,6 +33,7 @@ public class RepositoryService implements IRepositoryService { private final String destinationId; private final URI uri; + private String result; public RepositoryService(String destinationId, URI uri) { this.destinationId = destinationId; @@ -292,13 +293,17 @@ public IAbapGitPullModifiedObjects getModifiedObjects(IProgressMonitor monitor, } + // CHNG: Change it back to original pull relation @Override public IAbapObjects pullRepository(IRepository existingRepository, String branch, String transportRequest, String user, String password, IAbapGitPullModifiedObjects selectedObjectsToPull, IProgressMonitor monitor) { - URI uriToRepo = getURIFromAtomLink(existingRepository, IRepositoryService.RELATION_PULL); - IRestResource restResource = AdtRestResourceFactory.createRestResourceFactory().createResourceWithStatelessSession(uriToRepo, - this.destinationId); - + URI uriToRepo = getURIFromAtomLink(existingRepository, IRepositoryService.RELATION_PULL_NEW); + URI backgroundUri = AdtBackgroundRunUriDiscoveryFactory.createBackgroundRunUriDiscovery(this.destinationId) + .getBackgroundRunUriIfAuthorized(monitor); + IRestResource restResource = AdtBackgroundRestResourceFactory.createBackgroundRestResourceFactory() + .createResourceWithStatelessSession(backgroundUri, uriToRepo, this.destinationId); +// IRestResource restResource = AdtRestResourceFactory.createRestResourceFactory().createResourceWithStatelessSession(uriToRepo, +// this.destinationId); IContentHandler requestContentHandlerV1 = new AbapGitPullRequestContentHandler(); restResource.addContentHandler(requestContentHandlerV1); 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 bd5778a7..27c1fb6c 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,61 +156,67 @@ 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(); - @Override - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + Job pullRepoJob = new Job(Messages.AbapGitWizard_task_pulling_repository) { + @Override + protected IStatus run(IProgressMonitor monitor) { + try { 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; + }; + + pullRepoJob.setUser(true); // Shows the job in progress view + pullRepoJob.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); - return false; - } catch (ResourceException e) { - ((WizardPage) getContainer().getCurrentPage()).setPageComplete(false); - ((WizardPage) getContainer().getCurrentPage()).setMessage(e.getMessage(), DialogPage.ERROR); - return false; - } } @Override From fea7118d1bdbe7c06d46a1912cdafde3cedb0099 Mon Sep 17 00:00:00 2001 From: aarnapant-sap Date: Tue, 4 Nov 2025 16:38:46 +0530 Subject: [PATCH 2/4] changing the relation name to sync with backend --- .../src/org/abapgit/adt/backend/IRepositoryService.java | 2 +- .../src/org/abapgit/adt/backend/internal/RepositoryService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/org.abapgit.adt.backend/src/org/abapgit/adt/backend/IRepositoryService.java b/org.abapgit.adt.backend/src/org/abapgit/adt/backend/IRepositoryService.java index d8c1913f..75107c67 100644 --- a/org.abapgit.adt.backend/src/org/abapgit/adt/backend/IRepositoryService.java +++ b/org.abapgit.adt.backend/src/org/abapgit/adt/backend/IRepositoryService.java @@ -18,7 +18,7 @@ public interface IRepositoryService { // CHNG: Remove new pull relation - String RELATION_PULL_NEW = "http://www.sap.com/adt/abapgit/relations/pullTry"; //$NON-NLS-1$ + String RELATION_PULL_WITHOUT_BG = "http://www.sap.com/adt/abapgit/relations/pullwithoutbg"; //$NON-NLS-1$ String RELATION_PULL = "http://www.sap.com/adt/abapgit/relations/pull"; //$NON-NLS-1$ String RELATION_STATUS = "http://www.sap.com/adt/abapgit/relations/status"; //$NON-NLS-1$ String RELATION_LOG = "http://www.sap.com/adt/abapgit/relations/log"; //$NON-NLS-1$ diff --git a/org.abapgit.adt.backend/src/org/abapgit/adt/backend/internal/RepositoryService.java b/org.abapgit.adt.backend/src/org/abapgit/adt/backend/internal/RepositoryService.java index ab912c46..f3b134e4 100644 --- a/org.abapgit.adt.backend/src/org/abapgit/adt/backend/internal/RepositoryService.java +++ b/org.abapgit.adt.backend/src/org/abapgit/adt/backend/internal/RepositoryService.java @@ -297,7 +297,7 @@ public IAbapGitPullModifiedObjects getModifiedObjects(IProgressMonitor monitor, @Override public IAbapObjects pullRepository(IRepository existingRepository, String branch, String transportRequest, String user, String password, IAbapGitPullModifiedObjects selectedObjectsToPull, IProgressMonitor monitor) { - URI uriToRepo = getURIFromAtomLink(existingRepository, IRepositoryService.RELATION_PULL_NEW); + URI uriToRepo = getURIFromAtomLink(existingRepository, IRepositoryService.RELATION_PULL_WITHOUT_BG); URI backgroundUri = AdtBackgroundRunUriDiscoveryFactory.createBackgroundRunUriDiscovery(this.destinationId) .getBackgroundRunUriIfAuthorized(monitor); IRestResource restResource = AdtBackgroundRestResourceFactory.createBackgroundRestResourceFactory() From c09cf6db2055a3ecb322b9481ee6ee4320b59562 Mon Sep 17 00:00:00 2001 From: aarnapant-sap Date: Tue, 4 Nov 2025 16:44:43 +0530 Subject: [PATCH 3/4] removing additional error popup dialog --- .../abapgit/adt/ui/internal/wizards/AbapGitWizardPull.java | 7 ------- 1 file changed, 7 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 27c1fb6c..ce1f5a92 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 @@ -27,7 +27,6 @@ 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; @@ -35,8 +34,6 @@ 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; @@ -187,10 +184,6 @@ protected IStatus run(IProgressMonitor monitor) { 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); } } From 9a415acd495348405c13705ae32ccdff67895a2a Mon Sep 17 00:00:00 2001 From: aarnapant-sap Date: Tue, 18 Nov 2025 17:20:45 +0530 Subject: [PATCH 4/4] resource relation handling, Util class for AbapGitView --- .../adt/backend/IRepositoryService.java | 3 +- .../backend/internal/RepositoryService.java | 47 ++++++++++++------- .../ui/internal/repositories/AbapGitView.java | 3 +- .../repositories/AbapGitViewUtils.java | 33 +++++++++++++ .../actions/SwitchbranchAction.java | 3 +- .../internal/wizards/AbapGitWizardPull.java | 3 ++ 6 files changed, 70 insertions(+), 22 deletions(-) create mode 100644 org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/repositories/AbapGitViewUtils.java diff --git a/org.abapgit.adt.backend/src/org/abapgit/adt/backend/IRepositoryService.java b/org.abapgit.adt.backend/src/org/abapgit/adt/backend/IRepositoryService.java index 75107c67..76cfa201 100644 --- a/org.abapgit.adt.backend/src/org/abapgit/adt/backend/IRepositoryService.java +++ b/org.abapgit.adt.backend/src/org/abapgit/adt/backend/IRepositoryService.java @@ -17,9 +17,8 @@ public interface IRepositoryService { - // CHNG: Remove new pull relation - String RELATION_PULL_WITHOUT_BG = "http://www.sap.com/adt/abapgit/relations/pullwithoutbg"; //$NON-NLS-1$ String RELATION_PULL = "http://www.sap.com/adt/abapgit/relations/pull"; //$NON-NLS-1$ + String RELATION_PULL_WITHOUT_BG = "http://www.sap.com/adt/abapgit/relations/pull/v2"; //$NON-NLS-1$ String RELATION_STATUS = "http://www.sap.com/adt/abapgit/relations/status"; //$NON-NLS-1$ String RELATION_LOG = "http://www.sap.com/adt/abapgit/relations/log"; //$NON-NLS-1$ String RELATION_STAGE = "http://www.sap.com/adt/abapgit/relations/stage"; //$NON-NLS-1$ diff --git a/org.abapgit.adt.backend/src/org/abapgit/adt/backend/internal/RepositoryService.java b/org.abapgit.adt.backend/src/org/abapgit/adt/backend/internal/RepositoryService.java index f3b134e4..62b3379e 100644 --- a/org.abapgit.adt.backend/src/org/abapgit/adt/backend/internal/RepositoryService.java +++ b/org.abapgit.adt.backend/src/org/abapgit/adt/backend/internal/RepositoryService.java @@ -102,7 +102,8 @@ public IAbapObjects cloneRepository(String url, String branch, String targetPack IContentHandler responseContentHandlerV1 = new AbapObjectContentHandlerV1(); restResource.addContentHandler(responseContentHandlerV1); - IAdtCompatibleRestResourceFilter compatibilityFilter = AdtCompatibleRestResourceFilterFactory.createFilter(responseContentHandlerV1); + IAdtCompatibleRestResourceFilter compatibilityFilter = AdtCompatibleRestResourceFilterFactory + .createFilter(responseContentHandlerV1); restResource.addRequestFilter(compatibilityFilter); return restResource.post(monitor, IAbapObjects.class, repository); @@ -205,8 +206,7 @@ public void repositoryChecks(IProgressMonitor monitor, IExternalRepositoryInfoRe restResource.addRequestFilter(compatibilityFilter); restResource.addResponseFilter(compatibilityFilter); if (credentials != null) { - headers = getHttpHeadersForCredentials(credentials.getUser(), - credentials.getPassword()); + headers = getHttpHeadersForCredentials(credentials.getUser(), credentials.getPassword()); } restResource.post(monitor, headers, null); } @@ -268,8 +268,8 @@ public URI getURIFromAtomLink(IRepository repository, String relation) { } @Override - public IAbapGitPullModifiedObjects getModifiedObjects(IProgressMonitor monitor, IRepository currRepository, - String user, String password) throws OutDatedClientException { + public IAbapGitPullModifiedObjects getModifiedObjects(IProgressMonitor monitor, IRepository currRepository, String user, + String password) throws OutDatedClientException { URI uriToModifiedObjects = getURIFromAtomLink(currRepository, IRepositoryService.RELATION_MODIFIED_OBJECTS); IHeaders headers = null; @@ -278,8 +278,7 @@ public IAbapGitPullModifiedObjects getModifiedObjects(IProgressMonitor monitor, } IRestResource restResource = AdtRestResourceFactory.createRestResourceFactory() - .createResourceWithStatelessSession(uriToModifiedObjects, - this.destinationId); + .createResourceWithStatelessSession(uriToModifiedObjects, this.destinationId); IContentHandler responseContentHandlerV1 = new AbapGitPullModifiedObjectsContentHandlerV1(); restResource.addContentHandler(responseContentHandlerV1); @@ -297,13 +296,27 @@ public IAbapGitPullModifiedObjects getModifiedObjects(IProgressMonitor monitor, @Override public IAbapObjects pullRepository(IRepository existingRepository, String branch, String transportRequest, String user, String password, IAbapGitPullModifiedObjects selectedObjectsToPull, IProgressMonitor monitor) { - URI uriToRepo = getURIFromAtomLink(existingRepository, IRepositoryService.RELATION_PULL_WITHOUT_BG); - URI backgroundUri = AdtBackgroundRunUriDiscoveryFactory.createBackgroundRunUriDiscovery(this.destinationId) - .getBackgroundRunUriIfAuthorized(monitor); - IRestResource restResource = AdtBackgroundRestResourceFactory.createBackgroundRestResourceFactory() - .createResourceWithStatelessSession(backgroundUri, uriToRepo, this.destinationId); -// IRestResource restResource = AdtRestResourceFactory.createRestResourceFactory().createResourceWithStatelessSession(uriToRepo, -// this.destinationId); + IRestResource restResource = null; + URI uriToRepo = null; + // check if background job framework is available and is accessible by the user. + if (isBackgroundJobSupported(monitor)) { + // get new pull without background resource URI + uriToRepo = getURIFromAtomLink(existingRepository, IRepositoryService.RELATION_PULL_WITHOUT_BG); + // check whether URI is available in the system (this depends on the back end version) + if (uriToRepo != null) { + restResource = getBackgroundRestResource(uriToRepo.getPath(), this.destinationId, monitor); + } + } + // if rest resource is still null, rollback to normal pull URI + if (restResource == null) { + uriToRepo = getURIFromAtomLink(existingRepository, IRepositoryService.RELATION_PULL); + restResource = AdtRestResourceFactory.createRestResourceFactory().createResourceWithStatelessSession(uriToRepo, + this.destinationId); + } + if (restResource == null) { + // if rest resource could not be created, throw exception + throw new IllegalStateException("Unable to create REST resource for pull operation."); //$NON-NLS-1$ + } IContentHandler requestContentHandlerV1 = new AbapGitPullRequestContentHandler(); restResource.addContentHandler(requestContentHandlerV1); @@ -321,9 +334,9 @@ public IAbapObjects pullRepository(IRepository existingRepository, String branch } if (selectedObjectsToPull != null) { - abapGitPullReq.setPackageWarningObjects(selectedObjectsToPull.getPackageWarningObjects()); - abapGitPullReq.setOverwriteObjects(selectedObjectsToPull.getOverwriteObjects()); - } + abapGitPullReq.setPackageWarningObjects(selectedObjectsToPull.getPackageWarningObjects()); + abapGitPullReq.setOverwriteObjects(selectedObjectsToPull.getOverwriteObjects()); + } IAdtCompatibleRestResourceFilter compatibilityFilter = AdtCompatibleRestResourceFilterFactory.createFilter(new IContentHandler[0]); restResource.addRequestFilter(compatibilityFilter); diff --git a/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/repositories/AbapGitView.java b/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/repositories/AbapGitView.java index 45cdc490..f9be02a2 100644 --- a/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/repositories/AbapGitView.java +++ b/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/repositories/AbapGitView.java @@ -563,9 +563,8 @@ public void run() { WizardDialog wizardDialog = new WizardDialog(AbapGitView.this.viewer.getControl().getShell(), new AbapGitWizardPull(AbapGitView.this.lastProject, this.selRepo, allRepositories)); wizardDialog.open(); - } - updateView(true); + } } }; this.actionPullWizard.setText(Messages.AbapGitView_context_pull); diff --git a/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/repositories/AbapGitViewUtils.java b/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/repositories/AbapGitViewUtils.java new file mode 100644 index 00000000..e610d4e6 --- /dev/null +++ b/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/repositories/AbapGitViewUtils.java @@ -0,0 +1,33 @@ +package org.abapgit.adt.ui.internal.repositories; + +import org.eclipse.ui.IViewPart; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PlatformUI; + +public class AbapGitViewUtils { + private static AbapGitViewUtils instance; + + private AbapGitViewUtils() {} + + public static synchronized AbapGitViewUtils getInstance() { + if (instance == null) { + instance = new AbapGitViewUtils(); + } + return instance; + } + + public void refreshView() { + org.eclipse.swt.widgets.Display.getDefault().asyncExec(() -> { + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null + ? PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() + : null; + if (page != null) { + IViewPart view = page.findView(AbapGitView.ID); + if (view instanceof AbapGitView) { + ((AbapGitView) view).refresh(); + } + } + }); + } + +} \ No newline at end of file diff --git a/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/repositories/actions/SwitchbranchAction.java b/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/repositories/actions/SwitchbranchAction.java index 07499642..35f9e58b 100644 --- a/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/repositories/actions/SwitchbranchAction.java +++ b/org.abapgit.adt.ui/src/org/abapgit/adt/ui/internal/repositories/actions/SwitchbranchAction.java @@ -7,6 +7,7 @@ import org.abapgit.adt.ui.AbapGitUIPlugin; import org.abapgit.adt.ui.internal.i18n.Messages; import org.abapgit.adt.ui.internal.repositories.AbapGitView; +import org.abapgit.adt.ui.internal.repositories.AbapGitViewUtils; import org.abapgit.adt.ui.internal.repositories.exceptions.PackageRefNotFoundException; import org.abapgit.adt.ui.internal.wizards.AbapGitWizardSwitchBranch; import org.eclipse.core.resources.IProject; @@ -54,7 +55,7 @@ public void run() { e.getLocalizedMessage()); } } - this.AbapGitView.refresh(); + AbapGitViewUtils.getInstance().refreshView(); } 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 ce1f5a92..68cff99f 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 @@ -15,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.AbapGitViewUtils; 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; @@ -185,6 +186,8 @@ protected IStatus run(IProgressMonitor monitor) { return Status.OK_STATUS; } catch (ResourceException e) { return new Status(IStatus.ERROR, AbapGitUIPlugin.PLUGIN_ID, e.getMessage(), e); + } finally { + AbapGitViewUtils.getInstance().refreshView(); } }