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.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.HybsSystemException;
020    import org.opengion.hayabusa.db.DBErrMsg;
021    import org.opengion.hayabusa.resource.GUIInfo;
022    import org.opengion.hayabusa.resource.ResourceManager;
023    import org.opengion.fukurou.db.Transaction;
024    import org.opengion.fukurou.db.TransactionReal;
025    import org.opengion.fukurou.util.ErrorMessage;
026    import org.opengion.fukurou.util.FileUtil;
027    import org.opengion.fukurou.util.StringUtil;
028    import org.opengion.fukurou.util.Closer ;
029    import static org.opengion.fukurou.util.StringUtil.nval ;
030    
031    import java.util.Locale ;
032    
033    import java.sql.Connection;
034    import java.sql.Statement;
035    import java.sql.CallableStatement;
036    import java.sql.ResultSet;
037    import java.sql.ResultSetMetaData;
038    import java.sql.SQLException;
039    import java.sql.Types;
040    // import java.sql.Array;                                                       // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ? 対応ã?oracle.sql.ARRAY ã®ç½®ãæ›ã?
041    import oracle.sql.ARRAY;                                                        // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ? 対å¿?
042    import oracle.sql.ArrayDescriptor;                                      // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ? 対å¿?
043    // import oracle.jdbc.OracleConnection;                         // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ? 対å¿?
044    
045    import oracle.jdbc.OracleTypes;                                         // CURSOR ãŒæ®‹ã‚‹
046    import oracle.jdbc.OracleCallableStatement;                     // CURSOR ãŒæ®‹ã‚‹
047    
048    import java.io.File;
049    import java.io.PrintWriter;
050    import java.io.FileOutputStream;
051    import java.io.IOException;
052    import java.io.ObjectOutputStream;
053    import java.io.ObjectInputStream;
054    import java.util.zip.ZipOutputStream;
055    import java.util.zip.ZipEntry;
056    
057    import java.util.Map;
058    
059    /**
060     * SELECTæ–?‚’直接実行ã—ã¦ã€æŒ‡å®šã?ファイルã«å‡ºåŠ›ã™ã‚‹ã‚¿ã‚°ã§ã™ã?
061     *
062     * 中間ã?ã€ãƒ‡ãƒ¼ã‚¿(DBTableModel)を作æ?ã—ãªã?Ÿã‚ã?余計ãªãƒ¡ãƒ¢ãƒªã‚’å–らãšã€?
063     * 高é?ã«ãƒ??タを抜ãå?ã™ã“ã¨ãŒå¯èƒ½ã§ã™ã?
064     * ä¸?–¹ã€æŠœãå?ã™ãƒ‡ãƒ¼ã‚¿ã¯ç”Ÿãƒ‡ãƒ¼ã‚¿ã®ãŸã‚ã€ãƒ‡ãƒ¼ã‚¿ã®å†åˆ©ç”¨ç­‰ã?シスãƒ?ƒ çš?ª
065     * 使用を想定ã—ã¦ã?¾ã™ã?
066     * JDBCErrMsg å½¢å¼ã?PL/SQL をコールã—ã¦ã€ãã®æ¤œç´¢çµæžœ(カーソル)を抜ãã“ã¨ã‚‚ã§ãã¾ã™ã?
067     *
068     * ※ ã“ã?ã‚¿ã‚°ã¯ã€Transaction ã‚¿ã‚°ã®å¯¾è±¡ã§ã™ã?
069     *
070     * @og.formSample
071     * â—å½¢å¼ï¼?lt;og:directWriteTable filename="[?¥?¥?¥]" ?¥?¥?¥ >SELECT * FROM ZYXX </og:directWriteTable >
072     * â—body?šã‚ã‚?EVAL_BODY_BUFFERED:BODYを評価ã—ã?{@XXXX} ã‚’è§£æžã—ã¾ã?
073     *
074     * â—Tag定義??
075     *   <og:directWriteTable
076     *       fileURL            ã€TAG】ä¿å­˜å?ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªåã‚’æŒ?®šã—ã¾ã?(åˆæœŸå€¤:FILE_URL[=filetemp/])
077     *       filename           ã€TAG】ファイルを作æ?ã™ã‚‹ã¨ãã?ファイルåã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:シスãƒ?ƒ ãƒ‘ラメータã®FILE_FILENAME)
078     *       zipFilename        ã€TAG】ZIPファイルを作æ?ã™ã‚‹ã¨ãã?ZIPファイルåã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:filename + ".zip")
079     *       encode             ã€TAG】ファイルを作æ?ã™ã‚‹ã¨ãã?ファイルエンコーãƒ?‚£ãƒ³ã‚°åã‚’ã‚»ãƒ?ƒˆã—ã¾ã?(åˆæœŸå€¤:FILE_ENCODE[=UnicodeLittle])
080     *       fileAppend         ã€TAG】追åŠ?ƒ¢ãƒ¼ãƒ‰ã§æ›¸ãè¾¼ã‚?‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false[通常モード])
081     *       zip                ã€TAGã€‘çµæžœã‚’ファイルã«å‡ºåŠ›ã™ã‚‹ã¨ãã«ã€ZIPã§åœ§ç¸®ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
082     *       separator          ã€TAG】å¯å¤‰é•·ãƒ•ァイルを作æ?ã™ã‚‹ã¨ãã?é ?›®åŒºåˆ?‚Šæ–?­—ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?(åˆæœŸå€¤:TAB_SEPARATOR[= ])
083     *       useHeader          ã€TAG】ã?ãƒ?ƒ€ãƒ¼ã‚’書ãè¾¼ã‚?‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:true)
084     *       displayMsg         ã€TAGã€‘æ¤œç´¢çµæžœã‚’ç”»é¢ä¸Šã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹IDを指定ã—ã¾ã?åˆæœŸå€¤:MSG0033[ã€?»¶æ¤œç´¢ã—ã¾ã—ãŸ])
085     *       notfoundMsg        ã€TAGã€‘æ¤œç´¢çµæžœãŒã‚¼ãƒ­ä»¶ã®å ´åˆã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹IDを指定ã—ã¾ã?åˆæœŸå€¤:MSG0077[対象ãƒ??ã‚¿ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸ])
086     *       fetchSize          ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)ãƒ??ã‚¿ã®ãƒ•ã‚§ãƒ?ƒã‚µã‚¤ã‚ºã‚’指定ã—ã¾ã?åˆæœŸå€¤:100)
087     *       names              ã€TAG】PL/SQLを利用ã™ã‚‹å ´åˆã?引数ã«ã‚»ãƒ?ƒˆã™ã¹ã?ãƒ??ã‚¿ã®åç§°ã‚’CSVå½¢å¼ã§è¤?•°æŒ?®šã—ã¾ã?
088     *       queryType          ã€TAG】Query を発行ã™ã‚‹ç‚ºã®ã‚¯ãƒ©ã‚¹ID(JDBC,JDBCErrMsg)を指定ã—ã¾ã?{@og.doc03Link queryType åˆæœŸå€¤:JDBC})
089     *       dbid               ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)検索時ã?DB接続IDを指定ã—ã¾ã?åˆæœŸå€¤:DEFAULT)
090     *       useNumber          ã€TAG】行番å·ã‚’å?力ã™ã‚‹ã‹ã©ã?‹(åˆæœŸå€¤:true)
091     *       debug              ã€TAG】デãƒãƒƒã‚°æƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
092     *   >   ... Body ...
093     *   </og:directWriteTable>
094     *
095     * â—使用ä¾?
096     *     <og:directWriteTable
097     *         dbid        = "ORCL"               接続データベã?スID(åˆæœŸå€¤:DEFAULT)
098     *         separator   = ","                  ファイルã®åŒºåˆ?‚Šæ–?­?åˆæœŸå€¤:ã‚¿ãƒ?
099     *         fileURL     = "{@USER.ID}"    ä¿å­˜å?ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªå?
100     *         filename    = "{@filename}"   ä¿å­˜ãƒ•ァイルå?
101     *         encode      = "UnicodeLittle"      ä¿å­˜ãƒ•ァイルエンコードå
102     *         useHeader   = "true"               ä¿å­˜ãƒ•ァイルã«ãƒ˜ãƒƒãƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹
103     *         zip         = "true"               ZIPファイルã«åœ§ç¸®ã™ã‚‹ã‹ã©ã?‹
104     *         zipFilename = "Sample.zip"         ZIPファイルã®ãƒ•ァイルå?
105     *         fileAppend  = "true"               ファイルを追åŠ?ƒ¢ãƒ¼ãƒ‰ã§ç™»éŒ²ã™ã‚‹ã‹ã©ã?‹
106     *         displayMsg  = "MSG0033"            実行後ã?表示メãƒ?‚»ãƒ¼ã‚¸
107     *         fetchSize   = "200"                DB検索ã™ã‚‹å ´åˆã?フェãƒ?ƒã™ã‚‹ã‚µã‚¤ã‚º
108     *     >
109     *         SELECT * FROM ZYXX 
110     *     </og:directWriteTable >
111     *
112     *     <og:directWriteTable
113     *         fileURL     = "{@USER.ID}"    ä¿å­˜å?ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªå?
114     *         filename    = "{@filename}"   ä¿å­˜ãƒ•ァイルå?
115     *         names       = "AAA,BBB,CCC,?¥?¥?¥"    æŒ?®šã?キーã«å¯¾å¿œã™ã‚‹ãƒªã‚¯ã‚¨ã‚¹ãƒˆå?ã‚?ARG_ARRAY ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
116     *         queryType   = "JDBCErrMsg"         JDBCErrMsg å½¢å¼ã?PL/SQL をコールã—ã¾ã™ã?
117     *     >
118     *        { call PL/SQL(?,?,?,? ) } 
119     *     </og:directWriteTable >
120     *
121     * @og.rev 3.5.6.0 (2004/06/18) æ–°è¦ä½œæ?
122     * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg å½¢å¼?ã®å®Ÿè¡Œã‚’追åŠ?
123     * @og.group ファイル出�
124     *
125     * @version  4.0
126     * @author   Kazuhiko Hasegawa
127     * @since    JDK5.0,
128     */
129    public class DirectWriteTableTag extends CommonTagSupport {
130            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
131            private static final String VERSION = "5.7.2.3 (2014/01/31)" ;
132    
133            private static final long serialVersionUID = 572320140131L ;
134    
135            private static final String TAB_SEPARATOR       = "\t" ;
136            private static final String errMsgId            = HybsSystem.ERR_MSG_KEY;
137    
138            private final int DB_MAX_QUERY_TIMEOUT          = HybsSystem.sysInt( "DB_MAX_QUERY_TIMEOUT" ) ;
139    //      private static final String ARG_ARRAY           = HybsSystem.sys( "ARG_ARRAY" ) ;
140    //      private static final String ERR_MSG                     = HybsSystem.sys( "ERR_MSG" ) ;
141    //      private static final String ERR_MSG_ARRAY       = HybsSystem.sys( "ERR_MSG_ARRAY" ) ;
142            private static final String ARG_ARRAY           = "ARG_ARRAY" ;
143            private static final String ERR_MSG                     = "ERR_MSG" ;
144            private static final String ERR_MSG_ARRAY       = "ERR_MSG_ARRAY" ;
145    
146            // 4.0.0.0 (2007/10/10) dbid ã®åˆæœŸå€¤ã‚’ã?"DEFAULT" ã‹ã‚‰ null ã«å¤‰æ›´
147    //      private String  dbid            = "DEFAULT";
148            private String  dbid            = null;
149            private String  separator       = TAB_SEPARATOR;   // é ?›®åŒºåˆ?‚Šæ–?­?
150            private boolean useHeader       = true;         // ヘッãƒ??ã®ä½¿ç”¨å¯å¦
151            private String  fileURL         = HybsSystem.sys( "FILE_URL" );
152            private String  filename        = HybsSystem.sys( "FILE_FILENAME" );   // ファイルå?
153            private String  zipFilename     = null;         // ZIPファイルå?
154            private String  sql                     = null;
155            private String  encode          = HybsSystem.sys( "FILE_ENCODE"   );   // ファイルエンコーãƒ?‚£ãƒ³ã‚°  "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
156            private boolean fileAppend      = false;        // ファイルをAPPENDモードã§å‡ºåŠ›ã™ã‚‹ã‹
157            private boolean zip                     = false;        // ファイルをZIPã™ã‚‹ã?
158    //      private String  displayMsg      = "MSG0033";    // ã€?»¶æ¤œç´¢ã—ã¾ã—ãŸã€?
159            private String  displayMsg      = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
160            private String  notfoundMsg     = "MSG0077";    // 対象ãƒ??ã‚¿ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸã€?
161            private long    dyStart         = 0;    // 実行時間測定用ã®DIVè¦ç´?‚’出力ã—ã¾ã™ã?
162            private int             fetchSize       = 100 ; // フェãƒ?ƒã™ã‚‹è¡Œæ•°(åˆæœŸå€¤:100)
163            private boolean useNumber       = true;  // 5.5.7.1(2012/10/05) 行番å·å‡ºåŠ?
164    
165            // 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg å½¢å¼?ã¸ã®å¯¾å¿?
166            private boolean queryType       = true; // ノã?マルã¯ã€true/ JDBCErrMsg ã®æ™‚ã?ã€false
167            private String  names           = null; // æŒ?®šã?リクエスト変数をã?ARG_ARRAY ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
168            private int             errCode         = ErrorMessage.OK;
169            private transient ErrorMessage errMessage = null;
170    
171            /**
172             * Taglibã®é–‹å§‹ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doStartTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
173             *
174             * @return      後続å?ç??æŒ?¤º( EVAL_BODY_BUFFERED )
175             */
176            @Override
177            public int doStartTag() {
178                    dyStart = System.currentTimeMillis();           // 時間測定用
179                    return( EVAL_BODY_BUFFERED );   // Body を評価ã™ã‚‹ã€? extends BodyTagSupport æ™?
180            }
181    
182            /**
183             * Taglibã®ã‚¿ã‚°æœ¬ä½“を処ç?™ã‚?doAfterBody() ã‚?オーãƒã?ライドã—ã¾ã™ã?
184             *
185             * @og.rev 3.8.6.3 (2006/11/30) SQL æ–??å‰å¾Œã?スペã?スをå–り除ãã¾ã™ã?
186             *
187             * @return      後続å?ç??æŒ?¤º(SKIP_BODY)
188             */
189            @Override
190            public int doAfterBody() {
191                    sql = getBodyString();
192                    if( sql == null || sql.length() == 0 ) {
193                            String errMsg = "BODY éƒ¨ã®æ¤œç´¢ç”¨ Selectæ–??ã€å¿??ã§ã™ã?";
194                            throw new HybsSystemException( errMsg );
195                    }
196                    sql = sql.trim();
197                    return(SKIP_BODY);                              // Body を評価ã—ãªã?
198            }
199    
200            /**
201             * Taglibã®çµ‚äº?‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doEndTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
202             *
203             * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg å½¢å¼?ã¸ã®å¯¾å¿?
204             * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹çµ±å? getResource().getMessage â‡?getResource().getLabel )
205             *
206             * @return      後続å?ç??æŒ?¤º
207             */
208            @Override
209            public int doEndTag() {
210                    debugPrint();           // 4.0.0 (2005/02/28)
211    
212                    PrintWriter pw = null;
213                    final int executeCount;
214                    try {
215                            if( zip ) {
216                                    String directory = HybsSystem.url2dir( fileURL );
217    
218                                    if( zipFilename == null ) { zipFilename = filename + ".zip"; }
219                                    ZipOutputStream gzip = null;
220                                    try {
221                                            gzip = new ZipOutputStream(
222                                                                    new FileOutputStream(
223                                                                                    StringUtil.urlAppend( directory,zipFilename )));
224                                            gzip.putNextEntry( new ZipEntry( filename ) );
225                                            pw = new PrintWriter( gzip );
226                                            executeCount = create( pw ) ;
227    
228                                            pw.flush();
229                                            gzip.closeEntry();
230                                            gzip.finish() ;
231                                    }
232                                    finally {
233                                            Closer.ioClose( gzip );         // 4.0.0 (2006/01/31) close 処ç?™‚ã® IOException ã‚’ç„¡è¦?
234                                    }
235                            }
236                            else {
237                                    pw = getPrintWriter();
238                                    executeCount = create( pw );
239                            }
240                    } catch( IOException ex ) {
241                            String errMsg = "Error in DirectWriteTableTag: " + toString();
242                            throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数ã®ä¸¦ã³é ?¤‰æ›´
243                    } finally {
244                            Closer.ioClose( pw );           // 4.0.0 (2006/01/31) close 処ç?™‚ã® IOException ã‚’ç„¡è¦?
245                    }
246    
247                    // 3.6.1.0 (2005/01/05) æ¤œç´¢çµæžœã®ä»¶æ•°ã‚’ã?"DB.COUNT" キーã§ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã‚»ãƒ?ƒˆã™ã‚‹ã€?
248                    setRequestAttribute( "DB.COUNT"   , String.valueOf( executeCount ) );
249                    setRequestAttribute( "DB.ERR_CODE", String.valueOf( errCode ) );
250    
251                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
252    
253                    // 実行件数ã®è¡¨ç¤º
254    //              boolean useStatusBar = HybsSystem.sysBool( "VIEW_USE_DISPLAY_MSG" );
255    //              if( useStatusBar && executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
256                    if( executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
257                            buf.append( executeCount );
258    //                      buf.append( getResource().getMessage( displayMsg ) );
259                            buf.append( getResource().getLabel( displayMsg ) );
260                            buf.append( HybsSystem.BR );
261                    }
262                    else if( executeCount == 0 && notfoundMsg != null && notfoundMsg.length() > 0 ) {
263    //                      buf.append( getResource().getMessage( notfoundMsg ) );
264                            buf.append( getResource().getLabel( notfoundMsg ) );
265                            buf.append( HybsSystem.BR );
266                    }
267    
268                    // 3.6.1.0 (2005/01/05) TaglibUtil.makeHTMLErrorTable メソãƒ?ƒ‰ã‚’利用
269                    String err = TaglibUtil.makeHTMLErrorTable( errMessage,getResource() );
270                    if( err != null && err.length() > 0 ) {
271                            buf.append( err );
272                            setSessionAttribute( errMsgId,errMessage );
273                    }
274                    else {
275                            removeSessionAttribute( errMsgId );
276                    }
277    
278                    jspPrint( buf.toString() );
279    
280                    // 時間測定用㮠DIV è¦ç´?‚’出åŠ?
281                    long dyTime = System.currentTimeMillis()-dyStart;
282                    jspPrint( "<div id=\"queryTime\" value=\"" + (dyTime) + "\"></div>" );      // 3.5.6.3 (2004/07/12)
283    
284                    // 3.6.1.0 (2005/01/05) 警告時ã«åœæ­¢ã—ã¦ã?¾ã—ãŸãŒã?継続å?ç?•ã›ã¾ã™ã?
285                    int rtnCode = EVAL_PAGE;
286                    if( errCode >= ErrorMessage.NG )  {  // 異常
287                            rtnCode = SKIP_PAGE;
288                    }
289    
290                    // 4.0.0 (2005/01/31) セキュリãƒ?‚£ãƒã‚§ãƒ?‚¯(ãƒ??タアクセス件数登録)
291                    GUIInfo guiInfo = (GUIInfo)getSessionAttribute( HybsSystem.GUIINFO_KEY );
292                    if( guiInfo != null ) { guiInfo.addReadCount( executeCount,dyTime,sql ); }
293    
294                    return( rtnCode );
295            }
296    
297            /**
298             * タグリブオブジェクトをリリースã—ã¾ã™ã?
299             * キャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨­å®šã‚’行ã„ã¾ã™ã?
300             *
301             * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg å½¢å¼?ã¸ã®å¯¾å¿?
302             * @og.rev 4.0.0.0 (2007/10/10) dbid ã®åˆæœŸå€¤ã‚’ã?"DEFAULT" ã‹ã‚‰ null ã«å¤‰æ›´
303             * @og.rev 5.5.7.1 (2012/10/05) useNumber追�
304             */
305            @Override
306            protected void release2() {
307                    super.release2();
308                    separator       = TAB_SEPARATOR;   // é ?›®åŒºåˆ?‚Šæ–?­?
309                    fileURL         = HybsSystem.sys( "FILE_URL" );
310                    filename        = HybsSystem.sys( "FILE_FILENAME" );   // ファイルå?
311                    zipFilename     = null;         // ZIPファイルå?
312                    sql                     = null;
313                    encode          = HybsSystem.sys( "FILE_ENCODE" );   // ファイルエンコーãƒ?‚£ãƒ³ã‚°  "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
314                    fileAppend      = false;        // ファイルをAPPENDモードã§å‡ºåŠ›ã™ã‚‹ã‹
315                    zip                     = false;        // ファイルをZIPã™ã‚‹ã?
316    //              displayMsg      = "MSG0033";    // ã€?»¶æ¤œç´¢ã—ã¾ã—ãŸã€?
317                    displayMsg      = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
318                    notfoundMsg     = "MSG0077";    // 対象ãƒ??ã‚¿ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸã€?
319    //              dbid            = "DEFAULT";
320                    dbid            = null;
321                    fetchSize       = 100 ; // フェãƒ?ƒã™ã‚‹è¡Œæ•°(åˆæœŸå€¤:0 å‚è?ã«ã—ãªã?
322                    dyStart         = 0;
323                    queryType       = true; // ノã?マルã¯ã€true/ JDBCErrMsg ã®æ™‚ã?ã€false
324                    names           = null; // æŒ?®šã?リクエスト変数をã?ARG_ARRAY ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
325                    errCode         = ErrorMessage.OK;
326                    errMessage      = null;
327                    useNumber       = true; // 5.5.7.1 (2012/10/05)
328            }
329    
330            /**
331             * 実オブジェクトを生æ?ã—ã¦?ŒOutputStream ã«æ›¸ãè¾¼ã¿ã¾ã™ã?
332             *
333             * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg å½¢å¼?ã¸ã®å¯¾å¿?
334             * @og.rev 3.8.6.0 (2006/09/29) ヘッãƒ??ã«ãƒ©ãƒ™ãƒ«ã‚’å?力ã™ã‚‹ã‚ˆã?«ä¿®æ­£
335             * @og.rev 3.8.7.0 (2006/12/15) アクセスログå–å¾—ã?為,ApplicationInfoオブジェクトを設å®?
336             * @og.rev 4.3.4.3 (2008/12/22) (Oracle11gDriver対å¿?PL/SQLコールã®å ´åˆã«ã€?クローズã•ã‚ŒãŸæ–‡ã§ã™ã?"ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å•題ã«å¯¾å¿?
337             * @og.rev 5.1.9.0 (2010/08/01) Transaction 対�
338             * @og.rev 5.2.2.0 (2010/11/01) 改行をå«ã‚??åˆã?ã€ãƒ€ãƒ–ルクオートを強制çš?«å‰å¾Œã«è¿½åŠ?™ã‚‹ã?
339             * @og.rev 5.2.2.0 (2010/11/01) ãƒ?ƒ–ルクオートをå«ã‚??åˆã?ã€ãã®ç›´å‰ã«ãƒ?ƒ–ルクオートを強制çš?«è¿½åŠ?™ã‚‹ã?
340             * @og.rev 5.3.0.0 (2010/12/01) executeCall メソãƒ?ƒ‰ã®å¼•数見直ã?
341             * @og.rev 5.3.7.0 (2011/07/01) TransactionReal ã®å¼•数変更
342             * @og.rev 5.5.7.1 (2012/10/05) useNumberã®è¿½åŠ?
343             *
344             * @param   out PrintWriterオブジェク�
345             *
346             * @return      検索件数
347             */
348            private int create( final PrintWriter out )  {
349                    final int executeCount;
350                    Statement stmt = null;
351                    CallableStatement callStmt = null; // 4.3.4.3 (2008/12/22)
352                    ResultSet resultSet = null ;
353                    boolean errFlag = true;
354    //              Connection conn  = null;
355                    Transaction tran = null;        // 5.1.9.0 (2010/08/01) Transaction 対�
356                    try {
357                            // 5.1.9.0 (2010/08/01) Transaction 対�
358                            TransactionTag tranTag = (TransactionTag)findAncestorWithClass( this,TransactionTag.class );
359                            if( tranTag == null ) {
360    //                              tran = new TransactionReal( dbid,getApplicationInfo() );
361                                    tran = new TransactionReal( getApplicationInfo() );             // 5.3.7.0 (2011/07/01) 引数変更
362                            }
363                            else {
364                                    tran = tranTag.getTransaction();
365                            }
366    //                      conn = ConnectionFactory.connection( dbid,getApplicationInfo() );       // 3.8.7.0 (2006/12/15)
367    
368                            Connection conn = tran.getConnection( dbid );                   // 5.1.9.0 (2010/08/01) Transaction 対�
369                            // 3.6.1.0 (2005/01/05)
370                            if( queryType ) {               // JDBC 通常㮠SELECT �
371                                    stmt = conn.createStatement();
372                                    if( fetchSize > 0 ) { stmt.setFetchSize( fetchSize ); }
373                                    resultSet = stmt.executeQuery( sql );
374                            }
375                            else {                                  // PL/SQL Call æ–?
376                                    String[] values = null;
377                                    if( names != null ) {
378                                            String[] nameArray = StringUtil.csv2Array( names );
379                                            values = getRequest( nameArray );
380                                    }
381                                    callStmt  = conn.prepareCall( sql );
382    //                              resultSet = executeCall( conn,callStmt,sql,values );    // 4.3.4.3 (2008/12/22)
383                                    resultSet = executeCall( conn,callStmt,values );                // 5.3.0.0 (2010/12/01)
384                            }
385                            if( resultSet == null ) { return 0; }
386    
387                            ResultSetMetaData metaData  = resultSet.getMetaData();
388                            int numberOfColumns =  metaData.getColumnCount();
389    
390                            // ヘッãƒ??部ã®å‡ºåŠ?
391                            if( useHeader && numberOfColumns > 0 ) {
392                                    StringBuilder headName  = new StringBuilder();
393                                    StringBuilder headLabel = new StringBuilder();
394                                    headName.append( "#Name" );
395                                    headLabel.append( "#Label" );
396                                    String clm ;
397                                    ResourceManager resource = getResource();
398                                    for(int column = 1; column <= numberOfColumns; column++) {
399                                            clm = (metaData.getColumnLabel(column)).toUpperCase(Locale.JAPAN);
400                                            headName.append( TAB_SEPARATOR ).append( clm );
401                                            headLabel.append( TAB_SEPARATOR ).append( resource.getLabel( clm ) );
402                                    }
403                                    out.println( headName.toString() );
404                                    out.println( headLabel.toString() );
405                            }
406    
407                            int rowNo = 0;
408                            Object obj ;
409                            while( resultSet.next() ) {
410                                    if( useNumber ){ // 5.5.7.1 (2012/10/05)
411                                            out.print( rowNo );                             // 行番å·
412                                    }
413                                    for(int column = 1; column <= numberOfColumns; column++) {
414                                            if( column == 1 && !useNumber && !useHeader ){ // 5.5.7.1 (2012/10/05)
415                                                    //ã“ã?å ´åˆã ã‘セパレータ出力ã—ãªã?
416                                            }
417                                            else{
418                                                    out.print( separator );
419                                            }
420                                            obj = resultSet.getObject(column);
421                                            if( obj != null ) {
422    //                                              out.print( obj );
423                                                    // 5.2.2.0 (2010/11/01) 改行ã?ãƒ?ƒ–ルクオート等ã?処ç?
424                                                    String sval = obj.toString();
425                                                    if( sval.indexOf( '"' ) >= 0 ) { sval = sval.replaceAll( "\"" ,"\"\"" ) ; }
426                                                    if( sval.indexOf( HybsSystem.CR ) >= 0 ) {
427                                                            sval = "\"" + sval + "\"" ;
428                                                    }
429                                                    out.print( sval );
430                                            }
431                                    }
432                                    out.println();
433                                    rowNo++ ;
434                            }
435                            executeCount = rowNo ;
436                            errFlag = false;                // エラーã§ã¯ãªã?
437                    }
438                    catch ( SQLException ex ) {             // 3.6.1.0 (2005/01/05)
439                            String errMsg = "ãƒ??タベã?ス処ç?‚’実行ã§ãã¾ã›ã‚“ã§ã—ãŸã€?
440                                                     + HybsSystem.CR + stmt + HybsSystem.CR
441                                                     + "err=[" + ex.getSQLState() + "]"
442                                                     + ex.getMessage();
443                            throw new HybsSystemException( errMsg,ex );
444                    }
445                    finally {
446                            Closer.resultClose( resultSet );
447                            Closer.stmtClose( stmt );
448                            Closer.stmtClose( callStmt );   // 4.3.4.3 (2008/12/22)
449                            if( tran != null ) {                            // 5.5.2.6 (2012/05/25) findbugs対�
450                                    tran.close( errFlag );                  // 5.1.9.0 (2010/08/01) Transaction 対�
451                            }
452    //                      if( errFlag ) { ConnectionFactory.remove( conn,dbid ); }        // 削除
453    //                      else {                  ConnectionFactory.close( conn,dbid );  }        // è¿”å´
454    //                      conn = null;
455                    }
456    
457                    return executeCount ;
458            }
459    
460            /**
461             * 引数é…å?付ã?クエリーを実行ã—ã¾ã™ã?
462             * 処ç??体ã?, #execute() ã¨åŒæ§˜ã«ã€å„サブクラスã®å®Ÿè£?«ä¾å­˜ã—ã¾ã™ã?
463             * ã“れã¯ã€CallableStatement を用ã?¦ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ã?ス検索処ç?‚’行ã„ã¾ã™ã?
464             * {call TYPE3B01.TYPE3B01(?,?,?,?)} ã§ã€?¼”番目ã®å¼•æ•°ã«ã¯ã€?
465             * names ã§æŒ?®šã—ãŸãƒªã‚¯ã‚¨ã‚¹ãƒˆæƒ…å ±ãŒã?ARG_ARRAY é…å?ã«é ?¬¡ã‚»ãƒ?ƒˆã•れã¾ã™ã?
466             * 使用ã™ã‚‹å ´åˆã?ã€ä¸?—¦ã‚ã‹ã‚Šæ?ã?¤‰æ•°ã«å—ã‘ã¦åˆ©ç”¨ã—ã¦ãã ã•ã„ã€?
467             * 呼ã³å‡ºã?PL/SQL ã§ã¯ã€æ¤œç´¢ç³»PL/SQL ã§ã™ã?
468             *
469             * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg å½¢å¼?ã¸ã®å¯¾å¿?
470             * @og.rev 4.3.4.3 (2008/12/22) (Oracle11gDriver対å¿?PL/SQLコールã®å ´åˆã«ã€?クローズã•ã‚ŒãŸæ–‡ã§ã™ã?"ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å•題ã«å¯¾å¿?
471             * @og.rev 5.3.0.0 (2010/12/01) executeCall メソãƒ?ƒ‰ã®å¼•数見直ã?
472             * @og.rev 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
473             * @og.rev 5.7.2.3 (2014/01/31) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対応ã?ã€Ver5 ã§ã¯è¡Œã‚ãªã?戻ã?ã€?
474             *
475             * @param       conn            コãƒã‚¯ã‚·ãƒ§ãƒ³
476             * @param   callStmt    コーラブルス�?トメン�
477             * @param   args                オブジェクトã?引数é…å?
478             *
479             * @return      çµæžœã‚ªãƒ–ジェクãƒ?
480             */
481    //      private ResultSet executeCall( final Connection conn,final CallableStatement callStmt,final String sql,final String[] args ) throws SQLException {
482            private ResultSet executeCall( final Connection conn,final CallableStatement callStmt,final String[] args ) throws SQLException {
483    //              CallableStatement callStmt = null ; // 4.3.4.3 (2008/12/22)
484                    ResultSet resultSet = null;
485    //              try {
486    //                      callStmt  = conn.prepareCall( sql );
487                            callStmt.setQueryTimeout( DB_MAX_QUERY_TIMEOUT );
488                            if( fetchSize > 0 ) { callStmt.setFetchSize( fetchSize ); }
489                            Map<String,Class<?>> map = conn.getTypeMap();
490                            try {
491                                    map.put( ERR_MSG,Class.forName( "org.opengion.hayabusa.db.DBErrMsg" ) );
492                            }
493                            catch( ClassNotFoundException ex ) {
494                                    String errMsg = "org.opengion.hayabusa.db.DBErrMsg クラスãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã€? + HybsSystem.CR
495                                                    + ex.getMessage();                      // // 5.1.8.0 (2010/07/01) errMsg 修正
496                                    throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数ã®ä¸¦ã³é ?¤‰æ›´
497                            }
498    
499                            // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?http://docs.oracle.com/cd/E28389_01/web.1111/b60995/thirdparty.htm
500                            ArrayDescriptor sd = ArrayDescriptor.createDescriptor( ARG_ARRAY, conn );
501                            ARRAY newArray = new ARRAY( sd,conn,StringUtil.rTrims( args ) );
502    //                      Array newArray = ((OracleConnection)conn).createOracleArray( ARG_ARRAY, StringUtil.rTrims( args ));             // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
503    
504                            callStmt.registerOutParameter(1, Types.INTEGER);
505                            callStmt.registerOutParameter(2, OracleTypes.ARRAY,ERR_MSG_ARRAY);      // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
506    //                      callStmt.registerOutParameter(2, Types.ARRAY,ERR_MSG_ARRAY);            // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
507                            callStmt.registerOutParameter(3, OracleTypes.CURSOR);
508                            ((OracleCallableStatement)callStmt).setARRAY( 4,newArray );                     // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
509    //                      callStmt.setArray( 4,newArray );                                                                        // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
510    
511                            callStmt.execute();
512    
513                            errCode = callStmt.getInt(1);
514    
515                            if( errCode < ErrorMessage.NG ) {            // 異常以外ã?å ´å?
516                                    resultSet = ((OracleCallableStatement)callStmt).getCursor(3);
517                            }
518                            if( errCode > ErrorMessage.OK ) {            // 正常以外ã?å ´å?
519                                    ARRAY rtn3 = ((OracleCallableStatement)callStmt).getARRAY(2);   // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
520    //                              Array rtn3 = callStmt.getArray(2);                                                              // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
521                                    Object[] rtnval3 = (Object[])rtn3.getArray();
522                                    errMessage = new ErrorMessage( "Query_JDBCErrMsg Error!!" );
523                                    for( int i=0; i<rtnval3.length; i++ ) {
524                                            DBErrMsg er = (DBErrMsg)rtnval3[i];
525                                            if( er == null ) { break; }
526                                            errMessage.addMessage( er.getErrMsg() );
527                                    }
528                            }
529    //              }
530    //              finally {
531    //                      Closer.stmtClose( callStmt );
532    //                      callStmt = null;
533    //              }
534                    return resultSet;
535            }
536    
537            /**
538             * PrintWriter ã‚’å–å¾—ã—ã¾ã™ã?
539             *
540             * ã“ã“ã§ã¯ã€ä¸?ˆ¬çš?ªãƒ•ァイル出力をè€??ã—㟠PrintWriter を作æ?ã—ã¾ã™ã?
541             *
542             * @og.rev 3.7.1.1 (2005/05/23) フォルãƒ?Œãªã??åˆã?ã€è¤?•°éšŽå±¤åˆ??フォルãƒ?‚’自動ã§ä½œæ?ã—ã¾ã™ã?
543             * @og.rev 3.8.0.0 (2005/06/07) FileUtil#getPrintWriter を利用�
544             * @og.rev 5.6.1.0 (2013/02/01) 3.7.1.1ã®ã‚³ãƒ¡ãƒ³ãƒˆã«å…¥ã£ã¦ã?‚‹ãŒå¯¾å¿œã•れã¦ã?ªã??ã§ãƒ•ォルãƒ?½œæ?追åŠ?
545             *
546             * @return       出力用PrintWriterオブジェク�
547             */
548            private PrintWriter getPrintWriter() {
549                    if( filename == null ) {
550                            String errMsg = "ファイルåãŒã‚»ãƒ?ƒˆã•れã¦ã?¾ã›ã‚“ã€?;
551                            throw new HybsSystemException( errMsg );
552                    }
553                    String directory = HybsSystem.url2dir( fileURL );
554                    
555                    // 5.6.1.0 (2013/02/01) 
556                    File dir = new File(directory);
557                    if( ! dir.exists() && ! dir.mkdirs() ) {
558                            String errMsg = "ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä½œæ?ã«å¤±æ•—ã—ã¾ã—ãŸã€?" + directory + "]";
559                            throw new HybsSystemException( errMsg );
560                    }
561    
562    
563                    // ※ 注æ„?StringUtil.urlAppend ã‚’çµ?¿è¾¼ã‚“ã§ã?‚‹æ„図ãŒä¸æ?。ä¸?—¦å‰Šé™¤ã—ã¦ã?¾ã™ãŒã€æ³¨æ„?
564                    // 3.8.0.0 (2005/06/07) FileUtil#getPrintWriter を利用�
565            //      out = FileUtil.getPrintWriter( StringUtil.urlAppend( directory,filename ),fileAppend,encode);
566    
567    //              処ç?‚’ç°¡ç´?Œ–ã—ã¾ã™ã?
568    //              PrintWriter out = FileUtil.getPrintWriter( new File( directory,filename ),encode,fileAppend );
569    //              return out ;
570                    return FileUtil.getPrintWriter( new File( directory,filename ),encode,fileAppend );
571            }
572    
573            /**
574             * åç§°é…å?ã‚’å?ã«ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆæƒ…å ±ã®ãƒ??ã‚¿ã‚’å–å¾—ã—ã¾ã™ã?
575             *
576             * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg å½¢å¼?ã¸ã®å¯¾å¿?
577             *
578             * @param       nameArray       キーã¨ãªã‚‹åç§°ã®é…å?
579             *
580             * @return      ãã?リクエスト情報
581             */
582            private String[] getRequest( final String[] nameArray ) {
583                    String[] rtn = new String[nameArray.length];
584    
585                    for( int i=0; i<rtn.length; i++ ) {
586                            rtn[i] = getRequestValue( nameArray[i] );
587                    }
588    
589                    return rtn;
590            }
591    
592            /**
593             * ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)検索時ã?DB接続IDを指定ã—ã¾ã?åˆæœŸå€¤:DEFAULT)ã€?
594             *
595             * @og.tag
596             *   検索時ã?DB接続IDを指定ã—ã¾ã™ã?åˆæœŸå€¤ã¯ã€DEFAULT ã§ã™ã?
597             *
598             * @param       id ãƒ??タベã?ス接続ID
599             */
600            public void setDbid( final String id ) {
601                    dbid = nval( getRequestParameter( id ),dbid );
602            }
603    
604            /**
605             * ã€TAG】å¯å¤‰é•·ãƒ•ァイルを作æ?ã™ã‚‹ã¨ãã?é ?›®åŒºåˆ?‚Šæ–?­—ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?
606             *              (åˆæœŸå€¤:TAB_SEPARATOR[={@og.value #TAB_SEPARATOR}])ã€?
607             *
608             * @og.tag å¯å¤‰é•·ãƒ•ァイルを作æ?ã™ã‚‹ã¨ãã?é ?›®åŒºåˆ?‚Šæ–?­—ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
609             * (åˆæœŸå€¤:ローカル定義ã®TAB_SEPARATOR[={@og.value #TAB_SEPARATOR}])ã€?
610             *
611             * @param   sep é ?›®åŒºåˆ?‚Šæ–?­?
612             * @see         #TAB_SEPARATOR
613             */
614            public void setSeparator( final String sep ) {
615                    separator = nval( getRequestParameter( sep ),TAB_SEPARATOR );
616            }
617    
618            /**
619             * ã€TAG】ä¿å­˜å?ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªåã‚’æŒ?®šã—ã¾ã?
620             *              (åˆæœŸå€¤:FILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
621             *
622             * @og.tag
623             * ã“ã?属æ?ã§æŒ?®šã•れるãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã€ãƒ•ァイルをセーブã—ã¾ã™ã?
624             * æŒ?®šæ–¹æ³•ã?ã€??常㮠fileURL 属æ?ã¨åŒæ§˜ã«ã€å?é ­ãŒã?'/' (UNIX) ã¾ãŸã?ã€?¼’文字目ãŒã?
625             * ":" (Windows)ã®å ´åˆã?ã€æŒ‡å®šã?URLãã?ã¾ã¾ã®ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã€ãã?§ãªã??åˆã?ã€?
626             * fileURL = "{&#064;USER.ID}" ã¨æŒ?®šã™ã‚‹ã¨ã€FILE_URL 属æ?ã§æŒ?®šã?フォルãƒ??下ã«ã€?
627             * ã•らã«ã€å„個人ID別ã®ãƒ•ォルãƒ?‚’作æ?ã—ã¦ã€ãã“ã«ã‚»ãƒ¼ãƒ–ã—ã¾ã™ã?
628             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®FILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
629             *
630             * @og.rev 3.5.4.3 (2004/01/05) å†?ƒ¨å‡¦ç?‚’ã€makeFileURL ã«ç§»å‹•ã?
631             * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソãƒ?ƒ‰ã®åˆ©ç”¨
632             * @og.rev 4.0.0.0 (2007/11/20) æŒ?®šã•れãŸãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªåã?æœ?¾ŒãŒ"\"or"/"ã§çµ‚ã‚ã£ã¦ã?ªã??åˆã«ã€?/"を付加ã™ã‚‹ã€?
633             *
634             * @param       url ä¿å­˜å?ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªå?
635             * @see         org.opengion.hayabusa.common.SystemData#FILE_URL
636             */
637            public void setFileURL( final String url ) {
638                    String furl = nval( getRequestParameter( url ),null );
639                    if( furl != null ) {
640                            char ch = furl.charAt( furl.length()-1 );
641                            if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
642                            fileURL = StringUtil.urlAppend( fileURL,furl );
643                    }
644            }
645    
646            /**
647             * ã€TAG】ファイルを作æ?ã™ã‚‹ã¨ãã?ファイルåã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:シスãƒ?ƒ ãƒ‘ラメータã®FILE_FILENAME)ã€?
648             *
649             * @og.tag ファイルを作æ?ã™ã‚‹ã¨ãã?ファイルåã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
650             *
651             * @param   fname ファイルå?
652             */
653            public void setFilename( final String fname ) {
654                    filename = nval( getRequestParameter( fname ),filename );
655            }
656    
657            /**
658             * ã€TAG】ZIPファイルを作æ?ã™ã‚‹ã¨ãã?ZIPファイルåã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:filename + ".zip")ã€?
659             *
660             * @og.tag
661             * zip 属æ?ã«ã€true を指定ã—ãŸå?åˆã«ã€ZIPファイル化ã—ã¾ã™ã?ãã?å ´åˆã?ファイルåã‚’æŒ?®šã—ã¾ã™ã?
662             * ãªã«ã‚‚指定ã—ãªã??åˆã?ã€filename + ".zip" ã«ãªã‚Šã¾ã™ã?
663             *
664             * @param   zipFile ZIPファイルå?
665             * @see #setZip( String )
666             */
667            public void setZipFilename( final String zipFile ) {
668                    zipFilename = nval( getRequestParameter( zipFile ),zipFilename );
669            }
670    
671            /**
672             * ã€TAG】ファイルを作æ?ã™ã‚‹ã¨ãã?ファイルエンコーãƒ?‚£ãƒ³ã‚°åã‚’ã‚»ãƒ?ƒˆã—ã¾ã?
673             *              (åˆæœŸå€¤:FILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])ã€?
674             *
675             * @og.tag
676             * "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
677             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®FILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])ã€?
678             *
679             * @og.rev 2.2.0.0 (2002/12/17) 中国èª?国際化)対å¿?エンコードã?å–得方法変更
680             * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE ã‹ã‚‰ã€ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰æƒ…報をå–å¾—ã™ã‚‹ã?
681             *
682             * @param   enc ファイルエンコーãƒ?‚£ãƒ³ã‚°å?
683             * @see     <a href="http://www.iana.org/assignments/character-sets">IANA Charset Registry</a>
684             * @see         org.opengion.hayabusa.common.SystemData#FILE_ENCODE
685             */
686            public void setEncode( final String enc ) {
687                    encode = nval( getRequestParameter( enc ),encode );
688            }
689    
690            /**
691             * ã€TAG】ã?ãƒ?ƒ€ãƒ¼ã‚’書ãè¾¼ã‚?‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:true)ã€?
692             *
693             * @og.tag
694             *  #Name ?¥?¥?¥?¥ ヘッãƒ??ã®æ›¸ãè¾¼ã¿ã‚’指定ã—ã¾ã™ã?
695             * 通常ã¯ã€æ›¸ãè¾¼ã¿(true)ã«ã—ã¦ãŠãã€ä½¿ç”¨å´ã§ã‚³ãƒ¡ãƒ³ãƒˆã¨è§£é‡ˆã™ã‚‹ã‚ˆã?«
696             * 処ç?‚’行ã†ã¹ãã§ã™ã?コメントã?ãŸã‚ã€append モードã§é€”中ã«ç¾ã‚Œã¦ã‚?
697             * 無視ã§ãã¾ã™ã?ã¾ãŸã?エンジン標準ã§ãƒ??ã‚¿ã‚’å–り込ã‚??åˆã«ã€ãƒ‡ãƒ¼ã‚¿ã®é…ç½®ã?
698             * 変更ã•れã¦ã‚‚å–り込ã¿ãƒ—ログラãƒ??ãã?ã¾ã¾ä½¿ç”¨ã§ãã¾ã™ã?
699             * åˆæœŸå€¤ã¯ã€true(書ãè¾¼ã‚?ã§ã™ã?
700             *
701             * @param   flag ヘッãƒ??を書ãè¾¼ã‚?‹ã©ã?‹ [true:書ãè¾¼ã‚?false:書ãè¾¼ã¾ãªã„]
702             */
703            public void setUseHeader( final String flag ) {
704                    useHeader = nval( getRequestParameter( flag ),useHeader );
705            }
706    
707            /**
708             * ã€TAG】追åŠ?ƒ¢ãƒ¼ãƒ‰ã§æ›¸ãè¾¼ã‚?‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false[通常モード])ã€?
709             *
710             * @og.tag
711             * ファイルを書ãè¾¼ã‚??åˆã?追åŠ?ƒ¢ãƒ¼ãƒ‰ã§æ›¸ãè¾¼ã‚?‹ã©ã?‹ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
712             * æ–°è¦ãƒ¢ãƒ¼ãƒ?true)ã®å ´åˆã?既存ã?ファイルãŒå­˜åœ¨ã—ã?ã‹ã¤æ›¸ãè¾¼ã¿è¨±å¯ãŒã‚れã?ã€?
713             * 上書ãã§æ–°è¦ã«ä½œæ?ã—ã¾ã™ã?
714             * åˆæœŸå€¤ã¯ã€false(æ–°è¦ãƒ¢ãƒ¼ãƒ?ã§ã™ã?
715             *
716             * @param   flag [true:追åŠ?ƒ¢ãƒ¼ãƒ?false:æ–°è¦ãƒ¢ãƒ¼ãƒ‰]
717             */
718            public void setFileAppend( final String flag ) {
719                    fileAppend = nval( getRequestParameter( flag ),fileAppend );
720            }
721    
722            /**
723             * ã€TAGã€‘çµæžœã‚’ファイルã«å‡ºåŠ›ã™ã‚‹ã¨ãã«ã€ZIPã§åœ§ç¸®ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
724             *
725             * @og.tag
726             * 大é‡ã«æŠœã出ã™å?åˆã?ãã?ã¾ã¾ã€ã‚µãƒ¼ãƒã?ã‹ã‚‰å–り出ã™ã ã‘ã§ã‚‚大変ã§ã™ã?
727             * zip 属æ?ã‚’ã?true ã«ã™ã‚‹ã¨ã€GZIP ã§åœ§ç¸®ã—ãŸãƒ•ァイルを作æ?ã—ã¾ã™ã?
728             * åˆæœŸå€¤ã¯ã€false(圧縮ã—ãªã?ã§ã™ã?
729             *
730             * @param  flag ZIPã§åœ§ç¸® [true:ã™ã‚‹/ãれ以å¤?ã—ãªã„]
731             * @see    #setZipFilename( String )
732             */
733            public void setZip( final String flag ) {
734                    zip = nval( getRequestParameter( flag ),zip );
735            }
736    
737            /**
738             * ã€TAGã€‘æ¤œç´¢çµæžœã‚’ç”»é¢ä¸Šã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹IDを指定ã—ã¾ã?åˆæœŸå€¤:MSG0033[ã€?»¶æ¤œç´¢ã—ã¾ã—ãŸ])ã€?
739             *
740             * @og.tag
741             * ã“ã“ã§ã¯ã€æ¤œç´¢çµæžœã®ä»¶æ•°ã‚?™»éŒ²ã•れãŸä»¶æ•°ã‚’ã¾ãšå?力ã—ã€?
742             * ãã?次ã«ã€ã“ã“ã§æŒ?®šã—ãŸãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚’リソースã‹ã‚‰å–å¾—ã—ã¦
743             * 表示ã—ã¾ã™ã?
744             * 表示ã•ã›ãŸããªã??åˆã?, displayMsg = "" ã‚’ã‚»ãƒ?ƒˆã—ã¦ãã ã•ã„ã€?
745             * åˆæœŸå€¤ã¯ã€æ¤œç´¢ä»¶æ•°ã‚’表示ã—ã¾ã™ã?
746             *
747             * @param       id ãƒ?‚£ã‚¹ãƒ—レイã«è¡¨ç¤ºã•ã›ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ ID
748             */
749            public void setDisplayMsg( final String id ) {
750                    String ids = getRequestParameter( id );
751                    if( ids != null ) { displayMsg = ids; }
752            }
753    
754            /**
755             * ã€TAGã€‘æ¤œç´¢çµæžœãŒã‚¼ãƒ­ä»¶ã®å ´åˆã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹IDを指定ã—ã¾ã?åˆæœŸå€¤:MSG0077[対象ãƒ??ã‚¿ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸ])ã€?
756             *
757             * @og.tag
758             * ã“ã“ã§ã¯ã€æ¤œç´¢çµæžœãŒã‚¼ãƒ­ä»¶ã®å ´åˆã?ã¿ã€ç‰¹åˆ¥ãªãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚’表示ã•ã›ã¾ã™ã?
759             * 従æ¥ã¯ã€displayMsg ã¨å…¼ç”¨ã§ã€ã?0ã€?»¶æ¤œç´¢ã—ã¾ã—ãŸã€ã¨ã?†è¡¨ç¤ºã§ã—ãŸãŒã?
760             * displayMsg ã®åˆæœŸè¡¨ç¤ºã¯ã€OFF ã«ãªã‚Šã¾ã—ãŸã®ã§ã€ã‚¼ãƒ­ä»¶ã®å ´åˆã?ã¿åˆ¥ã«è¡¨ç¤ºã•ã›ã¾ã™ã?
761             * 表示ã•ã›ãŸããªã??åˆã?, notfoundMsg = "" ã‚’ã‚»ãƒ?ƒˆã—ã¦ãã ã•ã„ã€?
762             * åˆæœŸå€¤ã¯ã€MSG0077[対象ãƒ??ã‚¿ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸ]ã§ã™ã?
763             *
764             * @param       id ãƒ?‚£ã‚¹ãƒ—レイã«è¡¨ç¤ºã•ã›ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ ID
765             */
766            public void setNotfoundMsg( final String id ) {
767                    String ids = getRequestParameter( id );
768                    if( ids != null ) { notfoundMsg = ids; }
769            }
770    
771            /**
772             * ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)ãƒ??ã‚¿ã®ãƒ•ã‚§ãƒ?ƒã‚µã‚¤ã‚ºã‚’指定ã—ã¾ã?åˆæœŸå€¤:100)ã€?
773             *
774             * @og.tag
775             * より多ãã®è¡ŒãŒå¿?¦ãªã¨ãã«ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ã?スã‹ã‚‰å–り出ã™å¿?¦ãŒã‚る行数ã«
776             * ã¤ã?¦ã®ãƒ’ントを JDBC ドライãƒã«æä¾›ã—ã¾ã™ã?
777             * æŒ?®šã•れãŸè¡Œæ•°ã¯ã€ã“ã® Statement を使ã£ã¦ä½œæ?ã•れãŸçµæžœã‚»ãƒ?ƒˆã«ã?‘影響ã—ã¾ã™ã?
778             * æŒ?®šã•れãŸå€¤ã?0 ã®å ´åˆã?ヒントã?無視ã•れã¾ã™ã?
779             * åˆæœŸå€¤ã¯ã€?00 ã§ã™ã?
780             *
781             * @param       size フェãƒ?ƒã™ã‚‹è¡Œæ•°(åˆæœŸå€¤:100)
782             */
783            public void setFetchSize( final String size ) {
784                    fetchSize = nval( getRequestParameter( size ),fetchSize );
785            }
786    
787            /**
788             * ã€TAG】PL/SQLを利用ã™ã‚‹å ´åˆã?引数ã«ã‚»ãƒ?ƒˆã™ã¹ã?ãƒ??ã‚¿ã®åç§°ã‚’CSVå½¢å¼ã§è¤?•°æŒ?®šã—ã¾ã™ã?
789             *
790             * @og.tag
791             * è¤?•°ã‚ã‚‹å ´åˆã?ã€ã‚«ãƒ³ãƒžåŒºåˆ?‚Šæ–?­—ã§æ¸¡ã—ã¾ã™ã?
792             * PL/SQL を使用ã—ãªã??åˆã?ã€ç„¡è¦–ã•れã¾ã™ã?
793             *
794             * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg å½¢å¼?ã¸ã®å¯¾å¿?
795             *
796             * @param       nm 引数ã®åç§°(è¤?•°ã‚ã‚‹å ´åˆã?ã€ã‚«ãƒ³ãƒžåŒºåˆ?‚Šæ–?­?
797             */
798            public void setNames( final String nm ) {
799                    names = nval( getRequestParameter( nm ),names );
800            }
801    
802            /**
803             * ã€TAG】Query を発行ã™ã‚‹ç‚ºã®ã‚¯ãƒ©ã‚¹ID(JDBC,JDBCErrMsg)を指定ã—ã¾ã?{@og.doc03Link queryType åˆæœŸå€¤:JDBC})ã€?
804             *
805             * @og.tag
806             * ストアドã?ロシージャ等を実行ã™ã‚‹å?åˆã«ã€queryType="JDBCErrMsg" ã‚?
807             * æŒ?®šã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?(ãれ以外ã?æŒ?®šã?ã€å?期å?ã® JDBC ã«ãªã‚Šã¾ã™ã?)
808             * åˆæœŸå€¤ã¯ã€?JDBC" ã§ã™ã?
809             * {@og.doc03Link queryType Query_**** クラス}
810             *
811             * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg å½¢å¼?ã¸ã®å¯¾å¿?
812             *
813             * @param       id Query を発行ã™ã‚‹ç‚ºã®å®Ÿã‚¯ãƒ©ã‚¹ ID
814             */
815            public void setQueryType( final String id ) {
816                    // å†?ƒ¨çš?«ã¯ã€JDBCErrMsg:false / ãれ以å¤?true ã§ç®¡ç?—ã¦ã?¾ã™ã?
817                    queryType = ! "JDBCErrMsg".equalsIgnoreCase( getRequestParameter( id ) );
818            }
819    
820            /**
821             * ã€TAG】ファイルã«è¡Œç•ªå·ã‚’å?力ã™ã‚‹ã‹ã©ã?‹(åˆæœŸå€¤:true)
822             *
823             * @og.tag
824             * ファイルã«è¡Œç•ªå·ã‚’å?力ã™ã‚‹ã‹ã©ã?‹ã‚’指定ã—ã¾ã™ã?
825             * åˆæœŸå€¤ã¯ã€true(出力ã™ã‚?ã§ã™ã?
826             * 
827             * @og.rev 5.5.7.1 (2012/10/05) æ–°è¦è¿½åŠ?
828             * @param  flag 行番å·å‡ºåŠ?[true:ã™ã‚‹/ãれ以å¤?ã—ãªã„]
829             */
830            public void setUseNumber( final String flag ) {
831                    useNumber = nval( getRequestParameter( flag ),useNumber );
832            }
833            
834            /**
835             * シリアライズ用ã®ã‚«ã‚¹ã‚¿ãƒ?‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºæ›¸ãè¾¼ã¿ãƒ¡ã‚½ãƒ?ƒ‰
836             *
837             * @og.rev 4.0.0.0 (2006/09/31) æ–°è¦è¿½åŠ?
838             * @serialData ä¸?ƒ¨ã®ã‚ªãƒ–ジェクトã?ã€ã‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºã•れã¾ã›ã‚“ã€?
839             *
840             * @param strm ObjectOutputStreamオブジェク�
841             * @throws IOException  シリアライズã«é–¢ã™ã‚‹å…¥å‡ºåŠ›ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå?å?
842             */
843            private void writeObject( final ObjectOutputStream strm ) throws IOException {
844                    strm.defaultWriteObject();
845            }
846    
847            /**
848             * シリアライズ用ã®ã‚«ã‚¹ã‚¿ãƒ?‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºèª­ã¿è¾¼ã¿ãƒ¡ã‚½ãƒ?ƒ‰
849             *
850             * ã“ã“ã§ã¯ã€transient 宣è¨?•れãŸå†?ƒ¨å¤‰æ•°ã®å†??åˆæœŸåŒ–ãŒå¿?¦ãªãƒ•ィールドã?ã¿è¨­å®šã—ã¾ã™ã?
851             *
852             * @og.rev 4.0.0.0 (2006/09/31) æ–°è¦è¿½åŠ?
853             * @serialData ä¸?ƒ¨ã®ã‚ªãƒ–ジェクトã?ã€ã‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºã•れã¾ã›ã‚“ã€?
854             *
855             * @param strm ObjectInputStreamオブジェク�
856             * @see #release2()
857             */
858            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
859                    strm.defaultReadObject();
860            }
861    
862            /**
863             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
864             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
865             *
866             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
867             */
868            @Override
869            public String toString() {
870                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
871                                    .println( "VERSION"             ,VERSION        )
872                                    .println( "dbid"                ,dbid           )
873                                    .println( "separator"   ,separator      )
874                                    .println( "useHeader"   ,useHeader      )
875                                    .println( "fileURL"             ,fileURL        )
876                                    .println( "filename"    ,filename       )
877                                    .println( "zipFilename" ,zipFilename)
878                                    .println( "sql"                 ,sql            )
879                                    .println( "encode"              ,encode         )
880                                    .println( "fileAppend"  ,fileAppend     )
881                                    .println( "zip"                 ,zip            )
882                                    .println( "displayMsg"  ,displayMsg     )
883                                    .println( "dyStart"             ,dyStart        )
884                                    .println( "fetchSize"   ,fetchSize      )
885                                    .println( "queryType"   ,queryType      )
886                                    .println( "names"               ,names          )
887                                    .println( "errCode"             ,errCode        )
888                                    .println( "Other..."    ,getAttributes().getAttribute() )
889                                    .fixForm().toString() ;
890            }
891    }