2015年7月19日日曜日

[メタデータエディタ]CommonEventListener

このメタデータ編集プログラムはメタデータをSWINGインターフェースで操作するが、SWINGの共通イベントリスナを用意する。(共通した挙動が多いため)

package controller;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFileChooser;

import service.DomainDrivenService;
import service.impl.ServiceFactory;
import service.param.SipSaveFileService;
import util.AppLog;
import util.LastSavedFile;
import dao.impl.SvFileDb;

/**
 * 共通イベントリスナ
 */
public class CommonEventListener implements KeyListener, MouseListener {

    /** Ctrlキー押下状態 */
    private boolean isCtrlKeyPressed = false;

    public boolean isCtrlKeyPressed() {
        return isCtrlKeyPressed;
    }

    public void setCtrlKeyPressed(boolean isCtrlKeyPressed) {
        this.isCtrlKeyPressed = isCtrlKeyPressed;
    }

    /** ファイル保存サービス */
    private DomainDrivenService saveFileService = null;

    /**
     * コンストラクタ
     */
    public CommonEventListener() {
        saveFileService = (DomainDrivenService) ServiceFactory.getInstance()
                .getService("SaveFileService");
    }

    /*
     * (非 Javadoc)
     *
     * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
     */
    @Override
    public void mouseClicked(MouseEvent me) {

        // 左ボタンダブルクリックの場合
        if (me.getButton() == MouseEvent.BUTTON1 && me.getClickCount() == 2) {
            onLeftDoubleClick();
        }
    }

    /*
     * (非 Javadoc)
     *
     * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
     */
    @Override
    public void mousePressed(MouseEvent me) {
    }

    /*
     * (非 Javadoc)
     *
     * @see
     * java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
     */
    @Override
    public void mouseReleased(MouseEvent me) {

        // 左ボタンシングルクリックの場合
        if (me.getButton() == MouseEvent.BUTTON1 && me.getClickCount() == 1) {
            onLeftSingleClickRelease();
        }
    }

    /*
     * (非 Javadoc)
     *
     * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
     */
    @Override
    public void mouseEntered(MouseEvent me) {
    }

    /*
     * (非 Javadoc)
     *
     * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
     */
    @Override
    public void mouseExited(MouseEvent me) {
    }

    /*
     * (非 Javadoc)
     *
     * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
     */
    @Override
    public void keyTyped(KeyEvent ke) {
    }

