private void open(IFile file) {
    IWorkbenchWindow dw = FMUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
    IWorkbenchPage page = dw.getActivePage();
    if (page != null) {
      IContentType contentType = null;
      try {
        IContentDescription description = file.getContentDescription();
        if (description != null) {
          contentType = description.getContentType();
        }
        IEditorDescriptor desc = null;
        if (contentType != null) {
          desc =
              PlatformUI.getWorkbench()
                  .getEditorRegistry()
                  .getDefaultEditor(file.getName(), contentType);
        } else {
          desc = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor(file.getName());
        }

        if (desc != null) {
          page.openEditor(new FileEditorInput(file), desc.getId());
        }
      } catch (CoreException e) {
        FMUIPlugin.getDefault().logError(e);
      }
    }
  }
  public boolean performFinish() {
    FeatureModel featureModel = new FeatureModel();
    featureModel.createDefaultValues("");

    Path fullFilePath = new Path(page.fileName.getText());
    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
    IPath rootPath = root.getLocation();
    if (rootPath.isPrefixOf(fullFilePath)) {
      // case: is file in workspace
      int matchingFirstSegments = rootPath.matchingFirstSegments(fullFilePath);
      IPath localFilePath = fullFilePath.removeFirstSegments(matchingFirstSegments);
      String[] segments = localFilePath.segments();
      localFilePath = new Path("");
      for (String segment : segments) {
        localFilePath = localFilePath.append(segment);
      }
      IFile file = root.getFile(localFilePath);
      featureModel.initFMComposerExtension(file.getProject());
      try {
        new FeatureModelWriterIFileWrapper(new XmlFeatureModelWriter(featureModel))
            .writeToFile(file);
        file.refreshLocal(IResource.DEPTH_INFINITE, null);
      } catch (CoreException e) {
        FMUIPlugin.getDefault().logError(e);
      }
      open(file);
    } else {
      // case: is no file in workspace
      File file = fullFilePath.toFile();
      new XmlFeatureModelWriter(featureModel).writeToFile(file);
    }
    return true;
  }
 protected boolean errorMessage(Tree tree) {
   if (configurationEditor.getConfiguration() == null) {
     if (configurationEditor.getModelFile() == null) {
       displayError(
           tree,
           THERE_IS_NO_FEATURE_MODEL_CORRESPONDING_TO_THIS_CONFIGURATION_COMMA__REOPEN_THE_EDITOR_AND_SELECT_ONE_);
     } else if (!configurationEditor.getModelFile().exists()) {
       displayError(
           tree,
           THE_GIVEN_FEATURE_MODEL
               + configurationEditor.getModelFile().getPath()
               + DOES_NOT_EXIST_);
     } else {
       displayError(tree, AN_UNKNOWN_ERROR_OCCURRED_);
     }
     return false;
   } else {
     final FeatureModelAnalyzer analyzer =
         configurationEditor.getConfiguration().getFeatureModel().getAnalyser();
     try {
       if (!analyzer.isValid()) {
         displayError(
             tree,
             THE_FEATURE_MODEL_FOR_THIS_PROJECT_IS_VOID_COMMA__I_E__COMMA__THERE_IS_NO_VALID_CONFIGURATION__YOU_NEED_TO_CORRECT_THE_FEATURE_MODEL_BEFORE_YOU_CAN_CREATE_OR_EDIT_CONFIGURATIONS_);
         return false;
       }
     } catch (TimeoutException e) {
       FMUIPlugin.getDefault().logError(e);
     }
   }
   return true;
 }
 @Override
 public void run() {
   LayoutSelectionOperation op =
       new LayoutSelectionOperation(
           featureModel, newSelectedLayoutAlgorithm, oldSelectedLayoutAlgorithm);
   op.addContext((IUndoContext) featureModel.getUndoContext());
   try {
     PlatformUI.getWorkbench().getOperationSupport().getOperationHistory().execute(op, null, null);
   } catch (ExecutionException e) {
     FMUIPlugin.getDefault().logError(e);
   }
 }
  @Override
  public void run() {
    FeatureChangeGroupTypeOperation op =
        new FeatureChangeGroupTypeOperation(
            FeatureChangeGroupTypeOperation.AND, feature, featureModel);
    op.addContext((IUndoContext) featureModel.getUndoContext());

    try {
      PlatformUI.getWorkbench().getOperationSupport().getOperationHistory().execute(op, null, null);
    } catch (ExecutionException e) {
      FMUIPlugin.getDefault().logError(e);
    }
  }
 private void displayError(Tree tree, String message) {
   tree.removeAll();
   TreeItem item = new TreeItem(tree, 1);
   item.setText(message);
   item.setImage(
       0,
       FMUIPlugin.getDefault()
           .getWorkbench()
           .getSharedImages()
           .getImage(ISharedImages.IMG_OBJS_ERROR_TSK));
   item.setChecked(true);
   item.setGrayed(true);
   dirty = false;
 }