Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -14,21 +15,28 @@
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;
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;

Expand Down Expand Up @@ -148,63 +156,73 @@ 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<IRepositoryModifiedObjects> pageOverwriteObjects = AbapGitWizardPull.this.pageOverwriteObjectsSelection.getSelectedObjects();
Set<IRepositoryModifiedObjects> pacgePackageWarningObjects = AbapGitWizardPull.this.pagePackageWarningObjectsSelection
.getSelectedObjects();

Job pullRepoJob = new Job("Pulling Repository") { //$NON-NLS-1$
@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(pageOverwriteObjects, pacgePackageWarningObjects);

//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;

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we refresh the repositories view after the job is finished ?
I am not very sure.

} catch (ResourceException e) {
showErrorMessage(e.getMessage());
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we need to show the error message explicitly.
It will be taken care of by the Jobs API, once we return the Error Status, like you have done in line 192.

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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -75,18 +80,19 @@ public void addPages() {
@Override
public boolean performFinish() {

Set<IRepositoryModifiedObjects> pageOverwriteObjects = this.pageOverwriteObjectsSelection.getSelectedObjects();
Set<IRepositoryModifiedObjects> pagePackageWarningObjects = this.pagePackageWarningObjectsSelection.getSelectedObjects();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment like in AbapGitWizardPull class.
Can rename the variable names.

try {
getContainer().run(true, true, new IRunnableWithProgress() {
Job pullJob = new Job("Pull Repository"){ //$NON-NLS-1$
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment like in AbapGitWizardPull class.
Can reuse the title here


@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);
Expand All @@ -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) {
Expand All @@ -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$
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment like in AbapGitWizardPull class.
Can reuse the title here.

});
return false;
}
}
Expand Down