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.transfer;
017    
018    import java.io.File;
019    import java.io.PrintWriter;
020    
021    import org.opengion.fukurou.db.Transaction;
022    import org.opengion.fukurou.util.FileUtil;
023    import org.opengion.fukurou.util.HybsDateUtil;
024    import org.opengion.fukurou.util.StringUtil;
025    
026    /**
027     * 伝é?要求に対してのãƒ??タをファイルに書込みしますã?
028     * ä½?�—、書き込まれるãƒ??タにつã�?�¦は、旧伝é?シスãƒ?ƒ の形式と互換性を持たせるためã?
029     * ãƒ??タのå‰?0Byteに空白で埋め、さらに全体で標準では500Byteになるよã�?�«行末にも空白埋めをしますã?
030     * 500byte以外にしたã�??合ã?、書き込みパラメータの第?’引数に整数でæŒ?®šしてくださいã€?
031     * 
032     * 先é?ãƒ??タに限っては、スペã?ス以外で埋める事も可能ですã?
033     * そã?場合ã?実行対象の第?’引数からé ?•ªに
034     * 状況コーãƒ?1byte)、データコーãƒ?1byte)ã€??りå?(2byte)、テキスト種別(4byte) 送りå…?2byte)
035     * を指定してくださいã€?
036     * 送りå…?‚’æŒ?®šしたå?合ã?ãƒ?‚­ストã?後に8byteスペã?ス+送りå…?26byteスペã?ス+連番ã€?‚’付加した上で
037     * 行末の空白埋めを行います(後ろ70byteとã�?�†æŒ?®šではなã�??で注意ï¼?
038     *
039     * 書込みするファイル名ã?、実行対象でæŒ?®šしますã?ファイル名ã?絶対パスでæŒ?®šして下さã�??
040     * またã?書込するãƒ?‚­ストファイルのエンコードã?書込パラメーターでæŒ?®šすることができますã?
041     * æŒ?®šしなã�??合ã?UTF-8が適用されますã?
042     *
043     * @og.group 伝é?シスãƒ?ƒ 
044     *
045     * @version  5.0
046     * @author   Hiroki.Nakamura
047     * @since    JDK1.6
048     */
049    public class TransferExec_SAMCB implements TransferExec {
050    
051            // 書込ファイルオブジェクãƒ?
052    //      private File fileWrite = null;                  // 5.5.2.4 (2012/05/16) ローカル変数åŒ?
053    
054            // 書込ファイルのエンコーãƒ?
055    //      private String fileEncode = null;               // 5.5.2.4 (2012/05/16) ローカル変数åŒ?
056    
057            /**
058             * ファイルに書込みしますã?
059             *
060             * @param vals 伝é?ãƒ??タ(配å?)
061             * @param config 伝é?設定オブジェクãƒ?
062             * @param tran トランザクションオブジェクãƒ?
063             *
064             * @og.rev 5.5.3.3 (2012/06/15) close処ç�?
065             * @og.rev 5.8.1.1 (2014/11/14) パラメータで桁数æŒ?®š可能にする
066             * @og.rev 5.8.1.2 (2014/11/21) 前方,後方のスペã?ス埋めのç®?‰€の互換性を上げã‚?
067             */
068            @Override
069            public void execute( final String[] vals, final TransferConfig config, final Transaction tran ) {
070                    String fileEncode = "UTF-8";
071                    
072                    // 5.8.1.2
073                    String[] obj = StringUtil.csv2Array( config.getExecObj(), ' ' );
074    //              File fileWrite = new File( config.getExecObj() );
075                    File fileWrite = new File( obj[0] );
076                    String preText = "";
077                    String suffText = "";
078                    preText +=  ( obj.length > 1 ) ? obj[1] : ""; // 状況コーãƒ?
079                    preText +=  ( obj.length > 2 ) ? obj[2] : ""; // ãƒ??タコーãƒ?
080                    preText +=  ( obj.length > 3 ) ? StringUtil.stringFill( obj[3], 8, fileEncode ) : ""; // ホスãƒ?O
081                    preText +=  ( obj.length > 4 ) ? StringUtil.stringFill( obj[4], 4, fileEncode ) : ""; // ãƒ?‚­スト種別
082                    preText = StringUtil.stringFill( preText, 14, fileEncode );
083                    if(obj.length > 1){
084                            preText += HybsDateUtil.getDate( "yyMMddHHmmss" );
085                            preText += HybsDateUtil.getDate( "MMdd" );
086                    }
087                    preText +=  ( obj.length > 4 ) ? StringUtil.stringFill( obj[4], 4, fileEncode ) : ""; // ãƒ?‚­スト種別
088                    
089                    suffText +=  ( obj.length > 5 ) ? StringUtil.stringFill( "", 8, fileEncode ) + StringUtil.stringFill( obj[5], 28, fileEncode ) : ""; // 送りå…?
090                    
091                    // 5.8.1.1 (2014/11/14) fillByte追åŠ?
092                    int fillByte = 500;
093                    String execPrm = config.getExecPrm();
094                    if( execPrm != null && execPrm.length() > 0 ){
095                            String[] prm = StringUtil.csv2Array( execPrm, ' ' );
096                            fileEncode =  prm[0];
097                            if( prm.length > 1 ) {
098                                    fillByte = Integer.parseInt( prm[1] );
099                            }
100                    }
101    
102    //              String fileEncode = config.getExecPrm();
103    //              if( fileEncode == null || fileEncode.length() == 0 ) {
104    //                      fileEncode = "UTF-8";
105    //              }
106    
107                    PrintWriter writer = FileUtil.getPrintWriter( fileWrite,fileEncode );
108                    String line = null;
109                    // 5.8.1.2 (2014/11/21) iが欲しいので書き方を変更する
110    //              for( String s : vals ) {
111                    for (int i = 0; i < vals.length; i++){
112                            // å‰?0Byteを空白埋め 
113                            // 5.8.1.2 (2014/11/21) 前方をスペã?ス以外で埋められるよã�?�«する
114    //                      String preSpace = StringUtil.stringFill( "", 30, fileEncode );
115                            String preSpace = StringUtil.stringFill( preText, 30, fileEncode );
116                            // 全体で500Byteになるよã�?�«後ろに空白埋め
117                            // 5.8.1.1 500Byte以外もæŒ?®š可能とする
118    //                      line = StringUtil.stringFill( preSpace + s, 500, fileEncode );
119    //                      line = StringUtil.stringFill( preSpace + s, fillByte, fileEncode );
120                            // 5.8.1.2 (2014/11/21)
121                            if(obj.length > 5){
122                                    line = StringUtil.stringFill( preSpace + vals[i] + suffText + StringUtil.intFill( Integer.toString( i ), 14 ), fillByte, fileEncode );
123                            }
124                            else{
125                                    line = StringUtil.stringFill( preSpace + vals[i] + suffText, fillByte, fileEncode );
126                            }
127                            
128                            writer.println( line );
129                    }
130                    writer.close(); // 5.5.3.3 (2012/06/15)
131            }
132    }