|
4 | 4 | import java.util.HashMap; |
5 | 5 | import java.util.List; |
6 | 6 | import java.util.Map; |
| 7 | +import java.util.Set; |
7 | 8 |
|
8 | 9 | import org.abapgit.adt.backend.IApackManifest; |
9 | 10 | import org.abapgit.adt.backend.IApackManifest.IApackDependency; |
|
14 | 15 | import org.abapgit.adt.backend.model.agitpullmodifiedobjects.IAbapGitPullModifiedObjects; |
15 | 16 | import org.abapgit.adt.ui.AbapGitUIPlugin; |
16 | 17 | import org.abapgit.adt.ui.internal.i18n.Messages; |
| 18 | +import org.abapgit.adt.ui.internal.repositories.IRepositoryModifiedObjects; |
17 | 19 | import org.abapgit.adt.ui.internal.util.AbapGitUIServiceFactory; |
18 | 20 | import org.abapgit.adt.ui.internal.wizards.AbapGitWizard.CloneData; |
19 | 21 | import org.eclipse.core.resources.IProject; |
20 | 22 | import org.eclipse.core.runtime.Assert; |
21 | 23 | import org.eclipse.core.runtime.IProgressMonitor; |
| 24 | +import org.eclipse.core.runtime.IStatus; |
| 25 | +import org.eclipse.core.runtime.Status; |
| 26 | +import org.eclipse.core.runtime.jobs.Job; |
22 | 27 | import org.eclipse.jface.dialogs.DialogPage; |
23 | 28 | import org.eclipse.jface.dialogs.IMessageProvider; |
24 | 29 | import org.eclipse.jface.dialogs.IPageChangingListener; |
| 30 | +import org.eclipse.jface.dialogs.MessageDialog; |
25 | 31 | import org.eclipse.jface.dialogs.PageChangingEvent; |
26 | 32 | import org.eclipse.jface.operation.IRunnableWithProgress; |
27 | 33 | import org.eclipse.jface.wizard.IWizardContainer; |
28 | 34 | import org.eclipse.jface.wizard.IWizardPage; |
29 | 35 | import org.eclipse.jface.wizard.Wizard; |
30 | 36 | import org.eclipse.jface.wizard.WizardDialog; |
31 | 37 | import org.eclipse.jface.wizard.WizardPage; |
| 38 | +import org.eclipse.swt.widgets.Display; |
| 39 | +import org.eclipse.swt.widgets.Shell; |
32 | 40 | import org.eclipse.ui.PlatformUI; |
33 | 41 | import org.eclipse.ui.plugin.AbstractUIPlugin; |
34 | 42 |
|
@@ -148,61 +156,67 @@ public void addPages() { |
148 | 156 | @Override |
149 | 157 | public boolean performFinish() { |
150 | 158 |
|
151 | | - try { |
152 | | - getContainer().run(true, true, new IRunnableWithProgress() { |
| 159 | + // Extracting variable earlier to ensure consistency in asynchronous code flow |
| 160 | + Set<IRepositoryModifiedObjects> overwriteObjects = AbapGitWizardPull.this.pageOverwriteObjectsSelection.getSelectedObjects(); |
| 161 | + Set<IRepositoryModifiedObjects> packageWarningObjects = AbapGitWizardPull.this.pagePackageWarningObjectsSelection |
| 162 | + .getSelectedObjects(); |
153 | 163 |
|
154 | | - @Override |
155 | | - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { |
| 164 | + Job pullRepoJob = new Job(Messages.AbapGitWizard_task_pulling_repository) { |
| 165 | + @Override |
| 166 | + protected IStatus run(IProgressMonitor monitor) { |
| 167 | + try { |
156 | 168 | monitor.beginTask(Messages.AbapGitWizard_task_pulling_repository, IProgressMonitor.UNKNOWN); |
| 169 | + |
157 | 170 | IRepositoryService repoService = RepositoryServiceFactory.createRepositoryService(AbapGitWizardPull.this.destination, |
158 | 171 | monitor); |
159 | 172 |
|
160 | | - //get the selected objects to be pulled |
| 173 | + // Get the selected objects to be pulled |
161 | 174 | AbapGitWizardPull.this.repoToSelectedObjects = AbapGitUIServiceFactory.createAbapGitPullService() |
162 | | - .getSelectedObjectsToPullforRepo(AbapGitWizardPull.this.pageOverwriteObjectsSelection.getSelectedObjects(), |
163 | | - AbapGitWizardPull.this.pagePackageWarningObjectsSelection.getSelectedObjects()); |
| 175 | + .getSelectedObjectsToPullforRepo(overwriteObjects, packageWarningObjects); |
164 | 176 |
|
165 | | - //pull the selected objects |
| 177 | + // Pull the selected objects |
166 | 178 | repoService.pullRepository(AbapGitWizardPull.this.selRepoData, AbapGitWizardPull.this.selRepoData.getBranchName(), |
167 | 179 | AbapGitWizardPull.this.transportPage.getTransportRequestNumber(), AbapGitWizardPull.this.cloneData.user, |
168 | 180 | AbapGitWizardPull.this.cloneData.pass, |
169 | 181 | AbapGitWizardPull.this.repoToSelectedObjects.get(AbapGitWizardPull.this.selRepoData.getUrl()), monitor); |
170 | 182 |
|
| 183 | + // Pull dependencies if any |
171 | 184 | if (AbapGitWizardPull.this.cloneData.hasDependencies()) { |
172 | 185 | pullDependencies(monitor, repoService); |
173 | 186 | } |
| 187 | + |
| 188 | + return Status.OK_STATUS; |
| 189 | + } catch (ResourceException e) { |
| 190 | + Display.getDefault().asyncExec(() -> { |
| 191 | + Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); |
| 192 | + MessageDialog.openError(shell, "Error", e.getMessage()); //$NON-NLS-1$ |
| 193 | + }); |
| 194 | + return new Status(IStatus.ERROR, AbapGitUIPlugin.PLUGIN_ID, e.getMessage(), e); |
174 | 195 | } |
| 196 | + } |
175 | 197 |
|
176 | | - private void pullDependencies(IProgressMonitor monitor, IRepositoryService repoService) { |
177 | | - for (IApackDependency apackDependency : AbapGitWizardPull.this.cloneData.apackManifest.getDescriptor() |
178 | | - .getDependencies()) { |
179 | | - if (apackDependency.requiresSynchronization()) { |
180 | | - IRepository dependencyRepository = repoService.getRepositoryByURL(AbapGitWizardPull.this.cloneData.repositories, |
181 | | - apackDependency.getGitUrl()); |
182 | | - if (dependencyRepository != null) { |
183 | | - repoService.pullRepository(dependencyRepository, IApackManifest.MASTER_BRANCH, |
184 | | - AbapGitWizardPull.this.transportPage.getTransportRequestNumber(), |
185 | | - AbapGitWizardPull.this.cloneData.user, AbapGitWizardPull.this.cloneData.pass, |
186 | | - AbapGitWizardPull.this.repoToSelectedObjects.get(dependencyRepository.getUrl()), monitor); |
| 198 | + private void pullDependencies(IProgressMonitor monitor, IRepositoryService repoService) { |
| 199 | + for (IApackDependency apackDependency : AbapGitWizardPull.this.cloneData.apackManifest.getDescriptor().getDependencies()) { |
| 200 | + if (apackDependency.requiresSynchronization()) { |
| 201 | + IRepository dependencyRepository = repoService.getRepositoryByURL(AbapGitWizardPull.this.cloneData.repositories, |
| 202 | + apackDependency.getGitUrl()); |
| 203 | + if (dependencyRepository != null) { |
| 204 | + repoService.pullRepository(dependencyRepository, IApackManifest.MASTER_BRANCH, |
| 205 | + AbapGitWizardPull.this.transportPage.getTransportRequestNumber(), AbapGitWizardPull.this.cloneData.user, |
| 206 | + AbapGitWizardPull.this.cloneData.pass, |
| 207 | + AbapGitWizardPull.this.repoToSelectedObjects.get(dependencyRepository.getUrl()), monitor); |
| 208 | + } |
187 | 209 | } |
188 | 210 | } |
189 | 211 | } |
190 | | - } |
191 | | - }); |
192 | 212 |
|
193 | | - return true; |
| 213 | + }; |
| 214 | + |
| 215 | + pullRepoJob.setUser(true); // Shows the job in progress view |
| 216 | + pullRepoJob.schedule(); |
| 217 | + |
| 218 | + return true; |
194 | 219 |
|
195 | | - } catch (InterruptedException e) { |
196 | | - return false; |
197 | | - } catch (InvocationTargetException e) { |
198 | | - ((WizardPage) getContainer().getCurrentPage()).setPageComplete(false); |
199 | | - ((WizardPage) getContainer().getCurrentPage()).setMessage(e.getTargetException().getMessage(), DialogPage.ERROR); |
200 | | - return false; |
201 | | - } catch (ResourceException e) { |
202 | | - ((WizardPage) getContainer().getCurrentPage()).setPageComplete(false); |
203 | | - ((WizardPage) getContainer().getCurrentPage()).setMessage(e.getMessage(), DialogPage.ERROR); |
204 | | - return false; |
205 | | - } |
206 | 220 | } |
207 | 221 |
|
208 | 222 | @Override |
|
0 commit comments