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