/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.compare.internal;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;

import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.text.Document;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.compare.*;
import org.eclipse.compare.structuremergeviewer.ICompareInput;


public class SimpleTextViewer extends AbstractViewer {
		
	private SourceViewer fSourceViewer;
	private ICompareInput fInput;
	
	
	SimpleTextViewer(Composite parent) {
		fSourceViewer= new SourceViewer(parent, null, SWT.H_SCROLL + SWT.V_SCROLL);
		fSourceViewer.setEditable(false);
	}
		
	public Control getControl() {
		return fSourceViewer.getTextWidget();
	}
	
	public void setInput(Object input) {
		if (input instanceof IStreamContentAccessor) {
			fSourceViewer.setDocument(new Document(getString(input)));
		} else if (input instanceof ICompareInput) {
			fInput= (ICompareInput) input;
			ITypedElement left= ((ICompareInput) fInput).getLeft();
			fSourceViewer.setDocument(new Document(getString(left)));
		}
	}
	
	public Object getInput() {
		return fInput;
	}
	
	private String getString(Object input) {
		
		if (input instanceof IStreamContentAccessor) {
			IStreamContentAccessor sca= (IStreamContentAccessor) input;
			try {
				return Utilities.readString(sca.getContents());
			} catch (CoreException ex) {
			}
		}
		return ""; //$NON-NLS-1$
	}
}
