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 }