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.util.ErrorMessage; 019 020/** 021 * 配列型テーブルモデルをメインカーソルとした業務ロジックの構造を定義します。 022 * 023 * 配列型テーブルモデルについては、setTable( ArrayTableModel )によりセットします。 024 * 配列型テーブルモデルが定義されていない場合、エラーとなります。 025 * 026 * このクラスでは、以下に示すメソッドが呼び出されるタイミングのみを定義しています。 027 * メソッドの中身については、サブクラスでオーバーライドし実装して下さい。 028 * 029 * 処理が途中で中断される条件は、以下の3つです。 030 * @各メソッドの戻り値がfalseの場合 031 * Aチェックメソッド(chk***())が全ての行で実行された後、エラーメッセージに"エラー"が含まれている場合 032 * B実行時エラーが発生した場合 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 */ 058public 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}