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.hayabusa.report2;
017
018 import java.io.File;
019 import java.util.Arrays;
020
021 import org.opengion.fukurou.db.DBFunctionName;
022 import org.opengion.fukurou.db.DBUtil;
023 import org.opengion.fukurou.mail.MailTX;
024 import org.opengion.fukurou.util.ApplicationInfo;
025 import org.opengion.fukurou.util.LogWriter;
026 import org.opengion.fukurou.util.StringUtil;
027 import org.opengion.hayabusa.common.HybsSystem;
028 import org.opengion.hayabusa.db.DBTableModel;
029 import org.opengion.hayabusa.db.DBTableModelUtil;
030 import org.opengion.hayabusa.resource.ResourceFactory;
031 import org.opengion.hayabusa.resource.ResourceManager;
032
033 /**
034 * DBからキューを作?するためのクラスです?
035 * キューはGE5x??ブルから作?されます?
036 *
037 * キュー生?時点(処?レ?にスタ?した時点)では、帳票??タの??ブルモ?は作?されません?
038 * 帳票??タは、各スレ?からset()メソ?を呼び出したタイミングで生?されます?
039 *
040 * 処?始及び、完??ス??タスは、GE50の完?フラグに更新されます?
041 * また?エラー発生時のメ?ージは、GE56に更新されます?
042 *
043 * @og.group 帳票シス?
044 *
045 * @version 4.0
046 * @author Hiroki.Nakamura
047 * @since JDK1.6
048 */
049 public final class QueueManager_DB implements QueueManager {
050
051 /** コネクションにアプリケーション??を追記するかど???*/
052 private static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
053
054 /** アプリケーション?? */
055 private static final ApplicationInfo appInfo;
056 static {
057 if( USE_DB_APPLICATION_INFO ) {
058 appInfo = new ApplicationInfo();
059 // ユーザーID,IPアドレス,ホスト名
060 appInfo.setClientInfo( "ReportDaemon", HybsSystem.HOST_ADRS, HybsSystem.HOST_NAME );
061 // 画面ID,操?プログラ?D
062 appInfo.setModuleInfo( "ReportDaemon", "QueueManager", "QueueManager" );
063 }
064 else {
065 appInfo = null;
066 }
067 }
068
069 private static final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
070
071 // private static final String SQL_SELECT_GE50 =
072 // "SELECT A.SYSTEM_ID, A.YKNO, A.LISTID, A.OUT_DIR, A.OUT_FILE, A.PDF_PASSWD"
073 // + ", B.LANG, B.FGRUN, B.DMN_GRP "
074 // + ", C.MODELDIR, C.MODELFILE, D.PRTNM, C.FGLOCAL, C.FGCUT, C.BSQL, C.HSQL, C.FSQL "
075 // + "FROM GE50 A, GE53 B, GE54 C, GE55 D "
076 // + "WHERE A.FGKAN='1' "
077 // + "AND A.SYSTEM_ID = B.SYSTEM_ID AND A.JOKEN = B.JOKEN "
078 // + "AND A.SYSTEM_ID = C.SYSTEM_ID AND A.LISTID = C.LISTID "
079 // + "AND B.SYSTEM_ID = D.SYSTEM_ID AND B.PRTID = D.PRTID ORDER BY"
080 // + HybsSystem.sys( "REPORT_DAEMON_ORDER_BY" );
081
082 // 4.3.0.0 (2008/07/18) PDF出力時に出力?マスタは不要?ためGE55は外部結合に変更
083 // private static final String SQL_SELECT_GE50 =
084 // "SELECT A.SYSTEM_ID, A.YKNO, A.LISTID, A.OUT_DIR, A.OUT_FILE, A.PDF_PASSWD"
085 // + ", B.LANG, B.FGRUN, B.DMN_GRP "
086 // + ", C.MODELDIR, C.MODELFILE, D.PRTNM, C.FGLOCAL, C.FGCUT, C.BSQL, C.HSQL, C.FSQL "
087 // + "FROM GE50 A, GE53 B, GE54 C, GE55 D "
088 // + "WHERE A.FGKAN='1' "
089 // + "AND A.SYSTEM_ID = B.SYSTEM_ID AND A.JOKEN = B.JOKEN "
090 // + "AND A.SYSTEM_ID = C.SYSTEM_ID AND A.LISTID = C.LISTID "
091 // + "AND B.SYSTEM_ID = D.SYSTEM_ID(+) AND B.PRTID = D.PRTID(+) ORDER BY"
092 // + HybsSystem.sys( "REPORT_DAEMON_ORDER_BY" );
093
094 // 4.3.7.0 (2009/06/01) HSQLDB対?
095 // private static final String CON = DBFunctionName.getFunctionName( "CON", ConnectionFactory.getDBFullName( null ) );
096 // 5.1.4.0 (2010/03/01) ??タベ?ス?でなく?DBID名で検索するように変更します?
097 private static final String CON = DBFunctionName.getFunctionName( "CON", null );
098
099 // 5.2.0.0 (2010/09/01) Ver4互換モード対?
100 private static final String OUT_FILE = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "OUTFILE" : "OUT_FILE";
101 private static final String OUT_DIR = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "OUTDIR" : "OUT_DIR";
102
103 // 4.3.3.6 (2008/11/15) マルチサーバ対応追?GE12から処?象??モングループ取?
104 // 4.3.7.0 (2009/06/01) HSQLDB対?
105 // 5.2.0.0 (2010/09/01) Ver4互換モード対?
106 // 5.4.2.0 (2011/12/26) PRTID,PRGDIR,PRGFILE取?
107 private static final String SQL_SELECT_GE50 =
108 // "SELECT A.SYSTEM_ID, A.YKNO, A.LISTID, A.OUT_DIR, A.OUT_FILE, A.PDF_PASSWD"
109 "SELECT A.SYSTEM_ID, A.YKNO, A.LISTID, A."+OUT_DIR+", A."+OUT_FILE+", A.PDF_PASSWD"
110 + ", B.LANG, B.FGRUN, B.DMN_GRP "
111 + ", C.MODELDIR, C.MODELFILE, D.PRTNM, C.FGLOCAL, C.FGCUT, C.BSQL, C.HSQL, C.FSQL "
112 + " ,B.PRTID, B.PRGDIR, B.PRGFILE "
113 // + "FROM GE50 A, GE53 B, GE54 C, GE55 D "
114 + "FROM GE50 A "
115 + "INNER JOIN GE53 B "
116 + "ON A.SYSTEM_ID = B.SYSTEM_ID AND A.JOKEN = B.JOKEN "
117 + "INNER JOIN GE54 C "
118 + "ON A.SYSTEM_ID = C.SYSTEM_ID AND A.LISTID = C.LISTID "
119 + "LEFT OUTER JOIN GE55 D "
120 + "ON B.SYSTEM_ID = D.SYSTEM_ID AND B.PRTID = D.PRTID "
121 + "WHERE A.FGKAN='1' "
122 + "AND EXISTS ( SELECT 'X' FROM GE12 E "
123 + "WHERE E.FGJ ='1' "
124 + "AND E.SYSTEM_ID = '"
125 + HybsSystem.sys( "SYSTEM_ID" )
126 + "' "
127 + "AND E.CONTXT_PATH = '"
128 + HybsSystem.sys( "HOST_URL" )
129 + "' "
130 + "AND E.PARAM_ID LIKE 'REPORT2_HANDLE_DAEMON_%' "
131 + "AND E.PARAM = 'RUN_'" + CON + "A.SYSTEM_ID" + CON + "'_'" + CON + "B.DMN_GRP"
132 + ") "
133 // + "AND A.SYSTEM_ID = B.SYSTEM_ID AND A.JOKEN = B.JOKEN "
134 // + "AND A.SYSTEM_ID = C.SYSTEM_ID AND A.LISTID = C.LISTID "
135 // + "AND B.SYSTEM_ID = D.SYSTEM_ID(+) AND B.PRTID = D.PRTID(+) ORDER BY"
136 + "ORDER BY "
137 + HybsSystem.sys( "REPORT_DAEMON_ORDER_BY" );
138
139 // 5.1.2.0 (2010/01/01) ペ?ジ数、データ数をGE50に更新する?
140 private static final String SQL_UPDATE_GE50 =
141 // "UPDATE GE50 SET FGKAN = ?, DMN_NAME = ?, DMN_HOST = ? ,DYUPD = ? WHERE SYSTEM_ID = ? AND YKNO = ?";
142 "UPDATE GE50 SET FGKAN = ?, DMN_NAME = ?, DMN_HOST = ?, SUDATA = ?, SUPAGE = ?, DYUPD = ? WHERE SYSTEM_ID = ? AND YKNO = ?";
143
144 private static final String SQL_INSERT_GE56 =
145 "INSERT INTO GE56 ( FGJ, SYSTEM_ID, YKNO, ERRMSG, DYSET, DYUPD, USRSET, USRUPD, PGUPD ) "
146 + " VALUES ( '1', ?, ? ,? ,? ,? ,? ,? ,? )" ;
147
148 private static final int STATUS_COMPLETE = 2;
149 private static final int STATUS_EXECUTE = 3;
150 private static final int STATUS_ERROR = 8;
151
152 private static QueueManager manager = new QueueManager_DB();
153
154 /**
155 * インスタンスの生?を禁止します?
156 */
157 private QueueManager_DB() {}
158
159 /**
160 * インスタンスを返します?
161 *
162 * @return 帳票処?ューの管??ネ?ジャ
163 */
164 public static QueueManager getInstance() {
165 return manager;
166 }
167
168 /**
169 * 帳票処?ューを作?します?
170 *
171 * @og.rev 4.3.0.0 (2008/07/15) スレ?IDにシス?IDを付加します?
172 * @og.rev 5.1.2.0 (2010/01/01) HSQL,FSQL,BSQLのセ?を?します?(こ?クラス???タを直接?)
173 * @og.rev 5.4.3.0 (2011/12/26) PRTIDの取?
174 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
175 */
176 public synchronized void create() {
177 // キューをスタ?するまでの例外?、ScheduleTagでcatchされ??モンがスリープする?
178 // String[][] ge50vals = DBUtil.dbExecute( SQL_SELECT_GE50, new String[0], appInfo );
179 String[][] ge50vals = DBUtil.dbExecute( SQL_SELECT_GE50, new String[0], appInfo, DBID ); // 5.5.5.1 (2012/08/07)
180
181 for( int i=0; i<ge50vals.length; i++ ) {
182 ExecQueue queue = new ExecQueue();
183 queue.setSystemId( ge50vals[i][0] );
184 queue.setYkno( ge50vals[i][1] );
185 queue.setListId( ge50vals[i][2] );
186 // queue.setOutputName( new File( ge50vals[i][3] ).getAbsolutePath() + File.separator + ge50vals[i][4] );
187 queue.setOutputName( new File( ge50vals[i][3] ).getAbsolutePath() , ge50vals[i][4] , ge50vals[i][7] , ge50vals[i][1] ); // 4.3.0.0 (2008/07/18) 要求番号を?力ファイル名に利用
188 queue.setPdfPasswd( ge50vals[i][5] );
189 queue.setLang( ge50vals[i][6] );
190 queue.setOutputType( ge50vals[i][7] );
191 // queue.setThreadId( StringUtil.nval( ge50vals[i][8] , "_DEFALUT_" ) );
192 queue.setThreadId( ge50vals[i][0] + "_" + StringUtil.nval( ge50vals[i][8] , "_DEFALUT_" ) ); // 4.3.0.0 (2008/07/15)
193 queue.setTemplateName( new File( ge50vals[i][9] ).getAbsolutePath() + File.separator + ge50vals[i][10] );
194 queue.setPrinterName( ge50vals[i][11] );
195 queue.setFglocal( "1".equals( ge50vals[i][12] ) );
196 queue.setFgcut( "1".equals( ge50vals[i][13] ) );
197
198 // queue.setBsql( ge50vals[i][14] );
199 // queue.setHsql( ge50vals[i][15] );
200 // queue.setFsql( ge50vals[i][16] );
201
202 queue.setPrtId( ge50vals[i][17] ); // 5.4.3.0
203 queue.setPrgDir( ge50vals[i][18] ); // 5.4.3.0
204 queue.setPrgFile( ge50vals[i][19] ); // 5.4.3.0
205
206 queue.setManager( this );
207
208 ExecThreadManager.insertQueue( queue );
209 }
210 }
211
212 /**
213 * 帳票処?ータをキューにセ?します?
214 *
215 * @og.rev 5.1.2.0 (2010/01/01) HSQL,FSQL,BSQLのセ?を?します?(こ?クラス???タを直接?)
216 *
217 * @param queue ExecQueueオブジェク?
218 */
219 public void set( final ExecQueue queue ) {
220
221 ResourceManager resource = null;
222 if( queue.isFglocal() ) {
223 resource = ResourceFactory.newInstance( queue.getSystemId(), queue.getLang(), false );
224 }
225 else {
226 resource = ResourceFactory.newInstance( queue.getLang() );
227 }
228 // String[] where = new String[] { queue.getSystemId() , queue.getYkno() } ;
229
230 // ヘッ????の取?
231 // DBTableModel header = DBTableModelUtil.makeDBTable( queue.getHsql(), where, resource, appInfo );
232 DBTableModel header
233 = (new DBTableModelCreator( queue.getSystemId(), queue.getListId(), queue.getYkno(), "H", resource )).getTable();
234 if( header != null && header.getRowCount() > 0 ) {
235 queue.setHeader( header );
236 }
237
238 // フッター??の取?
239 // DBTableModel footer = DBTableModelUtil.makeDBTable( queue.getFsql(), where, resource, appInfo );
240 DBTableModel footer
241 = (new DBTableModelCreator( queue.getSystemId(), queue.getListId(), queue.getYkno(), "F", resource )).getTable();
242 if( footer != null && footer.getRowCount() > 0 ) {
243 queue.setFooter( footer );
244 }
245
246 // ボディー??の取?
247 // DBTableModel body = DBTableModelUtil.makeDBTable( queue.getBsql(), where, resource, appInfo );
248 DBTableModel body
249 = (new DBTableModelCreator( queue.getSystemId(), queue.getListId(), queue.getYkno(), "B", resource )).getTable();
250 // レイアウトテーブルがな?固定長を?割するSQL?設定されず、DBTableModelがnullにな?
251 if( body == null ) {
252 queue.addMsg( "[ERROR] DBTableModel doesn't exists! maybe Layout-Table(GE52) is not configured..." + HybsSystem.CR );
253 queue.setError();
254 throw new RuntimeException();
255 }
256 if( body.getRowCount() <= 0 ) {
257 queue.addMsg( "[ERROR] Database Body row count is Zero." + queue.getYkno() + HybsSystem.CR );
258 queue.setError();
259 throw new RuntimeException();
260 }
261 if( body.isOverflow() ) {
262 queue.addMsg( "[ERROR]Database is Overflow. [" + body.getRowCount() + "]" + HybsSystem.CR );
263 queue.addMsg( "[ERROR]Check SystemParameter Data in DB_MAX_ROW_COUNT Overflow" + HybsSystem.CR );
264 queue.setError();
265 throw new RuntimeException();
266 }
267 queue.setBody( body );
268 }
269
270 /**
271 * キューを実行中の状態に更新します?
272 *
273 * @param queue ExecQueueオブジェク?
274 */
275 public void execute( final ExecQueue queue ) {
276 status( queue, STATUS_EXECUTE );
277 }
278
279 /**
280 * キューを完??状態に更新します?
281 *
282 * @param queue ExecQueueオブジェク?
283 */
284 public void complete( final ExecQueue queue ) {
285 status( queue, STATUS_COMPLETE );
286 }
287
288 /**
289 * キューをエラーの状態に更新します?
290 *
291 * @param queue ExecQueueオブジェク?
292 */
293 public void error( final ExecQueue queue ) {
294 status( queue, STATUS_ERROR );
295 insertErrorMsg( queue );
296 }
297
298 /**
299 * GE50の状況Cを更新します?
300 *
301 * @og.rev 4.2.4.1 (2008/07/09) 更新日時をセ?
302 * @og.rev 5.1.2.0 (2010/01/01) 行数、?ージ数も更新する
303 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
304 *
305 * @param queue ExecQueueオブジェク?
306 * @param status 状況C
307 */
308 private void status( final ExecQueue queue, final int status ) {
309
310 String dyupd = HybsSystem.getDate( "yyyyMMddHHmmss" ) ;
311
312 String[] args
313 = new String[]{ String.valueOf( status ), queue.getThreadId(), HybsSystem.sys( "HOST_NAME" )
314 , String.valueOf( queue.getExecRowCnt() ), String.valueOf( queue.getExecPagesCnt() )
315 , dyupd , queue.getSystemId(), queue.getYkno() };
316
317 // DBUtil.dbExecute( SQL_UPDATE_GE50, args, appInfo );
318 DBUtil.dbExecute( SQL_UPDATE_GE50, args, appInfo, DBID ); // 5.5.5.1 (2012/08/07)
319 }
320
321 /**
322 * GE56にエラーメ?ージを?力します?
323 *
324 * @og.rev 4.4.0.1 (2009/08/08) エラーメ?ージ機?追?
325 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
326 *
327 * @param queue ExecQueueオブジェク?
328 */
329 private void insertErrorMsg( final ExecQueue queue ) {
330 String errmsg = queue.getMsg();
331 if( errmsg.length() > 1300 ) {
332 errmsg = errmsg.substring( errmsg.length() - 1300, errmsg.length() );
333 }
334
335 String dyset = HybsSystem.getDate( "yyyyMMddHHmmss" ) ;
336
337 String[] args
338 = new String[]{ queue.getSystemId(), queue.getYkno(), errmsg
339 , dyset, dyset, "UNKNOWN", "UNKNOWN", "UNKNOWN" };
340
341 // DBUtil.dbExecute( SQL_INSERT_GE56, args, appInfo );
342 DBUtil.dbExecute( SQL_INSERT_GE56, args, appInfo, DBID ); // 5.5.5.1 (2012/08/07)
343
344 sendMail( queue, errmsg ); // 4.4.0.1 (2009/08/08)
345 }
346
347 /**
348 * エラー??のメール送信を行います?
349 * エラーメールは、シス?パラメータ の COMMON_MAIL_SERVER(メールサーバ?)と
350 * ERROR_MAIL_FROM_USER(エラーメール発信?と、ERROR_MAIL_TO_USERS(エラーメール受信?
351 * がすべて設定されて?場合に??信されます?
352 *
353 * @og.rev 4.4.0.1 (2009/08/08) 追?
354 * @og.rev 5.7.0.4 (2013/11/29) listIdの絞込み
355 *
356 * @param queue ExecQueueオブジェク?
357 * @param inErrMsg エラーメ?ージ
358 */
359 private void sendMail( final ExecQueue queue, final String inErrMsg ) {
360
361 String host = HybsSystem.sys( "COMMON_MAIL_SERVER" );
362 String from = HybsSystem.sys( "ERROR_MAIL_FROM_USER" );
363 String[] to = StringUtil.csv2Array( HybsSystem.sys( "ERROR_MAIL_TO_USERS" ) );
364 String match_txt = HybsSystem.sys( "REPORT_ERRMAIL_REGEX" ); // 5.7.0.4 (2013/11/29)
365 if( host != null && from != null && to.length > 0 ) {
366 if( match_txt == null || match_txt.length() == 0
367 || queue.getListId() == null || queue.getListId().length() == 0
368 || queue.getListId().matches( match_txt )){ // 5.7.0.4 (2013/11/29)
369 // 5.7.0.4 (2013/11/29) listid追?
370 String subject = "SYSTEM_ID=[" + queue.getSystemId() + "] , YKNO=[" + queue.getYkno() + "] , "
371 + "THREAD_ID=[" + queue.getThreadId() + "] , DMN_HOST=[" + HybsSystem.HOST_NAME + "]"
372 + "LISTID=["+ queue.getListId() + "]";
373 try {
374 MailTX tx = new MailTX( host );
375 tx.setFrom( from );
376 tx.setTo( to );
377 tx.setSubject( "帳票エラー?? + subject );
378 tx.setMessage( inErrMsg );
379 tx.sendmail();
380 }
381 catch( Throwable ex ) {
382 String errMsg = "エラー時メール送信に失敗しました? + HybsSystem.CR
383 + " SUBJECT:" + subject + HybsSystem.CR
384 + " HOST:" + host + HybsSystem.CR
385 + " FROM:" + from + HybsSystem.CR
386 + " TO:" + Arrays.toString( to ) + HybsSystem.CR
387 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正
388 LogWriter.log( errMsg );
389 LogWriter.log( ex );
390 }
391 }
392 }
393 }
394
395 /**
396 * 帳票明細??タを帳票レイアウトテーブルに従って?し?そ?結果をDBTableModelとして
397 * 生?します?
398 * ??タの?は、バイト数ベ?スで行われるため、エンコードを正しく?する?があります?
399 * エンコード指定?、シス?リソースのDB_ENCODEで?します?
400 *
401 * レイアウトテーブルが存在しな??合?又?、帳票??タが存在しな??合?DBTableModelは
402 * nullで返されます?
403 */
404 public static class DBTableModelCreator {
405 // 5.2.0.0 (2010/09/01) Ver4互換モード対?
406 private static final String CLM = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "COLUMN_NAME" : "CLM";
407 private static final String TEXT_DATA = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "TEXT" : "TEXT_DATA";
408
409 // 5.2.0.0 (2010/09/01) Ver4互換モード対?
410 // 5.4.4.3 (2012/02/09) FGUSE条件追??
411 private static final String SQL_SELECT_GE52 =
412 // " select CLM, START_POS, USE_LENGTH"
413 " select "+CLM+", START_POS, USE_LENGTH"
414 + " from GE52"
415 + " where SYSTEM_ID = ?"
416 + " and LISTID = ?"
417 + " and KBTEXT = ?"
418 + " and FGJ = '1'"
419 + " and FGUSE = '1'" // 5.4.4.3
420 + " order by SEQ";
421
422 // 5.2.0.0 (2010/09/01) Ver4互換モード対?
423 private static final String SQL_SELECT_GE51 =
424 // " select TEXT_DATA"
425 " select "+TEXT_DATA
426 + " from GE51"
427 + " where SYSTEM_ID = ?"
428 + " and YKNO = ?"
429 + " and KBTEXT = ?"
430 + " and FGJ = '1'";
431
432 private static final String ENCODE = HybsSystem.sys( "DB_ENCODE" );
433
434 private final String systemId;
435 private final String listId;
436 private final String ykno;
437 private final String kbtext;
438 private final ResourceManager resource;
439
440 private DBTableModel table = null;
441
442 /**
443 * コンストラクタです?
444 *
445 * @param sid シス?ID
446 * @param lid 帳票ID
447 * @param yk 要?O
448 * @param kt ?スト区?H:ヘッ?? F:フッター B:ボディー)
449 * @param res リソースマネージャー
450 */
451 public DBTableModelCreator( final String sid, final String lid, final String yk, final String kt, final ResourceManager res ) {
452 systemId = sid;
453 listId = lid;
454 ykno = yk;
455 kbtext = kt;
456 resource = res;
457 create();
458 }
459
460 /**
461 * 帳票??タをレイアウト定義に従い?します?
462 *
463 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
464 */
465 private void create() {
466 String[] ge52Where = new String[] { systemId, listId, kbtext } ;
467 // String[][] ge52Vals = DBUtil.dbExecute( SQL_SELECT_GE52, ge52Where, appInfo );
468 String[][] ge52Vals = DBUtil.dbExecute( SQL_SELECT_GE52, ge52Where, appInfo, DBID ); // 5.5.5.1 (2012/08/07)
469 if( ge52Vals == null || ge52Vals.length == 0 ) {
470 return;
471 }
472
473 String[] ge51Where = new String[] { systemId, ykno, kbtext } ;
474 // String[][] ge51Vals = DBUtil.dbExecute( SQL_SELECT_GE51, ge51Where, appInfo );
475 String[][] ge51Vals = DBUtil.dbExecute( SQL_SELECT_GE51, ge51Where, appInfo, DBID ); // 5.5.5.1 (2012/08/07)
476 if( ge51Vals == null || ge51Vals.length == 0 ) {
477 return;
478 }
479
480 String[] clms = new String[ge52Vals.length];
481 for( int i=0; i<ge52Vals.length; i++ ) {
482 clms[i] = ge52Vals[i][0];
483 }
484
485 String[][] vals = new String[ge51Vals.length][ge52Vals.length];
486 for( int i=0; i<ge51Vals.length; i++ ) {
487 byte[] bytes = StringUtil.makeByte( ge51Vals[i][0], ENCODE );
488 for( int j=0; j<ge52Vals.length; j++ ) {
489 int strpos = Integer.valueOf( ge52Vals[j][1] ) - 1;
490 int len = Integer.valueOf( ge52Vals[j][2] );
491 if( strpos >= bytes.length ) {
492 vals[i][j] = "";
493 }
494 else {
495 if( strpos + len > bytes.length ) {
496 len = bytes.length - strpos;
497 }
498 vals[i][j] = StringUtil.rTrim( StringUtil.makeString( bytes, strpos, len, ENCODE ) );
499 }
500 }
501 }
502 table = DBTableModelUtil.makeDBTable( clms, vals, resource );
503 }
504
505 /**
506 * ?後?DBTableModelを返します?
507 *
508 * @return ?後?DBTableModel
509 */
510 public DBTableModel getTable() {
511 return table;
512 }
513 }
514 }