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.BufferedReader;
019 import java.io.File;
020 import java.util.ArrayList;
021 import java.util.List;
022
023 import org.opengion.fukurou.db.Transaction;
024 import org.opengion.fukurou.util.ApplicationInfo;
025 import org.opengion.fukurou.util.Closer;
026 import org.opengion.fukurou.util.FileUtil;
027 import org.opengion.fukurou.util.LogWriter;
028 import org.opengion.fukurou.util.StringUtil;
029
030 /**
031 * ä¼é?è¦æ±‚ã«å¯¾ã—ã¦ã€ãƒ†ã‚ストファイルã‹ã‚‰ãƒ??ã‚¿ã‚’èªå–ã—ã¾ã™ã?
032 * ä½?—ã€èªå–ã•れるãƒ??ã‚¿ã«ã¤ã?¦ã¯ã€æ—§ä¼é?シスãƒ?ƒ ã®å½¢å¼ã¨äº’æ›æ€§ã‚’æŒãŸã›ã‚‹ãŸã‚ã?
033 * 31Byteã‹ã‚‰430Byteã¾ã§ã®400Byteã‚’å–å¾—ã—ã¾ã™ã?
034 *
035 * èªå–ã™ã‚‹ãƒ•ァイルåã?ã€èªå–å¯¾è±¡ã§æŒ?®šã—ã¾ã™ã?
036 * ファイルåã?çµ¶å¯¾ãƒ‘ã‚¹ã§æŒ?®šã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?
037 *
038 * èªè¾¼åŠã?ãã?後ã?実行å?ç?Œæ£å¸¸çµ‚äº?—ãŸå?åˆã?ã€èªå–ファイルã¯å‰Šé™¤ã•れã¾ã™ã?
039 * ä½?—ã€èªå–パラメーターã«"UNDEL"ã¨ã?†æ–?—ã‚’è¨å®šã—ãŸå?åˆã?ã€æ£å¸¸çµ‚äº?—ãŸå?åˆã§ã‚?
040 * ファイルã¯å‰Šé™¤ã•れã¾ã›ã‚“ã€?
041 *
042 * ã¾ãŸã?èªå–ã™ã‚‹ãƒ†ã‚ストファイルã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã?èªå–ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ãŒæŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã?
043 * æŒ?®šã—ãªã??åˆã?シスãƒ?ƒ リソースã®"DB_ENCODE"ã§æŒ?®šã•れãŸå€¤ãŒé©ç”¨ã•れã¾ã™ã?
044 *
045 * @og.group ä¼é?シスãƒ?ƒ
046 *
047 * @version 5.0
048 * @author Hiroki.Nakamura
049 * @since JDK1.6
050 */
051 public class TransferRead_SAMCB implements TransferRead {
052
053 // èªå–ファイルオブジェクãƒ?
054 private String fileName = null;
055
056 // èªå–ファイルã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ?
057 // private String fileEncode = null; // 5.5.2.4 (2012/05/16) ãƒãƒ¼ã‚«ãƒ«å¤‰æ•°åŒ?
058
059 // 完äº?™‚ã«èªå–ファイルを削除ã™ã‚‹ã‹ã©ã?‹
060 private boolean fileDel = true;
061
062 /**
063 * ファイルã‹ã‚‰ãƒ??ã‚¿ã‚’èªã¿å–りã¾ã™ã?
064 *
065 * @param config ä¼é?è¨å®šã‚ªãƒ–ジェクãƒ?
066 * @param tran トランザクションオブジェク�
067 *
068 * @return èªã¿å–りã—ãŸãƒ??ã‚¿(é…å?)
069 */
070 @Override
071 public String[] read( final TransferConfig config, final Transaction tran ) {
072 fileName = config.getReadObj();
073 File fileRead = new File( fileName );
074 if( !fileRead.exists() ) { return new String[0]; }
075
076 String readPrm = config.getReadPrm();
077 if( readPrm != null && readPrm.indexOf( "UNDEL" ) >= 0 ) {
078 fileDel = false;
079 readPrm = readPrm.replace( "UNDEL", "" ).trim();
080 }
081 String fileEncode = readPrm;
082 if( fileEncode == null || fileEncode.length() == 0 ) {
083 fileEncode = "UTF-8";
084 }
085
086 List<String> valList = new ArrayList<String>();
087 BufferedReader reader = FileUtil.getBufferedReader( fileRead, fileEncode );
088 String line = null;
089 try {
090 while( ( line = reader.readLine() ) != null ) {
091 line = StringUtil.stringFill( line, 500, fileEncode );
092 byte[] bytes = StringUtil.makeByte( line, fileEncode );
093 line = StringUtil.makeString( bytes, 30, 400, fileEncode );
094 valList.add( line );
095 }
096 }
097 catch( Throwable ex ) {
098 LogWriter.log( ex );
099 String errMsg = "ファイルèªå–時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€?LINE=" + line + "]";
100 throw new RuntimeException( errMsg, ex );
101 }
102 finally {
103 Closer.ioClose( reader );
104 }
105
106 // return valList.toArray( new String[0] );
107 return valList.toArray( new String[valList.size()] );
108 }
109
110 /**
111 * æ›´æ–°(削除)対象ã®ãƒ•ァイルå?é…å?)ã‚’è¿”ã—ã¾ã™ã?
112 *
113 * @return ファイルå?é…å?)
114 */
115 @Override
116 public String[] getKeys() {
117 // String[] rtn = { fileName };
118 // return rtn;
119 return new String[] { fileName }; // 5.5.2.4 (2012/05/16)
120 }
121
122 /**
123 * æ›´æ–°(削除)対象ã®ãƒ•ァイルåã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
124 *
125 * @param keys ファイルå?é…å?)
126 */
127 @Override
128 public void setKeys( final String[] keys ) {
129 if( keys == null || keys.length == 0 ) { return; }
130 fileName = keys[0];
131 }
132
133 /**
134 * èªå–ã—ãŸãƒ‡ãƒ¼ã‚¿ã«å¯¾ã—ã¦å®Œäº??ç?‚’行ã„ã¾ã™ã?
135 * 具体的ã«ã¯ã€èªå–ã—ãŸãƒ†ã‚ストファイルを削除ã—ã¾ã™ã?
136 *
137 * @param config ä¼é?è¨å®šã‚ªãƒ–ジェクãƒ?
138 * @param tran トランザクションオブジェク�
139 */
140 @Override
141 public void complete( final TransferConfig config, final Transaction tran ) {
142 if( !fileDel ) { return; }
143
144 File fileRead = new File( fileName );
145 if( !fileRead.exists() ) {
146 return;
147 // String errMsg = "ファイルãŒå˜åœ¨ã—ã¾ã›ã‚“ã€?FILE=" + fileRead.getAbsolutePath() + "]";
148 // throw new RuntimeException( errMsg );
149 }
150
151 boolean rtn = fileRead.delete();
152 if( !rtn ) {
153 String errMsg = "ファイルã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€?FILE=" + fileRead.getAbsolutePath() + "]";
154 throw new RuntimeException( errMsg );
155 }
156 }
157
158 /**
159 * èªå–ã—ãŸãƒ‡ãƒ¼ã‚¿ã«å¯¾ã—ã¦ã‚¨ãƒ©ãƒ¼å‡¦ç?‚’行ã„ã¾ã™ã?
160 * (ã“ã“ã§ã¯ä½•も処ç?—ã¾ã›ã‚“)
161 *
162 * @param config ä¼é?è¨å®šã‚ªãƒ–ジェクãƒ?
163 * @param appInfo DBæŽ¥ç¶šæƒ…å ±
164 */
165 @Override
166 public void error( final TransferConfig config, final ApplicationInfo appInfo ) {
167 }
168 }