/*
 * 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.proxy;

import java.io.IOException;

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

import blanco.sample.jsf.BlancoJsfSample2ModifyLogic;
import blanco.sample.jsf.util.BlancoJsfLogicException;
import blanco.sample.jsf.util.BlancoJsfProxyUtil;

/**
 * JSF の Managed Bean と実際の処理とをつなぐプロキシ・クラス。
 *
 * <p>faces-config.xml には以下のように登録します。</p>
 * <pre>
 * &lt;managed-bean&gt;
 * 	&lt;managed-bean-name&gt;BlancoJsfSample2Logic&lt;/managed-bean-name&gt;
 * 	&lt;managed-bean-class&gt;blanco.sample.jsf.proxy.BlancoJsfSample2LogicProxy&lt;/managed-bean-class&gt;
 * &lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;
 * &lt;/managed-bean&gt;
 * </pre>
 */
@SuppressWarnings("serial")
public class BlancoJsfSample2LogicProxy extends String {
    /**
     * クラスをインスタンス化して処理を実行する際のエントリポイントです。
     *
     * @param actionEvent イベント。
     */
    public final void modify(final ActionEvent actionEvent) {
        final FacesContext ctx = FacesContext.getCurrentInstance();
        final ELContext elc = ctx.getELContext();
        final ELResolver rslvr = ctx.getApplication().getELResolver();

        // session から Managed Bean [integer] を取得します。
        final Integer argInteger = (Integer) rslvr.getValue(elc, null, "integer");

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

        try {
            try {
                logic.execute(this, argInteger);
            } finally {
            }
        } catch (BlancoJsfLogicException ex) {
            // ロジック例外が発生。
        } catch (IllegalArgumentException ex) {
            BlancoJsfProxyUtil.logIllegalArgumentException("無効引数例外: blanco.sample.jsf.BlancoJsfSample2ModifyLogicImpl", ex);
            BlancoJsfProxyUtil.redirectPageToErrorHtml(ctx);
        } catch (IOException ex) {
            BlancoJsfProxyUtil.logIOException("入出力例外: blanco.sample.jsf.BlancoJsfSample2ModifyLogicImpl", ex);
            BlancoJsfProxyUtil.redirectPageToErrorHtml(ctx);
        } catch (Exception ex) {
            BlancoJsfProxyUtil.logException("例外: blanco.sample.jsf.BlancoJsfSample2ModifyLogicImpl", ex);
            BlancoJsfProxyUtil.redirectPageToErrorHtml(ctx);
        } catch (Error er) {
            BlancoJsfProxyUtil.logError("エラー: blanco.sample.jsf.BlancoJsfSample2ModifyLogicImpl", er);
            BlancoJsfProxyUtil.redirectPageToErrorHtml(ctx);
        }
    }
}
