    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.hayabusa.report;
    017
    018import org.opengion.hayabusa.common.HybsSystem;
    019import org.opengion.hayabusa.common.HybsSystemException;
    020import org.opengion.fukurou.system.DateSet;                                             // 6.4.2.0 (2016/01/29)
    021import org.opengion.fukurou.util.StringUtil;
    022import org.opengion.fukurou.db.ApplicationInfo;
    023import org.opengion.fukurou.system.ThrowUtil ;                                  // 6.4.2.0 (2016/01/29)
    024import org.opengion.fukurou.db.DBUtil;
    025import static org.opengion.fukurou.system.HybsConst.CR ;                                // 6.1.0.0 (2014/12/26)
    026import static org.opengion.fukurou.system.HybsConst.FS ;                                // 6.1.0.0 (2014/12/26)
    027import static org.opengion.fukurou.system.HybsConst.BUFFER_MIDDLE;      // 6.1.0.0 (2014/12/26) refactoring
    028
    029import java.io.File;
    030
    031/**
    032 * DBTableModelオブジェクトをレポート形式に返還するタグリブクラスです。
    033 * このオブジェクトに、 データ(DBTableModel)と、コントローラ(DBTableReport クラス)を与えて、
    034 * 外部からコントロールすることで、各種形式で データ(DBTableModel)を表示させることが
    035 * 可能です。
    036 *
    037 * @og.group 帳票システム
    038 *
    039 * @version  4.0
    040 * @author   Kazuhiko Hasegawa
    041 * @since    JDK5.0,
    042 */
    043public class ReportProcessing {
    044
    045        private static final String FGRUN_1     = "1";  // HTMLのみ
    046        private static final String FGRUN_2     = "2";  // 印刷のみ
    047        private static final String FGRUN_3     = "3";  // 出力＋印刷
    048
    049        // 3.8.0.0 (2005/06/07) 実行方法(FGRUN)に、EXCEL取込関連のフラグ値を追加。
    050        private static final String FGRUN_5     = "5";  // 取込のみ
    051        private static final String FGRUN_6     = "6";  // PG起動のみ
    052        private static final String FGRUN_7     = "7";  // 取込+PG起動
    053
    054        private static final String FGRUN_A     = "A";  // RFID(通常印刷) 4.0.3.0 (2007/12/26)
    055        private static final String FGRUN_B     = "B";  // RFID(全印刷)   4.0.3.0 (2007/12/26)
    056        private static final String FGRUN_C     = "C";  // RFID(全消去)   4.0.3.0 (2007/12/26)
    057        private static final String FGRUN_D     = "D";  // RFID(連続消去) 4.1.1.0 (2008/02/21)
    058
    059        private static final String FGRUN_G     = "G";  // CSV(印刷)  5.9.0.0 (2015/09/04)
    060        private static final String FGRUN_H     = "H";  // CSV(Excel) 5.9.0.0 (2015/09/04)
    061        private static final String FGRUN_I     = "I";  // CSV(PDF)   5.9.0.0 (2015/09/04)
    062        private static final String FGRUN_J     = "J";  // CSV(XLSX)  5.9.4.2 (2016/01/13)
    063
    064        // 印刷時に使用するテンポラリフォルダ名
    065        private final String REPORT_URL =
    066                HybsSystem.url2dir( StringUtil.nval(
    067                                                                HybsSystem.sys( "REPORT_FILE_URL" ) ,
    068                                                                HybsSystem.sys( "FILE_URL"   ) + "REPORT/" ) ) ;
    069
    070        // 3.8.0.0 (2005/06/07) 追加
    071        // EXCEL取込時に使用するテンポラリフォルダ名。ファイル名は、要求番号.xls
    072        private final String EXCELIN_URL =
    073                HybsSystem.url2dir( StringUtil.nval(
    074                                                                HybsSystem.sys( "EXCEL_IN_FILE_URL" ) ,
    075                                                                HybsSystem.sys( "FILE_URL"   ) + "EXCELIN/" ) ) ;
    076
    077        private final StringBuilder errMsg = new StringBuilder( BUFFER_MIDDLE );
    078
    079        // 各種DBを検索するときに、キー情報
    080        private String          SYSTEM_ID       ;
    081        private String          YKNO            ;
    082        private String          GROUPID         ;
    083        private String          LISTID          ;
    084        private String          JOKEN           ;
    085        private String          OUT_DIR         ;               // 5.1.0.0 (2009/11/04) OUTDIR ⇒ OUT_DIR
    086        private String          OUT_FILE        ;               // 5.1.0.0 (2009/11/04) OUTFILE ⇒ OUT_FILE
    087        private String          outputFile      ;
    088        private boolean         isDebug         ;               // 3.8.5.0 (2006/03/06) デバッグ用のフラグを追加
    089
    090        // GE53 検索結果
    091        private String          FGRUN           ;
    092        private String          PRTID           ;
    093        private String          LANG            = "ja";
    094        private String          PRGDIR          ;
    095        private String          PRGFILE         ;
    096        private String          DMN_GRP         ;               // 3.8.0.5 (2005/08/26)
    097        private String          programFile     ;
    098
    099        // GE53 の帳票振分情報を取得するSQL文です。
    100        // 3.8.0.5 (2005/08/26) デーモングループ追加
    101        // 4.0.0 (2005/01/31) 共有 system_id を、考慮
    102        private static final String GE53_SELECT =
    103                "SELECT FGRUN,PRTID,LANG,PRGDIR,PRGFILE,SYSTEM_ID,DMN_GRP" +
    104                " FROM GE53" +
    105                " WHERE FGJ = '1'" +
    106                " AND  SYSTEM_ID IN (?,'**')" +
    107                " AND  JOKEN = ?" ;
    108
    109        private static final int GE53_FGRUN             = 0;
    110        private static final int GE53_PRTID             = 1;
    111        private static final int GE53_LANG              = 2;
    112        private static final int GE53_PRGDIR    = 3;
    113        private static final int GE53_PRGFILE   = 4;
    114        private static final int GE53_SYSTEM_ID = 5;
    115        private static final int GE53_DMN_GRP   = 6;
    116
    117        /** コネクションにアプリケーション情報を追記するかどうか指定 */
    118        public static final boolean USE_DB_APPLICATION_INFO  = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
    119
    120        // 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    121        private ApplicationInfo appInfo;
    122        private final String DBID = HybsSystem.sys( "RESOURCE_DBID" );          // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対応
    123
    124        /**
    125         * デフォルトコンストラクター
    126         *
    127         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    128         */
    129        public ReportProcessing() { super(); }          // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
    130
    131        /**
    132         * 処理を実行します。
    133         * このメソッドを実行すると、レポート変換、レポート出力を順次処理していきます。
    134         *
    135         * @og.rev 3.0.0.4 (2003/02/26) FGRUN が PRT のみのときは，MODELFILE のみセットして終了する。
    136         * @og.rev 3.8.0.0 (2005/06/07) ReportConverter の initialDataSet() を呼び出して，MODELFILE をセットする。
    137         * @og.rev 3.8.0.0 (2005/06/07) EXCEL 登録機能を追加します。
    138         * @og.rev 3.8.0.0 (2005/06/07) 実行結果を boolean ではなく、文字列(FGKAN_XX)で返します。
    139         * @og.rev 3.8.0.5 (2005/08/26) デーモングループ追加
    140         * @og.rev 3.8.0.9 (2005/10/17) エラーメッセージ強化
    141         * @og.rev 3.8.5.0 (2006/03/06) 標準画面出力メッセージの変更。日付、ﾌﾟﾘﾝﾀIDの表示
    142         * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    143         * @og.rev 4.0.3.0 (2007/12/26) RFID対応(実行方法='A','B','C'の処理追加)
    144         * @og.rev 4.1.1.0 (2008/02/21) RFID対応(実行方法='D'の処理追加)
    145         * @og.rev 4.3.3.0 (2008/10/01) 板金RFID対応(PRGDIR,PRGFILEの渡し等)
    146         * @og.rev 5.4.3.9 (2012/01/25) RFIDの雛形ファイル名私は旧帳票は無視する
    147         * @og.rev 5.9.0.0 (2015/09/04) CSV出力対応
    148         * @og.rev 5.9.2.2 (2015/11/20) CSV出力にgrpid,dmngrpを追加
    149         * @og.rev 5.9.4.2 (2016/01/13) FGRUN_J追加
    150         * @og.rev 6.4.2.0 (2016/01/29) StringUtil#stringStackTrace(Throwable) を、ThrowUtil#ogStackTrace(Throwable) に置き換え。
    151         * @og.rev 6.4.2.0 (2016/01/29) DateSet.getDate( String ) を利用するように修正します。
    152         * @og.rev 6.4.2.1 (2016/02/05) メソッド名変更 ReportConverter#modelFile() → ReportConverter#getModelFile() 。
    153         *
    154         * @return 結果 (FGKAN_XX エラー時は、null)
    155         */
    156        public String execute() {
    157                System.out.println();
    158                System.out.println( "Process Start:" + DateSet.getDate( "yyyy/MM/dd HH:mm:ss" ) );                                              // 6.4.2.0 (2016/01/29)
    159                System.out.println( "  SYSTEM_ID=[" + SYSTEM_ID + "] YKNO=[" + YKNO + "] GROUPID=[" + GROUPID + "]" );
    160                System.out.println( "  PRTID=[" + PRTID + "] LISTID=[" + LISTID + "] JOKEN=[" + JOKEN + "]" );
    161                String  fgkan = null;
    162
    163                // 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    164                if( USE_DB_APPLICATION_INFO ) {
    165                        appInfo = new ApplicationInfo();
    166                        // ユーザーID,IPアドレス,ホスト名
    167                        appInfo.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME );
    168                        // 画面ID,操作,プログラムID
    169                        appInfo.setModuleInfo( "ReportProcessing",YKNO,LISTID );
    170                }
    171                else {
    172                        appInfo = null;
    173                }
    174
    175                boolean flag ;
    176                try {
    177                        flag = initialDataSet( appInfo );
    178                        System.out.print( "INIT=" + flag + "," );
    179                        final String reportDir  = REPORT_URL + SYSTEM_ID + FS + LISTID ;
    180                        String modelFile = null;
    181
    182        // ================== FGRUN_1,2,3 は、帳票印刷処理 ===========================================
    183                        // 3.8.0.0 (2005/06/07) 実行方法(FGRUN)に、EXCEL取込関連のフラグ値を追加。Stringからintに変更
    184                        if( flag && ( FGRUN.equals( FGRUN_1 ) || FGRUN.equals( FGRUN_2 ) || FGRUN.equals( FGRUN_3 ) ) ) {
    185                                System.out.println( "RUN_" + FGRUN );
    186                                final ReportConverter rc = new ReportConverter( SYSTEM_ID,YKNO,LISTID,reportDir,LANG,isDebug );
    187
    188                                // 3.8.0.0 (2005/06/07) MODELFILE のセットは、initialDataSet() で行う。
    189                                flag = rc.initialDataSet();
    190                                modelFile = rc.getModelFile();          // 6.4.2.1 (2016/02/05) メソッド名変更
    191
    192                                if( flag && ( FGRUN.equals( FGRUN_1 ) || FGRUN.equals( FGRUN_3 ) ) ) {
    193                                        flag = rc.execute();
    194                                }
    195
    196                                if( flag ) { fgkan = GE50Access.FG_OK; }
    197                                errMsg.append( rc.getErrMsg() ).append( CR );
    198                        }
    199                        if( flag && ( FGRUN.equals( FGRUN_2 ) || FGRUN.equals( FGRUN_3 ) ) ) {
    200                                System.out.println( "RUN_" + FGRUN );
    201                                fgkan = null;
    202                                // 3.8.0.5 (2005/08/26) デーモングループ追加
    203                                final ReportPrint rp = new ReportPrint( SYSTEM_ID,YKNO,PRTID,programFile,reportDir,modelFile,outputFile,DMN_GRP,isDebug );
    204                                flag = rp.execute();
    205                                if( flag ) { fgkan = GE50Access.FG_OK; }
    206                                errMsg.append( rp.getErrMsg() ).append( CR );
    207                        }
    208
    209        // ================== FGRUN_4,5,6 は、EXCEL取込処理 ===========================================
    210                        // 3.8.0.0 (2005/06/07) EXCEL 登録機能を追加します。
    211                        final String excelinDir = EXCELIN_URL + SYSTEM_ID + FS + LISTID;
    212                        if( flag && ( FGRUN.equals( FGRUN_5 ) || FGRUN.equals( FGRUN_7 ) ) ) {
    213                                System.out.println( "RUN_" + FGRUN );
    214                                final ExcelInsert ei = new ExcelInsert( SYSTEM_ID,YKNO,LISTID,excelinDir,isDebug );
    215
    216                                flag = ei.execute();
    217                                if( flag ) { fgkan = GE50Access.FG_DBIN; }
    218                                errMsg.append( ei.getErrMsg() ).append( CR );
    219                        }
    220                        if( flag && ( FGRUN.equals( FGRUN_6 ) || FGRUN.equals( FGRUN_7 ) ) ) {
    221                                System.out.println( "RUN_" + FGRUN );
    222                                fgkan = null;
    223                                final ProgramRun pr = new ProgramRun( SYSTEM_ID,YKNO,LISTID,isDebug );
    224                                flag = pr.execute();
    225                                if( flag ) { fgkan = GE50Access.FG_OK; }
    226                                errMsg.append( pr.getErrMsg() ).append( CR );
    227                        }
    228
    229        // ================== FGRUN_A,B,C,D は、RFID出力処理 ===========================================
    230                        if( flag && ( FGRUN.equals( FGRUN_A ) || FGRUN.equals( FGRUN_B ) || FGRUN.equals( FGRUN_C ) || FGRUN.equals( FGRUN_D ) ) ) {
    231                                System.out.println( "RUN_" + FGRUN );
    232                                //RFIDPrintRequest rpr = new RFIDPrintRequest( SYSTEM_ID,YKNO,LISTID,LANG,FGRUN,PRTID,isDebug );
    233                                // 4.3.3.0 (2008/10/01) RFIDPrintRequestのコンストラクタ引数追加
    234                                // 5.4.3.9 (2012/01/25) 雛形ファイル名は新帳票のみ対応
    235                                final RFIDPrintRequest rpr = new RFIDPrintRequest( SYSTEM_ID,YKNO,LISTID,LANG,FGRUN,PRTID,PRGDIR,PRGFILE,OUT_DIR,null,isDebug );
    236                                flag = rpr.initialDataSet();
    237                                if( flag ) { flag = rpr.execute(); }
    238                                //if( flag ) { fgkan = GE50Access.FG_RUN; }
    239                                // 4.3.3.0 (2008/10/01) 完成フラグの取り方変更
    240                                if( flag ) { fgkan = rpr.getFgkan(); }
    241                                errMsg.append( rpr.getErrMsg() ).append( CR );
    242                        }
    243
    244        // ================== FGRUN_G,H,I,J は、CSV出力処理 ===========================================
    245                        // 5.9.0.0 (2015/09/04)
    246                        // 5.9.4.2 (2016/01/13) FGRUN_J追加
    247                        if( flag && ( FGRUN.equals( FGRUN_G ) || FGRUN.equals( FGRUN_H ) || FGRUN.equals( FGRUN_I ) || FGRUN.equals( FGRUN_J ) ) ) {
    248                                System.out.println( "RUN_" + FGRUN );
    249                                final CSVPrintRequest rpr = new CSVPrintRequest( SYSTEM_ID,YKNO,LISTID,LANG,FGRUN,PRTID,PRGDIR,PRGFILE,OUT_DIR,null,GROUPID,DMN_GRP,isDebug );  // 5.9.2.2 (2015/11/20)
    250                                flag = rpr.initialDataSet();
    251                                if( flag ) { flag = rpr.execute(); }
    252                                if( flag ) { fgkan = rpr.getFgkan(); }
    253                                errMsg.append( rpr.getErrMsg() ).append( CR );
    254                        }
    255                }
    256                catch( final RuntimeException ex ) {
    257                        errMsg.append( "ReportProcessing Execute Error! " ).append( CR ) ;
    258                        errMsg.append( "==============================" ).append( CR );
    259                        errMsg.append( ThrowUtil.ogStackTrace( ex ) ).append( CR ) ;                            // 6.4.2.0 (2016/01/29)
    260                        flag = false;
    261                }
    262
    263                return flag ? fgkan : null ;    // 正常なら、fgkan を、異常なら null を返します。
    264        }
    265
    266        /**
    267         * 内部変数をクリアします。
    268         * このオブジェクトを再利用する場合は、必ずこのメソッドで内部変数の
    269         * クリアが必要です。
    270         * 注意：このクラス自身は、同期処理は入っていません
    271         *
    272         * @og.rev 3.8.0.5 (2005/08/26) デーモングループ追加
    273         *
    274         */
    275        public void clear() {
    276                SYSTEM_ID       = null;
    277                YKNO            = null;
    278                GROUPID         = null;
    279                LISTID          = null;
    280                JOKEN           = null;
    281                OUT_DIR         = null;         // 5.1.0.0 (2009/11/04) OUTDIR ⇒ OUT_DIR
    282                OUT_FILE        = null;         // 5.1.0.0 (2009/11/04) OUTFILE ⇒ OUT_FILE
    283                outputFile      = null;
    284                isDebug         = false;        // 3.8.5.0 (2006/03/06) デバッグ用のフラグを追加
    285
    286                FGRUN           = null;
    287                PRTID           = null;
    288                LANG            = null;
    289                PRGDIR          = null;
    290                PRGFILE         = null;
    291                DMN_GRP         = null;         // 3.8.0.5 (2005/08/26)
    292                programFile     = null;
    293
    294                errMsg.setLength(0);    // 6.1.0.0 (2014/12/26) refactoring
    295        }
    296
    297        /**
    298         * システムID(SYSTEM_ID)をセットします。
    299         *
    300         * @param val システムID
    301         */
    302        public void setSystemId( final String val ) { SYSTEM_ID = val; }
    303
    304        /**
    305         * 要求番号(YKNO)をセットします。
    306         *
    307         * @param val 要求番号
    308         */
    309        public void setYkno( final String val ) { YKNO = val; }
    310
    311        /**
    312         * グループID(GROUPID)をセットします。
    313         *
    314         * @param val グループID
    315         */
    316        public void setGroupId( final String val ) { GROUPID = val; }
    317
    318        /**
    319         * 帳票ID(LISTID)をセットします。
    320         *
    321         * @param val 帳票ID
    322         */
    323        public void setListId( final String val ) { LISTID = val; }
    324
    325        /**
    326         * 処理条件(JOKEN)をセットします。
    327         *
    328         * @param val 処理条件
    329         */
    330        public void setJoken( final String val ) { JOKEN = val; }
    331
    332        /**
    333         * プリンターID(PRTID)をセットします。
    334         *
    335         * @og.rev 3.8.5.0 (2006/03/06) PRTID が指定されていれば、その値を使用する。なければ NULL
    336         * @og.rev 4.3.4.4 (2009/01/01) メソッド名変更
    337         *
    338         * @param val プリンターID
    339         */
    340        public void setPrtId( final String val ) { PRTID = val; }
    341
    342        /**
    343         * 出力先ディレクトリ(OUT_DIR)をセットします。
    344         *
    345         * @param val 出力先ディレクトリ
    346         */
    347        public void setOutDir( final String val ) { OUT_DIR = val; }
    348
    349        /**
    350         * 出力先ファイル(OUT_FILE)をセットします。
    351         *
    352         * @param val 出力先ファイル
    353         */
    354        public void setOutFile( final String val ) { OUT_FILE = val; }
    355
    356        /**
    357         * debugフラグをセットします。
    358         *
    359         * @og.rev 3.8.5.0 (2006/03/06) デバッグ用のフラグを追加します。
    360         *
    361         * @param       flag    デバッグフラグ[true:デバッグ/false:通常]
    362         */
    363        public void setDebug( final boolean flag ) { isDebug = flag; }
    364
    365        /**
    366         * 初期データセットを行います。
    367         * ここでは、GE53 テーブルより必要な情報を取得します。
    368         *
    369         * @og.rev 3.8.0.5 (2005/08/26) デーモングループ追加
    370         * @og.rev 3.8.5.0 (2006/03/06) プリンタIDが引数から、渡される場合の対応
    371         * @og.rev 3.8.6.0 (2006/09/29) 出力先フォルダの自動生成を行います。
    372         * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    373         * @og.rev 5.1.0.0 (2009/11/04) OUTDIR ⇒ OUT_DIR , OUTFILE ⇒ OUT_FILE カラム名変更
    374         * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策
    375         *
    376         * @param       appInfo アプリ情報オブジェクト
    377         *
    378         * @return      結果[true:正常/false:異常]
    379         */
    380        private boolean initialDataSet( final ApplicationInfo appInfo ) {
    381                final String[] args = new String[] { SYSTEM_ID,JOKEN };
    382                // fgrun,prtid,lang,prgdir,prgfile
    383                final String[][] vals = DBUtil.dbExecute( GE53_SELECT,args,appInfo, DBID );     // 5.5.5.1 (2012/08/07)
    384                if( vals == null || vals.length == 0 ) {
    385                        errMsg.append( "Data does not exist in GE53 table." ).append( CR )
    386                                .append( "==============================" ).append( CR )
    387                                .append( "SYSTEM_ID=[" ).append( SYSTEM_ID )
    388                                .append( "] , JOKEN=[" ).append( JOKEN     ).append( ']' )              // 6.0.2.5 (2014/10/31) char を append する。
    389                                .append( CR );
    390                        return false;
    391                }
    392
    393                int row = 0;
    394                // 検索結果が複数帰ったとき、SYSTEM_ID が 指定されている方のデータ(行)を採用する。
    395                for( int i=0; i<vals.length; i++ ) {
    396                        if( SYSTEM_ID.equalsIgnoreCase( vals[i][GE53_SYSTEM_ID] ) ) { row = i; break; }
    397                }
    398
    399                // 3.8.5.0 (2006/03/06) プリンタIDが引数から、渡される場合の対応
    400                if( PRTID == null ) {
    401                        PRTID = StringUtil.nval( vals[row][GE53_PRTID],PRTID   );
    402                }
    403
    404                FGRUN   = StringUtil.nval( vals[row][GE53_FGRUN],       FGRUN   );
    405                LANG    = StringUtil.nval( vals[row][GE53_LANG],        LANG    );
    406                PRGDIR  = StringUtil.nval( vals[row][GE53_PRGDIR],      PRGDIR  );
    407                PRGFILE = StringUtil.nval( vals[row][GE53_PRGFILE],     PRGFILE );
    408                DMN_GRP = StringUtil.nval( vals[row][GE53_DMN_GRP],     DMN_GRP );      // 3.8.0.5 (2005/08/26)
    409                programFile = PRGDIR + FS + PRGFILE ;
    410
    411                if( OUT_DIR != null  && OUT_DIR.length() > 0 &&
    412                        OUT_FILE != null && OUT_FILE.length() > 0 ) {
    413                                outputFile  = OUT_DIR + FS + OUT_FILE ;
    414                                // 3.8.6.0 (2006/09/29) 出力先フォルダの自動生成を行います。
    415                                final File dir = new File(OUT_DIR);
    416                                if( ! dir.exists() && ! dir.mkdirs() ) {
    417                                        final String errMsg = "ディレクトリの作成に失敗しました。[" + OUT_DIR + "]";
    418                                        throw new HybsSystemException( errMsg );
    419                                }
    420                }
    421
    422                return true;
    423        }
    424
    425        /**
    426         * エラーが存在した場合に、エラーメッセージを返します。
    427         *
    428         * @return エラーメッセージ String
    429         * @og.rtnNotNull
    430         */
    431        public String getErrMsg() {
    432                return errMsg.toString();
    433        }
    434}