    /*
     * (非 Javadoc)
     *
     * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
     */
    @Override
    public void keyPressed(KeyEvent ke) {

        // キーイベントに応じた処理を実行する
        try {
            if (ke.getKeyCode() == KeyEvent.VK_CONTROL) {
                onPressCtrl();

            } else if (ke.getKeyCode() == KeyEvent.VK_F2) {
                onPressF2();

            } else if (ke.getKeyCode() == KeyEvent.VK_F4) {
                onPressF4();

            } else if (ke.getKeyCode() == KeyEvent.VK_F5) {
                onPressF5();

            } else if (ke.getKeyCode() == KeyEvent.VK_DELETE) {
                onPressDelete();

            } else if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
                onPressEnter();

            } else if (isCtrlKeyPressed() && ke.getKeyCode() == KeyEvent.VK_S) {
                onPressCtrlS();

            } else if (isCtrlKeyPressed() && ke.getKeyCode() == KeyEvent.VK_N) {
                onPressCtrlN();

            } else if (isCtrlKeyPressed() && ke.getKeyCode() == KeyEvent.VK_W) {
                onPressCtrlW();

            } else if (isCtrlKeyPressed()
                    && ke.getKeyCode() == KeyEvent.VK_PAGE_UP) {
                onPressCtrlPageUp();

            } else if (isCtrlKeyPressed()
                    && ke.getKeyCode() == KeyEvent.VK_PAGE_DOWN) {
                onPressCtrlPageDown();
            }

        } catch (Exception e) {
            AppLog.handleException(e);
        }
    }

    /*
     * (非 Javadoc)
     *
     * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
     */
    @Override
    public void keyReleased(KeyEvent ke) {

        // Ctrlキーが離された場合は、Ctrlキー押下状態を更新する
        if (ke.getKeyCode() == KeyEvent.VK_CONTROL) {
            onReleaseCtrl();

        } else if (ke.getKeyCode() == KeyEvent.VK_UP) {
            onReleaseUp();

        } else if (ke.getKeyCode() == KeyEvent.VK_DOWN) {
            onReleaseDown();

        } else if (ke.getKeyCode() == KeyEvent.VK_LEFT) {
            onReleaseLeft();

        } else if (ke.getKeyCode() == KeyEvent.VK_RIGHT) {
            onReleaseRight();
        }
    }

    /**
     * マウスの左ボタンがシングルクリックされた場合の処理を記述します。
     */
    protected void onLeftSingleClickRelease() {

        // デフォルトでは何もしない
    }

    /**
     * マウスの左ボタンがダブルクリックされた場合の処理を記述します。
     */
    protected void onLeftDoubleClick() {

        // デフォルトでは何もしない
    }

    /**
     * Ctrlキーが押された場合の処理を記述します。
     */
    protected void onPressCtrl() {

        // Ctrlキー押下状態を更新する
        setCtrlKeyPressed(true);
    }

    /**
     * Ctrlキーが離された場合の処理を記述します。
     */
    protected void onReleaseCtrl() {

        // Ctrlキー押下状態を更新する
        setCtrlKeyPressed(false);
    }

    /**
     * F2が押された場合の処理を記述します。
     */
    protected void onPressF2() {

        // デフォルトでは何もしない
    }

    /**
     * F4が押された場合の処理を記述します。
     */
    protected void onPressF4() {

        // デフォルトでは何もしない
    }

    /**
     * F5が押された場合の処理を記述します。
     */
    protected void onPressF5() {

        // デフォルトでは何もしない
    }

    /**
     * DELが押された場合の処理を記述します。
     */
    protected void onPressDelete() {

        // デフォルトでは何もしない
    }

    /**
     * Enterが押された場合の処理を記述します。
     */
    protected void onPressEnter() {

        // デフォルトでは何もしない
    }

    /**
     * 上(↑)が押された場合の処理を記述します。
     */
    protected void onReleaseUp() {

        // デフォルトでは何もしない
    }

    /**
     * 下(↓)が押された場合の処理を記述します。
     */
    protected void onReleaseDown() {

        // デフォルトでは何もしない
    }

    /**
     * 左(←)が押された場合の処理を記述します。
     */
    protected void onReleaseLeft() {

        // デフォルトでは何もしない
    }

    /**
     * 右(→)が押された場合の処理を記述します。
     */
    protected void onReleaseRight() {

        // デフォルトでは何もしない
    }

    /**
     * Ctrl+sが押された場合の処理を記述します。
     */
    protected void onPressCtrlS() {

        // デフォルトでは何もしない
    }

    /**
     * Ctrl+nが押された場合の処理を記述します。
     */
    protected void onPressCtrlN() {

        // デフォルトでは何もしない
    }

    /**
     * Ctrl+wが押された場合の処理を記述します。
     */
    protected void onPressCtrlW() {

        // デフォルトでは何もしない
    }

    /**
     * Ctrl+PageUpが押された場合の処理を記述します。
     */
    protected void onPressCtrlPageUp() {

        // デフォルトでは何もしない
    }

    /**
     * Ctrl+PageDownが押された場合の処理を記述します。
     */
    protected void onPressCtrlPageDown() {

        // デフォルトでは何もしない
    }

    /**
     * ファイルのセーブを行います。
     */
    protected void saveFile() {

        // 前回セーブしたファイルがない場合
        String fileName = LastSavedFile.getInstance().getLastSavedFileName();
        if (fileName == null) {

            // ユーザにファイルを選択してもらう
            JFileChooser fileChooser = new JFileChooser();
            int result = fileChooser.showSaveDialog(null);
            if (result == JFileChooser.APPROVE_OPTION) {
                fileName = fileChooser.getSelectedFile().getAbsolutePath();
                if (fileChooser.getSelectedFile().getName().indexOf(".") == -1) {
                    fileName += ".tsv";
                }

                // 保存が選択されなかった場合は何もせずに終了する
            } else {
                return;
            }
        }

        // ファイル保存サービスを呼び出す
        SipSaveFileService sip = new SipSaveFileService(fileName);
        saveFileService.doService(sip);
    }

    /**
     * コミットを実行します。
     */
    protected void commit() {

        // コミットを実行する
        SvFileDb.getInstance().commit();
    }

    /**
     * 例外のスタックトレースを表示するなどのエラーハンドリングを行い、ロールバックします。
     */
    protected void rollback() {

        // ロールバックを実行する
        SvFileDb.getInstance().rollback();
    }
}

0 件のコメント:

コメントを投稿