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.report;
017
018 import java.io.BufferedWriter;
019 import java.io.File;
020 import java.io.FileNotFoundException;
021 import java.io.FileOutputStream;
022 import java.io.OutputStreamWriter;
023 import java.io.UnsupportedEncodingException;
024 import org.opengion.hayabusa.common.HybsSystemException;
025 import org.opengion.hayabusa.common.HybsSystem;
026
027 /**
028 * XML形式でRFID??タを作?します?
029 * バッチ?コールも?部で行います?
030 *
031 * @og.group 帳票シス?
032 *
033 * @version 5.4.3.0
034 * @author Masakazu Takahashi
035 * @since JDK6.0,
036 */
037 public class RFIDPrintPointService_DEFAULT extends AbstractRFIDPrintPointService {
038
039 private static final String CR = System.getProperty("line.separator");
040 private final StringBuilder strXML = new StringBuilder(); // XMLはこれに吐く
041
042 private final String xmlEncode = HybsSystem.sys("REPORT_RFID_TEXT_ENCODE");
043
044 /**
045 * RFID発行??
046 * XMLを作って、ファイル出?
047 *
048 * @return 結果 [true:正常/false:異常]
049 */
050 @Override
051 public boolean execute(){
052 System.out.print( "RRID RequestData Creating ... " );
053 BufferedWriter bw = null;
054 String filename= outdir;
055 boolean flg = false;
056
057 try {
058 makeXMLheader();
059 makeXMLprintHeader();
060 makeXMLprintCards();
061 makeXMLfooter();
062
063 bw = getWriter(filename,false,xmlEncode);
064 bw.write( strXML.toString() );
065 bw.flush();
066 bw.close();
067
068 // 常に実行す?
069 makeShellCommand();
070 flg = programRun();
071
072 }
073 catch ( Throwable ex ) {
074 errMsg.append( "RFID Print Request Execution Error. " ).append( CR );
075 errMsg.append( "==============================" ).append( CR );
076 errMsg.append( "SYSTEM_ID=[" ).append( systemId ).append( "] , " );
077 errMsg.append( "YKNO=[" ).append( ykno ).append( "] , " );
078 errMsg.append( ex.toString() );
079 errMsg.append( CR );
080 // throw new RuntimeException( errMsg.toString() );
081 throw new RuntimeException( errMsg.toString(), ex );
082 }
083 return flg;
084 }
085
086 /**
087 * Dataタグ開始までを?力しま?
088 *
089 * @og.rev 5.4.3.4 (2012/01/12) listid
090 * @og.rev 5.4.3.9 (2012/01/25) layoutFile (新帳票のみ)
091 */
092 // private void makeXML_header(){
093 private void makeXMLheader(){
094 strXML.append( "<?xml version=\"1.0\" encoding=\"").append( xmlEncode ).append("\" ?>" ).append( CR );
095 strXML.append( "<RfidEvent>" ).append( CR );
096 strXML.append( "<Type>210</Type>" ).append( CR ); // 210固?
097 strXML.append( "<SubType>1</SubType>" ).append( CR ); // 1固?
098 strXML.append( "<Id>").append( listid ).append("</Id>" ).append( CR ); // ?な?> 5.4.3.4 listid
099 strXML.append( "<LayoutFilename>").append( layoutFile ).append("</LayoutFilename>" ).append( CR ); // 5.4.3.9 追?
100 strXML.append( "<SiteName>" ).append( hostName ).append( "</SiteName>" ).append( CR );
101 //strXML.append( "<DeviceName>" ).append( prtName ).append( "</DeviceName>" ).append( CR );
102 strXML.append( "<DeviceName>" ).append( prtid ).append( "</DeviceName>" ).append( CR ); // 5.4.3.9 nameからidへ
103 strXML.append( "<Data>" ).append( CR );
104 }
105
106 /**
107 * printHeaderタグを?力しま?
108 * カラ?????タができま?
109 *
110 * @og.rev 5.4.3.9 (2012/01/25) GE58はなくてもよ?
111 */
112 // private void makeXML_printHeader(){
113 private void makeXMLprintHeader(){
114 strXML.append( "<PrintHeader systemId=\"" ).append( systemId ).append( "\" demandNo=\"" )
115 .append( ykno ).append( "\">" ).append( CR );
116
117 for( int clmNo=0; clmNo<table.getColumnCount(); clmNo++ ) {
118 String clmNm = table.getColumnName( clmNo );
119
120 String[] rfidConf = rfidLayout.get( clmNm );
121 // if( rfidConf == null ) {
122 // // 5.4.3.9 なくてもエラーにしな?
123 // errMsg.append( "Column does not Exists in GE58. " ).append( CR );
124 // errMsg.append( "==============================" ).append( CR );
125 // errMsg.append( "SYSTEM_ID=[" ).append( systemId ).append( "] , " );
126 // errMsg.append( "YKNO=[" ).append( ykno ).append( "] , " );
127 // errMsg.append( "COLUMN=[" ).append( table.getColumnName( clmNo ) ).append( "]" );
128 // errMsg.append( CR );
129 // throw new RuntimeException( errMsg.toString() );
130 // }
131 // else{
132 if( rfidConf != null ) {
133 strXML.append( "<Col name=\"" ).append( clmNm ).append( "\"" ).append( CR );
134 strXML.append( " kbout=\"" ).append( rfidConf[RFIDPrintRequest.GE58_KBOUT] ).append( "\"" ).append( CR );
135 strXML.append( " data1=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA1] ).append( "\"" ).append( CR );
136 strXML.append( " data2=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA2] ).append( "\"" ).append( CR );
137 strXML.append( " data3=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA3] ).append( "\"" ).append( CR );
138 strXML.append( " data4=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA4] ).append( "\"" ).append( CR );
139 strXML.append( " data5=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA5] ).append( "\"" ).append( CR );
140 strXML.append( " data6=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA6] ).append( "\"" ).append( CR );
141 strXML.append( " data7=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA7] ).append( "\"" ).append( CR );
142 strXML.append( " data8=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA8] ).append( "\"" ).append( CR );
143 strXML.append( " data9=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA9] ).append( "\"" ).append( CR );
144 strXML.append( " data10=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA10] ).append( "\"" ).append( CR );
145 strXML.append( " data11=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA11] ).append( "\"" ).append( CR );
146 strXML.append( " data12=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA12] ).append( "\"" ).append( CR );
147 strXML.append( " data13=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA13] ).append( "\"" ).append( CR );
148 strXML.append( " data14=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA14] ).append( "\"" ).append( CR );
149 strXML.append( " data15=\"" ).append( rfidConf[RFIDPrintRequest.GE58_DATA15] ).append( "\"" );
150 strXML.append( " />" ).append( CR );
151 }
152 }
153
154 strXML.append( "</PrintHeader>" ).append( CR );
155 }
156
157 /**
158 * printCardsタグ開始までを?力しま?
159 * 印刷枚数????タができま?
160 */
161 // private void makeXML_printCards(){
162 private void makeXMLprintCards(){
163 strXML.append( "<PrintCards>" ).append( CR );
164
165 for( int rowNo=0; rowNo<table.getRowCount(); rowNo++ ) {
166 strXML.append( "<PrintCard control=\"" ).append( fgrun ).append( "\" edno=\"" )
167 .append( Integer.toString( rowNo+1 ) ).append( "\">" ).append( CR );
168
169 // カラ?位?処?
170 for( int clmNo=0; clmNo<table.getColumnCount(); clmNo++ ) {
171 strXML.append( "<ColData name=\"" ).append( table.getColumnName( clmNo ) ).append("\">");
172 strXML.append( table.getValue( rowNo, clmNo ) );
173 strXML.append( "</ColData>" ).append( CR );
174 }
175
176 strXML.append( "</PrintCard>" ).append( CR );
177 }
178
179 strXML.append( "</PrintCards>" ).append( CR );
180 }
181
182 /**
183 * Dataタグ終?ら最後までを?力しま?
184 */
185 // private void makeXML_footer(){
186 private void makeXMLfooter(){
187 strXML.append( "</Data>" ).append( CR );
188 strXML.append( "<Time>systemstamp</Time>" ).append( CR ); // systemstamp固?
189 strXML.append( "<SourceName>null</SourceName>" ).append( CR );
190 strXML.append( "<CorrelationId>null</CorrelationId>" ).append( CR );
191 strXML.append( "</RfidEvent>" ).append( CR );
192 }
193
194 /**
195 * XMLファイル書き込み用のライターを返します?
196 *
197 * @param fileName ファイル?
198 * @param append アベンドするか
199 * @param encode エンコー?
200 *
201 * @return ライター
202 */
203 private BufferedWriter getWriter( final String fileName, final boolean append, final String encode) {
204 File file = new File ( fileName );
205 BufferedWriter bw;
206
207 try {
208 bw = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( file, append ), encode ) );
209 }
210 catch ( UnsupportedEncodingException ex ) {
211 errMsg.append( "[ERROR] Input File is written by Unsupported Encoding" );
212 throw new HybsSystemException( ex );
213 }
214 catch ( FileNotFoundException ex ) {
215 errMsg.append( "[ERROR] File not Found" );
216 throw new HybsSystemException( ex );
217 }
218 return bw;
219 }
220
221 /**
222 * シェルコマンド???を作?します?
223 *
224 * @og.rev 5.4.3.9 引数変更
225 *
226 * @return 結果 [true:正常/false:異常]
227 */
228 private boolean makeShellCommand() {
229 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
230
231 buf.append( prgdir + HybsSystem.FS + prgfile ).append( " " ); // 実行するコマン?
232 buf.append( "\"" ).append( ykno ).append( "\" " ); // 引数?:要?O
233 buf.append( "\"" ).append( prtid ).append( "\" " ); // 引数?:?リンタID
234 buf.append( "\"" ).append( prtName ).append( "\" " ); // 引数?:?リンタID
235 buf.append( "\"" ).append( hostName ).append( "\" " ); // 引数?:?スト名
236 buf.append( "\"" ).append( portnm ).append( "\" " ); // 引数?:?リンタポ??5.4.3.1(2011/12/27)
237
238 shellCmd = buf.toString();
239 System.out.println( CR + shellCmd + CR );
240
241 return true;
242 }
243 }