public void doReload(ContentNode node, ContentVersion updated) throws Exception {
    if (updated
        .getMod()
        .equals(getInfoglueEditorInput().getContent().getContentVersion().getMod())) {
      System.out.println("This version seem to be up to date.");
      return;
    }

    if (!isDirty()
        || MessageDialog.openQuestion(
            PlatformUI.getWorkbench().getDisplay().getActiveShell(),
            "CMS Message",
            "The content "
                + getInfoglueEditorInput().getContent().getName()
                + " was changed remotely by user: "******". Do you want to reload the changed content?")) {
      // Only save the editors to remove dirty flag, not the editorinput (sent to cms)
      // TODO: ??????
      for (int i = 0; i < getPageCount(); i++) {
        getEditor(i).doSave(null);
      }

      IFolder tmp = ProjectHelper.getProject(node).getFolder("WebContent");
      setInput(InfoglueCMS.openContentVersion(node));

    } else if (isDirty()) {
      MessageDialog.openInformation(
          this.getActiveEditor().getSite().getShell(),
          "Unhandled situation",
          "The content was updated on the server, the local version is not the latest and synchronization/update feature is still not implemented. Your changes might not get saved to CMS");
    }
  }
  /** Saves the multi-page editor's document. */
  public void doSave(IProgressMonitor monitor) {
    saving = true;
    boolean dirtyflag = isDirty();
    /*
     * Save all editors
     */
    Utils.getMonitor(monitor).beginTask("Saving content to CMS", 100);

    for (int i = 0; i < getPageCount(); i++) {
      getEditor(i).doSave(monitor);
    }
    Utils.getMonitor(monitor).worked(25);
    InfoglueEditorInput input = getInfoglueEditorInput();
    input.getContent().doSave(monitor);

    try {
      InfoglueCMS.saveContentVersion(
          input.getContent().getContentVersion(), input.getContent().getConnection(), monitor);
    } catch (ConcurrentModificationException e) {
      MessageDialog.openInformation(
          this.getActiveEditor().getSite().getShell(),
          "Unhandled situation/Unable to save",
          "The content was updated on the server, the local version is not the latest and synchronization/update feature is still not implemented. Please close the editor and open it again to get the latest version");
    } catch (IllegalStateException e) {
      MessageDialog.openInformation(
          this.getActiveEditor().getSite().getShell(),
          "Unhandled situation/Unable to save",
          "The content is not in a working state, automatic working change is not yet implemented, sorry");
    } catch (InvalidVersionException e) {
      MessageDialog.openInformation(
          this.getActiveEditor().getSite().getShell(),
          "Unhandled situation/Unable to save",
          "The content you are trying to save is not the active version at the server. Someone has create a new active version, sorry");
    } catch (Exception e) {
      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw);
      e.printStackTrace(pw);
      // TODO: display the stacktrace in the details.
      MessageDialog.openInformation(
          this.getActiveEditor().getSite().getShell(),
          "Unhandled situation/Unable to save",
          "We recieved the following from the server: " + e.getMessage() + "\n\n" + sw.toString());
    }

    Utils.getMonitor(monitor).worked(100);
    Utils.getMonitor(monitor).done();

    saving = false;
  }