/*
 * blanco Framework
 * Copyright (C) 2004-2009 IGA Tosiki
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 */
package blanco.sample.jsf;

import java.sql.Connection;

import javax.el.ELContext;
import javax.el.ELResolver;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import blanco.sample.jsf.db.query.SimpleBookInsertInvoker;
import blanco.sample.jsf.db.query.SimpleBookSelectIterator;

/**
 * 処理 [BlancoJsfSample1LogicProxy]インタフェース。
 *
 * このインタフェースを継承して [blanco.sample.jsf]パッケージに[BlancoJsfSample1LogicProxy]クラスを作成して実際のバッチ処理を実装してください。<br>
 */
public class BlancoJsfSample1LogicProxy {
    /**
     * 処理結果。
     */
    private String fOutcome = "error";

    /**
     * クラスをインスタンス化して処理を実行する際のエントリポイントです。
     *
     * @param event イベント。
     */
    public final void execute(final ActionEvent event) {
        final FacesContext ctx = FacesContext.getCurrentInstance();
        final ELContext elc = ctx.getELContext();
        final ELResolver rslvr = ctx.getApplication().getELResolver();

        // Managed Bean [string] を取得します。
        String argString = (String) rslvr.getValue(elc, null, "string");
        // Managed Bean [integer] を取得します。
        Integer argInteger = (Integer) rslvr.getValue(elc, null, "integer");

        final Connection conn = BlancoJsfProxyUtil.getConnection();
        boolean isLogicSuccess = false;
        SimpleBookSelectIterator argSimpleBookSelectIterator = new SimpleBookSelectIterator(conn);

        SimpleBookInsertInvoker argSimpleBookInsertInvoker = new SimpleBookInsertInvoker(conn);

        // 以下のコードでコンパイル・エラーが発生する場合には、クラス [blanco.sample.jsf.BlancoJsfSample1LogicImpl] を新規に作成してください。
        final BlancoJsfSample1Logic logic = new BlancoJsfSample1LogicImpl();

        try {
            fOutcome = logic.execute(argString, argInteger, argSimpleBookSelectIterator, argSimpleBookInsertInvoker);
            conn.commit();
            isLogicSuccess = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        if (isLogicSuccess == false) {
            try {
                conn.rollback();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        // コネクションの開放。
        BlancoJsfProxyUtil.releaseConnection(conn);
    }

    /**
     * 実行結果を取得。
     *
     * @return 次画面情報。
     */
    public final String outcome() {
        return fOutcome;
    }
}
