001/*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016package org.opengion.fukurou.business;
017
018import org.opengion.fukurou.model.DataModel;                                    // 6.7.9.1 (2017/05/19) ArrayTableModel を、DataModel I/F に変更
019import org.opengion.fukurou.db.Transaction;
020import org.opengion.fukurou.util.ErrorMessage;
021import org.opengion.fukurou.util.HybsLoader;
022import java.util.Map;                                                                                   // 6.9.9.0 (2018/08/20)
023
024/**
025 * 業務ロジックを実行するためのヘルパークラスです。
026 *
027 * このクラスの役割は、外部パッケージ(タグクラスなど)からの各種の設定情報を
028 * 業務ロジックの実体のクラスにセットすることです。
029 *
030 * 業務ロジックの実体となるクラス(AbstractBizLogic)では、各種設定情報のセッター
031 * メソッドを、サブクラス(各業務ロジックの実装クラス)から隠蔽するため、パッケージ
032 * プライベートで定義しています。
033 *
034 * このため、外部クラスから、直接設定情報をセットすることができないため、このヘルパー
035 * クラスを介して、各種情報をセットしています。
036 *
037 * @og.rev 5.1.1.0 (2009/12/01) 新規作成
038 * @og.group 業務ロジック
039 *
040 * @version 5.0
041 * @author Hiroki Nakamura
042 * @since JDK1.6,
043 */
044public class BizLogicHelper {
045        private final AbstractBizLogic logic ;          // 5.1.9.0 (2010/08/01)
046
047        /**
048         * コンストラクターを定義しています。
049         *
050         * @param name 業務ロジックのクラス名
051         * @param ldr クラスローダー
052         */
053        public BizLogicHelper( final String name, final HybsLoader ldr ) {
054                logic = (AbstractBizLogic)ldr.newInstance( name );
055        }
056
057        /**
058         * DBのトランザクションオブジェクトを指定します。
059         * 各実装クラスでは、コネクションのcommit,rollbackは行われません。
060         * (全てのDB処理は、1つのトランザクションとして処理されます。)
061         * このため、commit,rollbackは呼び出し元で行う必要があります。
062         * このメソッドは、1度しかセットすることができません。2回以上呼び出しするとエラーになります。
063         *
064         * @og.rev 5.1.9.0 (2010/08/01) 新規作成
065         *
066         * @param tran トランザクション
067         */
068        public void setTransaction( final Transaction tran ) {
069                logic.setTransaction( tran );
070        }
071
072        /**
073         * 接続先IDを指定します。
074         * このメソッドは、1度しかセットすることができません。2回以上呼び出しするとエラーになります。
075         *
076         * @og.rev 5.1.9.0 (2010/08/01) 新規作成
077         *
078         * @param id 接続先ID
079         */
080        public void setDbid( final String id ) {
081                logic.setDbid( id );
082        }
083
084        /**
085         * 業務ロジックのクラスをロードするためのクラスローダーをセットします。
086         * このメソッドは、1度しかセットすることができません。2回以上呼び出しするとエラーになります。
087         *
088         * @param ldr クラスローダー
089         */
090        public void setLoader( final HybsLoader ldr ) {
091                logic.setLoader( ldr );
092        }
093
094        /**
095         * 配列型テーブルモデルをセットします。
096         * このメソッドは、1度しかセットすることができません。2回以上呼び出しするとエラーになります。
097         *
098         * @og.rev 6.7.9.1 (2017/05/19) ArrayTableModel を、DataModel I/F に変更
099         *
100         * @param tbl 配列型テーブルモデル
101         */
102        public void setTable( final DataModel<String> tbl ) {
103                logic.setTable( tbl );
104        }
105
106        /**
107         * 固定値のキー配列を指定します。
108         * このメソッドは、1度しかセットすることができません。2回以上呼び出しするとエラーになります。
109         *
110         * @param ks キー配列(可変長引数)
111         */
112        public void setKeys( final String... ks ) {
113                logic.setKeys( ks );
114        }
115
116        /**
117         * 固定値の値配列を指定します。
118         * このメソッドは、1度しかセットすることができません。2回以上呼び出しするとエラーになります。
119         *
120         * @param vs 値配列(可変長引数)
121         */
122        public void setVals( final String... vs ) {
123                logic.setVals( vs );
124        }
125
126        /**
127         * この処理の実行ユーザーIDを指定します。
128         *
129         * @param id 実行ユーザーID
130         */
131        public void setUserId( final String id ) {
132                logic.setUserId( id );
133        }
134
135        /**
136         * 親(呼び出し)PGIDを指定します。
137         *
138         * @param id 親PGID
139         */
140        public void setParentPgId( final String id ) {
141                logic.setParentPgId( id );
142        }
143
144        /**
145         * デバッグモードにします。
146         */
147        public void setDebug() {
148                logic.setDebug();
149        }
150
151        /**
152         * デバッグメッセージを取得します。
153         *
154         * @return      デバッグメッセージ
155         */
156        public String getDebugMsg() {
157                return logic.getDebugMsg();
158        }
159
160        /**
161         * 処理を実行します。
162         * 処理の方法は、main()メソッドにより定義されます。
163         * 実装クラスで発生した全ての例外は、Throwableオブジェクトとしてスローされます。
164         * 呼び出し元では、例外を確実にcatchして、commit,rollbackを行ってください。
165         *
166         * @return      処理が成功したかどうか
167         * @throws Throwable 実行時の全エラーを上位に転送します。
168         */
169        public boolean exec() throws Throwable {
170                return logic.exec();
171        }
172
173        /**
174         * 結果ステータスを返します。
175         *
176         * @return      結果ステータス
177         */
178        public int getKekka() {
179                return logic.getKekka();
180        }
181
182        /**
183         * エラーメッセージオブジェクトを返します。
184         *
185         * @return      エラーメッセージ
186         */
187        public ErrorMessage getErrMsg() {
188                return logic.getErrMsg();
189        }
190
191        /**
192         * 業務ロジックの戻り値を返します。
193         *
194         * @return      戻り値
195         */
196        public String getReturn() {
197                return logic.getReturn();
198        }
199
200        /**
201         * 変数に関連付けた値を、返します。
202         * これは、BizLogicから、呼び出し元のJSPに、RETURN 変数以外の {&#064;XXXX} パラメータを返します。
203         * 既存のアトリビュートがあれば、上書きされます。
204         *
205         * @og.rev 6.9.9.0 (2018/08/20) 戻り値を返せるようにします。
206         *
207         * @return      変数に関連付けた値の内部マップオブジェクト
208         */
209        public Map<String,String> getReturnMap() {
210                return logic.getReturnMap();
211        }
212
213        /**
214         * このクラスは、テーブルモデルが外部から指定されている必要はありません。
215         *
216         * @see AbstractBizLogic#isRequireTable()
217         *
218         * @return      テーブルモデルが外部からセットされる必要があるかどうか
219         */
220        public boolean isRequireTable() {
221                return logic.isRequireTable();
222        }
223}