001    /*
002     * Copyright (c) 2009 The openGion Project.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013     * either express or implied. See the License for the specific language
014     * governing permissions and limitations under the License.
015     */
016    package org.opengion.hayabusa.taglib;
017    
018    import org.opengion.hayabusa.resource.UserInfo;
019    import org.opengion.hayabusa.db.DBTableModel;
020    import org.opengion.hayabusa.db.Query;
021    import org.opengion.hayabusa.db.QueryFactory;
022    import org.opengion.fukurou.db.Transaction;
023    import org.opengion.fukurou.db.TransactionReal;
024    
025    import static org.opengion.fukurou.util.StringUtil.nval ;
026    
027    import java.util.Locale ;
028    import java.io.ObjectOutputStream;
029    import java.io.ObjectInputStream;
030    import java.io.IOException;
031    
032    /**
033     * ユーザーæƒ??を管ç?—ã¦ã?‚‹ã‚¿ã‚°ã§ã™ã?
034     *
035     * 設定ã—ãŸå?ã¯ã€{@USER.XXXX} å½¢å¼ã§ å–り出ã™ã“ã¨ãŒã§ãã¾ã™ã?
036     * ã¾ãŸã?command 属æ?㧠直接画é¢ã«å€¤ã‚’書ãå?ã™ã“ã¨ã‚‚å¯èƒ½ã§ã™ã?
037     *
038     * 以下ã?値㯠UserInfo オブジェクトã?é ?›®ã‹ã‚‰å–å¾—ã—ã¾ã™ã?
039     * ・USER.JNAME     ユーザー日本語åç§°
040     * ・USER.ID        ユーザー?©?¤
041     * ・USER.IDNO      USER.ID ãŒï¼•Byte以上ã?時ã?ã¿å…ˆé??‘文字を除ã?Ÿãƒ¦ãƒ¼ã‚¶ãƒ¼?©?¤
042     * ・USER.INFO      ユーザーæƒ??(ユーザーID?šæ—¥æœ¬èªžåç§°)
043     * ・USER.LANG      è¨?ª?
044     * ・USER.ROLES     ロール
045     * ・USER.IPADDRESS IPアドレス
046     * ・USER.LOGINTIME ログイン時刻
047     *
048     * 以下ã?値ã¯ã‚らã‹ã˜ã‚ã?å‹•çš„ã«ä½œæ?ã•れã¾ã™ã?
049     * ・USER.YMD       ?˜byte ã®ä»Šæ—¥ã®ã‚·ã‚¹ãƒ?ƒ æ—¥ä»?
050     * ・USER.YMDH    ?‘ï¼”byte ã®ä»Šæ—¥ã®ã‚·ã‚¹ãƒ?ƒ æ—¥æ™?
051     *
052     * ãれ以外ã?ã€å¤–部より設定ã•れãŸå€¤ã§ã™ã?
053     *
054     * ※ ã“ã?ã‚¿ã‚°ã¯ã€Transaction ã‚¿ã‚°ã®å¯¾è±¡ã§ã™ã?
055     *
056     * @og.formSample
057     * â—å½¢å¼ï¼?lt;og:userInfo command="[…]" key="[…]" value="[…]" />
058     * â—body?šã‚ã‚?
059     *
060     * â—Tag定義??
061     *   <og:userInfo
062     *       command            ã€TAG】コマンãƒ?SET,GET,NVLEGT,REMOVE,SQL)ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:SET)
063     *       key                ã€TAG】UserInfo ã«ç™»éŒ²ã™ã‚‹ã‚­ãƒ¼ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?予ç´?ª?JNAME,ID,PASSWD,IDNO,INFO,LANG,ROLE,IPADDRESS,LOGINTIME)
064     *       value              ã€TAG】UserInfo ã«ç™»éŒ²ã™ã‚‹å€¤ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?
065     *       dbid               ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)Queryオブジェクトを作æ?ã™ã‚‹æ™‚ã?DB接続IDを指定ã—ã¾ã?
066     *       save               ã€TAG】UserInfo ã«ç™»éŒ²ã—ãŸå€¤ã‚’永続化ã™ã‚‹ã‹ã‚’æŒ?®šã—ã¾ã?
067     *       caseKey            ã€TAG】ã“ã®ã‚¿ã‚°è‡ªä½“を利用ã™ã‚‹ã‹ã©ã?‹ã®æ¡ä»¶ã‚­ãƒ¼ã‚’指定ã—ã¾ã?åˆæœŸå€¤:null)
068     *       caseVal            ã€TAG】ã“ã®ã‚¿ã‚°è‡ªä½“を利用ã™ã‚‹ã‹ã©ã?‹ã®æ¡ä»¶å€¤ã‚’指定ã—ã¾ã?åˆæœŸå€¤:null)
069     *       debug              ã€TAG】デãƒãƒƒã‚°æƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
070     *   >   ... Body ...
071     *   </og:userInfo>
072     *
073     * â—使用ä¾?
074     *      <og:userInfo
075     *         command       = "コマンãƒ?SET,GET,NVLEGT,REMOVE,SQL)ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:SET)ã€?quot;
076     *         key           = "UserInfo ã«ç™»éŒ²ã™ã‚‹ã‚­ãƒ¼ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?予ç´?ª?JNAME,ID,PASSWD,IDNO,INFO,LANG,ROLE,IPADDRESS,LOGINTIME)ã€?quot;
077     *         value         = "UserInfo ã«ç™»éŒ²ã™ã‚‹å€¤ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?"
078     *         dbid          = "(通常ã¯ä½¿ã?¾ã›ã‚“)Queryオブジェクトを作æ?ã™ã‚‹æ™‚ã?DB接続IDを指定ã—ã¾ã™ã?"
079     *      >
080     *
081     * @og.group ãã?他部å“?
082     *
083     * @version  4.0
084     * @author   Kazuhiko Hasegawa
085     * @since    JDK5.0,
086     */
087    public class UserInfoTag extends CommonTagSupport {
088            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
089            private static final String VERSION = "5.3.8.0 (2011/08/01)" ;
090    
091            private static final long serialVersionUID = 538020110801L ;
092    
093            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? ã‚»ãƒ?ƒˆ {@value} */
094            public static final String CMD_SET   = "SET" ;
095            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? ゲãƒ?ƒˆ {@value} */
096            public static final String CMD_GET   = "GET" ;
097            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? ゲãƒ?ƒˆ {@value} */
098            public static final String CMD_REMOVE   = "REMOVE" ;
099            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? ゲãƒ?ƒˆ {@value} */
100            public static final String CMD_SQL   = "SQL" ;
101            // 3.5.5.3 (2004/04/09) 値ã?null ã®å ´åˆã?ã€?"(ゼロæ–?­—å?)ã‚’è¿”ã™NVLGETを採用
102            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? NVLゲãƒ?ƒˆ {@value} */
103            public static final String CMD_NVLGET   = "NVLGET" ;
104    
105            // 3.5.5.3 (2004/04/09) 値ã?null ã®å ´åˆã?ã€?"(ゼロæ–?­—å?)ã‚’è¿”ã™NVLGETを採用
106            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ?リスãƒ? */
107            private static final String[] COMMAND_LIST = new String[] {
108                    CMD_SET , CMD_GET , CMD_NVLGET , CMD_REMOVE , CMD_SQL };
109    
110            // 3.5.6.0 (2004/06/18) ã™ã¹ã¦ã‚?protected ã‹ã‚‰ private ã«å¤‰æ›´ã—ã¾ã™ã?
111            private String                  command         = CMD_SET;
112            private String                  key                     = null;
113            private String                  value           = null;
114    //      private boolean                 isNullSet       = true;                 // NULL ã®ã¨ãã«ã‚»ãƒ?ƒˆã—ç›´ã™ã‹ã©ã?‹ã€?
115            private transient DBTableModel  table           = null;
116            // 4.0.0.0 (2007/10/10) dbid ã®åˆæœŸå€¤ã‚’ã?"DEFAULT" ã‹ã‚‰ null ã«å¤‰æ›´
117    //      private String                  dbid            = "DEFAULT";
118            private String                  dbid            = null;
119            private String                  sql                     = null;
120            // 4.3.4.0 (2008/12/01) save属æ?追åŠ?
121            private boolean                 save            = false;
122    
123            /**
124             * Taglibã®é–‹å§‹ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doStartTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
125             *
126             * @og.rev 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
127             *
128             * @return      後続å?ç??æŒ?¤º
129             */
130            @Override
131            public int doStartTag() {
132                    // 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
133    //              if( CMD_SQL.equals( command ) ) {
134                    if( useTag() && CMD_SQL.equals( command ) ) {
135                            return( EVAL_BODY_BUFFERED );           // Body を評価ã™ã‚‹
136                    }
137                    else {
138                            return( SKIP_BODY ); // Body を評価ã—ãªã?
139                    }
140            }
141    
142            /**
143             * Taglibã®ã‚¿ã‚°æœ¬ä½“を処ç?™ã‚?doAfterBody() ã‚?オーãƒã?ライドã—ã¾ã™ã?
144             *
145             * @og.rev 3.1.1.0 (2003/03/28) ボディã®å†?®¹ã‚’å–å¾—ã™ã‚‹å?ç?‚’ã€CommonTagSupport ã§è¡Œã†ã€?
146             * @og.rev 3.6.0.8 (2004/11/19) エラー発生時ã«ç¢ºå®Ÿã«ãƒªãƒªãƒ¼ã‚¹ã•れるよã?« try finally 追åŠ?
147             * @og.rev 3.8.6.3 (2006/11/30) SQL æ–??å‰å¾Œã?スペã?スをå–り除ãã¾ã™ã?
148             * @og.rev 3.8.7.0 (2006/12/15) アクセスログå–å¾—ã?為,ApplicationInfoオブジェクトを設å®?
149             * @og.rev 4.0.0.0 (2005/01/31) lang â‡?ResourceManager ã¸å¤‰æ›´
150             * @og.rev 5.1.9.0 (2010/08/01) TransactionTag 対応ã?上ä½ã« TransactionTag ãŒã‚れã?ã€ãã“ã‹ã‚‰Connection をもらã†ã€?
151             * @og.rev 5.3.7.0 (2011/07/01) TransactionReal ã®å¼•数変更
152             * @og.rev 5.3.8.0 (2011/08/01) Transaction発生ç®?‰€ã§close()
153             *
154             * @return      後続å?ç??æŒ?¤º(SKIP_BODY)
155             */
156            @Override
157            public int doAfterBody() {
158                    sql = getBodyString().trim();
159    
160                    Query query = QueryFactory.newInstance();               // 4.0.0 (2005/01/31)
161                    Transaction tran = null;
162                    try {
163                            // 5.1.9.0 (2010/08/01) TransactionTag 対�
164    //                      final Transaction tran ;
165                            TransactionTag tranTag = (TransactionTag)findAncestorWithClass( this,TransactionTag.class );
166                            if( tranTag == null ) {
167    //                              tran = new TransactionReal( dbid,getApplicationInfo() );
168                                    tran = new TransactionReal( getApplicationInfo() );             // 5.3.7.0 (2011/07/01) 引数変更
169                            }
170                            else {
171                                    tran = tranTag.getTransaction();
172                            }
173                            query.setTransaction( dbid,tran );      // 5.1.9.0 (2010/08/01) TransactionTag 対�
174    
175    //                      query.setConnectionID( dbid );
176                            query.setResourceManager( getResource() );      // 4.0.0 (2005/01/31)
177    
178                            query.setStatement( sql );
179    //                      query.setApplicationInfo( getApplicationInfo() );       // 3.8.7.0 (2006/12/15)
180                            query.execute();
181    
182                            table = query.getDBTableModel();
183                    }
184                    finally {
185    //                      if( query != null ) { query.close(); }
186                            QueryFactory.close( query );
187                            if( tran != null ) { tran.close(); }            // 5.3.8.0 (2011/08/01) Transaction発生ç®?‰€ã§close()
188                    }
189                    return(SKIP_BODY);
190            }
191    
192            /**
193             * Taglibã®çµ‚äº?‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doEndTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
194             *
195             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()ã§å‘¼ã¶ã€?
196             * @og.rev 3.5.5.3 (2004/04/09) 値ã?null ã®å ´åˆã?ã€?"(ゼロæ–?­—å?)ã‚’è¿”ã™ãƒ•ラグを採用
197             * @og.rev 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
198             *
199             * @return      後続å?ç??æŒ?¤º
200             */
201            @Override
202            public int doEndTag() {
203                    debugPrint();           // 4.0.0 (2005/02/28)
204                    // 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
205    //              if( check( command, COMMAND_LIST ) ) {
206                    if( useTag() && check( command, COMMAND_LIST ) ) {
207                            commandExec( command );
208    
209                            if( CMD_GET.equals( command ) ) {
210                                    jspPrint( value );
211                            }
212                            else if( CMD_NVLGET.equals( command ) ) {       // 3.5.5.3 (2004/04/09)
213                                    jspPrint( nval(value,"") );
214                            }
215                    }
216    
217                    return(EVAL_PAGE);
218            }
219    
220            /**
221             * タグリブオブジェクトをリリースã—ã¾ã™ã?
222             * キャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨­å®šã‚’行ã„ã¾ã™ã?
223             *
224             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿ã‚°ã® release() メソãƒ?ƒ‰ã‚’ã?追åŠ?
225             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()ã§å‘¼ã¶ã€?
226             * @og.rev 4.0.0.0 (2007/10/10) dbid ã®åˆæœŸå€¤ã‚’ã?"DEFAULT" ã‹ã‚‰ null ã«å¤‰æ›´
227             * @og.rev 4.3.4.0 (2008/12/01) save属æ?対å¿?
228             *
229             */
230            @Override
231            protected void release2() {
232                    super.release2();
233                    command         = CMD_SET;
234                    key                     = null;
235                    value           = null;
236    //              isNullSet       = true;                 // NULL ã®ã¨ãã«ã‚»ãƒ?ƒˆã—ç›´ã™ã‹ã©ã?‹ã€?
237                    table           = null;
238    //              dbid            = "DEFAULT";
239                    dbid            = null;
240                    sql                     = null;
241                    save            = false;
242            }
243    
244            /**
245             * コマンドを実行ã—ã¾ã™ã?
246             *
247             * コマンドã?,HTMLã‹ã‚‰(get/post)æŒ?®šã•れã¾ã™ã?ã§,setCommand()メソãƒ?ƒ‰ã§
248             * 登録ã—ã¾ã™ã?
249             * コマンドを登録ã™ã‚‹ã¨åŒæ™‚ã«,実行も行ãªã?¾ã™ã?
250             *
251             * @og.rev 3.5.5.3 (2004/04/09) 値ã?null ã®å ´åˆã?ã€?"(ゼロæ–?­—å?)ã‚’è¿”ã™ãƒ•ラグを採用
252             *
253             * @param   command コマンãƒ?public static final 宣è¨?•れã¦ã?‚‹æ–?­—å?)
254             * @see         <a href="{&#064;docRoot}/constant-values.html#org.opengion.hayabusa.taglib.UserInfoTag.CMD_SET">コマンド定数</a>
255             */
256            protected void commandExec( final String command ) {
257                    if( CMD_SQL.equals( command ) ) { setSQLAttribute() ; }
258                    else if( CMD_SET.equals(    command ) ) { setAttribute() ;    }
259                    else if( CMD_GET.equals(    command ) ) { getAttribute() ;    }
260                    else if( CMD_NVLGET.equals( command ) ) { getAttribute() ;    } // 3.5.5.3 (2004/04/09)
261                    else if( CMD_REMOVE.equals( command ) ) { removeAttribute() ; }
262            }
263    
264            /**
265             * UserInfoã®æ–?­—å?を登録ã—ã¾ã™ã?
266             *
267             * @og.rev 4.3.4.0 (2008/12/01) GE20(ユーザー定数)ã¸ç™»éŒ²ã™ã‚‹ã‹ã?フラグを追åŠ?
268             *
269             */
270            private void setAttribute() {
271    //              if( isNullSet ) {
272    //                      setUserInfo( key, value );
273                            setUserInfo( key, value, save );
274    //              }
275            }
276    
277            /**
278             * UserInfoã®æ–?­—å?を作æ?ã—ã¾ã™ã?
279             *
280             */
281            private void getAttribute() {
282                    value = getUserInfo( key );
283            }
284    
285            /**
286             * UserInfoã®æ–?­—å?を削除ã—ã¾ã™ã?
287             *
288             * @og.rev 5.3.6.0 (2011/06/01) GE20(ユーザー定数)ã‹ã‚‰å‰Šé™¤ã™ã‚‹ã‹ã?フラグを追åŠ?
289             */
290            private void removeAttribute() {
291                    UserInfo userInfo = getUser();
292    //              userInfo.removeAttribute( key );
293                    userInfo.removeAttribute( key, save );
294            }
295    
296            /**
297             * UserInfoã®æ–?­—å?を指定ã?SQLæ–?‚ˆã‚Šä½œæ?ã—ã¾ã™ã?
298             *
299             * @og.rev 4.3.4.0 (2008/12/01) GE20(ユーザー定数)ã¸ç™»éŒ²ã™ã‚‹ã‹ã?フラグを追åŠ?
300             *
301             */
302            private void setSQLAttribute() {
303                    if( table == null || table.getRowCount() == 0 ) { return ; }
304    
305                    int row    = 0;
306                    int clmCnt = table.getColumnCount();
307                    for( int clm=0; clm<clmCnt; clm++ ) {
308                            String clmkey = table.getColumnName( clm );
309                            String clmval = table.getValue( row,clm );
310    //                      setUserInfo( clmkey,clmval );
311                            setUserInfo( clmkey, clmval, save );
312                    }
313            }
314    
315            /**
316             * ã€TAG】コマンãƒ?SET,GET,NVLEGT,REMOVE,SQL)ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:SET)ã€?
317             *
318             * @og.tag
319             * コマンドã?,HTMLã‹ã‚‰(get/post)æŒ?®šã•れã¾ã™ã?ã§,CMD_xxx ã§è¨­å®šã•れる
320             * フィールド定数値ã®ã?šã‚Œã‹ã‚’ã?æŒ?®šã§ãã¾ã™ã?
321             * 何も設定ã•れãªã??ã¾ãŸã?ã€null ã®å ´åˆã?ã€?SET" ãŒå?期å?ã«ã‚»ãƒ?ƒˆã•れã¾ã™ã?
322             * SQL ã®å ´åˆã?æ¤œç´¢çµæžœã®æˆ»ã‚Šå?ãŒè¤?•°å­˜åœ¨ã™ã‚‹å ´åˆã?ã€æœ€åˆã??‘ä»¶ç›®ã®ã¿ä½¿ç”¨ã—ã¾ã™ã?
323             *
324             * @param       cmd コマンãƒ?public static final 宣è¨?•れã¦ã?‚‹æ–?­—å?)
325             * @see         <a href="{&#064;docRoot}/constant-values.html#org.opengion.hayabusa.taglib.UserInfoTag.CMD_SET">コマンド定数</a>
326             */
327            public void setCommand( final String cmd ) {
328                    String cmd2 = getRequestParameter( cmd );
329                    if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
330            }
331    
332            /**
333             * ã€TAG】UserInfo ã«ç™»éŒ²ã™ã‚‹ã‚­ãƒ¼ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?予ç´?ª?JNAME,ID,PASSWD,IDNO,INFO,LANG,ROLE,IPADDRESS,LOGINTIME)ã€?
334             *
335             * @og.tag UserInfo ã«ç™»éŒ²ã™ã‚‹ã‚­ãƒ¼ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
336             *
337             * @param       inkey UserInfo ã«ç™»éŒ²ã™ã‚‹ã‚­ãƒ¼
338             */
339            public void setKey( final String inkey ) {
340                    key = getRequestParameter( inkey ).toUpperCase(Locale.JAPAN);
341                    if( key.startsWith( "USER." ) ) {
342                            key = key.substring( 5 );
343                    }
344            }
345    
346            /**
347             * ã€TAG】UserInfo ã«ç™»éŒ²ã™ã‚‹å€¤ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
348             *
349             * @og.tag UserInfo ã«ç™»éŒ²ã™ã‚‹å€¤ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
350             *
351             * @param       val     UserInfoã«ç™»éŒ²ã™ã‚‹å€¤
352             */
353            public void setValue( final String val ) {
354                    value = getRequestParameter( val );
355            }
356    
357            /**
358             * ã€TAG】UserInfo ã«ç™»éŒ²ã—ãŸå€¤ã‚’永続化ã™ã‚‹ã‹ã‚’æŒ?®šã—ã¾ã™ã?
359             *
360             * @og.tag
361             * UserInfo ã«ç™»éŒ²ã—ãŸå€¤ã‚’永続化ã™ã‚‹ã‹ã‚’æŒ?®šã—ã¾ã™ã?
362             * trueãŒæŒ‡å®šã•れãŸå ´åˆã?UserInfoã«è¨­å®šã•れãŸå€¤ã¯ã€GE20(ユーザー定数)ã«ä¿å­˜ã•れã?
363             * UserInfoãŒå?作æ?ã•れるタイミングã§è‡ªå‹•çš„ã«å¾©å…?•れã¾ã™ã?
364             * ã“ã“ã§ã€ç™»éŒ²ã•れãŸå?ã¯ã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å…¨ã¦ã®ãƒ­ãƒ¼ãƒ«ã«å¯¾ã—ã¦æœ‰åйã¨ãªã‚Šã¾ã™ã?
365             * åˆæœŸå€¤ã¯ã€false(永続化ã—ãªã?ã§ã™ã?
366             *
367             * @param       sv      登録値を永続化ã™ã‚‹ã?
368             */
369            public void setSave( final String sv ) {
370                    save = nval( getRequestParameter( sv ),save );
371            }
372    
373    //      /**
374    //       * ã€å»?­¢ã€‘Query を実行ã—ã¦ã€value ã«å€¤ã‚’ã‚»ãƒ?ƒˆã™ã‚‹ã‹ã©ã?‹ã‚’指定ã—ã¾ã™ã?
375    //       *
376    //       * @og.tag
377    //       * åˆæœŸå€¤ã¯ã€å®Ÿè¡Œã—ãªã?("false")
378    //       *
379    //       * @og.rev 3.1.0.1 (2003/03/26) query 属æ?ã‚’éžæŽ¨å¥¨å±žæ?ã¨ã—ã¾ã™ã?å†?ƒ¨ã§ã¯ä½¿ç”¨ã—ã¾ã›ã‚“ã€?
380    //       *
381    //       * @param   flag Query を実行ã™ã‚?("true")?実行ã—ãªã?ãれ以å¤?
382    //       * @deprecated
383    //       */
384    //      @Deprecated public void setQuery( final String flag ) {
385    //              // ã“ã“ã§ã¯å‡¦ç?‚’行ã„ã¾ã›ã‚“ã€?
386    //      }
387    
388    //      /**
389    //       * ã€å»?­¢ã€‘value ã?NULL ã®æ™‚ã«ã€è¨­å®šã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:true)ã€?
390    //       *
391    //       * @og.tag
392    //       * true ã®å ´åˆã?, null ã®ã¨ãã§ã‚‚ã‚»ãƒ?ƒˆã—ã¾ã™ã?
393    //       * false ã®å ´åˆã?, null ã®ã¨ãã?ã€æ—¢å­˜ã?å€¤ã‚’ç½®ãæ›ãˆã¾ã›ã‚“ã€?
394    //       * åˆæœŸå€¤ã¯ã€null ã®ã¨ãã§ã‚‚ã‚»ãƒ?ƒˆã™ã‚‹ã§ã™ã? ("true")
395    //       *
396    //       * @param   flag NULL ã®æ™‚ã«ã€è¨­å®šã™ã‚?("true")?設定ã—ãªã?ãれ以å¤?
397    //       * @deprecated
398    //       */
399    //      @Deprecated public void setNullSet( final String flag ) {
400    //              isNullSet = nval( getRequestParameter( flag ),isNullSet );
401    //      }
402    
403            /**
404             * ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)Queryオブジェクトを作æ?ã™ã‚‹æ™‚ã?DB接続IDを指定ã—ã¾ã™ã?
405             *
406             * @og.tag Queryオブジェクトを作æ?ã™ã‚‹æ™‚ã?DB接続IDを指定ã—ã¾ã™ã?
407             *
408             * @param       id ãƒ??タベã?ス接続ID
409             */
410            public void setDbid( final String id ) {
411                    dbid = nval( getRequestParameter( id ),dbid );
412            }
413    
414            /**
415             * シリアライズ用ã®ã‚«ã‚¹ã‚¿ãƒ?‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºæ›¸ãè¾¼ã¿ãƒ¡ã‚½ãƒ?ƒ‰
416             *
417             * @og.rev 4.0.0.0 (2006/09/31) æ–°è¦è¿½åŠ?
418             * @serialData
419             *
420             * @param       strm    ObjectOutputStreamオブジェク�
421             */
422            private void writeObject( final ObjectOutputStream strm ) throws IOException {
423                    strm.defaultWriteObject();
424            }
425    
426            /**
427             * シリアライズ用ã®ã‚«ã‚¹ã‚¿ãƒ?‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºèª­ã¿è¾¼ã¿ãƒ¡ã‚½ãƒ?ƒ‰
428             *
429             * ã“ã“ã§ã¯ã€transient 宣è¨?•れãŸå†?ƒ¨å¤‰æ•°ã®å†??åˆæœŸåŒ–ãŒå¿?¦ãªãƒ•ィールドã?ã¿è¨­å®šã—ã¾ã™ã?
430             *
431             * @og.rev 4.0.0.0 (2006/09/31) æ–°è¦è¿½åŠ?
432             * @serialData
433             *
434             * @param       strm    ObjectInputStreamオブジェク�
435             * @see #release2()
436             */
437            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
438                    strm.defaultReadObject();
439            }
440    
441            /**
442             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
443             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
444             *
445             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
446             */
447            @Override
448            public String toString() {
449                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
450                                    .println( "VERSION"                     ,VERSION        )
451                                    .println( "command"                     ,command        )
452                                    .println( "key"                         ,key            )
453                                    .println( "value"                       ,value          )
454    //                              .println( "isNullSet"           ,isNullSet      )
455                                    .println( "dbid"                        ,dbid           )
456                                    .println( "sql"                         ,sql            )
457                                    .println( "save"                        ,save           )
458                                    .println( "COMMAND_LIST"        ,COMMAND_LIST   )
459                                    .println( "Other..."    ,getAttributes().getAttribute() )
460                                    .fixForm().toString() ;
461            }
462    }