package blanco.plugin.strutsee.editors;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.editors.text.StorageDocumentProvider;

public class BlancoStrutsEEDocumentProvider extends
        StorageDocumentProvider {

    /**
     * ドキュメントの読み込み処理をオーバーライドします。
     */
    protected void setDocumentContent(IDocument document,
            InputStream contentStream, String encodingIgnored)
            throws CoreException {
        // エンコーディングは無視して強制的に UTF-8扱いとします。
        super.setDocumentContent(document, contentStream, "UTF-8");
    }

    /**
     * ドキュメントの保存処理をオーバーライドします。
     */
    protected void doSaveDocument(IProgressMonitor monitor, Object element,
            IDocument document, boolean overwrite) throws CoreException {
        if (element instanceof IFileEditorInput) {
            // この場所で保存処理を行います。
            IFileEditorInput input = (IFileEditorInput) element;
            String editorText = getDocument(input).get();

            try {
                input.getFile().setContents(
                        new ByteArrayInputStream(editorText.getBytes("UTF-8")),
                        true, false, monitor);
            } catch (UnsupportedEncodingException e) {
                // そんなことは ありえないはずです。
                e.printStackTrace();
            }
        }
    }
}