public IResource[] getResourcesToDelete() {
   List<IResource> resources = new ArrayList<IResource>(dependencyMap.size());
   IPath projectPath = project.getLocation();
   IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
   for (ProjectDependency pd : dependencyMap.keySet()) {
     if (pd.getDependencyKind() == DependencyKind.Archive) {
       IPath p = pd.getPath();
       if (projectPath.isPrefixOf(p)) {
         p = p.removeFirstSegments(projectPath.segmentCount() - 1);
       }
       IFile f = root.getFile(p);
       if (f.exists() && project.equals(f.getProject())) {
         resources.add(f);
       }
     }
   }
   return resources.toArray(new IResource[0]);
 }
  private void initJobs() {
    if (identificationJobs == null) {
      identificationJobs = new HashMap<ProjectDependency, IdentificationJob>(dependencyMap.size());

      Table t = dependenciesViewer.getTable();
      IFileIdentificationManager fileIdentificationManager = new FileIdentificationManager();

      for (final TableItem item : t.getItems()) {
        final ProjectDependency projectDep = (ProjectDependency) item.getData();
        Dependency mavenDep = dependencyMap.get(projectDep);
        if (mavenDep != null) {
          // already identified
          continue;
        }
        File jar;
        try {
          final IdentificationJob job;
          if (projectDep.getDependencyKind() == ProjectDependency.DependencyKind.Project) {
            job =
                new IdentifyProjectJob(
                    "Search the Maven coordinates for " + projectDep.getPath(),
                    projectDep.getPath());
          } else if (projectDep.getDependencyKind() == ProjectDependency.DependencyKind.Archive) {
            jar = ConversionUtils.getFile(projectDep.getPath());
            job =
                new IdentifyJarJob(
                    "Search the Maven coordinates for " + jar.getAbsolutePath(),
                    fileIdentificationManager,
                    jar);
          } else {
            job =
                new DependencyResolutionJob(
                    "Resolve the Maven dependency for " + projectDep.getPath());
          }

          job.addJobChangeListener(
              new IJobChangeListener() {

                @Override
                public void sleeping(IJobChangeEvent event) {
                  // refreshUI();
                }

                @Override
                public void scheduled(IJobChangeEvent event) {
                  // refreshUI();
                }

                @Override
                public void running(IJobChangeEvent event) {
                  refreshUI();
                }

                @Override
                public void done(IJobChangeEvent event) {
                  Dependency d = job.getDependency();
                  dependencyMap.put(projectDep, d);
                  if (d != null) {
                    dependencyResolution.put(getKey(d), job.isResolvable());
                  }
                  refreshUI();
                }

                @Override
                public void awake(IJobChangeEvent event) {
                  // refreshUI();
                }

                @Override
                public void aboutToRun(IJobChangeEvent event) {
                  // refreshUI();
                }

                private void refreshUI() {
                  Display.getDefault()
                      .syncExec(
                          new Runnable() {
                            @Override
                            public void run() {
                              refresh(projectDep);
                            }
                          });
                }
              });
          identificationJobs.put(projectDep, job);
        } catch (CoreException e) {
          e.printStackTrace();
        }
      }
    }
  }