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.fukurou.util.HybsDateUtil;
019    import static org.opengion.fukurou.util.StringUtil.nval;
020    
021    import java.io.IOException;
022    import java.io.ObjectInputStream;
023    import java.io.ObjectOutputStream;
024    // import java.text.DateFormat;
025    // import java.text.SimpleDateFormat;
026    import java.util.Calendar;
027    import java.util.Enumeration;
028    import java.util.LinkedHashSet;
029    import java.util.Locale;
030    import java.util.ArrayList;
031    import java.util.Set;
032    import java.text.NumberFormat;
033    
034    import javax.servlet.jsp.PageContext;
035    
036    import org.opengion.hayabusa.common.HybsSystem;
037    import org.opengion.hayabusa.common.HybsSystemException;
038    import org.opengion.hayabusa.db.DBColumn;
039    import org.opengion.hayabusa.db.DBTableModel;
040    import org.opengion.hayabusa.db.Query;
041    import org.opengion.hayabusa.db.QueryFactory;
042    import org.opengion.fukurou.util.StringUtil;
043    import org.opengion.fukurou.db.Transaction;
044    import org.opengion.fukurou.db.TransactionReal;
045    
046    /**
047     * JSP上からキー、å?を設定することにより、リクエスト情報として、å?ã‚?
048     * 取å?し可能にするタグですã?
049     *
050     * 通常のリクエスト情報と同じ扱ã�?�Œできまã�?優先é?位ã?、Valueタグが上ä½?ã€?
051     *
052     * 設定したå?は、{@XXXX} 形式で 取り出すことができますã?
053     * またã?command ="GET" で 直接画面に値を書きå?すことも可能ですã?
054     *
055     * ※ こã?タグは、Transaction タグの対象ですã?
056     *
057     * @og.formSample
058     * ●形式ï¼?lt;og:value command="SET" key="ABC" value="123" />
059     * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
060     *
061     * ●Tag定義??
062     *   <og:value
063     *       command            【TAG】コマンãƒ?SET,GET,REMOVE,SQL,SETTBL,GETTBL,KEYTBL,CLEAR,SETMEM)をセãƒ?ƒˆしまã�?初期値:SET)
064     *       action             【TAG】アクション(UPPER,LOWER,MESSAGE,APPEND,ALL_APPEND,MAP,ALL_MAP,LIST,ALL_LIST,DAY_WEEK,MERGE,FIRST,ROW_APPEND,REPLACE,SUBSTR,SPLIT,MAX_MIN,ALL_MAX_MIN)をセãƒ?ƒˆしまã�?
065     *       key                【TAG】リクエスト情報 に登録するキーをセãƒ?ƒˆしまã�?
066     *       value              【TAG】リクエスト情報 に登録する値をセãƒ?ƒˆしまã�?
067     *       defaultVal         【TAG】value値がNULLの場合に、この初期値を設定しまã�?
068     *       nullSet            【å»?­¢】value ã�?NULL の時に、設定するかどã�?�‹[true/false]を指定しまã�?初期値:true)
069     *       separator          【TAG】各種アクションのæ–?­—å?をé?çµ?åˆ?§£するé ?›®区åˆ?‚Šæ–?­—をセãƒ?ƒˆしまã�?初期値:",")
070     *       useMultiRows       【TAG】ã?ルチデータ(è¤?•°件検索)を使用するかどã�?�‹[true/false]を指定しまã�?初期値:false)
071     *       scope              【TAG】キャãƒ?‚·ュする場合ã?スコーãƒ?request,session)を指定しまã�?初期値:request)
072     *       tableId            【TAG】sessionから取得すã‚?DBTableModelオブジェクトã? ID
073     *       tblScope           【TAG】DBTableModel から取得するå?合ã?スコーãƒ?request,session)を指定しまã�?初期値:session)
074     *       dbid               【TAGã€?通常は使ã�?�¾せん)Queryオブジェクトを作æ?する時ã?DB接続IDを指定しまã�?
075     *       xssCheck           【TAG】リクエスト情報の HTMLTag開å§?終äº?–‡å­?><) 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?(初期値:USE_XSS_CHECK[=true])
076     *       caseKey            【TAG】このタグ自体を利用するかどã�?�‹の条件キーを指定しまã�?初期値:null)
077     *       caseVal            【TAG】このタグ自体を利用するかどã�?�‹の条件値を指定しまã�?初期値:null)
078     *       caseNN             【TAG】指定ã?値がã?null/ゼロæ–?­—å? でなã�??å�?Not Null=NN)は、このタグは使用されまã�?初期値:true)
079     *       caseNull           【TAG】指定ã?値がã?null/ゼロæ–?­—å? の場合ã?、このタグは使用されまã�?初期値:true)
080     *       toVal              【TAG】部åˆ?–‡字å?置換ã? 置換え後ã?部åˆ?–‡字å?(to)を指定しまã�?
081     *       fromVal            【TAG】部åˆ?–‡字å?置換ã? 置換え前ã?部åˆ?–‡字å?(from)を指定しまã�?
082     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
083     *   >   ... Body ...
084     *   </og:value>
085     *
086     * ●使用ä¾?
087     *     ・ <og:value command="SET" key="ABC" value="123" />
088     *     ・ <og:value command="SQL">SELECT 1 TEST FROM DUAL</og:value>
089     *     ・ <og:value command="SET" key="DEF" value="{@NOCOMMAND}" defaultVal="0000" />
090     *     ・ <og:value command="GET" key="NOKEY" defaultVal="NODATA" />
091     *     ・ <og:value command="SET" key="{@ABC}4" value="TEST1234" />
092     *     ・ <og:value command="GET" key="ABC" />
093     *     ・ <og:value command="SET" action="LOWER" key="LOWERTEST" value="ABCDEF" />
094     *     ・ <og:value command="GET" key="LOWERTEST" />
095     *     ・ <og:value command="GET" action="UPPER" key="LOWERTEST" />
096     *     ・ <og:value command="REMOVE" key="ABC" />
097     *
098     * <style type="text/css">
099     *   #valueJavaDoc th { text-align:center; vertical-align: middle; writing-mode: tb-rl; }
100     *   #valueJavaDoc td { text-align:center; }
101     * </style>
102     *
103     * <table border="1" frame="box" rules="all" id="valueJavaDoc">
104     *   <caption>command ä¸?¦§と使用可能 action の対応表</caption>
105     *   <tr><th>command</th><th>UPPER</th><th>LOWER</th><th>MESSAGE</th><th>APPEND</th><th>ALL_APPEND</th><th>MAP</th><th>ALL_MAP</th><th>LIST</th><th>ALL_LIST</th><th>DAY_WEEK  </th><th>MERGE</th><th>FIRST</th><th>ROW_APPEND</th><th>REPLACE</th><th>SUBSTR</th><th>SPLIT</th><th>MAX_MIN</th><th>ALL_MAX_MIN</th></tr>
106     *   <tr><td>SET    </td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td></tr>
107     *   <tr><td>GET    </td><td>â—?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td></tr>
108     *   <tr><td>REMOVE </td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td></tr>
109     *   <tr><td>CLEAR  </td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td></tr>
110     *   <tr><td>SQL    </td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td></tr>
111     *   <tr><td>SETTBL </td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td></tr>
112     *   <tr><td>GETTBL </td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td></tr>
113     *   <tr><td>KEYTBL </td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td></tr>
114     *   <tr><td>SETMEM </td><td>â—?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>â—?/td><td>â—?/td><td>Ã?/td><td>Ã?/td></tr>
115     *   <tr><td>SQLGET </td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>â—?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td><td>Ã?/td></tr>
116     * </table>
117     *
118     * @og.group そã?他部å“?
119     *
120     * @version  4.0
121     * @author   M.Endou
122     * @since    JDK5.0,
123     */
124    public class ValueTag extends CommonTagSupport {
125            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
126            private static final String VERSION = "5.6.6.1 (2013/07/12)" ;
127    
128            private static final long serialVersionUID = 566120130712L ;
129    
130            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? セãƒ?ƒˆ {@value} */
131            public static final String CMD_SET              = "SET";
132            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? ゲãƒ?ƒˆ {@value} */
133            public static final String CMD_GET              = "GET";
134            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? リãƒ??ãƒ?{@value} */
135            public static final String CMD_REMOVE   = "REMOVE";
136            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? クリア {@value} */
137            public static final String CMD_CLEAR    = "CLEAR";
138            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? ?³?±?¬ {@value} */
139            public static final String CMD_SQL              = "SQL";
140            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? セãƒ?ƒˆãƒ??ブル {@value} */
141            public static final String CMD_SETTBL   = "SETTBL";
142            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? ゲãƒ?ƒˆãƒ??ブル {@value} */
143            public static final String CMD_GETTBL   = "GETTBL";
144            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? キーãƒ??ブル {@value} */
145            public static final String CMD_KEYTBL   = "KEYTBL";
146            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? セãƒ?ƒˆメモリ {@value} */
147            public static final String CMD_SETMEM   = "SETMEM";                     // 3.7.1.0 (2005/04/15)
148            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? ?³?±?¬ゲãƒ?ƒˆ {@value} */
149            public static final String CMD_SQLGET   = "SQLGET";                     // 5.1.7.0 (2010/06/01) SQLGET対å¿?
150    
151            /** command 引数に渡す事ã?出来ã‚?コマンãƒ?リスãƒ? */
152            private static final String[] COMMAND_LIST = new String[] {
153                            CMD_SET , CMD_GET , CMD_REMOVE , CMD_SQL , CMD_SETTBL , CMD_GETTBL ,
154                            CMD_KEYTBL , CMD_CLEAR , CMD_SETMEM, CMD_SQLGET };
155    
156            /** action 引数に渡す事ã?出来ã‚?アクション  アãƒ?ƒ‘ー(大æ–?­—化) {@value} */
157            public static final String ACT_UPPER            = "UPPER" ;
158            /** action 引数に渡す事ã?出来ã‚?アクション  ローワー(小文字化) {@value} */
159            public static final String ACT_LOWER            = "LOWER" ;
160            /** action 引数に渡す事ã?出来ã‚?アクション  メãƒ?‚»ージ変換 {@value} */
161            public static final String ACT_MESSAGE          = "MESSAGE" ;
162            /** action 引数に渡す事ã?出来ã‚?アクション  ãƒ??タアペンãƒ?{@value} */
163            public static final String ACT_APPEND           = "APPEND" ;
164            /** action 引数に渡す事ã?出来ã‚?アクション  オールアペンãƒ?{@value} */
165            public static final String ACT_ALL_APPEND       = "ALL_APPEND" ;                // 3.6.1.0 (2005/01/05)
166            /** action 引数に渡す事ã?出来ã‚?アクション  MAP {@value} */
167            public static final String ACT_MAP                      = "MAP" ;                               // 5.5.0.3 (2012/03/12)
168            /** action 引数に渡す事ã?出来ã‚?アクション  ALL_MAP {@value} */
169            public static final String ACT_ALL_MAP          = "ALL_MAP" ;                   // 5.5.0.3 (2012/03/12)
170            /** action 引数に渡す事ã?出来ã‚?アクション  LIST {@value} */
171            public static final String ACT_LIST                     = "LIST" ;                              // 4.3.7.5 (2009/07/13)
172            /** action 引数に渡す事ã?出来ã‚?アクション  ALL_LIST {@value} */
173            public static final String ACT_ALL_LIST         = "ALL_LIST" ;                  // 4.3.7.5 (2009/07/13)
174            /** action 引数に渡す事ã?出来ã‚?アクション  日付前方まるめ {@value} */
175            public static final String ACT_DAY_WEEK         = "DAY_WEEK" ;                  // 3.7.1.0 (2005/04/15)
176            /** action 引数に渡す事ã?出来ã‚?アクション  マã?ジ {@value} */
177            public static final String ACT_MERGE            = "MERGE" ;                             // 3.7.1.1 (2005/05/23)
178            /** action 引数に渡す事ã?出来ã‚?アクション  ファースãƒ?{@value} */
179            public static final String ACT_FIRST            = "FIRST" ;                             // 3.8.0.4 (2005/08/08)
180            /** action 引数に渡す事ã?出来ã‚?アクション  縦横回転 {@value} */
181            public static final String ACT_ROW_APPEND       = "ROW_APPEND" ;                // 3.8.9.2 (2007/07/28)
182            /** action 引数に渡す事ã?出来ã‚?アクション  æ–?­—å?置æ�?{@value} */
183            public static final String ACT_REPLACE          = "REPLACE" ;                   // 5.2.2.0 (2010/11/01)
184            /** action 引数に渡す事ã?出来ã‚?アクション  部åˆ?–‡字å? {@value} */
185            public static final String ACT_SUBSTR           = "SUBSTR" ;                    // 5.2.2.0 (2010/11/01)
186            /** action 引数に渡す事ã?出来ã‚?アクション  æ–?­—å?åˆ?‰² {@value} */
187            public static final String ACT_SPLIT            = "SPLIT" ;                             // 5.2.2.0 (2010/11/01)
188            /** action 引数に渡す事ã?出来ã‚?アクション  æœ?¤§_æœ?°�å? {@value} */
189            public static final String ACT_MAX_MIN          = "MAX_MIN" ;                                   // 5.6.4.3 (2013/05/24)
190            /** action 引数に渡す事ã?出来ã‚?アクション  ALL_æœ?¤§_æœ?°�å? {@value} */
191            public static final String ACT_ALL_MAX_MIN      = "ALL_MAX_MIN" ;                               // 5.6.4.3 (2013/05/24)
192    
193            /** action 引数に渡す事ã?出来ã‚?アクション リスãƒ? */
194            private static final String[] ACTION_LIST = new String[] {
195    //              ACT_UPPER , ACT_LOWER , ACT_MESSAGE , ACT_APPEND , ACT_ALL_APPEND , ACT_DAY_WEEK , ACT_MERGE , ACT_FIRST };
196    //              ACT_UPPER , ACT_LOWER , ACT_MESSAGE , ACT_APPEND , ACT_ALL_APPEND , ACT_LIST, ACT_ALL_LIST , ACT_DAY_WEEK , ACT_MERGE , ACT_FIRST , ACT_ROW_APPEND };
197    //              ACT_UPPER , ACT_LOWER , ACT_MESSAGE , ACT_APPEND , ACT_ALL_APPEND , ACT_LIST, ACT_ALL_LIST ,
198                    ACT_UPPER , ACT_LOWER , ACT_MESSAGE , ACT_APPEND , ACT_ALL_APPEND , ACT_MAP , ACT_ALL_MAP , ACT_LIST, ACT_ALL_LIST ,
199    //              ACT_DAY_WEEK , ACT_MERGE , ACT_FIRST , ACT_ROW_APPEND , ACT_REPLACE , ACT_SUBSTR , ACT_SPLIT };
200                    ACT_DAY_WEEK , ACT_MERGE , ACT_FIRST , ACT_ROW_APPEND , ACT_REPLACE , ACT_SUBSTR , ACT_SPLIT , ACT_MAX_MIN , ACT_ALL_MAX_MIN
201            };
202    
203            private String                  tableId         = HybsSystem.TBL_MDL_KEY;
204            private String                  command         = CMD_SET;
205            private String                  key                     = null;
206            private String                  inValue         = null;         // 3.5.4.0 (2003/11/25)
207            private String                  value           = null;
208            private String                  defaultVal      = null;
209            private String                  action          = null;
210    //      private boolean                 isNullSet       = true;         // NULL のときにセãƒ?ƒˆし直すかどã�?�‹ã€?.1.8.0 (2010/07/01) å»?­¢
211            private transient DBTableModel  table           = null;
212            // 4.0.0.0 (2007/10/10) dbid の初期値をã?"DEFAULT" から null に変更
213    //      private String                  dbid            = "DEFAULT";
214            private String                  dbid            = null;
215            private String                  scope           = "request";    // "request","session"
216            private String                  tblScope        = "session";    // 5.1.2.0 (2010/01/01) DBTableModel の取得å?のscope
217            private String                  separator       = ",";   // é ?›®区åˆ?‚Šæ–?­?
218    //      private String                  parameter       = null;                 // 5.6.4.3 (2013/05/24) 未使用なので削除
219            // 3.2.4.0 (2003/06/12) マルチデータ(è¤?•°件検索)を使用するかしなã�?�‹ã€?
220            private boolean                 useMultiRows    = false;        // 初期値:使用せず
221    
222            private boolean                 xssCheck        = HybsSystem.sysBool( "USE_XSS_CHECK" ); // 5.1.7.0 (2010/06/01) XSS対ç­?
223    
224            private String  fromVal         = null;         // 5.2.2.0 (2010/11/01)
225            private String  toVal           = null;         // 5.2.2.0 (2010/11/01)
226    
227            private boolean tmpSelectedAll  = false;        // 5.6.4.3 (2013/05/24) action="ALL_xxx"ã‚?tmpSelectedAll="true" でå†?ƒ¨処ç�?�—ますã?
228    
229            /**
230             * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
231             *
232             * @og.rev 3.1.7.0 (2003/05/02) isNullSet 属æ?ã�?true(初期値)のときã?、リクエスト情報から値を取得ã?
233             * @og.rev 3.1.7.0 (2003/05/02) scope 属æ?を設定するタイミングをã?早くするã?
234             * @og.rev 3.5.4.0 (2003/11/25) getRequestParameter( value ) メソãƒ?ƒ‰ã‚?setValue に移動ã?
235             * @og.rev 5.1.7.0 (2010/06/01) SQLGET対å¿?
236             * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属æ? å»?­¢
237             * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
238             *
239             * @return      後続å?ç�??æŒ?¤º
240             */
241            @Override
242            public int doStartTag() {
243                    // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
244                    if( useTag() ) {
245                            super.setScope( scope );                // ãƒ?ƒ•ォルãƒ?cope ã�?"request" なので、å?設定してã�?‚‹ã€?
246    
247            //              if( isNullSet ) {
248            //                      setUseValue( false );
249            //              }
250    
251                            // 5.1.7.0 (2010/06/01) SQLGET対å¿?
252                            if( CMD_SQL.equals( command ) || CMD_SET.equals( command ) || CMD_SQLGET.equals( command ) ) {
253                                    return ( EVAL_BODY_BUFFERED );          // Body を評価する
254                            }
255    //                      else {
256    //                              return ( SKIP_BODY );                           // Body を評価しなã�?
257    //                      }
258                    }
259                    return ( SKIP_BODY );                           // Body を評価しなã�?
260            }
261    
262            /**
263             * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
264             *
265             * @og.rev 3.1.1.0 (2003/03/28) ボディのå†?®¹を取得するå?ç�?‚’、CommonTagSupport で行うã€?
266             * @og.rev 3.6.0.8 (2004/11/19) エラー発生時に確実にリリースされるよã�?�« try finally 追åŠ?
267             * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
268             * @og.rev 4.0.0.0 (2005/01/31) lang â‡?ResourceManager へ変更
269             * @og.rev 5.1.7.0 (2010/06/01) SQLGET対å¿?
270             * @og.rev 5.1.7.0 (2010/06/01) XSS解除対å¿?
271             * @og.rev 5.1.9.0 (2010/08/01) TransactionTag 対応ã?上位に TransactionTag があれã?、そこからConnection をもらうã€?
272             * @og.rev 5.2.1.0 (2010/10/01) command="SET" action="APPEND"でvalueをbody部に書ã�?�Ÿ場合に動作しなã�?ƒ�グを修正
273             * @og.rev 5.3.7.0 (2011/07/01) TransactionReal の引数変更
274             * @og.rev 5.3.8.0 (2011/08/01) Transaction発生ç®?‰€でclose()
275             *
276             * @return      後続å?ç�??æŒ?¤º(SKIP_BODY)
277             */
278            @Override
279            public int doAfterBody() {
280                    if( value == null || value.length() <= 0 ) {
281                            // 5.1.7.0 (2010/06/01) XSS対ç­?
282                            useXssCheck( xssCheck );
283    
284                            value = getBodyString();
285                            // 5.2.1.0 (2010/10/01)
286                            inValue = getBodyRawString();
287    
288                            // 5.1.7.0 (2010/06/01) SQLGET対å¿?
289                            if( CMD_SQL.equals( command ) || CMD_SQLGET.equals( command ) ) {
290                                    Query query = QueryFactory.newInstance();               // 4.0.0 (2005/01/31)
291                                    Transaction tran = null;
292                                    try {
293                                            value = value.trim();
294    
295                                            // 5.1.9.0 (2010/08/01) TransactionTag 対å¿?
296    //                                      final Transaction tran ;
297                                            TransactionTag tranTag = (TransactionTag)findAncestorWithClass( this,TransactionTag.class );
298                                            if( tranTag == null ) {
299    //                                              tran = new TransactionReal( dbid,getApplicationInfo() );
300                                                    tran = new TransactionReal( getApplicationInfo() );             // 5.3.7.0 (2011/07/01) 引数変更
301                                            }
302                                            else {
303                                                    tran = tranTag.getTransaction();
304                                            }
305                                            query.setTransaction( dbid,tran );      // 5.1.9.0 (2010/08/01) TransactionTag 対å¿?
306    
307    //                                      query.setConnectionID( dbid );
308                                            query.setResourceManager( getResource() );      // 4.0.0 (2005/01/31)
309    
310                                            query.setStatement( value );
311    //                                      query.setApplicationInfo( getApplicationInfo() );       // 3.8.7.0 (2006/12/15)
312                                            query.execute();
313    
314                                            table = query.getDBTableModel();
315                                    }
316                                    finally {
317    //                                      if( query != null ) { query.close(); }
318                                            QueryFactory.close( query );
319                                            if( tran != null ) { tran.close(); }            // 5.3.8.0 (2011/08/01) Transaction発生ç®?‰€でclose()
320                                    }
321                            }
322                    }
323    
324                    return ( SKIP_BODY );
325            }
326    
327            /**
328             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
329             *
330             * @og.rev 3.1.0.1 (2003/03/26) DBTableModelの値をSET/GETできる command , action を追åŠ??
331             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
332             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
333             * @og.rev 3.1.5.0 (2003/04/22) DBTableModel が存在するときã?み実行するロジãƒ?‚¯になってã�?�Ÿバグ対応ã?
334             * @og.rev 5.1.2.0 (2010/01/01) DBTableModel の取得å?の tblScope を追åŠ??
335             * @og.rev 5.1.7.0 (2010/06/01) SQLGET対å¿?
336             * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
337             *
338             * @return      後続å?ç�??æŒ?¤º
339             */
340            @Override
341            public int doEndTag() {
342                    debugPrint();           // 4.0.0 (2005/02/28)
343                    // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
344                    if( useTag() ) {
345                            if( check( command, COMMAND_LIST ) ) {
346                                    if( CMD_SETTBL.equals( command ) ||
347                                            CMD_GETTBL.equals( command ) ||
348                                            CMD_KEYTBL.equals( command ) ) {
349            //                                      table = (DBTableModel)getSessionAttribute( tableId );
350                                                    // 5.1.2.0 (2010/01/01) DBTableModel の取得å?の tblScope を追åŠ??
351                                                    if( "session".equals( tblScope ) ) { table = (DBTableModel) getSessionAttribute( tableId ); }
352                                                    else if( "request".equals( tblScope ) ) { table = (DBTableModel) getRequestAttribute( tableId ); }
353                                                    else {
354                                                            String errMsg = "こã?スコープã?サポã?トされてã�?�¾せんã€?" + tblScope + "]";
355                                                            throw new IllegalArgumentException( errMsg );
356                                                    }
357                                    }
358                            }
359    
360                            commandExec( command );
361    
362                            // 5.1.7.0 (2010/06/01) SQLGET対å¿?
363                            if( CMD_GET.equals( command ) || CMD_GETTBL.equals( command ) || CMD_SQLGET.equals( command ) ) {
364                                    if( value != null ) { jspPrint( value ); }
365                            }
366                    }
367                    return(EVAL_PAGE);
368            }
369    
370            /**
371             * タグリブオブジェクトをリリースしますã?
372             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
373             *
374             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
375             * @og.rev 3.1.0.1 (2003/03/26) DBTableModelの値をSET/GETできる command , action を追åŠ??
376             * @og.rev 3.1.0.1 (2003/03/26) query 属æ?を削除しますã?
377             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
378             * @og.rev 3.2.4.0 (2003/06/12) マルチデータ(è¤?•°件検索)を使用するかしなã�?�‹ã€?
379             * @og.rev 3.5.4.0 (2003/11/25) inValue 変数の追åŠ?
380             * @og.rev 4.0.0.0 (2007/10/10) dbid の初期値をã?"DEFAULT" から null に変更
381             * @og.rev 5.1.2.0 (2010/01/01) DBTableModel の取得å?の tblScope を追åŠ??
382             * @og.rev 5.1.7.0 (2010/06/01) XSS解除対å¿?
383             * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属æ? å»?­¢
384             * @og.rev 5.2.2.0 (2010/11/01) fromVal , toVal 属æ? 追åŠ?
385             * @og.rev 5.6.4.3 (2013/05/24) parameter 属æ?は、未使用なので削除
386             * @og.rev 5.6.4.3 (2013/05/24) tmpSelectedAll 属æ?追åŠ??action="ALL_xxx"ã‚?tmpSelectedAll="true" に置き換えますã?
387             *
388             */
389            @Override
390            protected void release2() {
391                    super.release2();
392                    tableId         = HybsSystem.TBL_MDL_KEY;
393                    command         = CMD_SET;
394                    key                     = null;
395                    value           = null;
396                    defaultVal      = null;
397                    action          = null;
398    //              isNullSet       = true;                 // NULL のときにセãƒ?ƒˆし直すかどã�?�‹ã€?
399                    table           = null;
400    //              dbid            = "DEFAULT";
401                    dbid            = null;
402                    scope           = "request";    // "request","session"
403                    tblScope        = "session";    // 5.1.2.0 (2010/01/01) DBTableModel の取得å?のscope
404                    separator       = ",";
405    //              parameter       = null;                 // 5.6.4.3 (2013/05/24) 未使用なので削除
406                    useMultiRows = false;
407                    tmpSelectedAll  = false;                // 5.6.4.3 (2013/05/24)
408                    inValue         = null;                 // 3.5.4.0 (2003/11/25)
409                    xssCheck        = HybsSystem.sysBool( "USE_XSS_CHECK" );        // 5.1.7.0 (2010/06/01) XSS解除対å¿?
410                    fromVal         = null;         // 5.2.2.0 (2010/11/01)
411                    toVal           = null;         // 5.2.2.0 (2010/11/01)
412            }
413    
414            /**
415             * コマンドを実行しますã?
416             *
417             * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
418             * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
419             * コマンドを登録すると同時に,実行も行なã�?�¾すã?
420             *
421             * @og.rev 3.1.0.1 (2003/03/26) command に、SETTBL / GETTBL / KEYTBL / CLEAR を追åŠ??
422             * @og.rev 3.1.0.1 (2003/03/26) query 属æ?を削除しますã?
423             * @og.rev 3.1.7.0 (2003/05/02) scope 属æ?を設定するタイミングをã?早くするã?
424             * @og.rev 3.7.1.0 (2005/04/15) command に、SETMEM を追åŠ??
425             * @og.rev 5.1.7.0 (2010/06/01) SQLGET対å¿?
426             *
427             * @param       command コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?­—å?)
428             * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ValueTag.CMD_GET">コマンド定数</a>
429             */
430            private void commandExec( final String command ) {
431    
432                    if( CMD_SQL.equals( command ) ) {
433                            setSQLAttribute( table );
434                    }
435                    else if( CMD_SQLGET.equals( command ) ) {
436                            value = getSQLAttribute( table );
437                    }
438                    else if( CMD_SET.equals( command ) ) {
439                            value = nval( value, defaultVal );
440                            setAttribute( key,value,action );
441                    }
442                    else if( CMD_GET.equals( command ) ) {
443                            value = getAttribute( key,action );
444                    }
445                    else if( CMD_REMOVE.equals( command ) ) {
446                            removeAttribute( key );
447                    }
448                    else if( CMD_CLEAR.equals( command ) ) {
449                            clearAttribute( key );
450                    }
451                    else if( CMD_SETTBL.equals( command ) ) {
452                            setTableAttribute( table,key,action );
453                    }
454                    else if( CMD_GETTBL.equals( command ) ) {
455                            value = getTableAttribute( table,key,action );
456                    }
457                    else if( CMD_KEYTBL.equals( command ) ) {
458                            setKeyTableAttribute( table,key,value,action );
459                    }
460                    else if( CMD_SETMEM.equals( command ) ) {               // 3.7.1.0 (2005/04/15)
461                            value = nval( value, defaultVal );
462                            setAttribute( key,value,action );
463                            setRequestCacheData( key,(String)getObject( key ) );
464                    }
465            }
466    
467            /**
468             * アクションを実行しますã?
469             *
470             * コマンドã? action 属æ?でæŒ?®šしますã?
471             * action コマンãƒ?がã? null の場合ã?、なにも実行しませんã€?
472             *
473             * @og.rev 3.0.1.3 (2003/03/11) MESSAGE action を追åŠ?
474             * @og.rev 3.1.0.1 (2003/03/26) 引数を与えて処ç�?�™る様に変更するã€?
475             * @og.rev 3.7.1.0 (2005/04/15) action に、DAY_WEEK を追åŠ??
476             * @og.rev 3.7.1.1 (2005/05/23) action に、MERGE を追åŠ??
477             * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ージリソース統å�? getResource().getMessage â‡?getResource().getLabel )
478             * @og.rev 5.2.2.0 (2010/11/01) ACT_MERGE 時には、カンマでåˆ?§£、separator で合æ?を行いますã?
479             * @og.rev 5.2.2.0 (2010/11/01) ACT_REPLACE 処ç�?‚’新規追åŠ?�—ますã?
480             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正しますã?
481             * @og.rev 5.6.6.1 (2013/07/12) value ã�?null の場合ã?、無視しますã?
482             *
483             * @param action        コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?­—å?)
484             * @param value         旧の値
485             *
486             * @return      処ç�?¾Œã?値
487             */
488            private String actionExec( final String action,final String value ) {
489                    String rtn = value;
490    
491                    // 5.6.6.1 (2013/07/12) value ã�?null の場合ã?、無視しますã?
492    //              if( action == null ) { return rtn; }
493                    if( action == null || value == null ) { return rtn; }
494    
495                    if( ACT_UPPER.equals( action ) ) {
496                            // Localeをå?通管ç�?�™るよã�?�«なったå?合ã?String.toUpperCase( Locale locale )使用のäº?
497                            rtn = value.toUpperCase(Locale.JAPAN);
498                    }
499                    else if( ACT_LOWER.equals( action ) ) {
500                            // Localeをå?通管ç�?�™るよã�?�«なったå?合ã?String.toLowerCase( Locale locale )使用のäº?
501                            rtn = value.toLowerCase(Locale.JAPAN);
502                    }
503                    else if( ACT_MESSAGE.equals( action ) ) {
504                            // 引数をメãƒ?‚»ージリソースのキーとして、メãƒ?‚»ージ変換するã€?
505    //                      rtn = getResource().getMessage( value );
506                            rtn = getResource().getLabel( value );
507                    }
508                    else if( ACT_DAY_WEEK.equals( action ) ) {
509                            // 日付型æ–?­—å?(YYYYMMDD) の入力データをã?開始日を月曜日にセãƒ?ƒˆしますã?
510                            // SUNDAY=1 , MONDAY=2 になりますã?月曜日との差ã�?�‘、前に戻しますã?
511                            // æŒ?®š日が日曜日の場合ã?、次の日(月曜日)に進めますã?
512                            Calendar ymd = HybsSystem.getCalendar( value );
513                            int shu = ymd.get( Calendar.DAY_OF_WEEK ) - Calendar.MONDAY ;
514    
515                            if( shu != 0 ) { ymd.add( Calendar.DATE, -shu ); }
516    
517    //                      DateFormat formatter = new SimpleDateFormat( "yyyyMMdd",Locale.JAPAN );
518    //                      rtn = formatter.format( ymd.getTime() );
519                            rtn = HybsDateUtil.getDate( ymd.getTimeInMillis() , "yyyyMMdd" );               // 5.5.7.2 (2012/10/09) HybsDateUtil を利用
520                    }
521                    // 3.7.1.1 (2005/05/23)
522                    else if( ACT_MERGE.equals( action ) ) {
523                            // 引数をカンマでæ–?­—å?配å?にåˆ?§£しますã?
524                            String[] str = StringUtil.csv2Array( value );
525                            Set<String> set = new LinkedHashSet<String>();
526                            for( int i=0; i<str.length; i++ ) {
527                                    if( str[i] != null && str[i].length() > 0 ) {
528                                            set.add( str[i] );
529                                    }
530                            }
531    
532                            // åˆ?§£後ã?マã?ジ(Setで)されますã? 登録é ??、キープしますã?
533    //                      rtn = StringUtil.iterator2line( set.iterator(),"," );
534                            rtn = StringUtil.iterator2line( set.iterator(),separator );     // 5.2.2.0 (2010/11/01) separator 使用
535                    }
536                    // 5.2.2.0 (2010/11/01) ACT_REPLACE 処ç�?‚’新規追åŠ?
537                    else if( ACT_REPLACE.equals( action ) ) {
538                            // value.replaceAll( from, to ) とã�?�†æ–?³•で処ç�?�—ますã?
539                            if( value != null && fromVal != null && toVal != null ) {
540                                    rtn = value.replaceAll( fromVal, toVal );
541                            }
542                    }
543                    // 5.2.2.0 (2010/11/01) SUBSTR 処ç�?‚’新規追åŠ?
544                    else if( ACT_SUBSTR.equals( action ) ) {
545                            // value.substring( from, to ) とã�?�†æ–?³•で処ç�?�—ますã?
546                            if( value != null) {
547                                    int from = (fromVal==null||fromVal.length()==0) ? 0              : Integer.parseInt( fromVal );
548                                    int to   = (  toVal==null||  toVal.length()==0) ? value.length() : Integer.parseInt( toVal );
549    
550                                    rtn = value.substring( from, to );
551                            }
552                    }
553    
554                    return rtn;
555            }
556    
557            /**
558             * æŒ?®šã?スコープã?å†?ƒ¨キャãƒ?‚·ュæƒ??をã?キーで登録しますã?
559             *
560             * @og.rev 3.1.0.1 (2003/03/26) 引数を与えて処ç�?�™る様に変更するã€?
561             * @og.rev 3.5.4.0 (2003/11/25) APPENDアクションを有効にしますã?
562             * @og.rev 3.5.6.5 (2004/08/09) APPEND時ã?セパレータを外部æŒ?®šã?変数を使用
563             * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属æ? å»?­¢
564             * @og.rev 5.2.2.0 (2010/11/01) ACT_SPLIT 追åŠ?
565             * @og.rev 5.6.4.3 (2013/05/24) ACT_MAX_MIN アクションの追åŠ?
566             * @og.rev 5.6.6.1 (2013/07/12) value ã�?null の場合ã?、無視しますã?
567             *
568             * @param key           キー
569             * @param value         値
570             * @param action        アクション
571             */
572            private void setAttribute( final String key,final String value,final String action ) {
573                    if( key == null || key.length() == 0 ) {
574                            String errMsg = "key がセãƒ?ƒˆされてã�?�¾せんã€?
575                                                    + " command=" + command + " , action=" + action
576                                                    + " , value=" + value ;                 // 5.1.8.0 (2010/07/01) errMsg 修正
577                            throw new HybsSystemException( errMsg );
578                    }
579    
580                    // 5.1.8.0 (2010/07/01) isNullSet 属æ? å»?­¢
581    //              if( isNullSet || ( !isNullSet && ( value != null && value.length() > 0 ) ) ) {
582                    // 5.6.6.1 (2013/07/12) value ã�?null の場合ã?、無視しますã?
583                    if( value != null ) {
584                            if( ACT_APPEND.equals( action ) ) {
585                                    String[] array = getRequestParameterValues( inValue );
586                                    setObject( key, StringUtil.array2line( array,separator ) );
587                            }
588                            // 5.2.2.0 (2010/11/01) ACT_SPLIT 追åŠ?
589                            else if( ACT_SPLIT.equals( action ) )  {
590                                    String[] array = value.split( separator );
591                                    setObject( key , array[0] );            // キー自体には、å?割時ã?先é?のæ–?­—å?を設定しておくã€?
592                                    for( int i=0; i<array.length; i++ ) {
593                                            setObject( key + i , array[i] );
594                                    }
595                            }
596                            // 5.6.4.3 (2013/05/24) ACT_MAX_MIN アクションの追åŠ?
597                            else if( ACT_MAX_MIN.equals( action ) )  {
598                                    String[] array = value.split( separator );
599    
600                                    // command="SET" では、数字型としてのみ処ç�?�—ますã?
601                                    double minNum = Double.MAX_VALUE ;
602                                    double maxNum = Double.MIN_VALUE ;
603                                    double sumNum = 0d ;
604                                    int    cntSum = 0;              // 平å�?¨ˆ算に有効な件数
605    
606                                    for( int i=0; i<array.length; i++ ) {
607                                            String val = array[i].trim().replaceAll( ",","" );              // 数字型フォーマットã?カンマを取り除ã�?
608                                            if( val.isEmpty() ) { continue; }               // ゼロæ–?­—å?の場合ã?、取り直ã�?
609    
610                                            double tmp = Double.parseDouble( val );
611                                            if( minNum > tmp ) { minNum = tmp; }
612                                            if( maxNum < tmp ) { maxNum = tmp; }
613                                            sumNum += tmp ;  cntSum++ ;
614                                    }
615    
616                                    // command="SET" の場合ã?、数字型の場合ã?み使用しますã?
617                                    if( cntSum > 0 ) {
618                                            NumberFormat nf = NumberFormat.getInstance();
619                                            nf.setGroupingUsed( false );                                    // カンマ編é›?�ªã�?
620                                            nf.setMaximumFractionDigits(2);                                 // æœ?¤§小数部は?’æ¡?
621                                            nf.setMinimumFractionDigits(0);                                 // できれば、整数表示
622    
623                                            setObject( "MIN." + key,nf.format( minNum ) );          // Double.toString( minNum ) の代わりã€?
624                                            setObject( "MAX." + key,nf.format( maxNum ) );
625                                            setObject( "SUM." + key,nf.format( sumNum ) );
626                                            setObject( "AVG." + key,nf.format( sumNum/cntSum ) );
627                                    }
628                                    else {
629                                            setObject( "MIN." + key,nval( defaultVal , "" ) );
630                                            setObject( "MAX." + key,nval( defaultVal , "" ) );
631                                            setObject( "SUM." + key,nval( defaultVal , "" ) );
632                                            setObject( "AVG." + key,nval( defaultVal , "" ) );
633                                    }
634                            }
635                            else {
636                                    setObject( key, actionExec( action,value ) );
637                            }
638                    }
639                    else {
640                            setObject( key, null );                 // 5.6.6.1 (2013/07/12) value ã�?null の場å�?
641                    }
642            }
643    
644            /**
645             * æŒ?®šã?スコープã?å†?ƒ¨キャãƒ?‚·ュæƒ??をã?キーで取得しますã?
646             *
647             * @og.rev 3.1.0.1 (2003/03/26) 引数を与えて処ç�?�™る様に変更するã€?
648             *
649             * @param key           キー
650             * @param action        アクション
651             *
652             * @return      キーに対するå†?ƒ¨キャãƒ?‚·ュæƒ??
653             */
654            private String getAttribute( final String key,final String action ) {
655                    if( key == null || key.length() == 0 ) {
656                            String errMsg = "key がセãƒ?ƒˆされてã�?�¾せんã€?
657                                                    + " command=" + command + " , action=" + action;        // 5.1.8.0 (2010/07/01) errMsg 修正
658                            throw new HybsSystemException( errMsg );
659                    }
660    
661                    String rtn = defaultVal;
662                    Object obj = pageContext.findAttribute( key );
663                    if( obj != null ) { rtn = obj.toString(); }
664    
665                    return actionExec( action,rtn );
666            }
667    
668            /**
669             * æŒ?®šã?スコープã?å†?ƒ¨キャãƒ?‚·ュæƒ??を削除しますã?
670             *
671             * @og.rev 3.1.0.1 (2003/03/26) 引数を与えて処ç�?�™る様に変更するã€?
672             *
673             * @param key           キー
674             */
675            private void removeAttribute( final String key ) {
676                    if( key == null || key.length() == 0 ) {
677                            String errMsg = "key がセãƒ?ƒˆされてã�?�¾せんã€?
678                                                    + " command=" + command ;                       // 5.1.8.0 (2010/07/01) errMsg 修正
679                            throw new HybsSystemException( errMsg );
680                    }
681                    removeObject( key );
682            }
683    
684            /**
685             * セãƒ?‚·ョン/アプリケーションスコープã?キャãƒ?‚·ュæƒ??をクリアしますã?
686             *
687             * こã?クリアは、キーの前方ä¸??で、大æ–?­—小文字ã?区別をせずにクリアしますã?
688             * またã?キーã�?null の場合ã?ã€?X_" で始めるもの以外ã?すべての値をクリアしますã?
689             * またã??·??½‚エンジンå†?ƒ¨で使用してã�?‚‹キーは、ここではクリアできませんã€?
690             *
691             * @og.rev 3.1.0.1 (2003/03/26) クリアコマンドã?追åŠ??
692             * @og.rev 4.3.4.0 (2008/12/01) PageContextのスコープをクラス変数としてアクセス
693             *
694             * @param key           キー
695             */
696            private void clearAttribute( final String key ) {
697    
698                    String lowKey = null;
699                    if( key != null ) { lowKey = key.toLowerCase(Locale.JAPAN); }
700    
701                    Enumeration<String> ekeys = pageContext.getAttributeNamesInScope( PageContext.APPLICATION_SCOPE );                // 4.3.3.6 (2008/11/15) Generics警告対å¿?
702                    while ( ekeys.hasMoreElements() ) {
703    //                      String ekey = String.valueOf( ekeys.nextElement() ).toLowerCase(Locale.JAPAN);
704                            String ekey = ekeys.nextElement().toLowerCase(Locale.JAPAN);            // 4.3.3.6 (2008/11/15) Generics警告対å¿?
705                            if( ( ! ekey.startsWith( "h_") && ! ekey.startsWith( "x_") ) &&
706                                    (  lowKey == null || ekey.startsWith( key ) ) ) {
707                                            pageContext.removeAttribute( ekey, PageContext.APPLICATION_SCOPE ) ;
708                            }
709                    }
710    
711                    ekeys = pageContext.getAttributeNamesInScope( PageContext.SESSION_SCOPE );
712                    while ( ekeys.hasMoreElements() ) {
713                            String ekey = String.valueOf( ekeys.nextElement() ).toLowerCase(Locale.JAPAN);
714                            if( ( ! ekey.startsWith( "h_") && ! ekey.startsWith( "x_") ) &&
715                                    (  lowKey == null || ekey.startsWith( key ) ) ) {
716                                            pageContext.removeAttribute( ekey, PageContext.SESSION_SCOPE ) ;
717                            }
718                    }
719            }
720    
721            /**
722             * æŒ?®šã?スコープã?å†?ƒ¨キャãƒ?‚·ュæƒ??をã?æŒ?®šã?SQLæ–?‚ˆり作æ?しますã?
723             *
724             * @og.rev 3.1.0.1 (2003/03/26) 引数を与えて処ç�?�™る様に変更するã€?
725             * @og.rev 3.2.4.0 (2003/06/12) マルチデータ(è¤?•°件検索)を使用するかしなã�?�‹ã€?
726             * @og.rev 3.8.6.0 (2006/08/07) nullSet="true"(初期値)の時ã?、検索結果がゼロ件時に "" をセãƒ?ƒˆするã€?
727             * @og.rev 3.8.9.2 (2007/07/28) action="ROW_APPEND" 追åŠ?
728             * @og.rev 4.3.7.5 (2009/07/13) ACT_LIST、ACT_ALL_LIST アクションの追åŠ?
729             * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属æ? å»?­¢
730             * @og.rev 5.5.0.3 (2012/03/12) ACT_MAP アクションの追åŠ?
731             * @og.rev 5.6.4.3 (2013/05/24) tmpSelectedAll 属æ?追åŠ??action="ALL_xxx"ã‚?tmpSelectedAll="true" に置き換えますã?
732             *
733             * @param table DBTableModelオブジェクãƒ?
734             */
735            private void setSQLAttribute( final DBTableModel table ) {
736                    if( table == null ) {           // 3.8.6.0 (2006/08/07)
737                            return;
738                    }
739    
740                    int clmCnt = table.getColumnCount();
741                    int rowCnt = table.getRowCount();
742                    String sqlkey ;
743                    String sqlval ;
744                    String sufix = "";
745    
746                    if( ACT_ROW_APPEND.equals( action ) ) {
747                            for( int clm = 0; clm < clmCnt; clm++ ) {
748                                    StringBuilder buf = new StringBuilder();
749                                    for( int row=0; row<rowCnt; row++ ) {
750                                            sqlval = table.getValue( row, clm );
751                                            if( row > 0 ) { buf.append( separator ); }
752                                            buf.append( sqlval );
753                                    }
754                                    sqlkey = table.getColumnName( clm );
755                                    setObject( sqlkey , buf.toString() );
756                            }
757                    }
758                    // 4.3.7.5 (2009/07/13) ACT_LIST、ACT_ALL_LIST アクションの追åŠ?
759    //              else if( ACT_ALL_LIST.equals( action ) || ACT_LIST.equals( action ) ) {
760                    else if( ACT_LIST.equals( action ) ) {
761                            for( int clm = 0; clm < clmCnt; clm++ ) {
762                                    ArrayList<String> list = new ArrayList<String>();
763                                    for( int row=0; row<rowCnt; row++ ) {
764                                            sqlval = table.getValue( row, clm );
765                                            list.add( sqlval );
766                                    }
767                                    sqlkey = table.getColumnName( clm );
768                                    setObject( sqlkey , list );
769                            }
770                    }
771                    // 5.5.0.3 (2012/03/12) ACT_MAP アクションの追åŠ?
772    //              else if( ACT_ALL_MAP.equals( action ) || ACT_MAP.equals( action )  ) {
773                    else if( ACT_MAP.equals( action )  ) {
774                            if( clmCnt < 2 ) {
775                                    String errMsg = "action=MAP 時には、カラãƒ??ã€?¼’つ以上å¿?¦�ですã?カラãƒ?•°=[" + clmCnt + "]";
776                                    throw new IllegalArgumentException( errMsg );
777                            }
778                            for( int row=0; row<rowCnt; row++ ) {
779                                    sqlkey = table.getValue( row, 0 );                      // 0番目カラãƒ?�Œキー
780                                    sqlval = table.getValue( row, 1 );                      // 1番目カラãƒ?�Œ値
781                                    setObject( sqlkey , sqlval );
782                            }
783                    }
784                    else {
785                            // 5.1.8.0 (2010/07/01) isNullSet 属æ? å»?­¢
786    //                      if( isNullSet && rowCnt == 0 ) {
787                            if( rowCnt == 0 ) {
788                                    if( useMultiRows ) { sufix = "0" ; }
789                                    for( int clm = 0; clm < clmCnt; clm++ ) {
790                                            sqlkey = table.getColumnName( clm );
791                                            sqlval = "";
792                                            setObject( sqlkey + sufix, sqlval );
793                                    }
794                            }
795                            else {
796                                    for( int row=0; row<rowCnt; row++ ) {
797                                            if( useMultiRows ) { sufix = String.valueOf( row ) ; }
798                                            for( int clm = 0; clm < clmCnt; clm++ ) {
799                                                    sqlkey = table.getColumnName( clm );
800                                                    sqlval = table.getValue( row, clm );
801                                                    setObject( sqlkey + sufix, sqlval );
802                                            }
803                                            if( ! useMultiRows ) { break; }
804                                    }
805                            }
806                    }
807            }
808    
809            /**
810             * æŒ?®šã?SQLæ–??結果を文字å?として画面に出力しますã?
811             * 画面に出力されるé ?›®はã€?é ?›®ã�?�‘で2é ?›®以降ã?無視されますã?
812             *
813             * @og.rev 5.1.7.0 (2010/06/01) SQLGET対å¿?
814             *
815             * @param table DBTableModelオブジェクãƒ?
816             *
817             * @return SQLæ–??結果æ–?­—å?
818             */
819            private String getSQLAttribute( final DBTableModel table ) {
820                    if( table == null ) {           // 3.8.6.0 (2006/08/07)
821                            return "";
822                    }
823    
824                    int rowCnt = table.getRowCount();
825                    final String rtn;
826                    if( ACT_ROW_APPEND.equals( action ) ) {
827                            StringBuilder buf = new StringBuilder();
828                            for( int row=0; row<rowCnt; row++ ) {
829                                    if( row > 0 ) { buf.append( separator ); }
830                                    buf.append( table.getValue( row, 0 ) );
831                            }
832                            rtn = buf.toString();
833                    }
834                    else if ( rowCnt == 0 ) {
835                            rtn = "";
836                    }
837                    else {
838                            rtn = table.getValue( 0, 0 );
839                    }
840    
841                    return rtn;
842            }
843    
844            /**
845             * æŒ?®šã?スコープã?å†?ƒ¨キャãƒ?‚·ュæƒ??に、DBTableModel の選択された値を登録しますã?
846             *
847             * è¤?•°選択行が存在する場合ã?、å?頭行を処ç�?�—ますã?ただしã?action="APPEND"の
848             * 場合ã?、separator属æ?でæŒ?®šされたæ–?­—を使用してã€??結しますã?
849             *
850             * @og.rev 3.1.0.1 (2003/03/26) 新規作æ?
851             * @og.rev 3.5.6.5 (2004/08/09) ACT_APPEND 時ã?処ç�?¤‰更
852             * @og.rev 3.6.1.0 (2005/01/05) ACT_ALL_APPEND アクションの追åŠ?
853             * @og.rev 4.3.7.5 (2009/07/13) ACT_LIST、ACT_ALL_LIST アクションの追åŠ?
854             * @og.rev 5.1.6.0 (2010/05/01) ALL_APPENDで選択行がなã�??合に処ç�?�•れなã�?ƒ�グを修正
855             * @og.rev 5.5.0.3 (2012/03/12) ACT_MAP アクションの追åŠ?
856             * @og.rev 5.6.4.3 (2013/05/24) ACT_MAX_MIN,ACT_ALL_MAX_MIN アクションの追åŠ?
857             * @og.rev 5.6.4.3 (2013/05/24) tmpSelectedAll 属æ?追åŠ??action="ALL_xxx"ã‚?tmpSelectedAll="true" に置き換えますã?
858             *
859             * @param table         DBTableModelオブジェクãƒ?
860             * @param key           キー
861             * @param action        アクション
862             */
863            private void setTableAttribute( final DBTableModel table,final String key,final String action ) {
864                    if( table == null || table.getRowCount() == 0 || table.getColumnCount() == 0 ) { return ; }
865    
866                    int[] rowNo = getParameterRows();
867                    // 5.1.6.0 (2010/05/01)
868    //              if( rowNo.length == 0 ) { return ; }
869    //              if( rowNo.length == 0 && !ACT_ALL_APPEND.equals( action ) ) { return; }
870                    if( rowNo.length == 0 ) { return; }                             // 5.6.4.3 (2013/05/24) tmpSelectedAll 属æ?を追åŠ?�—たã?でã€?件判定が使えるã€?
871    
872                    final String[] keys ;
873                    if( key == null || key.length() == 0 ) {
874                            keys = table.getNames();
875                    }
876                    else {
877                            keys = new String[] { key } ;
878                    }
879    
880                    // 5.6.4.3 (2013/05/24) tmpSelectedAll で、ロジãƒ?‚¯の共通化
881                    if( ACT_APPEND.equals( action ) ) {
882                            for( int i=0; i<keys.length; i++ ) {
883                                    int clm = table.getColumnNo( keys[i] );
884                                    StringBuilder val = new StringBuilder();
885                                    val.append( table.getValue( rowNo[0],clm ) );
886                                    for( int j=1; j<rowNo.length; j++ ) {
887                                            val.append( separator );
888                                            val.append( table.getValue( rowNo[j],clm ) );
889                                    }
890                                    setObject( keys[i],val.toString() );
891                            }
892                    }
893    //              // 3.6.1.0 (2005/01/05) ACT_ALL_APPEND アクションの追åŠ?
894    //              else if( ACT_ALL_APPEND.equals( action ) ) {
895    //                      int size = table.getRowCount();
896    //                      for( int i=0; i<keys.length; i++ ) {
897    //                              int clm = table.getColumnNo( keys[i] );
898    //                              StringBuilder val = new StringBuilder();
899    //                              val.append( table.getValue( 0,clm ) );
900    //                              for( int row=1; row<size; row++ ) {                                  // コピã?注意ã?separator の append の関係で、row=1 から開å§?
901    //                                      val.append( separator );
902    //                                      val.append( table.getValue( row,clm ) );
903    //                              }
904    //                              setObject( keys[i],val.toString() );
905    //                      }
906    //              }
907                    // 5.5.0.3 (2012/03/12) ACT_MAP アクションの追åŠ?
908                    else if( ACT_MAP.equals( action ) ) {
909                            int keyClm = table.getColumnNo( key   ,false );
910                            int valClm = table.getColumnNo( value ,false );
911    
912                            if( keyClm < 0 ) { keyClm = 0; }     // キーとなるカラãƒ?�ŒæŒ?®šされてã�?�ªã�??合ã?、最初ã?カラãƒ?
913                            if( valClm < 0 ) { valClm = 1; }     // 値となるカラãƒ?�ŒæŒ?®šされてã�?�ªã�??合ã?ã€?¼’番目のカラãƒ?
914    
915                            for( int j=0; j<rowNo.length; j++ ) {
916                                    String mapkey = table.getValue( rowNo[j], keyClm );
917                                    String mapval = table.getValue( rowNo[j], valClm );
918                                    setObject( mapkey , mapval );
919                            }
920                    }
921    //              // 5.5.0.3 (2012/03/12) ACT_ALL_MAP アクションの追åŠ?
922    //              else if( ACT_ALL_MAP.equals( action ) ) {
923    //                      int keyClm = table.getColumnNo( key   ,false );
924    //                      int valClm = table.getColumnNo( value ,false );
925    //
926    //                      if( keyClm < 0 ) { keyClm = 0; }     // キーとなるカラãƒ?�ŒæŒ?®šされてã�?�ªã�??合ã?、最初ã?カラãƒ?
927    //                      if( valClm < 0 ) { valClm = 1; }     // 値となるカラãƒ?�ŒæŒ?®šされてã�?�ªã�??合ã?ã€?¼’番目のカラãƒ?
928    //
929    //                      int size = table.getRowCount();
930    ////                    for( int row=1; row<size; row++ ) {
931    //                      for( int row=0; row<size; row++ ) {                                                          // 5.6.4.3 (2013/05/24) なぜか、row=1 から始まってã�?�Ÿã€?
932    //                              String mapkey = table.getValue( row, keyClm );
933    //                              String mapval = table.getValue( row, valClm );
934    //                              setObject( mapkey , mapval );
935    //                      }
936    //              }
937                    // 4.3.7.5 (2009/07/13) ACT_LIST アクションの追åŠ?
938                    else if( ACT_LIST.equals( action ) ) {
939                            for( int i=0; i<keys.length; i++ ) {
940                                    int clm = table.getColumnNo( keys[i] );
941                                    ArrayList<String> list = new ArrayList<String>();
942                                    for( int j=0; j<rowNo.length; j++ ) {
943                                            list.add( table.getValue( rowNo[j],clm ) );
944                                    }
945                                    setObject( keys[i],list );
946                            }
947                    }
948    //              // 4.3.7.5 (2009/07/13) ACT_ALL_LIST アクションの追åŠ?
949    //              else if( ACT_ALL_LIST.equals( action ) ) {
950    //                      int size = table.getRowCount();
951    //                      for( int i=0; i<keys.length; i++ ) {
952    //                              int clm = table.getColumnNo( keys[i] );
953    //                              ArrayList<String> list = new ArrayList<String>();
954    //                              for( int row=0; row<size; row++ ) {
955    //                                      list.add( table.getValue( row,clm ) );
956    //                              }
957    //                              setObject( keys[i],list );
958    //                      }
959    //              }
960                    // 5.6.4.3 (2013/05/24) ACT_MAX_MIN アクションの追åŠ?
961                    else if( ACT_MAX_MIN.equals( action ) ) {
962                            NumberFormat nf = null;
963                            for( int i=0; i<keys.length; i++ ) {
964                                    int clm = table.getColumnNo( keys[i] );
965                                    DBColumn clmObj = table.getDBColumn( clm );
966                                    String clsNm = clmObj.getClassName();                   // NUMBER,INTEGER,DECIMAL が数字型ã€?
967    
968                                    boolean numFlag = "NUMBER,INTEGER,DECIMAL".indexOf( clsNm ) >= 0 ;           // 数字型:true
969    
970                                    String minVal = null ;
971                                    String maxVal = null ;
972                                    double minNum = Double.MAX_VALUE ;
973                                    double maxNum = Double.MIN_VALUE ;
974                                    double sumNum = 0d ;
975                                    int    cntSum = 0;              // 平å�?¨ˆ算に有効な件数
976    
977                                    for( int j=0; j<rowNo.length; j++ ) {
978                                            String val = table.getValue( rowNo[j],clm );
979                                            if( val != null && val.length() > 0 ) {
980                                                    // 数字として比è¼?
981                                                    if( numFlag ) {
982                                                            double tmp = Double.parseDouble( val );
983                                                            if( minNum > tmp ) { minNum = tmp; minVal = val; }
984                                                            if( maxNum < tmp ) { maxNum = tmp; maxVal = val; }
985                                                            sumNum += tmp ;  cntSum++ ;
986                                                    }
987                                                    else {
988                                                            // æ–?­—å?として比è¼?
989                                                            if( minVal == null || minVal.compareTo( val ) > 0 ) { minVal = val; }        // æœ??のãƒ??タは、å¿?�šセãƒ?ƒˆするã€?
990                                                            if( maxVal == null || maxVal.compareTo( val ) < 0 ) { maxVal = val; }        // æœ??のãƒ??タは、å¿?�šセãƒ?ƒˆするã€?
991                                                    }
992                                            }
993                                    }
994                                    if( minVal == null ) { minVal = nval( defaultVal , "" ); }              // æœ?¾Œまで値が決まらなければã€?"(空æ–?­—å?) にするã€?
995                                    if( maxVal == null ) { maxVal = nval( defaultVal , "" ); }              // æœ?¾Œまで値が決まらなければã€?"(空æ–?­—å?) にするã€?
996                                    setObject( "MIN." + keys[i],minVal );
997                                    setObject( "MAX." + keys[i],maxVal );
998    
999                                    // SUM と AVG は、数字型の場合ã?みセãƒ?ƒˆしますã?
1000                                    if( cntSum > 0 ) {
1001                                            if( nf == null ) {
1002                                                    nf = NumberFormat.getInstance();
1003                                                    nf.setGroupingUsed( false );                                    // カンマ編é›?�ªã�?
1004                                                    nf.setMaximumFractionDigits(2);                                 // æœ?¤§小数部は?’æ¡?
1005                                                    nf.setMinimumFractionDigits(0);                                 // できれば、整数表示
1006                                            }
1007                                            setObject( "SUM." + keys[i],nf.format( sumNum ) );              // Double.toString( sumNum ) の代わりã€?
1008                                            setObject( "AVG." + keys[i],nf.format( sumNum/cntSum ) );
1009                                    }
1010                                    else {
1011                                            setObject( "SUM." + keys[i],nval( defaultVal , "" ) );
1012                                            setObject( "AVG." + keys[i],nval( defaultVal , "" ) );
1013                                    }
1014                            }
1015                    }
1016    //              // 5.6.4.3 (2013/05/24) ACT_ALL_MAX_MIN アクションの追åŠ?
1017    //              else if( ACT_ALL_MAX_MIN.equals( action ) ) {
1018    //                      int size = table.getRowCount();
1019    //                      for( int i=0; i<keys.length; i++ ) {
1020    //                              int clm = table.getColumnNo( keys[i] );
1021    //                              DBColumn clmObj = table.getDBColumn( clm );
1022    //                              String clsNm = clmObj.getClassName();                   // NUMBER,INTEGER,DECIMAL が数字型ã€?
1023    //
1024    //                              boolean numFlag = "NUMBER,INTEGER,DECIMAL".indexOf( clsNm ) >= 0 ;           // 数字型:true
1025    //
1026    //                              String minVal = null ;
1027    //                              String maxVal = null ;
1028    //                              double minNum = Double.MAX_VALUE ;
1029    //                              double maxNum = Double.MIN_VALUE ;
1030    //                              double sumNum = 0d ;
1031    //                              int    cntSum = 0;              // 平å�?¨ˆ算に有効な件数
1032    //
1033    //                              for( int row=0; row<size; row++ ) {
1034    //                                      String val = table.getValue( row,clm );
1035    //                                      if( val != null && val.length() > 0 ) {
1036    //                                              // 数字として比è¼?
1037    //                                              if( numFlag ) {
1038    //                                                      double tmp = Double.parseDouble( val );
1039    //                                                      if( minNum > tmp ) { minNum = tmp; minVal = val; }
1040    //                                                      if( maxNum < tmp ) { maxNum = tmp; maxVal = val; }
1041    //                                                      sumNum += tmp ;  cntSum++ ;
1042    //                                              }
1043    //                                              else {
1044    //                                                      // æ–?­—å?として比è¼?
1045    //                                                      if( minVal == null || minVal.compareTo( val ) > 0 ) { minVal = val; }        // æœ??のãƒ??タは、å¿?�šセãƒ?ƒˆするã€?
1046    //                                                      if( maxVal == null || maxVal.compareTo( val ) < 0 ) { maxVal = val; }        // æœ??のãƒ??タは、å¿?�šセãƒ?ƒˆするã€?
1047    //                                              }
1048    //                                      }
1049    //                              }
1050    //                              if( minVal == null ) { minVal = nval( defaultVal , "" ); }              // æœ?¾Œまで値が決まらなければã€?"(空æ–?­—å?) にするã€?
1051    //                              if( maxVal == null ) { maxVal = nval( defaultVal , "" ); }              // æœ?¾Œまで値が決まらなければã€?"(空æ–?­—å?) にするã€?
1052    //                              setObject( "MIN." + keys[i],minVal );
1053    //                              setObject( "MAX." + keys[i],maxVal );
1054    //
1055    //                              // SUM と AVG は、数字型の場合ã?みセãƒ?ƒˆしますã?
1056    //                              if( cntSum > 0 ) {
1057    //                                      NumberFormat nf = NumberFormat.getInstance();
1058    //                                      nf.setGroupingUsed( false );                                    // カンマ編é›?�ªã�?
1059    //                                      nf.setMaximumFractionDigits(2);                                 // æœ?¤§小数部は?’æ¡?
1060    //                                      nf.setMinimumFractionDigits(0);                                 // できれば、整数表示
1061    //
1062    //                                      setObject( "SUM." + keys[i],nf.format( sumNum ) );              // Double.toString( sumNum ) の代わりã€?
1063    //                                      setObject( "AVG." + keys[i],nf.format( sumNum/cntSum ) );
1064    //                              }
1065    //                              else {
1066    //                                      setObject( "SUM." + keys[i],nval( defaultVal , "" ) );
1067    //                                      setObject( "AVG." + keys[i],nval( defaultVal , "" ) );
1068    //                              }
1069    //                      }
1070    //              }
1071                    else {
1072                            for( int i=0; i<keys.length; i++ ) {
1073                                    int clm = table.getColumnNo( keys[i] );
1074                                    setAttribute( keys[i],table.getValue( rowNo[0],clm ),action );
1075                            }
1076                    }
1077            }
1078    
1079            /**
1080             * DBTableModel の選択された値を取得しますã?
1081             *
1082             * è¤?•°選択行が存在する場合ã?、å?頭行を処ç�?�—ますã?ただしã?action="APPEND"の
1083             * 場合ã?、separator属æ?でæŒ?®šされたæ–?­—を使用してã€??結しますã?
1084             *
1085             * @og.rev 3.1.0.1 (2003/03/26) 新規作æ?
1086             * @og.rev 3.5.6.5 (2004/08/09) ACT_APPEND 時ã?処ç�?¤‰更
1087             * @og.rev 3.6.1.0 (2005/01/05) ACT_ALL_APPEND アクションの追åŠ?
1088             * @og.rev 5.1.6.0 (2010/05/01) ALL_APPENDで選択行がなã�??合に処ç�?�•れなã�?ƒ�グを修正
1089             * @og.rev 5.6.4.3 (2013/05/24) tmpSelectedAll 属æ?追åŠ??action="ALL_xxx"ã‚?tmpSelectedAll="true" に置き換えますã?
1090             *
1091             * @param       table   DBTableModelオブジェクãƒ?
1092             * @param       key             キー
1093             * @param       action  アクション
1094             *
1095             * @return      DBTableModelの選択された値
1096             */
1097            private String getTableAttribute( final DBTableModel table,final String key,final String action ) {
1098                    if( table == null ) {
1099                            String errMsg = "table がセãƒ?ƒˆされてã�?�¾せんã€?
1100                                                    + " command=" + command + " , action=" + action
1101                                                    + " , key=" + key ;                     // 5.1.8.0 (2010/07/01) errMsg 修正
1102                            throw new HybsSystemException( errMsg );
1103                    }
1104    
1105                    if( key == null || key.length() == 0 ) {
1106                            String errMsg = "key がセãƒ?ƒˆされてã�?�¾せんã€?
1107                                                    + " command=" + command + " , action=" + action;                        // 5.1.8.0 (2010/07/01) errMsg 修正
1108                            throw new HybsSystemException( errMsg );
1109                    }
1110    
1111                    int[] rowNo = getParameterRows();
1112                    // 5.1.6.0 (2010/05/01)
1113    //              if( rowNo.length == 0 ) { return "" ; }
1114    //              if( rowNo.length == 0 && !ACT_ALL_APPEND.equals( action ) ) { return "" ; }
1115                    if( rowNo.length == 0 ) { return "" ; }                         // 5.6.4.3 (2013/05/24) tmpSelectedAll 属æ?を追åŠ?�—たã?でã€?件判定が使えるã€?
1116    
1117                    // 3.6.1.0 (2005/01/05) ACT_ALL_APPEND アクションの追åŠ?
1118                    int clm = table.getColumnNo( key );
1119                    if( ACT_APPEND.equals( action ) ) {
1120                            StringBuilder val = new StringBuilder();
1121                            val.append( table.getValue( rowNo[0],clm ) );
1122                            for( int j=1; j<rowNo.length; j++ ) {
1123                                    val.append( separator );
1124                                    val.append( table.getValue( rowNo[j],clm ) );
1125                            }
1126                            return val.toString() ;
1127                    }
1128    //              else if( ACT_ALL_APPEND.equals( action ) ) {
1129    //                      StringBuilder val = new StringBuilder();
1130    //                      val.append( table.getValue( 0,clm ) );
1131    //                      int size = table.getRowCount();
1132    //                      for( int row=1; row<size; row++ ) {
1133    //                              val.append( separator );
1134    //                              val.append( table.getValue( row,clm ) );
1135    //                      }
1136    //                      return val.toString() ;
1137    //              }
1138                    else {
1139                            return actionExec( action,table.getValue( rowNo[0],clm ) );
1140                    }
1141            }
1142    
1143            /**
1144             * æŒ?®šã?スコープã?å†?ƒ¨キャãƒ?‚·ュæƒ??に、DBTableModel の選択された値を登録しますã?
1145             *
1146             * これは、key でæŒ?®šしたカラãƒ??値をキーとして、value でæŒ?®šしたカラãƒ??値ã‚?
1147             * value 値として設定しますã?
1148             * setTableAttribute がã?カラãƒ?横持ち)ãƒ??タをå?ç�?�™るã?に対してã€?
1149             * ロウ(縦持ち)ãƒ??タをå?ç�?�™ることがå?来ますã?
1150             *
1151             * @og.rev 3.1.0.1 (2003/03/26) 新規作æ?
1152             * @og.rev 3.3.3.3 (2003/08/06) key æƒ??がデータの値になってã�?�Ÿ。バグ修正ã€?
1153             * @og.rev 3.5.6.5 (2004/08/09) ACT_APPEND 時ã?処ç�?¤‰更
1154             *
1155             * @param table         DBTableModelオブジェクãƒ?
1156             * @param key           キー
1157             * @param value         値
1158             * @param action        アクション
1159             */
1160            private void setKeyTableAttribute( final DBTableModel table,final String key,final String value,final String action ) {
1161                    if( table == null ) { return ; }
1162    
1163                    if( key == null || key.length() == 0 ) {
1164                            String errMsg = "key がセãƒ?ƒˆされてã�?�¾せんã€?
1165                                                    + " command=" + command + " , action=" + action
1166                                                    + " , value=" + value ;                 // 5.1.8.0 (2010/07/01) errMsg 修正
1167                            throw new HybsSystemException( errMsg );
1168                    }
1169    
1170                    int[] rowNo = getParameterRows();
1171                    if( rowNo.length == 0 ) { return ; }
1172    
1173                    final int[] valClm ;
1174                    if( value == null || value.length() == 0 ) {
1175                            String[] vals = table.getNames();
1176                            valClm = new int[vals.length];
1177                            for( int i=0; i<vals.length; i++ ) {
1178                                    valClm[i] = table.getColumnNo( vals[i] );
1179                            }
1180                    }
1181                    else {
1182                            valClm = new int[] { table.getColumnNo( value ) } ;
1183                    }
1184    
1185            // 3.3.3.3 (2003/08/06) key æƒ??がデータの値になってã�?�Ÿ。バグ修正ã€?
1186            //      3.5.6.5 (2004/08/09) ロジãƒ?‚¯変更
1187                    for( int j=0; j<rowNo.length; j++ ) {
1188                            String rowKey = key + j ;
1189                            if( ACT_APPEND.equals( action ) ) {
1190                                    StringBuilder val = new StringBuilder();
1191                                    val.append( table.getValue( rowNo[j],valClm[0] ) );
1192                                    for( int i=1; i<valClm.length; i++ ) {
1193                                            val.append( separator );
1194                                            val.append( table.getValue( rowNo[j],valClm[i] ) );
1195                                    }
1196                                    setObject( rowKey,val.toString() );
1197                            }
1198                            else {
1199                                    setAttribute( rowKey,table.getValue( rowNo[j],valClm[0] ),action );
1200                            }
1201                    }
1202            }
1203    
1204            /**
1205             * 表示ãƒ??タの HybsSystem.ROW_SEL_KEY をå?にã€?�¸ばれた 行を処ç�??対象としますã?
1206             *
1207             * action="FIRST" 処ç�?�¨、tmpSelectedAll 属æ?追åŠ?�«伴ã�??ç�?‚’、Override しますã?
1208             *
1209             * @og.rev 3.1.0.1 (2003/03/26) 新規作æ?
1210             * @og.rev 4.0.0.0 (2005/01/31) メイン処ç�?‚’、super class で対å¿?
1211             * @og.rev 3.8.0.4 (2005/08/08) action="FIRST" 機è?の追åŠ?
1212             * @og.rev 5.6.4.3 (2013/05/24) tmpSelectedAll 属æ?の追åŠ?�«伴ã�??全件選択状態ã?ãƒ??タを作æ?しますã?
1213             *
1214             * @return      選択行ã?配å?
1215             */
1216            @Override
1217            protected int[] getParameterRows() {
1218                    final int[] rowNo ;
1219                    // 3.8.0.4 (2005/08/08) action="FIRST" 機è?の追åŠ?
1220                    if( ACT_FIRST.equals( action ) ) {
1221    //                      return new int[] { 0 };
1222                            rowNo = new int[] { 0 };
1223                    }
1224                    // 5.6.4.3 (2013/05/24) tmpSelectedAll 属æ?の追åŠ?
1225                    else if( tmpSelectedAll ) {
1226                            int rowCnt = table.getRowCount();
1227                            rowNo = new int[ rowCnt ];
1228                            for( int i=0; i<rowCnt; i++ ) {
1229                                    rowNo[i] = i;
1230                            }
1231                    }
1232                    else {
1233    //                      return super.getParameterRows() ;
1234                            rowNo = super.getParameterRows() ;
1235                    }
1236                    return rowNo ;
1237            }
1238    
1239            /**
1240             * 【TAGã€?通常は使ã�?�¾せん)結果のDBTableModelをã?sessionに登録するときã?キーを指定しまã�?
1241             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
1242             *
1243             * @og.tag
1244             * 検索結果より、DBTableModelオブジェクトを作æ?しますã?これをã?下流ã?viewタグ等に
1245             * 渡すå?合にã€??常は、session を利用しますã?そã?場合ã?登録キーですã?
1246             * query タグを同時に実行して、結果を求めるå?合ã?同ä¸?ƒ¡モリに配置される為ã€?
1247             * こã? tableId 属æ?を利用して、メモリ空間をåˆ?�‘ますã?
1248             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
1249             *
1250             * @param       id sessionに登録する時ã? ID
1251             */
1252            public void setTableId( final String id ) {
1253                    tableId   = nval( getRequestParameter( id ),tableId );
1254            }
1255    
1256            /**
1257             * 【TAG】コマンãƒ?SET,GET,REMOVE,SQL,SETTBL,GETTBL,KEYTBL,CLEAR,SETMEM)をセãƒ?ƒˆしまã�?初期値:SET)ã€?
1258             *
1259             * @og.tag
1260             * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
1261             * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
1262             * 何も設定されなã�??またã?、null の場合ã?ã€?SET" がå?期å?にセãƒ?ƒˆされますã?
1263             *
1264             * CLEAR 以外ã?すべての処ç�??、指定ã?スコープã?å†?ƒ¨キャãƒ?‚·ュæƒ??に対して行われますã?
1265             * <table border="1" frame="box" rules="all" >
1266             *   <caption>コマンãƒ?ä¸?¦§</caption>
1267             *   <tr><th>command </th><th>名称          </th><th>機è?</th></tr>
1268             *   <tr><td>SET    </td><td>セãƒ?ƒˆ         </td><td>æŒ?®šã?キーに、value値を登録しますã?</td></tr>
1269             *   <tr><td>GET    </td><td>ゲãƒ?ƒˆ         </td><td>æŒ?®šã?キーの値を画面に出力しますã?</td></tr>
1270             *   <tr><td>REMOVE </td><td>リãƒ??ãƒ?      </td><td>æŒ?®šã?キーの値を削除しますã?</td></tr>
1271             *   <tr><td>CLEAR  </td><td>クリア         </td><td>セãƒ?‚·ョン/アプリケーションスコープã?キャãƒ?‚·ュæƒ??をクリアしますã?</td></tr>
1272             *   <tr><td>SQL    </td><td>?³?±?¬         </td><td>æŒ?®šã?SQLæ–??実行結果をã?カラãƒ?��をキーとして設定しますã?</td></tr>
1273             *   <tr><td>SQLGET </td><td>?³?±?¬ゲãƒ?ƒˆ   </td><td>æŒ?®šã?SQLæ–??実行結果をã?画面に出力しますã?(2é ?›®以降ã?無視されまã�?ã€?/td></tr>
1274             *   <tr><td>SETTBL </td><td>セãƒ?ƒˆãƒ??ブル </td><td>æŒ?®šã?キーに、DBTableModel の選択されたカラãƒ?横持ち)の値を登録しますã?</td></tr>
1275             *   <tr><td>GETTBL </td><td>ゲãƒ?ƒˆãƒ??ブル </td><td>æŒ?®šã?キーに、DBTableModel の選択されたカラãƒ?横持ち)の値を画面に出力しますã?</td></tr>
1276             *   <tr><td>KEYTBL </td><td>キーãƒ??ブル   </td><td>æŒ?®šã?キーに、DBTableModel の選択されたロウ(縦持ち)の値を登録しますã?</td></tr>
1277             *   <tr><td>SETMEM </td><td>セãƒ?ƒˆメモリ   </td><td>æŒ?®šã?キーに、value値をå?部キャãƒ?‚·ュに登録しますã?</td></tr>
1278             * </table>
1279             *
1280             * @og.rev 3.1.0.1 (2003/03/26) æŒ?®šã?コマンド以外ã?、エラーとするように変更ã€?
1281             * @og.rev 3.5.6.2 (2004/07/05) æ–?­—å?の連結にStringBuilderを使用しますã?
1282             *
1283             * @param       cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?­—å?)
1284             * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ValueTag.CMD_GET">コマンド定数</a>
1285             */
1286            public void setCommand( final String cmd ) {
1287                    command = nval( getRequestParameter( cmd ),command ).toUpperCase(Locale.JAPAN);
1288    
1289                    if( !check( command, COMMAND_LIST ) ) {
1290                            StringBuilder errMsg = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
1291                            errMsg.append( "æŒ?®šã?コマンドã?実行できません。コマンドエラー" );
1292                            errMsg.append( HybsSystem.CR );
1293                            errMsg.append( "command=[" ).append( command ).append( "] " );
1294                            errMsg.append( HybsSystem.CR );
1295                            for( int i=0; i<COMMAND_LIST.length; i++ ) {
1296                                    errMsg.append( " | " );
1297                                    errMsg.append( COMMAND_LIST[i] );
1298                            }
1299                            errMsg.append( " | " );
1300                            throw new HybsSystemException( errMsg.toString() );
1301                    }
1302            }
1303    
1304            /**
1305             * 【TAG】アクション(UPPER,LOWER,MESSAGE,APPEND,ALL_APPEND,MAP,ALL_MAP,LIST,ALL_LIST,DAY_WEEK,MERGE,FIRST,ROW_APPEND,REPLACE,SUBSTR,SPLIT,MAX_MIN,ALL_MAX_MIN)をセãƒ?ƒˆしますã?
1306             *
1307             * @og.tag
1308             * アクションは,HTMLから(get/post)æŒ?®šされますã?で,ACT_xxx で設定される
1309             * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
1310             * 無æŒ?®šã?場合ã?、なにもしませんã€?
1311             *
1312             * <table border="1" frame="box" rules="all" >
1313             *   <caption>アクション ä¸?¦§</caption>
1314             *   <tr><th>action     </th><th>名称               </th><th>機è?</th></tr>
1315             *   <tr><td>UPPER      </td><td>アãƒ?ƒ‘ー(大æ–?­—化) </td><td>value値を大æ–?­—に変換しますã?</td></tr>
1316             *   <tr><td>LOWER      </td><td>ローワー(小文字化) </td><td>value値を小文字に変換しますã?</td></tr>
1317             *   <tr><td>MESSAGE    </td><td>メãƒ?‚»ージ変換     </td><td>引数をメãƒ?‚»ージリソースのキーとして、メãƒ?‚»ージ変換しますã?</td></tr>
1318             *   <tr><td>APPEND     </td><td>ãƒ??タアペンãƒ?    </td><td>è¤?•°リクエストやè¤?•°選択時に値をé?結しますã?</td></tr>
1319             *   <tr><td>ALL_APPEND </td><td>オールアペンãƒ?    </td><td>SETTBL,GETTBL 時に、チェãƒ?‚¯行以外ã?全行を対象に値の連結を行いますã?</td></tr>
1320             *   <tr><td>MAP        </td><td>マッãƒ?            </td><td>検索結果やTableModelのkeyをキーに、value?—を値にä¸?‹¬設定しますã?</td></tr>
1321             *   <tr><td>ALL_MAP    </td><td>オールマッãƒ?      </td><td>全行を対象に検索結果やTableModelのkeyをキーに、value?—を値にä¸?‹¬設定しますã?</td></tr>
1322             *   <tr><td>LIST       </td><td>リスãƒ?            </td><td>è¤?•°リクエストやè¤?•°選択時に値をArrayListにセãƒ?ƒˆしますã?</td></tr>
1323             *   <tr><td>ALL_LIST   </td><td>オールリスãƒ?      </td><td>全行を対象に値をArrayListにセãƒ?ƒˆしますã?</td></tr>
1324             *   <tr><td>DAY_WEEK   </td><td>日付前方まるめ     </td><td>日付型æ–?­—å?(YYYYMMDD) の値をã?月曜日に変換しますã?</td></tr>
1325             *   <tr><td>           </td><td>                   </td><td>æŒ?®š日が日曜日の場合ã?、次の日(月曜日)に進めますã?そã?他ã?ã€??始めに戻しますã?</td></tr>
1326             *   <tr><td>MERGE      </td><td>ãƒ??タのマã?ジ     </td><td>重è¤?‚’除くã?ユニã?クな値に、ã?ージしますã?(カンマでåˆ?§£、separatorで合æ?)</td></tr>
1327             *   <tr><td>FIRST      </td><td>?‘件目取å¾?        </td><td>æœ??の?‘件目を強制çš?�«選択状態にして、å?ç�?‚’行いますã?</td></tr>
1328             *   <tr><td>ROW_APPEND </td><td>検索結果の連çµ?    </td><td>検索結果の行方向ã?ãƒ??タをé?結しますã?</td></tr>
1329             *   <tr><td>REPLACE    </td><td>æ–?­—å?置æ�?        </td><td>value の値から、指定された正規表現(from)の部åˆ?–‡字å?をã?部åˆ?–‡字å?(to)で置換しますã?</td></tr>
1330             *   <tr><td>SUBSTR     </td><td>部åˆ?–‡字å?         </td><td>value の値から、指定された(from)から(to)の部åˆ?–‡字å?を作æ?しますã?</td></tr>
1331             *   <tr><td>SPLIT      </td><td>æ–?­—å?åˆ?‰²         </td><td>value の値から、指定されたseparatorでåˆ?‰²したæ–?­—å?を作æ?しますã?(key+0?žé?番)</td></tr>
1332             *   <tr><td>MAX_MIN    </td><td>æœ?¤§_æœ?°�å?        </td><td>選択行ã?keyのカラãƒ??æœ?°�å?,æœ?¤§値をã?MIN.キー、MAX.キー の値にセãƒ?ƒˆしますã?※??/td></tr>
1333             *   <tr><td>ALL_MAX_MIN</td><td>æœ?¤§_æœ?°�å?        </td><td>全行を対象にkeyのカラãƒ??æœ?°�å?,æœ?¤§値をã?MIN.キー、MAX.キー の値にセãƒ?ƒˆしますã?※??/td></tr>
1334             * </table>
1335             *
1336             * ※??MAX_MIN,ALL_MAX_MIN  につã�?�¦は、DBTableModelのカラãƒ??CLS_NAMEがã?NUMBER,INTEGER,DECIMAL の場合ã?、数字型(double)に変換して比è¼?�—ますã?
1337             *    数字型(double)の場合だけã?合è¨?SUM.キー) と 平å�?AVG.キー)計算も同時に行いますã?
1338             *    それ以外ã?場合ã?、文字å?比è¼?‚’行いますã???ommand="SETTBL" のみ??
1339             *    command="SET" の場合ã?、数字型(double)として、value の値をã?separator でåˆ?§£したã�?�ˆで、最大、最小ã?合計ã?平å�?を計算しã€?
1340             *    それぞれをã?MIN.キー、MAX.キー、SUM.キー、AVG.キー 変数にセãƒ?ƒˆしますã?
1341             *    数字に変換できなかったå?合ã?、エラーになりますã?
1342             *    null は、無視さã‚?平å�?‚’求めるå?合ã?母数としても無è¦?、すべてã�?nulll の場合ã?、ゼロæ–?­—å?("")になりますã?
1343             *    ゼロæ–?­—å?("") の場合に、defaultVal 属æ?が設定されてã�?‚‹と、defaultVal が設定されますã?
1344             *
1345             * @og.rev 3.1.0.1 (2003/03/26) æŒ?®šã?アクション以外ã?、エラーとするように変更ã€?
1346             * @og.rev 3.5.6.2 (2004/07/05) æ–?­—å?の連結にStringBuilderを使用しますã?
1347             * @og.rev 4.3.7.5 (2009/07/13) ACT_LIST、ACT_ALL_LIST アクションの追åŠ?JavaDocのみ修正)
1348             * @og.rev 5.6.4.3 (2013/05/24) ACTMAX_MIN アクションの追åŠ?JavaDocのみ修正)
1349             * @og.rev 5.6.4.3 (2013/05/24) tmpSelectedAll 属æ?追åŠ?�«ともなã�?¿®正。action="ALL_xxx"は、tmpSelectedAll=true にしますã?
1350             *
1351             * @param       act アクション(public static final 宣è¨?�•れてã�?‚‹æ–?­—å?)
1352             * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ValueTag.ACT_APPEND">アクション定数</a>
1353             */
1354            public void setAction( final String act ) {
1355                    action = nval( getRequestParameter( act ),action );
1356    
1357                    if( action != null && !check( action, ACTION_LIST ) ) {
1358                            StringBuilder errMsg = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
1359                            errMsg.append( "æŒ?®šã?アクションは実行できません。アクションエラー" );
1360                            errMsg.append( HybsSystem.CR );
1361                            errMsg.append( "action=[" ).append( action ).append( "] " );
1362                            errMsg.append( HybsSystem.CR );
1363                            for( int i=0; i<ACTION_LIST.length; i++ ) {
1364                                    errMsg.append( " | " );
1365                                    errMsg.append( ACTION_LIST[i] );
1366                            }
1367                            errMsg.append( " | " );
1368                            throw new HybsSystemException( errMsg.toString() );
1369                    }
1370    
1371                    // 5.6.4.3 (2013/05/24) tmpSelectedAll 属æ?追åŠ??action="ALL_xxx"ã‚?tmpSelectedAll="true" に置き換えますã?
1372                    if( action != null && action.startsWith( "ALL_" ) ) {
1373                            action      = action.substring( 4 );    // "ALL_" の?”文字å?削除
1374                            tmpSelectedAll = true;
1375                    }
1376            }
1377    
1378            /**
1379             * 【TAG】リクエスト情報 に登録するキーをセãƒ?ƒˆしますã?
1380             *
1381             * @og.tag リクエスト情報 に登録するキーをセãƒ?ƒˆしますã?
1382             *
1383             * @og.rev 3.0.1.3 (2003/03/11) キーã‚?toUpperCase してã�?‚‹ç®?‰€を削除
1384             *
1385             * @param       key1 リクエスト情報に登録するキー
1386             */
1387            public void setKey( final String key1 ) {
1388                    key = nval( getRequestParameter( key1 ),key ) ;
1389                    if( key == null ) {
1390                            String errMsg = "key がセãƒ?ƒˆされてã�?�¾せんã€?
1391                                                    + " command=" + command + " , action=" + action;                        // 5.1.8.0 (2010/07/01) errMsg 修正
1392                            throw new HybsSystemException( errMsg );
1393                    }
1394            }
1395    
1396            /**
1397             * 【TAG】リクエスト情報 に登録する値をセãƒ?ƒˆしますã?
1398             *
1399             * @og.tag リクエスト情報 に登録する値をセãƒ?ƒˆしますã?
1400             *
1401             * @og.rev 3.1.7.0 (2003/05/02) isNullSet 属æ?ã�?true(初期値)のときã?、リクエスト情報から値を取得ã?
1402             * @og.rev 3.5.4.0 (2003/11/25) getRequestParameter( value ) メソãƒ?ƒ‰ã‚?setValue に移動ã?
1403             * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属æ? å»?­¢
1404             *
1405             * @param       val     リクエスト情報に登録する値
1406             */
1407            public void setValue( final String val ) {
1408                    inValue = val;          // 3.5.4.0 (2003/11/25) 入力変数もã?キープしておくã€?
1409                    value = getRequestParameter( inValue );
1410            }
1411    
1412            /**
1413             * 【TAG】value値がNULLの場合に、この初期値を設定しますã?
1414             *
1415             * @og.tag
1416             * value値がNULLの場合に、この初期値をセãƒ?ƒˆしますã?
1417             *
1418             * @param       val 初期値
1419             */
1420            public void setDefaultVal( final String val ) {
1421                    defaultVal = getRequestParameter( val );
1422            }
1423    
1424            /**
1425             * 【å»?­¢】value ã�?NULL の時に、設定するかどã�?�‹[true/false]を指定しまã�?初期値:true)ã€?
1426             *
1427             * @og.tag
1428             * true の場合ã?, null のときでもセãƒ?ƒˆしますã?
1429             * false の場合ã?, null のときã?、既存ã?値を置き換えませんã€?
1430             * 初期値は、null のときでもセãƒ?ƒˆするですã? ("true")
1431             *
1432             * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属æ? å»?­¢
1433             *
1434             * @param   flag NULL の時に設定するかどã�?�‹ [true:設定すã‚?それ以å¤?設定しない]
1435             * @deprecated 5.1.8.0 (2010/07/01) å»?­¢ã€?
1436             */
1437            @Deprecated public void setNullSet( final String flag ) {
1438    //              isNullSet = nval( getRequestParameter( flag ),isNullSet );
1439            }
1440    
1441            /**
1442             * 【TAGã€?通常は使ã�?�¾せん)Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
1443             *
1444             * @og.tag Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
1445             *
1446             * @param       id ãƒ??タベã?ス接続ID
1447             */
1448            public void setDbid( final String id ) {
1449                    dbid = nval( getRequestParameter( id ),dbid );
1450            }
1451    
1452            /**
1453             * 【TAG】キャãƒ?‚·ュする場合ã?スコーãƒ?request,session)を指定しまã�?初期値:request)ã€?
1454             *
1455             * @og.tag
1456             * "request","session" が指定できますã?
1457             * 初期値はã€?"request" ですã?
1458             *
1459             * @param       scp     スコーãƒ?
1460             */
1461            @Override
1462            public void setScope( final String scp ) {
1463                    scope = nval( getRequestParameter( scp ),scope );
1464            }
1465    
1466            /**
1467             * 【TAG】DBTableModel から取得するå?合ã?スコーãƒ?request,session)を指定しまã�?初期値:session)ã€?
1468             *
1469             * @og.tag
1470             * "request","session" が指定できますã?
1471             * 初期値はã€?"session" ですã?
1472             *
1473             * @og.rev 5.1.2.0 (2010/01/01) DBTableModel の取得å?のscope
1474             *
1475             * @param       scp     スコーãƒ?
1476             */
1477            public void setTblScope( final String scp ) {
1478                    tblScope = nval( getRequestParameter( scp ),tblScope );
1479            }
1480    
1481            /**
1482             * 【å»?­¢ã€?未使用)アクションの処ç�?ƒ‘ラメータを設定しますã?
1483             *
1484             * @og.tag アクションの処ç�?ƒ‘ラメータを設定しますã?
1485             *
1486             * @og.rev 3.1.0.1 (2003/03/26) パラメーター属æ?の追åŠ??
1487             * @og.rev 5.6.4.3 (2013/05/24) 未使用なので削除
1488             *
1489             * @param       param パラメータ
1490             */
1491    //      public void setParameter( final String param ) {
1492    //              parameter = nval( getRequestParameter( param ),parameter );
1493    //      }
1494    
1495            /**
1496             * 【TAG】ã?ルチデータ(è¤?•°件検索)を使用するかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
1497             *
1498             * @og.tag
1499             * command="SQL" の場合に、è¤?•°行検索した結果をã?キー?‹行番号 とã�?�†キーを作æ?して
1500             * 値を設定するかどã�?�‹を指定しますã?
1501             * false の場合ã?、従来どおり、検索カラãƒ?��がキーになりますã?
1502             * 初期値は、false ですã?
1503             *
1504             * @og.rev 3.2.4.0 (2003/06/12) 新規追åŠ?
1505             *
1506             * @param   flag è¤?•°件検索 [true:使用する/false:使用しない]
1507             */
1508            public void setUseMultiRows( final String flag ) {
1509                    useMultiRows = nval( getRequestParameter( flag ),useMultiRows );
1510            }
1511    
1512            /**
1513             * 【TAG】各種アクションのæ–?­—å?をé?çµ?åˆ?§£するé ?›®区åˆ?‚Šæ–?­—をセãƒ?ƒˆしまã�?初期値:",")ã€?
1514             *
1515             * @og.tag
1516             * å�?¨®アクションに基づくå?ç�?�«おいて、文字å?の区åˆ?‚Šを指定するã?に使用しますã?
1517             * APPEND、ROW_APPEND 時には、文字å?の連結に使用しますã?
1518             * MERGE の場合ã?、カンマでåˆ?§£後ã?こã?セパレータでMERGE処ç�?‚’行い、å?びã€??結しますã?
1519             * 初期値はã€?," に設定されてã�?�¾すã?
1520             *
1521             * @og.rev 3.5.6.5 (2004/08/09) 新規追åŠ?
1522             *
1523             * @param   sepa é ?›®区åˆ?‚Šæ–?­?初期値:",")
1524             */
1525            public void setSeparator( final String sepa ) {
1526                    separator = nval( getRequestParameter( sepa ),separator );
1527            }
1528    
1529            /**
1530             * 【TAG】リクエスト情報の HTMLTag開å§?終äº?–‡å­?&gt;&lt;) 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?
1531             *              (初期値:USE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])ã€?
1532             *
1533             * @og.tag
1534             * クロスサイトスクリプティング(XSS)対策ã?ä¸?’°としてless/greater than signにつã�?�¦のチェãƒ?‚¯を行いますã?
1535             * (&gt;&lt;) が含まれてã�?�Ÿエラーにする(true)?�かノã?チェãƒ?‚¯ã�?false)を指定しますã?
1536             * (初期値:シスãƒ?ƒ 定数のUSE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])ã€?
1537             *
1538             * @og.rev 5.1.7.0 (2010/06/01) 新規追åŠ?
1539             *
1540             * @param       flag    XSSチェãƒ?‚¯ [true:する/false:しない]
1541             * @see         org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK
1542             */
1543            public void setXssCheck( final String flag ) {
1544                    xssCheck = nval( getRequestParameter( flag ),xssCheck );
1545            }
1546    
1547            /**
1548             * 【TAG】部åˆ?–‡字å?置換ã? 置換え前ã?部åˆ?–‡字å?(from)を指定しますã?
1549             *
1550             * @og.tag
1551             * value の値から、指定された正規表現(from)にä¸??する、このæ–?­—å?のå�?ƒ¨åˆ?–‡字å?に対しã?
1552             * æŒ?®šされたæ–?­—å?(to)で置換しますã?
1553             * value.replaceAll( from, to ) とã�?�†æ–?³•で処ç�?�—ますã?
1554             *
1555             * @og.rev 5.2.2.0 (2010/11/01) 新規追åŠ?
1556             *
1557             * @param       from    置換え前ã?部åˆ?–‡字å?
1558             * @see         #setToVal(String)
1559             */
1560            public void setFromVal( final String from ) {
1561                    fromVal = nval( getRequestParameter( from ),fromVal );
1562            }
1563    
1564            /**
1565             * 【TAG】部åˆ?–‡字å?置換ã? 置換え後ã?部åˆ?–‡字å?(to)を指定しますã?
1566             *
1567             * @og.tag
1568             * value の値から、指定された正規表現(from)にä¸??する、このæ–?­—å?のå�?ƒ¨åˆ?–‡字å?に対しã?
1569             * æŒ?®šされたæ–?­—å?(to)で置換しますã?
1570             * value.replaceAll( from, to ) とã�?�†æ–?³•で処ç�?�—ますã?
1571             *
1572             * @og.rev 5.2.2.0 (2010/11/01) 新規追åŠ?
1573             *
1574             * @param       to      置換え後ã?部åˆ?–‡字å?
1575             * @see         #setFromVal(String)
1576             */
1577            public void setToVal( final String to ) {
1578                    toVal = nval( getRequestParameter( to ),toVal );
1579            }
1580    
1581            /**
1582             * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
1583             *
1584             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
1585             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
1586             *
1587             * @param       strm    ObjectOutputStreamオブジェクãƒ?
1588             * @throws IOException  入出力エラーが発生したå?å�?
1589             */
1590            private void writeObject( final ObjectOutputStream strm ) throws IOException {
1591                    strm.defaultWriteObject();
1592            }
1593    
1594            /**
1595             * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
1596             *
1597             * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
1598             *
1599             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
1600             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
1601             *
1602             * @param       strm    ObjectInputStreamオブジェクãƒ?
1603             * @see #release2()
1604             * @throws IOException  シリアライズに関する入出力エラーが発生したå?å�?
1605             * @throws ClassNotFoundException       クラスを見つけることができなかったå?å�?
1606             */
1607            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
1608                    strm.defaultReadObject();
1609            }
1610    
1611            /**
1612             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
1613             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
1614             *
1615             * @og.rev 4.3.4.0 (2008/12/01) PageContextのスコープをクラス変数としてアクセス
1616             * @og.rev 5.1.8.0 (2010/07/01) isNullSet 属æ? å»?­¢
1617             *
1618             * @return こã?クラスのæ–?­—å?表現
1619             */
1620            @Override
1621            public String toString() {
1622                    String rtnStr = org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
1623                                    .println( "VERSION"                     ,VERSION                )
1624                                    .println( "tableId"                     ,tableId                )
1625                                    .println( "command"                     ,command                )
1626                                    .println( "key"                         ,key                    )
1627                                    .println( "inValue"                     ,inValue                )
1628                                    .println( "value"                       ,value                  )
1629                                    .println( "defaultVal"          ,defaultVal             )
1630                                    .println( "action"                      ,action                 )
1631    //                              .println( "isNullSet"           ,isNullSet              )
1632                                    .println( "dbid"                        ,dbid                   )
1633                                    .println( "scope"                       ,scope                  )
1634                                    .println( "separator"           ,separator              )
1635    //                              .println( "parameter"           ,parameter              )               5.6.4.3 (2013/05/24) 未使用なので削除
1636                                    .println( "useMultiRows"        ,useMultiRows   )
1637                                    .println( "COMMAND_LIST"        ,COMMAND_LIST   )
1638                                    .println( "ACTION_LIST"         ,ACTION_LIST    )
1639                                    .println( "Other..."    ,getAttributes().getAttribute() )
1640                                    .fixForm().toString() ;
1641    
1642                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
1643                    rtn.append( HybsSystem.CR ).append( "====================================" ).append( HybsSystem.CR );
1644    
1645                    rtn.append( "APPLICATION_SCOPE:" ).append( HybsSystem.CR );
1646    
1647                    Enumeration<String> ekeys = pageContext.getAttributeNamesInScope( PageContext.APPLICATION_SCOPE );        // 4.3.3.6 (2008/11/15) Generics警告対å¿?
1648                    while ( ekeys.hasMoreElements() ) {
1649    //                      String ekey = String.valueOf( ekeys.nextElement() );
1650                            String ekey = ekeys.nextElement();              // 4.3.3.6 (2008/11/15) Generics警告対å¿?
1651                            rtn.append( "  key=[" ).append( ekey ).append( "] " );
1652                            rtn.append( "value=[" ).append( pageContext.getAttribute( ekey,PageContext.APPLICATION_SCOPE ) ).append( "]" );
1653                            rtn.append( HybsSystem.CR );
1654                    }
1655    
1656                    rtn.append( "SESSION_SCOPE:" ).append( HybsSystem.CR );
1657                    ekeys = pageContext.getAttributeNamesInScope( PageContext.SESSION_SCOPE );
1658                    while ( ekeys.hasMoreElements() ) {
1659                            String ekey = String.valueOf( ekeys.nextElement() );
1660                            rtn.append( "  key=[" ).append( ekey ).append( "] " );
1661                            rtn.append( "value=[" ).append( pageContext.getAttribute( ekey,PageContext.SESSION_SCOPE ) ).append( "]" );
1662                            rtn.append( HybsSystem.CR );
1663                    }
1664    
1665                    rtn.append( "REQUEST_SCOPE:" ).append( HybsSystem.CR );
1666                    ekeys = pageContext.getAttributeNamesInScope( PageContext.REQUEST_SCOPE );
1667                    while ( ekeys.hasMoreElements() ) {
1668                            String ekey = String.valueOf( ekeys.nextElement() );
1669                            rtn.append( "  key=[" ).append( ekey ).append( "] " );
1670                            rtn.append( "value=[" ).append( pageContext.getAttribute( ekey,PageContext.REQUEST_SCOPE ) ).append( "]" );
1671                            rtn.append( HybsSystem.CR );
1672                    }
1673    
1674                    rtn.append( "PAGE_SCOPE:" ).append( HybsSystem.CR );
1675                    ekeys = pageContext.getAttributeNamesInScope( PageContext.PAGE_SCOPE );
1676                    while ( ekeys.hasMoreElements() ) {
1677                            String ekey = String.valueOf( ekeys.nextElement() );
1678                            rtn.append( "  key=[" ).append( ekey ).append( "] " );
1679                            rtn.append( "value=[" ).append( pageContext.getAttribute( ekey,PageContext.PAGE_SCOPE ) ).append( "]" );
1680                            rtn.append( HybsSystem.CR );
1681                    }
1682                    rtn.append( "====================================" ).append( HybsSystem.CR );
1683    
1684                    return rtnStr + rtn.toString();
1685            }
1686    }