private IFeatureModel generateFeatureModelOfVariants() {
    final IFeatureProject featureProject = CorePlugin.getFeatureProject(newProject);
    final IFeatureModel featureModel = featureProject.getFeatureModel();

    featureModel.reset();

    featureModel
        .getStructure()
        .setRoot(
            FMFactoryManager.getFactory(featureModel)
                .createFeature(featureModel, "Base")
                .getStructure());
    featureModel.getStructure().getRoot().changeToAlternative();
    featureModel.getStructure().getRoot().setAbstract(true);

    for (IProject project : projects)
      featureModel
          .getStructure()
          .getRoot()
          .addChild(
              FMFactoryManager.getFactory(featureModel)
                  .createFeature(featureModel, project.getName())
                  .getStructure());

    return featureModel;
  }
 private void initComboFeature() {
   container = sourceFolder != null ? sourceFolder.getFolder(comboFeature.getText()) : null;
   if (featureProject == null) {
     return;
   }
   comboFeature.removeAll();
   for (String s : featureProject.getFeatureModel().getConcreteFeatureNames()) comboFeature.add(s);
   if (feature != null) {
     comboFeature.setText(feature);
   } else {
     if (comboFeature.getItemCount() > 0) comboFeature.select(0);
   }
   Object obj = selection.getFirstElement();
   if (obj instanceof IResource) {
     IResource resource = (IResource) obj;
     boolean found = false;
     while (found == false && resource.getParent() != null) {
       if (resource.getParent().equals(sourceFolder)) {
         for (int i = 0; i < comboFeature.getItemCount(); i++)
           if (comboFeature.getItem(i).equals(resource.getName())) {
             comboFeature.select(i);
             found = true;
             break;
           }
       }
       resource = resource.getParent();
     }
   }
   if (comboFeature.getItemCount() == 1
       || !featureProject.getComposer().createFolderForFeatures()) {
     comboFeature.setEnabled(false);
   } else {
     comboFeature.setEnabled(true);
   }
 }
 @Override
 protected void endAction() {
   for (IFeatureProject project : projectList) {
     final Path path = Paths.get(project.getProject().getFile("model.fg").getLocationURI());
     final IRunner<IFeatureGraph> runner =
         LongRunningWrapper.getRunner(
             new FGBuilder(AdvancedNodeCreator.createSatInstance(project.getFeatureModel())));
     runner.addJobFinishedListener(
         new JobFinishListener<IFeatureGraph>() {
           @Override
           public void jobFinished(IJob<IFeatureGraph> finishedJob) {
             FileHandler.save(path, finishedJob.getResults(), new FeatureGraphFormat());
           }
         });
     runner.schedule();
   }
   projectList.clear();
 }