/*
 * このソースコードは blanco Frameworkによって自動生成されています。
 * Eclipseプラグイン [BlancoDbEE]のユーティリティクラス
 */
package blanco.plugin.dbee.editors;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;

/**
 * Eclipseプラグイン [BlancoDbEE]のユーティリティクラス。
 *
 * blancoDb Enterprise Editionプラグインのソースコード自動生成のための定義書です。<br>
 */
public class BlancoDbEEPluginUtil {
    /**
     * 同一プロジェクト内の 指定フォルダを更新します。
     *
     * @param input エディタが現在処理しているファイル
     * @param monitor Eclipseの進捗モニタ
     * @param folderName 処理対象のフォルダ名
     * @return
     * @throws CoreException
     */
    public static boolean refreshFolder(final IFile input, final IProgressMonitor monitor, final String folderName) throws CoreException {
        IFolder folderCheck = input.getProject().getFolder(folderName);
        // キャッシュを確実にクリア。
        folderCheck.clearHistory(monitor);
        if (folderCheck.exists()) {
            folderCheck.refreshLocal(IResource.DEPTH_INFINITE, monitor);
            return true;
        }
        return false;
    }

    /**
     * 同一プロジェクト内の 指定フォルダを作成します。
     *
     * @param input エディタが現在処理しているファイル
     * @param monitor Eclipseの進捗モニタ
     * @param argFolderName 処理対象のフォルダ名
     * @throws CoreException
     */
    public static void createFolder(final IFile input, final IProgressMonitor monitor, final String argFolderName) throws CoreException {
        IFolder folderCurrent = null;
        String folderName = argFolderName;
        for (boolean found = false; found == false;) {
            if (folderName.indexOf('/') < 0) {
                found = true;
                if (folderCurrent == null) {
                    folderCurrent = input.getProject().getFolder(folderName);
                } else {
                    folderCurrent = folderCurrent.getFolder(folderName);
                }
            } else {
                String nextFolder = folderName.substring(0, folderName.indexOf('/'));
                folderName = folderName.substring(folderName.indexOf('/') + 1);
                if (folderCurrent == null) {
                    folderCurrent = input.getProject().getFolder(nextFolder);
                } else {
                    folderCurrent = folderCurrent.getFolder(nextFolder);
                }
            }
            if (folderCurrent.exists() == false) {
                folderCurrent.create(true, true, monitor);
            }
        }
    }

    /**
     * 同一プロジェクト内の 指定フォルダを検索します。
     *
     * @param input エディタが現在処理しているファイル
     * @param monitor Eclipseの進捗モニタ
     * @param argFolderName 処理対象のフォルダ名
     * @return
     * @throws CoreException
     */
    public static IFolder findFolder(final IFile input, final IProgressMonitor monitor, final String argFolderName) throws CoreException {
        IFolder folderCurrent = null;
        String folderName = argFolderName;
        for (boolean found = false; found == false;) {
            if (folderName.indexOf('/') < 0) {
                found = true;
                if (folderCurrent == null) {
                    folderCurrent = input.getProject().getFolder(folderName);
                } else {
                    folderCurrent = folderCurrent.getFolder(folderName);
                }
            } else {
                String nextFolder = folderName.substring(0, folderName.indexOf('/'));
                folderName = folderName.substring(folderName.indexOf('/') + 1);
                if (folderCurrent == null) {
                    folderCurrent = input.getProject().getFolder(nextFolder);
                } else {
                    folderCurrent = folderCurrent.getFolder(nextFolder);
                }
            }
        }
        return folderCurrent;
    }

    /**
     * 同一プロジェクト内の 指定フォルダを削除します。
     *
     * @param input エディタが現在処理しているファイル
     * @param monitor Eclipseの進捗モニタ
     * @param folderName 処理対象のフォルダ名
     * @throws CoreException
     */
    public static void deleteFolder(final IFile input, final IProgressMonitor monitor, final String folderName) throws CoreException {
        IFolder folder = findFolder(input, monitor, folderName);
        if (folder != null) {
            folder.delete(true, monitor);
        }
    }
}
