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.resource.GUIInfo;
021    import org.opengion.fukurou.db.Transaction;
022    import org.opengion.fukurou.db.TransactionReal;
023    import org.opengion.fukurou.util.FileUtil;
024    import org.opengion.fukurou.util.Closer ;
025    import org.opengion.fukurou.util.StringUtil;
026    import org.opengion.fukurou.xml.HybsXMLSave ;
027    
028    import static org.opengion.fukurou.util.StringUtil.nval ;
029    
030    import java.sql.Connection;
031    
032    import java.io.File;
033    import java.io.BufferedReader;
034    import java.util.Map;
035    import java.util.HashMap;
036    
037    /**
038     * æŒ?®šã?æ‹¡å¼µXDKå½¢å¼ãƒ•ァイルを直接ãƒ??タベã?スã«ç™»éŒ²ã™ã‚‹ãƒ??タ入力タグã§ã™ã?
039     *
040     * ã“ã?クラスã¯ã€ã‚ªãƒ©ã‚¯ãƒ« XDKã® oracle.xml.sql.dml.OracleXMLSave クラスã¨
041     * ã»ã¼åŒæ§˜ã?ç›®çš?§ä½¿ç”¨ã§ãã‚‹ org.opengion.fukurou.xml.HybsXMLSave ã®ãƒ©ãƒ?ƒ‘ークラスã§ã™ã?
042     * æ‹¡å¼µXDKå½¢å¼ã?XMLファイルを読ã¿è¾¼ã¿ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ã?ス㫠INSERT ã—ã¾ã™ã?
043     * æ‹¡å¼µXDKå½¢å¼ã?å…?¨ãªã‚?オラクル XDK(Oracle XML Developer's Kit)ã«ã¤ã?¦ã¯ã€ä»¥ä¸‹ã?
044     * リンクをå‚照願ã„ã¾ã™ã?
045     * <a href="http://otn.oracle.co.jp/software/tech/xml/xdk/index.html" target="_blank" >
046     * XDK(Oracle XML Developer's Kit)</a>
047     *
048     * ã“ã?ã‚¿ã‚°ã§ã¯ã€keys,vals を登録ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€MLファイルã«å­˜åœ¨ã—ãªã?‚«ãƒ©ãƒ?‚’
049     * 追åŠ?—ãŸã‚Šã€XMLãƒ•ã‚¡ã‚¤ãƒ«ã®æƒ??ã‚’æ›¸ãæ›ãˆã‚‹ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã?
050     * 例ãˆã°ã€ç™»éŒ²æ—¥ã‚??登録è€??ã¾ãŸã?ã€ãƒ†ãƒ³ãƒ—レートよりå„シスãƒ?ƒ ID毎ã«
051     * 登録ã™ã‚‹ãªã©ã§ã™ã?
052     *
053     * æ‹¡å¼µXDKå½¢å¼ã¨ã¯ã€ROW 以外ã«ã€SQL処ç?”¨ã‚¿ã‚°(EXEC_SQL)ã‚’æŒã¤ XML ファイルã§ã™ã?
054     * ã¾ãŸã?登録ã™ã‚‹ãƒ??ブル(table)ã‚?ROWSETã‚¿ã‚°ã®å±žæ?æƒ??ã¨ã—ã¦ä»˜ä¸Žã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã?
055     * (大æ–?­—å°æ–‡å­—ã«æ³¨æ„?
056     * ã“れã¯ã€ã‚ªãƒ©ã‚¯ãƒ«XDKã§å‡¦ç?™ã‚‹å?åˆã?無視ã•れã¾ã™ã?ã§ã€åŒæ§˜ã«æ‰±ã?“ã¨ãŒå?æ¥ã¾ã™ã?
057     * ã“ã?ã€EXEC_SQL ã¯ã€ãれãれã? XMLãƒ??タをデータベã?スã«ç™»éŒ²ã™ã‚‹éš›ã«ã€?
058     * SQL処ç?‚’è‡ªå‹•çš„ã«æµã™ç‚ºã®ã€SQLæ–?‚’記載ã—ã¾ã™ã?
059     * ã“ã?処ç??ã€ã‚¤ãƒ™ãƒ³ãƒˆæ¯Žã«å®Ÿè¡Œã•れる為ã€ãã®é…ç½®é ??é‡è¦ã§ã™ã?
060     * ã“ã?ã‚¿ã‚°ã¯ã€è¤?•°è¨˜è¿°ã™ã‚‹ã“ã¨ã‚‚å?æ¥ã¾ã™ãŒã€BODY部ã«ã¯ã€?¼‘ã¤ã®SQLæ–??ã¿è¨˜è¿°ã—ã¾ã™ã?
061     *
062     * ※ ã“ã?ã‚¿ã‚°ã¯ã€Transaction ã‚¿ã‚°ã®å¯¾è±¡ã§ã™ã?
063     *
064     *   &lt;ROWSET tableName="XX" &gt;
065     *       &lt;EXEC_SQL&gt;                    æœ??ã«è¨˜è¼‰ã—ã¦ã€å?期å?ç?ãƒ??タクリアç­?を実行ã•ã›ã‚‹ã€?
066     *           delete from GEXX where YYYYY
067     *       &lt;/EXEC_SQL&gt;
068     *       &lt;MERGE_SQL&gt;                   ã“ã?SQLæ–?§ UPDATEã—ã¦ã€çµæžœãŒï¼ä»¶ãªã‚‰INSERTを行ã„ã¾ã™ã?
069     *           update GEXX set AA=[AA] , BB=[BB] where CC=[CC]
070     *       &lt;/MERGE_SQL&gt;
071     *       &lt;ROW num="1"&gt;
072     *           &lt;カラ�&gt;値1&lt;/カラ�&gt;
073     *             ?¥?¥?¥
074     *           &lt;カラ�&gt;値n&lt;/カラ�&gt;
075     *       &lt;/ROW&gt;
076     *        ?¥?¥?¥
077     *       &lt;ROW num="n"&gt;
078     *          ?¥?¥?¥
079     *       &lt;/ROW&gt;
080     *       &lt;EXEC_SQL&gt;                    æœ?¾Œã«è¨˜è¼‰ã—ã¦ã€??ç›®ã®è¨­å®?æ•´åˆæ?登録)を行ã†ã€?
081     *           update GEXX set AA='XX' , BB='XX' where YYYYY
082     *       &lt;/EXEC_SQL&gt;
083     *   &lt;ROWSET&gt;
084     *
085     * @og.formSample
086     * â—å½¢å¼ï¼?lt;og:directXMLSave filename="[?¥?¥?¥]" ?¥?¥?¥ /&gt;
087     * â—body?šãªã?
088     *
089     * â—Tag定義??
090     *   &lt;og:directXMLSave
091     *       dbid               ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)検索時ã?DB接続IDを指定ã—ã¾ã?åˆæœŸå€¤:DEFAULT)
092     *       fileURL            ã€TAG】読ã¿å–りå…?ƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªåã‚’æŒ?®šã—ã¾ã?(åˆæœŸå€¤:FILE_URL[=filetemp/])
093     *       filename           ã€TAG】ファイルを作æ?ã™ã‚‹ã¨ãã?ファイルåã‚’ã‚»ãƒ?ƒˆã—ã¾ã?(åˆæœŸå€¤:FILE_FILENAME[=file.xls])
094     *       displayMsg         ã€TAG】query ã®çµæžœã‚’ç”»é¢ä¸Šã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸IDを指定ã—ã¾ã?åˆæœŸå€¤:MSG0040[ã€?»¶ç™»éŒ²ã—ã¾ã—ãŸ])
095     *       keys               ã€TAG】XMLファイルを読ã¿å–ã£ãŸå¾Œã§æŒ?®šã™ã‚‹ã‚­ãƒ¼ã‚’CSVå½¢å¼ã§è¤?•°æŒ?®šã—ã¾ã?
096     *       vals               ã€TAG】XMLファイルを読ã¿å–ã£ãŸå¾Œã§æŒ?®šã™ã‚‹å?ã‚’CSVå½¢å¼ã§è¤?•°æŒ?®šã—ã¾ã?
097     *       caseKey            ã€TAG】ã“ã®ã‚¿ã‚°è‡ªä½“を利用ã™ã‚‹ã‹ã©ã?‹ã®æ¡ä»¶ã‚­ãƒ¼ã‚’指定ã—ã¾ã?åˆæœŸå€¤:null)
098     *       caseVal            ã€TAG】ã“ã®ã‚¿ã‚°è‡ªä½“を利用ã™ã‚‹ã‹ã©ã?‹ã®æ¡ä»¶å€¤ã‚’指定ã—ã¾ã?åˆæœŸå€¤:null)
099     *       caseNN             ã€TAG】指定ã?値ãŒã?null/ゼロæ–?­—å? ã§ãªã??å?Not Null=NN)ã¯ã€ã“ã®ã‚¿ã‚°ã¯ä½¿ç”¨ã•れã¾ã?åˆæœŸå€¤:true)
100     *       caseNull           ã€TAG】指定ã?値ãŒã?null/ゼロæ–?­—å? ã®å ´åˆã?ã€ã“ã®ã‚¿ã‚°ã¯ä½¿ç”¨ã•れã¾ã?åˆæœŸå€¤:true)
101     *       debug              ã€TAG】デãƒãƒƒã‚°æƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
102     *   /&gt;
103     *
104     * â—使用ä¾?
105     *     &lt;og:directXMLSave
106     *         dbid         = "ORCL"                接続データベã?スID(åˆæœŸå€¤:DEFAULT)
107     *         fileURL      = "{&#064;USER.ID}"     読ã¿å–りå…?ƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå?
108     *         filename     = "{&#064;filename}"    読ã¿å–りå…?ƒ•ァイルå?
109     *         displayMsg   = "MSG0040"             登録完äº?¾Œã?メãƒ?‚»ãƒ¼ã‚¸
110     *     /&gt;
111     *
112     * @og.group ファイル入�
113     * @og.rev 4.0.0.0 (2007/03/08) æ–°è¦è¿½åŠ?
114     *
115     * @version  4.0
116     * @author   Kazuhiko Hasegawa
117     * @since    JDK5.0,
118     */
119    public class DirectXMLSaveTag extends CommonTagSupport {
120            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
121            private static final String VERSION = "5.6.7.0 (2013/07/27)" ;
122    
123            private static final long serialVersionUID = 567020130727L ;
124    
125            private static final String ENCODE = "UTF-8";
126            // 4.0.0.0 (2007/10/10) dbid ã®åˆæœŸå€¤ã‚’ã?"DEFAULT" ã‹ã‚‰ null ã«å¤‰æ›´
127    //      private String  dbid            = "DEFAULT";
128            private String  dbid            = null;
129            private String  fileURL         = HybsSystem.sys( "FILE_URL" );         // 4.0.0 (2005/01/31)
130            private String  filename        = HybsSystem.sys( "FILE_FILENAME" );   // ファイルå?
131            private String  displayMsg      = "MSG0040";    // ã€?»¶ç™»éŒ²ã—ã¾ã—ãŸã€?
132            private String[]        keys    = null;
133            private String[]        vals    = null;
134            private long    dyStart         = 0;    // 実行時間測定用ã®DIVè¦ç´?‚’出力ã—ã¾ã™ã?
135    
136            /**
137             * Taglibã®é–‹å§‹ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doStartTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
138             *
139             * @og.rev 5.6.6.1 (2013/07/12) caseKey ã€caseVal 属æ?対å¿?
140             *
141             * @return      後続å?ç??æŒ?¤º( SKIP_BODY )
142             */
143            @Override
144            public int doStartTag() {
145                    // 5.6.6.1 (2013/07/12) caseKey ã€caseVal 属æ?対å¿?
146                    if( useTag() ) {
147                            dyStart = System.currentTimeMillis();           // 時間測定用
148                    }
149                    return( SKIP_BODY );    // Body を評価ã—ãªã?
150            }
151    
152            /**
153             * Taglibã®çµ‚äº?‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doEndTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
154             *
155             * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹çµ±å? getResource().getMessage > getResource().getLabel )
156             * @og.rev 4.0.0.1 (2007/12/03) try ??catch ??finally ã‚’ãã¡ã‚“ã¨è¡Œã†ã€?
157             * @og.rev 5.1.9.0 (2010/08/01) Transaction 対�
158             * @og.rev 5.3.7.0 (2011/07/01) TransactionReal ã®å¼•数変更
159             * @og.rev 5.5.2.6 (2012/05/25) findbugs対応ã?例外経路㧠null 値を利用ã™ã‚‹ã“ã¨ãŒä¿è¨¼ã•れã¦ã?¾ã™ã?
160             * @og.rev 5.6.6.1 (2013/07/12) caseKey ã€caseVal 属æ?対å¿?
161             * @og.rev 5.6.7.0 (2013/07/27) DDL?ˆãƒ‡ãƒ¼ã‚¿å®šç¾©è¨?ªžï¼šData Definition Language?‰ã?処ç?»¶æ•°è¿½åŠ?
162             *
163             * @return      後続å?ç??æŒ?¤º
164             */
165            @Override
166            public int doEndTag() {
167                    debugPrint();           // 4.0.0 (2005/02/28)
168                    // 5.6.6.1 (2013/07/12) caseKey ã€caseVal 属æ?対å¿?
169                    if( !useTag() ) { return(EVAL_PAGE); }
170    
171                    BufferedReader reader   = null;
172                    final int insCnt ;
173                    final int updCnt ;
174                    final int delCnt ;
175                    final int ddlCnt ;                              // 5.6.7.0 (2013/07/27) DDL処ç?»¶æ•°è¿½åŠ?
176                    boolean errFlag = true;
177    //              Connection  conn = null;
178                    Transaction tran = null;                // 5.1.9.0 (2010/08/01) Transaction 対�
179                    try {
180                            // 5.1.9.0 (2010/08/01) Transaction 対�
181                            TransactionTag tranTag = (TransactionTag)findAncestorWithClass( this,TransactionTag.class );
182                            if( tranTag == null ) {
183    //                              tran = new TransactionReal( dbid,getApplicationInfo() );
184                                    tran = new TransactionReal( getApplicationInfo() );             // 5.3.7.0 (2011/07/01) 引数変更
185                            }
186                            else {
187                                    tran = tranTag.getTransaction();
188                            }
189    //                      conn = ConnectionFactory.connection( dbid,getApplicationInfo() );       // 3.8.7.0 (2006/12/15)
190    
191                            Connection conn = tran.getConnection( dbid );           // 5.1.9.0 (2010/08/01) Transaction 対�
192                            HybsXMLSave save = new HybsXMLSave( conn );
193                            if( keys != null ) { save.setAfterMap( getAfterMap() ); }
194    
195                            reader = getBufferedReader();
196                            save.insertXML( reader );
197                            insCnt = save.getInsertCount();
198                            updCnt = save.getUpdateCount();
199                            delCnt = save.getDeleteCount();
200                            ddlCnt = save.getDDLCount();            // 5.6.7.0 (2013/07/27) DDL処ç?»¶æ•°è¿½åŠ?
201    //                      Closer.commit( conn );
202                            tran.commit();                  // 5.1.9.0 (2010/08/01) Transaction 対�
203                            errFlag = false;                // エラーã§ã¯ãªã?
204                    }
205                    catch( Throwable ex ) {
206    //                      Closer.rollback( conn );
207                            if( tran != null ) {            // 5.5.2.6 (2012/05/25) findbugs対�
208                                    tran.rollback();                // 5.1.9.0 (2010/08/01) Transaction 対�
209                            }
210                            throw new HybsSystemException( ex );
211                    }
212                    finally {
213                            if( tran != null ) {            // 5.5.2.6 (2012/05/25) findbugs対�
214                                    tran.close( errFlag );
215                            }
216    //                      if( errFlag ) { ConnectionFactory.remove( conn,dbid ); }        // 削除
217    //                      else {                  ConnectionFactory.close( conn,dbid );  }        // è¿”å´
218    //                      Closer.connClose( conn );
219                            Closer.ioClose( reader );
220                    }
221    
222                    // 実行件数ã®è¡¨ç¤º
223                    // 4.0.0 (2005/11/30) 出力é?ã®å¤‰æ›´ã€‚ä¸?•ªæœ??ã«å‡ºåŠ›ã—ã¾ã™ã?
224                    if( displayMsg != null && displayMsg.length() > 0 ) {
225                            StringBuilder buf = new StringBuilder();
226                            buf.append( "INS:"    ).append( insCnt );
227                            buf.append( " / UPD:" ).append( updCnt );
228                            buf.append( " / DEL:" ).append( delCnt );
229                            buf.append( " / DDL:" ).append( ddlCnt );                               // 5.6.7.0 (2013/07/27) DDL処ç?»¶æ•°è¿½åŠ?
230    //                      buf.append( getResource().getMessage( displayMsg ) );
231                            buf.append( getResource().getLabel( displayMsg ) );
232                            buf.append( HybsSystem.BR );
233    
234                            jspPrint( buf.toString() );
235                    }
236    
237                    // 時間測定用㮠DIV è¦ç´?‚’出åŠ?
238                    long dyTime = System.currentTimeMillis()-dyStart;
239                    jspPrint( "<div id=\"queryTime\" value=\"" + (dyTime) + "\"></div>" );      // 3.5.6.3 (2004/07/12)
240    
241                    // 4.0.0 (2005/01/31) セキュリãƒ?‚£ãƒã‚§ãƒ?‚¯(ãƒ??タアクセス件数登録)
242                    GUIInfo guiInfo = (GUIInfo)getSessionAttribute( HybsSystem.GUIINFO_KEY );
243                    if( guiInfo != null ) { guiInfo.addWriteCount( insCnt,dyTime,fileURL + filename ); }
244    
245                    return(EVAL_PAGE);
246            }
247    
248            /**
249             * タグリブオブジェクトをリリースã—ã¾ã™ã?
250             * キャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨­å®šã‚’行ã„ã¾ã™ã?
251             *
252             * @og.rev 4.0.0.0 (2007/10/10) dbid ã®åˆæœŸå€¤ã‚’ã?"DEFAULT" ã‹ã‚‰ null ã«å¤‰æ›´
253             */
254            @Override
255            protected void release2() {
256                    super.release2();
257    //              dbid            = "DEFAULT";
258                    dbid            = null;
259                    fileURL         = HybsSystem.sys( "FILE_URL" );         // 4.0.0 (2005/01/31)
260                    filename        = HybsSystem.sys( "FILE_FILENAME" );   // ファイルå?
261                    displayMsg      = "MSG0040";    // ã€?»¶ç™»éŒ²ã—ã¾ã—ãŸã€?
262                    keys            = null;
263                    vals            = null;
264            }
265    
266            /**
267             * BufferedReader ã‚’å–å¾—ã—ã¾ã™ã?
268             *
269             * ã“ã“ã§ã¯ã€ä¸?ˆ¬çš?ªãƒ•ァイル出力をè€??ã—㟠BufferedReader を作æ?ã—ã¾ã™ã?
270             *
271             * @return      ファイル入力用BufferedReaderオブジェク�
272             */
273            private BufferedReader getBufferedReader() {
274                    if( filename == null ) {
275                            String errMsg = "ファイルåãŒã‚»ãƒ?ƒˆã•れã¦ã?¾ã›ã‚“ã€?;
276                            throw new HybsSystemException( errMsg );
277                    }
278                    String directory = HybsSystem.url2dir( fileURL );
279                    File file = new File( StringUtil.urlAppend( directory,filename ) );
280    
281                    BufferedReader out = FileUtil.getBufferedReader( file,ENCODE );
282    
283                    return out ;
284            }
285    
286            /**
287             * BufferedReader ã‚’å–å¾—ã—ã¾ã™ã?
288             *
289             * ã“ã“ã§ã¯ã€ä¸?ˆ¬çš?ªãƒ•ァイル出力をè€??ã—㟠BufferedReader を作æ?ã—ã¾ã™ã?
290             *
291             * @og.rev 5.6.6.1 (2013/07/12) key ã?null ã‚?ゼロæ–?­—å?ã®å ´åˆã?ã€Map ã«è¿½åŠ?—ã¾ã›ã‚“ã€?
292             *
293             * @return      ファイル入力用BufferedReader
294             */
295            private Map<String,String> getAfterMap() {
296                    Map<String,String> map = new HashMap<String,String>();
297    
298                    for( int i=0; i<keys.length; i++ ) {
299                            if( keys[i] != null && keys[i].length() > 0 ) {              // 5.6.6.1 (2013/07/12)
300                                    map.put( keys[i],vals[i] );
301                            }
302                    }
303                    return map ;
304            }
305    
306            /**
307             * ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)検索時ã?DB接続IDを指定ã—ã¾ã?åˆæœŸå€¤:DEFAULT)ã€?
308             *
309             * @og.tag
310             *   検索時ã?DB接続IDを指定ã—ã¾ã™ã?åˆæœŸå€¤ã¯ã€DEFAULT ã§ã™ã?
311             *
312             * @param       id ãƒ??タベã?ス接続ID
313             */
314            public void setDbid( final String id ) {
315                    dbid = nval( getRequestParameter( id ),dbid );
316            }
317    
318            /**
319             * ã€TAG】読ã¿å–りå…?ƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªåã‚’æŒ?®šã—ã¾ã?
320             *              (åˆæœŸå€¤:FILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
321             *
322             * @og.tag
323             * ã“ã?属æ?ã§æŒ?®šã•れるãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã‚ˆã‚Šã€ãƒ•ァイルを読ã¿å–りã¾ã™ã?
324             * æŒ?®šæ–¹æ³•ã?ã€??常㮠fileURL 属æ?ã¨åŒæ§˜ã«ã€å?é ­ãŒã?'/' (UNIX) ã¾ãŸã?ã€?¼’文字目ãŒã?
325             * ":" (Windows)ã®å ´åˆã?ã€æŒ‡å®šã?URLãã?ã¾ã¾ã®ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã€ãã?§ãªã??åˆã?ã€?
326             * fileURL = "{&#064;USER.ID}" ã¨æŒ?®šã™ã‚‹ã¨ã€FILE_URL 属æ?ã§æŒ?®šã?フォルãƒ??下ã«ã€?
327             * ã•らã«ã€å„個人ID別ã®ãƒ•ォルãƒ??下よりã?読ã¿å–りã¾ã™ã?
328             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®FILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
329             *
330             * @og.rev 4.0.0.0 (2007/11/20) æŒ?®šã•れãŸãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªåã?æœ?¾ŒãŒ"\"or"/"ã§çµ‚ã‚ã£ã¦ã?ªã??åˆã«ã€?/"を付加ã™ã‚‹ã€?
331             *
332             * @param       url ファイルURL
333             * @see         org.opengion.hayabusa.common.SystemData#FILE_URL
334             */
335            public void setFileURL( final String url ) {
336                    String furl = nval( getRequestParameter( url ),null );
337                    if( furl != null ) {
338                            char ch = furl.charAt( furl.length()-1 );
339                            if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
340                            fileURL = StringUtil.urlAppend( fileURL,furl );
341                    }
342            }
343    
344            /**
345             * ã€TAG】ファイルを作æ?ã™ã‚‹ã¨ãã?ファイルåã‚’ã‚»ãƒ?ƒˆã—ã¾ã?
346             *              (åˆæœŸå€¤:FILE_FILENAME[={@og.value org.opengion.hayabusa.common.SystemData#FILE_FILENAME}])ã€?
347             *
348             * @og.tag
349             * ファイルを作æ?ã™ã‚‹ã¨ãã?ファイルåã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
350             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®FILE_FILENAME[={@og.value org.opengion.hayabusa.common.SystemData#FILE_FILENAME}])ã€?
351             *
352             * @param   filename ファイルå?
353             * @see         org.opengion.hayabusa.common.SystemData#FILE_FILENAME
354             */
355            public void setFilename( final String filename ) {
356                    this.filename = nval( getRequestParameter( filename ),this.filename );
357            }
358    
359            /**
360             * ã€TAG】query ã®çµæžœã‚’ç”»é¢ä¸Šã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸IDを指定ã—ã¾ã?åˆæœŸå€¤:MSG0040[ã€?»¶ç™»éŒ²ã—ã¾ã—ãŸ])ã€?
361             *
362             * @og.tag
363             * ã“ã“ã§ã¯ã€æ¤œç´¢çµæžœã®ä»¶æ•°ã‚?™»éŒ²ã•れãŸä»¶æ•°ã‚’ã¾ãšå?力ã—ã€?
364             * ãã?次ã«ã€ã“ã“ã§æŒ?®šã—ãŸãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚’リソースã‹ã‚‰å–å¾—ã—ã¦
365             * 表示ã—ã¾ã™ã?
366             * 表示ã•ã›ãŸããªã??åˆã?, displayMsg = "" ã‚’ã‚»ãƒ?ƒˆã—ã¦ãã ã•ã„ã€?
367             * åˆæœŸå€¤ã¯ã€æ¤œç´¢ä»¶æ•°ã‚’表示ã—ã¾ã™ã?
368             * ※ ã“ã?属æ?ã«ã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆå¤‰æ•°({&#064;XXXX})ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“ã€?
369             *
370             * @param   id ãƒ?‚£ã‚¹ãƒ—レイã«è¡¨ç¤ºã•ã›ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ ID
371             */
372            public void setDisplayMsg( final String id ) {
373                    if( id != null ) { displayMsg = id; }
374            }
375    
376            /**
377             * ã€TAG】XMLファイルを読ã¿å–ã£ãŸå¾Œã§æŒ?®šã™ã‚‹ã‚­ãƒ¼ã‚’CSVå½¢å¼ã§è¤?•°æŒ?®šã—ã¾ã™ã?
378             *
379             * @og.tag
380             * XMLファイルを読ã¿å–ã£ãŸå¾Œã§ã€ãƒ‡ãƒ¼ã‚¿ã‚’変更ã§ãã¾ã™ã?
381             * 変更ã™ã‚‹ã‚«ãƒ©ãƒ?(キー)ã‚’CSVå½¢å¼ã§æŒ?®šã—ã¾ã™ã?
382             * XMLファイルã«ã‚­ãƒ¼ãŒå­˜åœ¨ã—ã¦ã?Ÿå ´åˆã?ã€vals ã§æŒ?®šã?å€¤ã«æ›¸ãæ›ãˆã¾ã™ã?
383             * キーãŒå­˜åœ¨ã—ã¦ã?ªã??åˆã?ã€ã“ã“ã§æŒ?®šã™ã‚‹ã‚­ãƒ¼ã¨å€¤ãŒã?ãƒ??ã‚¿ã¨ã—ã¦
384             * 追åŠ?•れã¾ã™ã?
385             * 例ãˆã°ã€ç™»éŒ²æ—¥ã‚??登録è€??ã¾ãŸã?ã€ãƒ†ãƒ³ãƒ—レートよりå„シスãƒ?ƒ ID毎ã«
386             * 登録ã™ã‚‹ãªã©ã®ä½¿ã?–¹ã‚’想定ã—ã¦ã?¾ã™ã?
387             * åˆ?§£æ–¹æ³•ã?ã€CSV変数をå?ã«åˆ?§£ã—ã¦ã‹ã‚‰ã€getRequestParameter ã§å€¤ã‚’å–å¾—ã—ã¾ã™ã?
388             * ã“ã†ã—ãªã?¨ãƒ??タ自身ã«ã‚«ãƒ³ãƒžã‚’æŒã£ã¦ã?‚‹å ´åˆã«åˆ?§£ã‚’ミスる為ã§ã™ã?
389             *
390             * @param       key ãƒªãƒ³ã‚¯å…ˆã«æ¸¡ã™ã‚­ãƒ¼
391             * @see         #setVals( String )
392             */
393            public void setKeys( final String key ) {
394                    keys = getCSVParameter( key );
395            }
396    
397            /**
398             * ã€TAG】XMLファイルを読ã¿å–ã£ãŸå¾Œã§æŒ?®šã™ã‚‹å?ã‚’CSVå½¢å¼ã§è¤?•°æŒ?®šã—ã¾ã™ã?
399             *
400             * @og.tag
401             * XMLファイルを読ã¿å–ã£ãŸå¾Œã§ã€ãƒ‡ãƒ¼ã‚¿ã‚’変更ã§ãã¾ã™ã?
402             * 変更ã™ã‚‹å€¤ã‚’CSVå½¢å¼ã§æŒ?®šã—ã¾ã™ã?
403             * XMLファイルã«ã‚­ãƒ¼ãŒå­˜åœ¨ã—ã¦ã?Ÿå ´åˆã?ã€vals ã§æŒ?®šã?å€¤ã«æ›¸ãæ›ãˆã¾ã™ã?
404             * キーãŒå­˜åœ¨ã—ã¦ã?ªã??åˆã?ã€ã“ã“ã§æŒ?®šã™ã‚‹ã‚­ãƒ¼ã¨å€¤ãŒã?ãƒ??ã‚¿ã¨ã—ã¦
405             * 追åŠ?•れã¾ã™ã?
406             * 例ãˆã°ã€ç™»éŒ²æ—¥ã‚??登録è€??ã¾ãŸã?ã€ãƒ†ãƒ³ãƒ—レートよりå„シスãƒ?ƒ ID毎ã«
407             * 登録ã™ã‚‹ãªã©ã®ä½¿ã?–¹ã‚’想定ã—ã¦ã?¾ã™ã?
408             * åˆ?§£æ–¹æ³•ã?ã€CSV変数をå?ã«åˆ?§£ã—ã¦ã‹ã‚‰ã€getRequestParameter ã§å€¤ã‚’å–å¾—ã—ã¾ã™ã?
409             * ã“ã†ã—ãªã?¨ãƒ??タ自身ã«ã‚«ãƒ³ãƒžã‚’æŒã£ã¦ã?‚‹å ´åˆã«åˆ?§£ã‚’ミスる為ã§ã™ã?
410             *
411             * @param       val keys属æ?ã«å¯¾å¿œã™ã‚‹å?
412             * @see         #setKeys( String )
413             */
414            public void setVals( final String val ) {
415                    vals = getCSVParameter( val );
416            }
417    
418            /**
419             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
420             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
421             *
422             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
423             */
424            @Override
425            public String toString() {
426                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
427                                    .println( "VERSION"                     ,VERSION                )
428                                    .println( "dbid"                        ,dbid                   )
429                                    .println( "fileURL"                     ,fileURL                )
430                                    .println( "filename"            ,filename               )
431                                    .println( "displayMsg"          ,displayMsg             )
432                                    .println( "dyStart"                     ,dyStart                )
433                                    .println( "Other..."            ,getAttributes().getAttribute() )
434                                    .fixForm().toString() ;
435            }
436    }