/*
 * このソースコードは blanco Frameworkによって自動生成されています。
 * Eclipseプラグイン [BlancoResourceBundle]のドキュメントプロバイダクラス
 */
package blanco.plugin.resourcebundle.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;

/**
 * Eclipseプラグイン [BlancoResourceBundle]のドキュメントプロバイダクラス。
 *
 * blancoResourceBundleプラグインのソースコード自動生成のための定義書です。<br>
 */
public class BlancoResourceBundleDocumentProvider extends StorageDocumentProvider {
    /**
     * ドキュメントの読み込み処理をオーバーライドします。
     *
     * @param document ドキュメントオブジェクト
     * @param contentStream コンテンツのストリーム
     * @param encodingIgnored エンコーディング指定が呼び出し元から渡されます。しかしこのパラメータは無視されます。
     * @throws CoreException
     */
    protected void setDocumentContent(final IDocument document, final InputStream contentStream, final String encodingIgnored) throws CoreException {
        // エンコーディングは無視して強制的に UTF-8扱いとします。
        super.setDocumentContent(document, contentStream, "UTF-8");
    }

    /**
     * ドキュメントの保存処理をオーバーライドします。
     *
     * @param monitor Eclipseの進捗モニタ
     * @param element エレメント
     * @param document ドキュメントオブジェクト
     * @param overwrite 上書きかどうか
     * @throws CoreException
     */
    protected void doSaveDocument(final IProgressMonitor monitor, final Object element, final IDocument document, final 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();
            }
        }
    }
}
