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.common;
017    
018    import org.opengion.fukurou.xml.HybsXMLSave;
019    import org.opengion.fukurou.util.Closer ;
020    
021    import java.sql.Connection;
022    import java.sql.SQLException;
023    
024    import java.io.Reader;
025    import java.io.BufferedReader;
026    import java.io.InputStreamReader;
027    import java.io.FileInputStream;
028    import java.io.InputStream;
029    import java.io.IOException;
030    import java.io.File;
031    import java.io.UnsupportedEncodingException;
032    
033    import java.util.List;
034    import java.util.ArrayList;
035    import java.util.Enumeration;
036    import java.util.jar.JarFile;
037    import java.util.jar.JarEntry;
038    import java.net.URL;
039    
040    /**
041     * ORACLE XDK å½¢å¼ã?XMLファイルを読ã¿å–ã£ã¦ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ã?スã«ç™»éŒ²ã—ã¾ã™ã?
042     * èµ·å‹?実è¡?ã¯ã€ã‚³ãƒ³ãƒ?‚­ã‚¹ãƒˆèª­ã¿å–り時ã?åˆå›žã®ã¿ã§ã™ã?GE12パラメータを変更ã—ãŸ
043     * å ´åˆã?ã€ã‚³ãƒ³ãƒ?‚­ã‚¹ãƒˆã?リロードãŒå¿?¦ã§ã™ã?
044     * 登録ã®å®Ÿè¡Œæœ‰ç„¡ã®åˆ¤æ–­ã¯ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›´æ–°æ™‚刻より判断ã—ã¾ã™ã?(useTimeStamp=true ã®å ´å?
045     * ã“れã¯ã€èª­ã¿å–ã‚Šãƒ•ã‚¡ã‚¤ãƒ«ã®æ›´æ–°æ™‚刻ãŒã??ã§ãªã??åˆã?読ã¿å–りを行ã„ã¾ã™ã?
046     * 読ã¿å–りãŒå®Œäº?—ãŸå?åˆã?ã€æ›´æ–°æ™‚刻ã‚???ã«è¨­å®šã—ã¾ã™ã?
047     * 読ã¿å–るファイルã¯ã€ã‚¯ãƒ©ã‚¹ãƒ­ãƒ¼ãƒ??ã®ãƒªã‚½ãƒ¼ã‚¹ã¨ã—ã¦å–å¾—ã•れã¾ã™ã?ã§ã€ã‚¯ãƒ©ã‚¹ãƒ‘スã?
048     * 設定ã•れã¦ã?‚‹å¿?¦ãŒã‚りã¾ã™ã?ã¾ãŸã?ファイルã¯ã€æ‹¡å¼µå­ãŒ xml ã§ã€UTF-8ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ?
049     * ã•れã¦ã?‚‹å¿?¦ãŒã‚りã¾ã™ã?通常ã¯ã€ãƒ•ァイルåãŒãƒ??ブルåã¨åŒä¸?«ã—ã¦ãŠãå¿?¦ãŒ
050     * ã‚りã¾ã™ãŒã€ROWSETã®table属æ?ã«ãƒ??ブルåã‚’ã‚»ãƒ?ƒˆã—ã¦ãŠãã“ã¨ã‚‚å¯èƒ½ã§ã™ã?
051     * ファイルã®ç™»éŒ²é ??ã€åŽŸå‰??クラスローãƒ??ã®æ¤œç´¢é ?«ã€è¦‹ã¤ã‹ã£ãŸå?ã¦ã®ãƒ•ァイルã‚?
052     * 登録ã—ã¾ã™ã?ãƒ??ã‚¿ãã?ã‚‚ã?ã¯ã€INSERT ã®ã¿å¯¾å¿œã—ã¦ã?¾ã™ã?ã§ã€åŽŸå‰?™»éŒ²é ??無視ã•れã¾ã™ã?
053     * ãŸã ã—ã?æ‹¡å¼µXDK å½¢å¼ã§ã€EXEC_SQL タグを使用ã—ãŸå ´åˆã?ã€ç™»éŒ²é ?Œå½±éŸ¿ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã?
054     * 例:GE12.xml GE12 ãƒ??ブルã«ç™»éŒ²ã™ã‚‹XMLファイル
055     * 登録時ã«ã€æ—¢å­˜ã?ãƒ??ã‚¿ã®ç ´æ£?Œå¿?¦ãªå ´åˆã?ã€æ‹¡å¼µXDK å½¢å¼ã?XMLファイルã‚?
056     * 作æ?ã—ã¦ãã ã•ã„。ã“れã?ã€EXEC_SQL ã‚¿ã‚°ã«æ›¸ã込んã SQLæ–?‚’実行ã—ã¾ã™ã?
057     * 詳細ã¯ã€{@link org.opengion.fukurou.xml.HybsXMLHandler HybsXMLHandler} クラスをå‚ç…§ã—ã¦ãã ã•ã„ã€?
058     *
059     *   <ROWSET tableName="XX" >
060     *       <EXEC_SQL>                    æœ??ã«è¨˜è¼‰ã—ã¦ã€å?期å?ç?ãƒ??タクリアç­?を実行ã•ã›ã‚‹ã€?
061     *           delete from GEXX where YYYYY
062     *       </EXEC_SQL>
063     *       <ROW num="1">
064     *           <カラ�>値1</カラ�>
065     *             ?¥?¥?¥
066     *           <カラ�>値n</カラ�>
067     *       </ROW>
068     *        ?¥?¥?¥
069     *       <ROW num="n">
070     *          ?¥?¥?¥
071     *       </ROW>
072     *       <EXEC_SQL>                    æœ?¾Œã«è¨˜è¼‰ã—ã¦ã€??ç›®ã®è¨­å®?æ•´åˆæ?登録)を行ã†ã€?
073     *           update GEXX set AA='XX' , BB='XX' where YYYYY
074     *       </EXEC_SQL>
075     *   <ROWSET>
076     *
077     * @og.rev 4.0.0.0 (2004/12/31) æ–°è¦ä½œæ?
078     * @og.group åˆæœŸåŒ?
079     *
080     * @version  4.0
081     * @author   Kazuhiko Hasegawa
082     * @since    JDK5.0,
083     */
084    public final class InitFileLoader {
085            private final String CLASSPATH ;
086            private final Connection connection ;
087            private boolean fileCommit = false;             // ファイル毎ã«ã‚³ãƒŸãƒƒãƒˆå?ç?‚’行ã†ã‹ã©ã?‹(true:行ã†/false:行ã‚ãªã?
088    
089            /**
090             * コãƒã‚¯ã‚·ãƒ§ãƒ³ã‚’引数ã«ã™ã‚‹ã€ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã§ã™ã?
091             * classPath="resource" ã§åˆæœŸåŒ–ã•れ㟠InitFileLoader を作æ?ã—ã¾ã™ã?
092             *
093             * @param       conn    登録用コãƒã‚¯ã‚·ãƒ§ãƒ³
094             */
095            public InitFileLoader( final Connection conn ) {
096                    this( conn,"resource" );
097            }
098    
099            /**
100             * コãƒã‚¯ã‚·ãƒ§ãƒ³ã¨æ¤œç´¢ãƒ‘スを指定ã—ã¦æ§‹ç¯‰ã™ã‚‹ã?コンストラクターã§ã™ã?
101             * 対象ファイルã¯ã€classPath ã§æŒ?®šã•れãŸå ´æ‰?‚’ã€ã‚¯ãƒ©ã‚¹ãƒ­ãƒ¼ãƒ??ã§æ¤œç´¢ã—ã¾ã™ã?
102             * ã“ã“ã§è¦‹ã¤ã‹ã£ãŸãƒ‘ス以下ã? XMLファイル(æ‹¡å¼µå­ã?å°æ–‡å­—ã§ã€?xml )を検索
103             * ã—ã¾ã™ã?ã“ã?ファイルåã? ãƒ??ブルå?xml å½¢å¼ã§æ ¼ç´ã—ã¦ãŠãã¾ã™ã?
104             *
105             * @param       conn    登録用コãƒã‚¯ã‚·ãƒ§ãƒ³
106             * @param classPath 対象ã¨ãªã‚‹ãƒ•ァイル群を検索ã™ã‚‹ã€ã‚¯ãƒ©ã‚¹ãƒ‘ス
107             */
108            public InitFileLoader( final Connection conn,final String classPath ) {
109                    connection      = conn ;
110                    CLASSPATH       = classPath;
111            }
112    
113            /**
114             * ファイル毎ã«ã‚³ãƒŸãƒƒãƒˆå?ç?‚’行ã†ã‹ã©ã?‹æŒ?®šã—ã¾ã?åˆæœŸå€¤:false[行ã‚ãªã„])ã€?
115             * 対象ファイル毎ã«ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ã?スã¸ã®ç™»éŒ²ã‚’完äº?commit)ã™ã‚‹ã‹ã©ã?‹ã‚’指定ã—ã¾ã™ã?
116             * 通常ã€Connection ã¯ã€autoCommit ã‚?false ã«è¨­å®šã—ã€?¼‘ä»¶ã”ã¨ã®å‡¦ç??行ã„ã¾ã›ã‚“ã€?
117             * ã•らã«ã€XMLファイルã«ã‚‚相互関連ãŒã‚ã‚‹å?åˆãŒã‚ã‚‹ãŸã‚ã€è¤?•°ãƒ•ァイルをå–り込ã‚??åˆã?ã€?
118             * ãれらをä¸?¾¤ã¨ã—ã¦å‡¦ç?—ãŸã„ケースもã‚りã¾ã™ã?ã¾ãŸã?å?ƒ•ァイルãŒç‹¬ç«‹ã—ã¦ã?‚‹
119             * å ´åˆã?ã€ä»–ã?ファイルå–ã‚Šè¾¼ã¿æ™‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¦ã‚‚ã?ãれã¾ã§ã®åˆ??ã€å–り込ã¿ãŸã„
120             * ケースãŒã‚りã¾ã™ã?
121             * ã“ã“ã§ã¯ã€ãƒ•ァイル毎ã«ã‚³ãƒŸãƒƒãƒˆã‚’発行ã™ã‚‹ã‹ã©ã?‹ã‚’指定ã§ãã¾ã™ã?
122             * åˆæœŸå€¤ã¯ã€false[行ã‚ãªã„]ã§ã™ã?
123             * ※ true ã«è¨­å®šã—ãŸå?åˆã§ã‚‚ã?途中ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå?åˆã?ã€ãれ以é™ã?処ç??ã€?
124             * 継続ã—ã¾ã›ã‚“。ãれ以å‰ã?処ç?Œã€ç™»éŒ²ã•れã¦ã?‚‹ã?‘ã§ã™ã?
125             *
126             * @param fileCmt ファイル毎ã«ã‚³ãƒŸãƒƒãƒˆå?ç?‚’行ã†ã‹ã©ã?‹ [true:行ã†/false:行ã‚ãªã„]
127             */
128            public void setFileCommit( final boolean fileCmt ) {
129                    fileCommit = fileCmt ;
130            }
131    
132            /**
133             * 対象ã¨ãªã‚‹ãƒ•ァイル群を検索ã—ã¾ã™ã?
134             * 対象ファイルã¯ã€resource フォルãƒ?« ãƒ??ブルå?xml å½¢å¼ã§æ ¼ç´ã—ã¦ãŠãã¾ã™ã?
135             * ã“ã?フォルãƒ??ファイルをピãƒ?‚¯ã‚¢ãƒ??ã—ã¾ã™ã?
136             * useTimeStamp 属æ?ã‚?true ã«è¨­å®šã™ã‚‹ã¨ã€ã“ã®ãƒ•ァイルã®ã‚¿ã‚¤ãƒ?‚¹ã‚¿ãƒ³ãƒ—ã‚’ã€?
137             * シスãƒ?ƒ ãƒ‘ラメータ定義(GE12) ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?ãれ以é™ã?ã“ã?タイãƒ?‚¹ã‚¿ãƒ³ãƒ—ã¨
138             * ファイルを比è¼?—ã¦ã€å¤‰æ›´ãŒãªã‘れã°ã€ç™»éŒ²å‡¦ç?‚’行ã„ã¾ã›ã‚“ã€?
139             *
140             * @og.rev 4.0.0.0 (2007/11/28) メソãƒ?ƒ‰ã®æˆ»ã‚Šå?ã‚’ãƒã‚§ãƒ?‚¯ã—ã¾ã™ã?
141             * @og.rev 5.3.6.0 (2011/06/01) 実フォルãƒ??å ´åˆã?フォルãƒ?šŽå±¤ã‚’下る処ç?‚’追åŠ?
142             * @og.rev 5.5.2.6 (2012/05/25) JarFile ã‚’ã?Closer#zipClose( ZipFile ) メソãƒ?ƒ‰ã‚’利用ã—ã¦ã€close ã—ã¾ã™ã?
143             * @og.rev 5.6.6.1 (2013/07/12) jarファイルã®å ´åˆã‚‚ã€ã‚¿ã‚¤ãƒ?‚¹ã‚¿ãƒ³ãƒ—管ç??対象ã¨ã—ã¾ã™ã?
144             *
145             * @param useTimeStamp タイãƒ?‚¹ã‚¿ãƒ³ãƒ—ã?管ç?‚’行ã†ã‹ã©ã?‹[true:行ã†/false:行ã‚ãªã„]
146             */
147            public void loadInitFiles( final boolean useTimeStamp ) {
148                    List<File> fileList = new ArrayList<File>();
149    
150                    // 5.5.2.6 (2012/05/25) findbugs対�
151                    JarFile jarFile = null;
152                    try {
153            //              System.out.println( "    ==========================" );
154    
155                            ClassLoader loader = Thread.currentThread().getContextClassLoader();
156                            Enumeration<URL> enume = loader.getResources( CLASSPATH );                // 4.3.3.6 (2008/11/15) Generics警告対�
157                            while( enume.hasMoreElements() ) {
158                                    URL url = enume.nextElement();                                                          // 4.3.3.6 (2008/11/15) Generics警告対�
159                                    // jar:file:/実ディレクトリ ã¾ãŸã?ã€file:/実ディレクトリ
160                                    System.out.println( "      InitFileLoader Scan:[ " + url + " ]" );      // 5.6.6.1 (2013/07/12) メãƒ?‚»ãƒ¼ã‚¸å‡ºåŠ?
161                                    String dir = url.getFile();
162                                    if( "jar".equals( url.getProtocol() ) ) {
163                                            // dir = file:/C:/webapps/gf/WEB-INF/lib/resource2.jar!/resource å½¢å¼ã§ã™ã?
164                                            String jar = dir.substring(dir.indexOf( ':' )+1,dir.lastIndexOf( '!' ));
165                                            // jar = /C:/webapps/gf/WEB-INF/lib/resource2.jar å½¢å¼ã«åˆ?‚Šå‡ºã—ã¾ã™ã?
166    
167                                            // 5.6.6.1 (2013/07/12) jarファイルもã?タイãƒ?‚¹ã‚¿ãƒ³ãƒ—管ç??対象
168                                            File jarObj = new File( jar );
169                                            if( useTimeStamp && jarObj.lastModified() <= 0 ) {           // fileObj ã¯ã€jarファイルã®ã“ã¨
170                                                    continue;
171                                            }
172    
173    //                                      JarFile jarFile = new JarFile( jar );
174                                            jarFile = new JarFile( jar );
175                                            Enumeration<JarEntry> flEnum = jarFile.entries() ;                // 4.3.3.6 (2008/11/15) Generics警告対�
176                                            while( flEnum.hasMoreElements() ) {
177                                                    JarEntry ent = flEnum.nextElement();                            // 4.3.3.6 (2008/11/15) Generics警告対�
178                                                    String file = ent.getName();
179                                                    if( ! ent.isDirectory() && file.endsWith( ".xml" ) ) {
180                                                            // // 5.6.6.1 (2013/07/12) jarファイルã®ä¸­èº«ã®ã‚¿ã‚¤ãƒ?‚¹ã‚¿ãƒ³ãƒ—ã?見ãªã??
181    //                                                      if( ! useTimeStamp || ent.getTime() > 0 ) {
182                                                                    String table = file.substring( file.lastIndexOf('/')+1,file.lastIndexOf('.') );
183                                                                    InputStream stream = null;
184                                                                    try {
185    //                                                                      System.out.println( "      " + url + file );
186                                                                            System.out.println( "        " + file );        // 5.6.6.1 (2013/07/12) メãƒ?‚»ãƒ¼ã‚¸å¤‰æ›´
187                                                                            stream = jarFile.getInputStream( ent ) ;
188                                                                            loadXML( stream,connection,table );
189                                                                    }
190    //                                                              catch( IOException ex ) {
191    //                                                                      String errMsg = "jar ã® XMLファイル読ã¿å–り時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€?
192    //                                                                                      + HybsSystem.CR + ex.getMessage();
193    //                                                                      throw new RuntimeException( errMsg,ex );
194    //                                                              }
195                                                                    finally {
196                                                                            Closer.ioClose( stream );
197                                                                    }
198                                                                    if( fileCommit ) {
199                                                                            connection.commit();
200                                                                    }
201    //                                                      }
202                                                    }
203                                            }
204                                            fileList.add( jarObj );                 // 5.6.6.1 (2013/07/12) jarファイルもã?タイãƒ?‚¹ã‚¿ãƒ³ãƒ—管ç??対象
205                                            Closer.zipClose( jarFile );             // 5.5.2.6 (2012/05/25) findbugs対�
206                                            jarFile = null;                                 // 正常終äº?™‚ã«ã€close() ãŒï¼’回呼ã°ã‚Œã‚‹ã®ã‚’防ããŸã‚ã?
207                                    }
208                                    else {
209    //                                      // dir = /C:/webapps/gf/WEB-INF/classes/resource/ å½¢å¼ã§ã™ã?
210    //                                      File fileObj = new File( dir );
211    //                                      File[] list = fileObj.listFiles();
212    //                                      for( int i=0; i<list.length; i++ ) {
213    //                                              String file = list[i].getName() ;
214    //                                              if( list[i].isFile() && file.endsWith( ".xml" ) ) {
215    //                                                      if( ! useTimeStamp || list[i].lastModified() > 0 ) {
216    //                                                              String table = file.substring( file.lastIndexOf('/')+1,file.lastIndexOf('.') );
217    //                                                              InputStream stream = null;
218    //                                                              try {
219    //                                                                      stream = new FileInputStream( list[i] ) ;
220    //                                                                      System.out.println( "      " + url + file );
221    //                                                                      loadXML( stream,connection,table );
222    //                                                              }
223    //                                                              catch( IOException ex ) {
224    //                                                                      String errMsg = "dir ã® XMLファイル読ã¿å–り時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€?
225    //                                                                                      + HybsSystem.CR + ex.getMessage();
226    //                                                                      throw new RuntimeException( errMsg,ex );
227    //                                                              }
228    //                                                              finally {
229    //                                                                      Closer.ioClose( stream );
230    //                                                              }
231    //                                                              if( fileCommit ) {
232    //                                                                      connection.commit();
233    //                                                                      if( !list[i].setLastModified( 0L ) ) {
234    //                                                                              String errMsg = "タイãƒ?‚¹ã‚¿ãƒ³ãƒ—ã?æ›¸ãæ›ãˆã«å¤±æ•—ã—ã¾ã—ãŸã€?
235    //                                                                                              + "file=" + file ;      // 5.1.8.0 (2010/07/01) errMsg 修正
236    //                                                                              System.out.println( errMsg );
237    //                                                                      }
238    //                                                              }
239    //                                                              else {
240    //                                                                      fileList.add( list[i] );
241    //                                                              }
242    //                                                      }
243    //                                              }
244    //                                      }
245                                            // 5.3.6.0 (2011/06/01) 実フォルãƒ??å ´åˆã?フォルãƒ?šŽå±¤ã‚’下る処ç?‚’追åŠ?
246                                            // dir = /C:/webapps/gf/WEB-INF/classes/resource/ å½¢å¼ã§ã™ã?
247                                            File fileObj = new File( dir );
248                                            loadXMLDir( fileObj,useTimeStamp,fileList );
249                                    }
250                            }
251                            connection.commit();
252            //              System.out.println( "    ==========================" );
253                    }
254                    catch( SQLException ex ) {
255                            String errMsg = "SQL実行時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€?
256                                            + HybsSystem.CR + ex.getMessage();
257                            Closer.rollback( connection );
258    //                      if( connection != null ) {
259    //                              Closer.rollback( connection );
260    //                              try { connection.rollback(); }
261    //                              catch( SQLException ex2 ) { errMsg += ex2.getMessage(); }
262    //                      }
263                            throw new RuntimeException( errMsg,ex );
264                    }
265                    catch( IOException ex ) {
266                            String errMsg = "XMLファイル読ã¿å–り時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€?
267                                            + HybsSystem.CR + ex.getMessage();
268                            throw new RuntimeException( errMsg,ex );
269                    }
270                    finally {
271                            Closer.zipClose( jarFile );             // 5.5.2.6 (2012/05/25) findbugs対�
272    
273                    // 5.3.6.0 (2011/06/01) finally 処ç?§ã€ã‚¿ã‚¤ãƒ?‚¹ã‚¿ãƒ³ãƒ—ã?æ›¸ãæ›ãˆã‚’行ã†ã€?
274    
275                    // commit ãŒæ?功ã—ãŸå?åˆã?ã¿ã€ãƒ•ァイルã®ã‚¿ã‚¤ãƒ?‚¹ã‚¿ãƒ³ãƒ—ã?æ›¸ãæ›ãˆã‚’行ã†ã€?
276    //              if( ! fileCommit ) {
277    //                      File[] files = fileList.toArray( new File[fileList.size()] );
278    //                      for( int i=0; i<files.length; i++ ) {
279                            // 5.6.6.1 (2013/07/12) useTimeStamp=true ã®å ´åˆã?ã¿ã€æ›¸ãæ›ãˆã¾ã™ã?
280                            if( useTimeStamp ) {
281                                    for( File file : fileList ) {
282                                            if( !file.setLastModified( 0L ) ) {
283                                                    String errMsg = "タイãƒ?‚¹ã‚¿ãƒ³ãƒ—ã?æ›¸ãæ›ãˆã«å¤±æ•—ã—ã¾ã—ãŸã€?
284                                                                            + "file=" + file ;      // 5.1.8.0 (2010/07/01) errMsg 修正
285                                                    System.out.println( errMsg );
286                                            }
287                                    }
288                            }
289                    }
290            }
291    
292            /**
293             * XMLフォルãƒ?ファイルを読ã¿å–りã€ãƒ‡ãƒ¼ã‚¿ãƒ™ã?スã«è¿½åŠ?INSERT)ã™ã‚‹ãƒ¡ã‚½ãƒ?ƒ‰ã‚’コールã—ã¾ã™ã?
294             *
295             * ã“ã“ã§ã¯ã€ãƒ•ォルãƒ?šŽå±¤ã‚’下るãŸã‚ã®å†èµ·å‡¦ç?‚’行ã£ã¦ã?¾ã™ã?
296             * XMLファイルã¯ã€ORACLE XDK拡張ファイルã§ã™ã?ãƒ??ブルåã‚’æŒ?®šã™ã‚‹ã“ã¨ã§ã€?
297             * XMLファイルをデータベã?スã«ç™»éŒ²ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã?
298             * ORACLE XDK拡張ファイルã‚??SQL_EXECã‚¿ã‚°ãªã©ã®è©³ç´°ã¯ã€{@link org.opengion.fukurou.xml.HybsXMLSave}
299             * ã‚’å‚照願ã„ã¾ã™ã?
300             *
301             * @og.rev 5.3.6.0 (2011/06/01) 実フォルãƒ??å ´åˆã?フォルãƒ?šŽå±¤ã‚’下る処ç?‚’追åŠ?
302             *
303             * @param       fileObj                 読å–å?ã®ãƒ•ァイルオブジェクãƒ?
304             * @param       useTimeStamp    タイãƒ?‚¹ã‚¿ãƒ³ãƒ—ã?管ç?‚’行ã†ã‹ã©ã?‹[true:行ã†/false:行ã‚ãªã„]
305             * @param       fileList                処ç?—ãŸãƒ•ァイルをä¿ç®¡ã—ã¦ãŠãListオブジェクãƒ?
306             * @throws SQLException,IOException
307             */
308            private void loadXMLDir( final File fileObj , final boolean useTimeStamp , final List<File> fileList )
309                                                                                                                                                                    throws SQLException,IOException {
310                    // dir = /C:/webapps/gf/WEB-INF/classes/resource/ å½¢å¼ã§ã™ã?
311                    File[] list = fileObj.listFiles();
312            //      Arrays.sort( list );
313                    for( int i=0; i<list.length; i++ ) {
314                            String file = list[i].getName() ;
315                            if( list[i].isFile() && file.endsWith( ".xml" ) ) {
316                                    if( ! useTimeStamp || list[i].lastModified() > 0 ) {
317                                            String table = file.substring( file.lastIndexOf('/')+1,file.lastIndexOf('.') );
318                                            InputStream stream = null;
319                                            try {
320                                                    System.out.println( "        " + list[i] );
321                                                    stream = new FileInputStream( list[i] ) ;
322                                                    loadXML( stream,connection,table );
323                                            }
324    //                                      catch( IOException ex ) {
325    //                                              String errMsg = "dir ã® XMLファイル読ã¿å–り時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€?
326    //                                                              + HybsSystem.CR + ex.getMessage();
327    //                                              throw new RuntimeException( errMsg,ex );
328    //                                      }
329                                            finally {
330                                                    Closer.ioClose( stream );
331                                            }
332                                            if( fileCommit ) {
333                                                    connection.commit();
334                                            }
335                                            fileList.add( list[i] );
336                                    }
337                            }
338                            else {
339                                    loadXMLDir( list[i],useTimeStamp,fileList );
340                            }
341                    }
342            }
343    
344            /**
345             * XMLファイルを読ã¿å–りã€ãƒ‡ãƒ¼ã‚¿ãƒ™ã?スã«è¿½åŠ?INSERT)ã—ã¾ã™ã?
346             *
347             * XMLファイルã¯ã€ORACLE XDK拡張ファイルã§ã™ã?ãƒ??ブルåã‚’æŒ?®šã™ã‚‹ã“ã¨ã§ã€?
348             * XMLファイルをデータベã?スã«ç™»éŒ²ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã?
349             * ORACLE XDK拡張ファイルã‚??SQL_EXECã‚¿ã‚°ãªã©ã®è©³ç´°ã¯ã€{@link org.opengion.fukurou.xml.HybsXMLSave}
350             * ã‚’å‚照願ã„ã¾ã™ã?
351             *
352             * @param       stream  読ã¿å–るストリーãƒ?
353             * @param       conn    DB接続ã?コãƒã‚¯ã‚·ãƒ§ãƒ³
354             * @param       table   追åŠ?™ã‚‹ãƒ†ãƒ¼ãƒ–ルå?
355             *
356             * @og.rev 5.6.6.1 (2013/07/12) 更新カウント数もå–å¾—ã—ã¾ã™ã?
357             * @og.rev 5.6.7.0 (2013/07/27) HybsXMLSave ã® DDL?ˆãƒ‡ãƒ¼ã‚¿å®šç¾©è¨?ªžï¼šData Definition Language?‰ã?処ç?»¶æ•°è¿½åŠ?
358             *
359             * @return      追åŠ?•れãŸä»¶æ•°
360             * @see org.opengion.fukurou.xml.HybsXMLSave
361             */
362            private int loadXML( final InputStream stream, final Connection conn,final String table )
363                    throws SQLException,UnsupportedEncodingException {
364    
365                    // InputStream よりã€XMLファイルを読ã¿å–りã€table ã«è¿½åŠ?INSERT)ã—ã¾ã™ã?
366                    Reader reader = new BufferedReader( new InputStreamReader( stream,"UTF-8" ) );
367                    HybsXMLSave save = new HybsXMLSave( conn,table );
368                    save.insertXML( reader );
369                    int insCnt = save.getInsertCount();
370                    int delCnt = save.getDeleteCount();
371                    int updCnt = save.getUpdateCount();             // 5.6.6.1 (2013/07/12) 更新カウント数もå–å¾?
372                    int ddlCnt = save.getDDLCount();                // 5.6.7.0 (2013/07/27) DDL処ç?»¶æ•°è¿½åŠ?
373                    String tableName = save.getTableName() ;
374    
375    //              System.out.println( "          TABLE=[" + tableName + "]  DELETE=["+ delCnt +"] INSERT=[" + insCnt + "]" );
376    //              System.out.println( "          TABLE=[" + tableName + "]  DELETE=["+ delCnt +"] INSERT=[" + insCnt + "] UPDATE=[" + updCnt + "]" );
377                    System.out.println( "          TABLE=[" + tableName + "]  DELETE=["+ delCnt +"] INSERT=[" + insCnt + "] UPDATE=[" + updCnt + "] DDL=[" + ddlCnt + "]" );
378                    return insCnt;
379            }
380    }