private ChangeMindSourcePathPropVarJob(MindProjectImpl mp) {
   super(
       "Change the "
           + Messages.CDTUtil_SourcePath
           + " properties variable for "
           + mp.getProject().getName());
   _mp = mp;
   setRule(mp.getProject());
 }
 private ChangeMindCOMPVarJob(MindProjectImpl mp) {
   super(
       "Change the "
           + Messages.CDTUtil_TargetComponent
           + " and "
           + Messages.CDTUtil_BinaryName
           + " properties variables for "
           + mp.getProject().getName());
   _mp = mp;
   setRule(mp.getProject());
 }
    @Override
    protected IStatus run(IProgressMonitor monitor) {
      try {
        StringBuilder incVar = new StringBuilder();

        boolean isFirst = true;
        for (MindPathEntry currEntry : _mp.getMindpathentries()) {
          if (currEntry.getEntryKind() == MindPathKind.INCLUDE_PATH) {
            // Handle differently workspace paths and absolute file system paths
            // Note: Name MAY NOT be the best attribute...
            IPath p = new Path(currEntry.getName());
            // does the folder exist in the workspace ?
            IFolder f = ResourcesPlugin.getWorkspace().getRoot().getFolder(p);
            if ((f == null) || !f.exists()) {
              // Try to find it on the hard drive
              File file = p.toFile();
              // should be
              if (file.exists() && file.isDirectory()) {

                if (isFirst) isFirst = false; // for next values
                else incVar.append(":");

                incVar.append(currEntry.getName());
              }
            } else {
              /*
               * Only keep values internal to the current project, skip others
               * maybe one day we should modify it to serialize inferred paths
               * from project dependencies.
               */
              if (!f.isLinked() && f.getProject() == _mp.getProject()) {
                if (isFirst) isFirst = false; // for next values
                else incVar.append(":");

                incVar.append(f.getProjectRelativePath().toPortableString());
              }
            }
          }
        }

        MindProperties mp = new MindProperties(_mp.getProject());
        mp.setVarAndSave(Messages.CDTUtil_IncludePath, incVar.toString());
      } catch (CoreException e) {
        MindActivator.log(new Status(Status.ERROR, MindActivator.ID, getName(), e));
      }
      return Status.OK_STATUS;
    }
    @Override
    protected IStatus run(IProgressMonitor monitor) {
      try {
        ArrayList<String> appli = new ArrayList<String>();
        for (MindPathEntry mpe : _mp.getRawMinpath()) {
          if (mpe.getEntryKind() == MindPathKind.APPLI) {
            String mpename = mpe.getName();
            appli.add(mpename);
          }
        }
        StringBuilder srcVar = new StringBuilder();
        for (String a : appli) {
          srcVar.append(a);
          srcVar.append(" ");
        }
        if (srcVar.length() != 0)
          srcVar.setLength(srcVar.length() - 2); // remove last collon if length > 0

        // TODO: enable multi-target + robustness
        MindProperties mp = new MindProperties(_mp.getProject());
        if (!appli.isEmpty()) {
          // Nowadays since our properties file format only can define ONE target/binary
          // combination, we take field 0 only
          // and skip the other ones
          String appli0 = appli.get(0);
          String[] appli0Split = appli0.split(":");
          mp.setVarAndSave(
              Messages.CDTUtil_TargetComponent, appli0Split[0] != null ? appli0Split[0] : "");
          mp.setVarAndSave(
              Messages.CDTUtil_BinaryName, appli0Split[1] != null ? appli0Split[1] : "");
        } else {
          mp.setVarAndSave(Messages.CDTUtil_TargetComponent, "");
          mp.setVarAndSave(Messages.CDTUtil_BinaryName, "");
        }

        MindIdeCore.rebuild(_mp);
      } catch (CoreException e) {
        MindActivator.log(new Status(Status.ERROR, MindActivator.ID, getName(), e));
      }
      return Status.OK_STATUS;
    }