protected void doFormatPreview() {
    if (fPreviewText == null) {
      fPreviewDocument.set(""); // $NON-NLS-1$
      return;
    }
    fPreviewDocument.set(fPreviewText);

    fSourceViewer.setRedraw(false);
    //		final IFormattingContext context = new JavaFormattingContext();
    try {
      //			final IContentFormatter formatter =
      //	fViewerConfiguration.getContentFormatter(fSourceViewer);
      //			if (formatter instanceof IContentFormatterExtension) {
      //				final IContentFormatterExtension extension = (IContentFormatterExtension) formatter;
      //				context.setProperty(FormattingContextProperties.CONTEXT_PREFERENCES, fWorkingValues);
      //				context.setProperty(FormattingContextProperties.CONTEXT_DOCUMENT,
      // Boolean.valueOf(true));
      //				extension.format(fPreviewDocument, context);
      //			} else
      //				formatter.format(fPreviewDocument, new Region(0, fPreviewDocument.getLength()));
      final IContentFormatter formatter = new Formatter(fWorkingValues);
      formatter.format(fPreviewDocument, new Region(0, fPreviewDocument.getLength()));
    } catch (Exception e) {
      final IStatus status =
          new Status(
              IStatus.ERROR,
              FormatterPlugin.PLUGIN_ID,
              IStatus.ERROR,
              FormatterMessages.JavaPreview_formatter_exception,
              e);
      FormatterPlugin.log(status);
    } finally {
      //		    context.dispose();
      fSourceViewer.setRedraw(true);
    }
  }
  /*
   * @see ITextOperationTarget#doOperation(int)
   */
  public void doOperation(int operation) {

    if (getTextWidget() == null || (!redraws() && operation != FORMAT)) return;

    switch (operation) {
      case CONTENTASSIST_PROPOSALS:
        fContentAssistant.showPossibleCompletions();
        return;
      case CONTENTASSIST_CONTEXT_INFORMATION:
        fContentAssistant.showContextInformation();
        return;
      case QUICK_ASSIST:
        // FIXME: must find a way to post to the status line
        /* String msg= */ fQuickAssistAssistant.showPossibleQuickAssists();
        // setStatusLineErrorMessage(msg);
        return;
      case INFORMATION:
        fInformationPresenter.showInformation();
        return;
      case FORMAT:
        {
          final Point selection = rememberSelection();
          final IRewriteTarget target = getRewriteTarget();
          final IDocument document = getDocument();
          IFormattingContext context = null;
          DocumentRewriteSession rewriteSession = null;

          if (document instanceof IDocumentExtension4) {
            IDocumentExtension4 extension = (IDocumentExtension4) document;
            DocumentRewriteSessionType type =
                (selection.y == 0 && document.getLength() > 1000) || selection.y > 1000
                    ? DocumentRewriteSessionType.SEQUENTIAL
                    : DocumentRewriteSessionType.UNRESTRICTED_SMALL;
            rewriteSession = extension.startRewriteSession(type);
          } else {
            setRedraw(false);
            target.beginCompoundChange();
          }

          try {

            final String rememberedContents = document.get();

            try {

              if (fContentFormatter instanceof IContentFormatterExtension) {
                final IContentFormatterExtension extension =
                    (IContentFormatterExtension) fContentFormatter;
                context = createFormattingContext();
                if (selection.y == 0) {
                  context.setProperty(FormattingContextProperties.CONTEXT_DOCUMENT, Boolean.TRUE);
                } else {
                  context.setProperty(FormattingContextProperties.CONTEXT_DOCUMENT, Boolean.FALSE);
                  context.setProperty(
                      FormattingContextProperties.CONTEXT_REGION,
                      new Region(selection.x, selection.y));
                }
                extension.format(document, context);
              } else {
                IRegion r;
                if (selection.y == 0) {
                  IRegion coverage = getModelCoverage();
                  r = coverage == null ? new Region(0, 0) : coverage;
                } else {
                  r = new Region(selection.x, selection.y);
                }
                fContentFormatter.format(document, r);
              }

              updateSlaveDocuments(document);

            } catch (RuntimeException x) {
              // fire wall for https://bugs.eclipse.org/bugs/show_bug.cgi?id=47472
              // if something went wrong we undo the changes we just did
              // TODO to be removed after 3.0 M8
              document.set(rememberedContents);
              throw x;
            }

          } finally {

            if (document instanceof IDocumentExtension4) {
              IDocumentExtension4 extension = (IDocumentExtension4) document;
              extension.stopRewriteSession(rewriteSession);
            } else {
              target.endCompoundChange();
              setRedraw(true);
            }

            restoreSelection();
            if (context != null) context.dispose();
          }
          return;
        }
      default:
        super.doOperation(operation);
    }
  }