Eclipseplugins
DbAndBinaryJob.java
1 package com.proalpha.pds.gitutils.external;
2 
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.List;
6 
7 import org.eclipse.core.resources.IProject;
8 import org.eclipse.core.runtime.IProgressMonitor;
9 import org.eclipse.core.runtime.IStatus;
10 import org.eclipse.core.runtime.Status;
11 import org.eclipse.core.runtime.SubMonitor;
12 import org.eclipse.core.runtime.jobs.Job;
13 import org.eclipse.egit.core.internal.util.ProjectUtil;
14 import org.eclipse.egit.ui.JobFamilies;
15 import org.eclipse.jgit.lib.Repository;
16 import org.eclipse.ui.PlatformUI;
17 
18 import com.proalpha.pds.gitutils.mylyn.ActionResult;
19 import com.proalpha.pds.gitutils.mylyn.ActionResultDialog;
20 import com.proalpha.pds.gitutils.mylyn.ReconcileActionSettings;
21 import com.proalpha.pds.paconnector.Activator;
22 
30 @SuppressWarnings("restriction")
31 public class DbAndBinaryJob extends Job {
32 
33  private final DbAndBinaryOperation operation;
34  private final ReconcileActionSettings recoSettings;
35  private final Repository repository;
36 
37  public DbAndBinaryJob(Repository repository, ReconcileActionSettings recoSettings) {
38  super("Running database reconcile and update of binaries");
39  this.operation = new DbAndBinaryOperation(repository, recoSettings);
40  this.recoSettings = recoSettings;
41  this.repository = repository;
42  }
43 
44  @Override
45  protected IStatus run(IProgressMonitor monitor) {
46  SubMonitor progressMonitor = SubMonitor.convert(monitor, "checking for relevant updates on current branch...",
47  1);
48 
49  // collect all affected projects which include the repository
50  IProject[] projects = ProjectUtil.getProjects(repository);
51  ArrayList<IProject> openedProjects = new ArrayList<>(Arrays.asList(projects));
52  SubMonitor subMonitorArtifacts = SubMonitor.convert(monitor, "database reconcile and artifact update",
53  recoSettings.getPaUpdateStages().size());
54 
55  if (recoSettings.isLoadDf())
56  Activator.getDefault().getProjectManager().closeProjects(openedProjects, subMonitorArtifacts);
57 
58  operation.setProgressMonitor(progressMonitor);
59  operation.execute();
60 
61  if (recoSettings.isLoadDf())
62  Activator.getDefault().getProjectManager().openProjects(openedProjects, subMonitorArtifacts);
63  showResultDialog(operation.getActionResults());
64  return Status.OK_STATUS;
65 
66  }
67 
68  @Override
69  public boolean belongsTo(Object family) {
70  if (JobFamilies.CHECKOUT.equals(family))
71  return true;
72  return super.belongsTo(family);
73  }
74 
75  private void showResultDialog(List<ActionResult> results) {
76  PlatformUI.getWorkbench().getDisplay().asyncExec(
77  () -> new ActionResultDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), results)
78  .open());
79  }
80 
81 }