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    }