content: /*******************************************************************************
   * Copyright (c) 2000, 2008 IBM Corporation and others.
   * All rights reserved. This program and the accompanying materials
   * are made available under the terms of the Eclipse Public License v1.0
   * which accompanies this distribution, and is available at
   * http://www.eclipse.org/legal/epl-v10.html
   *
   * Contributors:
   *     IBM Corporation - initial API and implementation
   *******************************************************************************/
  
  package org.eclipse.wst.jsdt.internal.ui.preferences.cleanup;
  
  import java.util.Map;
  
  import org.eclipse.core.runtime.IStatus;
  import org.eclipse.core.runtime.Status;
  import org.eclipse.jface.text.Region;
  import org.eclipse.jface.text.formatter.FormattingContextProperties;
  import org.eclipse.jface.text.formatter.IContentFormatter;
  import org.eclipse.jface.text.formatter.IContentFormatterExtension;
  import org.eclipse.jface.text.formatter.IFormattingContext;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.wst.jsdt.core.JavaScriptCore;
  import org.eclipse.wst.jsdt.internal.ui.IJavaStatusConstants;
  import org.eclipse.wst.jsdt.internal.ui.JavaScriptPlugin;
  import org.eclipse.wst.jsdt.internal.ui.fix.ICleanUp;
  import org.eclipse.wst.jsdt.internal.ui.fix.MultiFixMessages;
  import org.eclipse.wst.jsdt.internal.ui.preferences.formatter.JavaPreview;
  import org.eclipse.wst.jsdt.internal.ui.text.comment.CommentFormattingContext;
  
  
  public class CleanUpPreview extends JavaPreview {
  
  	private ICleanUp[] fPreviewCleanUps;
  	private boolean fFormat;
  	public CleanUpPreview(Composite parent, ICleanUp[] cleanUps) {
  		super(JavaScriptCore.getDefaultOptions(), parent);
  		fPreviewCleanUps= cleanUps;
  		fFormat= false;
  	}
  	
  	public void setCleanUps(ICleanUp[] fCleanUps) {
  		fPreviewCleanUps= fCleanUps;
  	}
  	
  	public void setFormat(boolean enable) {
  		fFormat= enable;
  	}
  
  	/**
  	 * {@inheritDoc}
  	 */
  	protected void doFormatPreview() {
  	
  		StringBuffer buf= new StringBuffer();
  		for (int i= 0; i < fPreviewCleanUps.length; i++) {
  			buf.append(fPreviewCleanUps[i].getPreview());
  			buf.append("\n"); //$NON-NLS-1$
  		}
  		format(buf.toString());
  	}
  	
  	private void format(String text) {		
          if (text == null) {
              fPreviewDocument.set(""); //$NON-NLS-1$
              return;
          }
          fPreviewDocument.set(text);
  		
          if (!fFormat)
          	return;
          
  		fSourceViewer.setRedraw(false);
  		final IFormattingContext context = new CommentFormattingContext();
  		try {
  			final IContentFormatter formatter =	fViewerConfiguration.getContentFormatter(fSourceViewer);
  			if (formatter instanceof IContentFormatterExtension) {
  				final IContentFormatterExtension extension = (IContentFormatterExtension) formatter;
  				context.setProperty(FormattingContextProperties.CONTEXT_PREFERENCES, JavaScriptCore.getOptions());
  				context.setProperty(FormattingContextProperties.CONTEXT_DOCUMENT, Boolean.valueOf(true));
  				extension.format(fPreviewDocument, context);
  			} else
  				formatter.format(fPreviewDocument, new Region(0, fPreviewDocument.getLength()));
  		} catch (Exception e) {
  			final IStatus status= new Status(IStatus.ERROR, JavaScriptPlugin.getPluginId(), IJavaStatusConstants.INTERNAL_ERROR, 
  				MultiFixMessages.CleanUpRefactoringWizard_formatterException_errorMessage, e); 
  			JavaScriptPlugin.log(status);
  		} finally {
  		    context.dispose();
  		    fSourceViewer.setRedraw(true);
  		}
  	}
  
      public void setWorkingValues(Map workingValues) {
      	//Don't change the formatter settings
      }
      
  }
  