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     */
016    package org.opengion.fukurou.business;
017    
018    import org.opengion.fukurou.util.ErrorMessage;
019    
020    /**
021     * 配å?型テーブルモãƒ?ƒ«をメインカーソルとした業務ロジãƒ?‚¯の構é?を定義しますã?
022     *
023     * 配å?型テーブルモãƒ?ƒ«につã�?�¦は、setTable( ArrayTableModel )によりセãƒ?ƒˆしますã?
024     * 配å?型テーブルモãƒ?ƒ«が定義されてã�?�ªã�??合ã?エラーとなりますã?
025     *
026     * こã?クラスでは、以下に示すメソãƒ?ƒ‰が呼び出されるタイミングのみを定義してã�?�¾すã?
027     * メソãƒ?ƒ‰の中身につã�?�¦は、サブクラスでオーバã?ライドし実è£?�—て下さã�??
028     *
029     * 処ç�?�Œ途中で中断される条件は、以下ã?3つですã?
030     * â‘?�„メソãƒ?ƒ‰の戻りå?がfalseの場å�?
031     * ②チェãƒ?‚¯メソãƒ?ƒ‰(chk***())がå?ての行で実行された後ã?エラーメãƒ?‚»ージに"エラー"が含まれてã�?‚‹場å�?
032     * ③実行時エラーが発生したå?å�?
033     *
034     *  fstchk()              変更区åˆ?�«関わらã�?  処ç�?‚’始める前に呼び出ã�?
035     *  befchk( int row ) 変更区åˆ?�«関わらã�?  å�?¡Œにつã�?�¦呼び出ã�?insert,modify,deleteの前に呼び出ã�?
036     *  inschk( int row ) 変更区åˆ?�Œ"A"の場å�?å�?¡Œにつã�?�¦呼び出ã�?
037     *  modchk( int row ) 変更区åˆ?�Œ"C"の場å�?å�?¡Œにつã�?�¦呼び出ã�?
038     *  delchk( int row ) 変更区åˆ?�Œ"D"の場å�?å�?¡Œにつã�?�¦呼び出ã�?
039     *      allchk( int row ) 変更区åˆ?�«関わらã�?  å�?¡Œにつã�?�¦呼び出ã�?insert,modify,deleteの後に呼び出ã�?
040     *  first()                       変更区åˆ?�«関わらã�?  æœ??の行でのみ呼び出ã�?
041     *  befall( int row ) 変更区åˆ?�«関わらã�?  å�?¡Œにつã�?�¦呼び出ã�?insert,modify,deleteの前に呼び出ã�?
042     *  insert( int row ) 変更区åˆ?�Œ"A"の場å�?å�?¡Œにつã�?�¦呼び出ã�?
043     *  modify( int row ) 変更区åˆ?�Œ"C"の場å�?å�?¡Œにつã�?�¦呼び出ã�?
044     *  delete( int row ) 変更区åˆ?�Œ"D"の場å�?å�?¡Œにつã�?�¦呼び出ã�?
045     *  allrow( int row ) 変更区åˆ?�«関わらã�?  å�?¡Œにつã�?�¦呼び出ã�?insert,modify,deleteの後に呼び出ã�?
046     *  last()            変更区åˆ?�«関わらã�?  æœ?¾Œã?行でのみ呼び出ã�?
047     *
048     * ※ インãƒ?ƒƒクス(row)とは、このArrayTableModel に持つ vals 配å?の行ã?インãƒ?ƒƒクスですã?
049     * よって、オリジナルのDBTableModelの行番号ではありませんã€?
050     *
051     * @og.rev 5.1.1.0 (2009/12/01) 新規作æ?
052     * @og.group 業務ロジãƒ?‚¯
053     *
054     * @version 5.0
055     * @author Hiroki Nakamura
056     * @since JDK1.6,
057     */
058    public class BizLogic_TABLE extends AbstractBizLogic {
059    
060            /**
061             * 処ç�??メインロジãƒ?‚¯の前å?ç�?‚’記述しますã?
062             * (ここでは何もしません)
063             *
064             * こã?メソãƒ?ƒ‰自体ã?、protected属æ?であるため、サブクラスから直接参ç?することができますã?
065             * ä½?�—、これã?、各業務ロジãƒ?‚¯で直接参ç?することを想定したものではなくã?BizLogicの
066             * メイン構é?を拡張するサブクラスを定義する際に使用することを想定してã�?�¾すã?
067             * (こã?想定がなければ、本来は、package privateにすべきでã�?
068             * こã?ため、業務ロジãƒ?‚¯を各実è£?‚¯ラスでは直接参ç?しなã�?�§下さã�??
069             */
070            @Override
071            protected void init() {
072                    // Document empty method チェãƒ?‚¯対ç­?
073            }
074    
075            /**
076             * 処ç�??メインロジãƒ?‚¯を記述しますã?
077             *
078             * こã?メソãƒ?ƒ‰自体ã?、protected属æ?であるため、サブクラスから直接参ç?することができますã?
079             * ä½?�—、これã?、各業務ロジãƒ?‚¯で直接参ç?することを想定したものではなくã?BizLogicの
080             * メイン構é?を拡張するサブクラスを定義する際に使用することを想定してã�?�¾すã?
081             * (こã?想定がなければ、本来は、package privateにすべきでã�?
082             * こã?ため、業務ロジãƒ?‚¯を各実è£?‚¯ラスでは直接参ç?しなã�?�§下さã�??
083             *
084             * @og.rev 5.1.8.0 (2010/07/01) first,lastは行ループã?中で呼び出ã�?
085             * @og.rev 5.6.7.0 (2013/07/27) Exception ã‚?throw するときã?ä¸?—¦、errMsg 変数にセãƒ?ƒˆしますã?
086             *
087             * @return 処ç�?�Œ正常終äº?�—たか
088             */
089            @Override
090            protected boolean main() {
091                    if( table == null ) {
092                            // 5.6.7.0 (2013/07/27) Exception ã‚?throw するときã?ä¸?—¦、errMsg 変数にセãƒ?ƒˆしますã?
093    //                      throw new RuntimeException( "配å?型テーブルモãƒ?ƒ«がセãƒ?ƒˆされてã�?�¾せんã€? );
094                            String errMsg = "配å?型テーブルモãƒ?ƒ«がセãƒ?ƒˆされてã�?�¾せんã€? ;
095                            throw new RuntimeException( errMsg );
096                    }
097    
098                    String modType = null;
099    
100                    row = 0;
101                    if( !fstchk() ) { return false; }
102                    for( int i = 0; i < table.getRowCount(); i++ ) {
103                            if( !befchk( row ) ) { return false; }
104    
105                            modType = table.getModifyType( row );
106                            if( "A".equals( modType ) ) {
107                                    if( !inschk( row ) ) { return false; }
108                            }
109                            else if( "C".equals( modType ) ) {
110                                    if( !modchk( row ) ) { return false; }
111                            }
112                            else if( "D".equals( modType ) ) {
113                                    if( !delchk( row ) ) { return false; }
114                            }
115    
116                            if( !allchk( row ) ) { return false; }
117    
118                            row++;
119                    }
120                    if( getKekka() >= ErrorMessage.NG ) { return false; }
121    
122                    row = 0;
123    //              if( !first() ) { return false; }
124                    for( int i = 0; i < table.getRowCount(); i++ ) {
125                            // 5.1.8.0 (2010/07/01) firstは行ループã?中で呼び出ã�?
126                            if( row == 0 ) {
127                                    if( !first() ) { return false; }
128                            }
129    
130                            if( !befall( row ) ) { return false; }
131    
132                            modType = table.getModifyType( row );
133                            if( "A".equals( modType ) ) {
134                                    if( !insert( row ) ) { return false; }
135                            }
136                            else if( "C".equals( modType ) ) {
137                                    if( !modify( row ) ) { return false; }
138                            }
139                            else if( "D".equals( modType ) ) {
140                                    if( !delete( row ) ) { return false; }
141                            }
142    
143                            if( !allrow( row ) ) { return false; }
144    
145                            // 5.1.8.0 (2010/07/01) lastは行ループã?中で呼び出ã�?
146                            if( row == table.getRowCount() - 1 ) {
147                                    if( !last() ) { return false; }
148                            }
149                            row++;
150                    }
151    //              if( !last() ) { return false; }
152    
153                    return true;
154            }
155    
156            /**
157             * こã?クラスは、テーブルモãƒ?ƒ«が外部からæŒ?®šされてã�?‚‹å¿?¦�がありますã?
158             *
159             * こã?メソãƒ?ƒ‰自体ã?、protected属æ?であるため、サブクラスから直接参ç?することができますã?
160             * ä½?�—、これã?、各業務ロジãƒ?‚¯で直接参ç?することを想定したものではなくã?BizLogicの
161             * メイン構é?を拡張するサブクラスを定義する際に使用することを想定してã�?�¾すã?
162             * (こã?想定がなければ、本来は、package privateにすべきでã�?
163             * こã?ため、業務ロジãƒ?‚¯を各実è£?‚¯ラスでは直接参ç?しなã�?�§下さã�??
164             *
165             * @see AbstractBizLogic#isRequireTable()
166             *
167             * @return ãƒ??ブルモãƒ?ƒ«が外部からæŒ?®šされてã�?‚‹å¿?¦�があるかどã�?�‹(常にtrue)
168             */
169            @Override
170            protected boolean isRequireTable() {
171                    return true;
172            }
173    
174            /**
175             * メインカーソルのä¸?•ª初めで呼ばれるチェãƒ?‚¯ロジãƒ?‚¯を定義しますã?
176             * ここでは何も実è£?�•れてã�?�¾せんã€?
177             *
178             * @return 処ç�?�Œ正常終äº?�—たか
179             */
180            protected boolean fstchk() {
181                    return true;
182            }
183    
184            /**
185             * メインカーソルのå�?¡?変更区åˆ??å�??ç�??å‰?で呼ばれるチェãƒ?‚¯ロジãƒ?‚¯を定義しますã?
186             * ここでは何も実è£?�•れてã�?�¾せんã€?
187             *
188             * @param row 行番号(インãƒ?ƒƒクス)
189             *
190             * @return 処ç�?�Œ正常終äº?�—たか
191             */
192            protected boolean befchk( final int row ) {
193                    return true;
194            }
195    
196            /**
197             * メインカーソルのå�?¡?変更区åˆ??å�??ç�??å¾?で呼ばれるチェãƒ?‚¯ロジãƒ?‚¯を定義しますã?
198             * ここでは何も実è£?�•れてã�?�¾せんã€?
199             *
200             * @param row 行番号(インãƒ?ƒƒクス)
201             *
202             * @return 処ç�?�Œ正常終äº?�—たか
203             */
204            protected boolean allchk( final int row ) {
205                    return true;
206            }
207    
208            /**
209             * メインカーソルのå�?¡?変更区åˆ?"A")で呼ばれるチェãƒ?‚¯ロジãƒ?‚¯を定義しますã?
210             * ここでは何も実è£?�•れてã�?�¾せんã€?
211             *
212             * @param row 行番号(インãƒ?ƒƒクス)
213             *
214             * @return 処ç�?�Œ正常終äº?�—たか
215             */
216            protected boolean inschk( final int row ) {
217                    return true;
218            }
219    
220            /**
221             * メインカーソルのå�?¡?変更区åˆ?"C")で呼ばれるチェãƒ?‚¯ロジãƒ?‚¯を定義しますã?
222             * ここでは何も実è£?�•れてã�?�¾せんã€?
223             *
224             * @param row 行番号(インãƒ?ƒƒクス)
225             *
226             * @return 処ç�?�Œ正常終äº?�—たか
227             */
228            protected boolean modchk( final int row ) {
229                    return true;
230            }
231    
232            /**
233             * メインカーソルのå�?¡?変更区åˆ?"D")で呼ばれるチェãƒ?‚¯ロジãƒ?‚¯を定義しますã?
234             * ここでは何も実è£?�•れてã�?�¾せんã€?
235             *
236             * @param row 行番号(インãƒ?ƒƒクス)
237             *
238             * @return 処ç�?�Œ正常終äº?�—たか
239             */
240            protected boolean delchk( final int row ) {
241                    return true;
242            }
243    
244            /**
245             * メインカーソルのä¸?•ª初めで呼ばれるロジãƒ?‚¯を定義しますã?
246             * ここでは何も実è£?�•れてã�?�¾せんã€?
247             *
248             * @return 処ç�?�Œ正常終äº?�—たか
249             */
250            protected boolean first() {
251                    return true;
252            }
253    
254            /**
255             * メインカーソルのä¸?•ªæœ?¾Œで呼ばれるロジãƒ?‚¯を定義しますã?
256             * ここでは何も実è£?�•れてã�?�¾せんã€?
257             *
258             * @return 処ç�?�Œ正常終äº?�—たか
259             */
260            protected boolean last() {
261                    return true;
262            }
263    
264            /**
265             * メインカーソルのå�?¡?変更区åˆ??å�??ç�??å‰?で呼ばれるロジãƒ?‚¯を定義しますã?
266             * ここでは何も実è£?�•れてã�?�¾せんã€?
267             *
268             * @param row 行番号(インãƒ?ƒƒクス)
269             *
270             * @return 処ç�?�Œ正常終äº?�—たか
271             */
272            protected boolean befall( final int row ) {
273                    return true;
274            }
275    
276            /**
277             * メインカーソルのå�?¡?変更区åˆ??å�??ç�??å¾?で呼ばれるロジãƒ?‚¯を定義しますã?
278             * ここでは何も実è£?�•れてã�?�¾せんã€?
279             *
280             * @param row 行番号(インãƒ?ƒƒクス)
281             *
282             * @return 処ç�?�Œ正常終äº?�—たか
283             */
284            protected boolean allrow( final int row ) {
285                    return true;
286            }
287    
288            /**
289             * メインカーソルのå�?¡?変更区åˆ?"A")で呼ばれるロジãƒ?‚¯を定義しますã?
290             * ここでは何も実è£?�•れてã�?�¾せんã€?
291             *
292             * @param row 行番号(インãƒ?ƒƒクス)
293             *
294             * @return 処ç�?�Œ正常終äº?�—たか
295             */
296            protected boolean insert( final int row ) {
297                    return true;
298            }
299    
300            /**
301             * メインカーソルのå�?¡?変更区åˆ?"C")で呼ばれるロジãƒ?‚¯を定義しますã?
302             * ここでは何も実è£?�•れてã�?�¾せんã€?
303             *
304             * @param row 行番号(インãƒ?ƒƒクス)
305             *
306             * @return 処ç�?�Œ正常終äº?�—たか
307             */
308            protected boolean modify( final int row ) {
309                    return true;
310            }
311    
312            /**
313             * メインカーソルのå�?¡?変更区åˆ?"D")で呼ばれるロジãƒ?‚¯を定義しますã?
314             * ここでは何も実è£?�•れてã�?�¾せんã€?
315             *
316             * @param row 行番号(インãƒ?ƒƒクス)
317             *
318             * @return 処ç�?�Œ正常終äº?�—たか
319             */
320            protected boolean delete( final int row ) {
321                    return true;
322            }
323    }