001    /*
002     * Copyright (c) 2009 The openGion Project.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013     * either express or implied. See the License for the specific language
014     * governing permissions and limitations under the License.
015     */
016    package org.opengion.hayabusa.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.HybsSystemException;
020    import org.opengion.hayabusa.db.DBTableModel;
021    import org.opengion.hayabusa.db.DBTableModelUtil;
022    import org.opengion.hayabusa.db.DBColumn;
023    
024    import static org.opengion.fukurou.util.StringUtil.nval ;
025    
026    import java.util.prefs.Preferences;
027    import java.util.prefs.BackingStoreException;
028    import java.util.Locale ;
029    
030    /**
031     * æŒ?®šã? Windowsレジストリにアクセスするためのタグでã�?特殊な環å¢?¨­定がå¿?¦�でã�?ã€?
032     *
033     * 検索した結果は、DBTableModel にセãƒ?ƒˆされるためã?
034     * JDBCQuery と同様に、viewタグで表示させることが可能ですã?
035     *
036     * 注意1ï¼?
037     *   通常であれば、以下ã??’つのルートパス以下ã?レジストリにアクセスできますã?
038     *     HKEY_CURRENT_USER/Software/JavaSoft/Prefs
039     *     HKEY_LOCAL_MACHINE/Software/JavaSoft/Prefs
040     *
041     * 注意2ï¼?
042     *   ルートパスを強制çš?�«変更する為、java.util.prefs.WindowsPreferenceクラスã‚?
043     *   直接書き換えた、ogPreferences.jar を用意してã�?�¾すã?
044     *   これをã?tomcat/endorsed フォルãƒ?�«コピã?して使ã�?�¾すã?
045     *   そã?場合ã?ã€?
046     *     HKEY_CURRENT_USER/Software/Muratec
047     *     HKEY_LOCAL_MACHINE/Software/Muratec
048     *   以下ã??’つのルートパス以下ã?レジストリにアクセスできますã?
049     *
050     * @og.formSample
051     * ●形式ï¼?lt;og:regQuery baseKey="?¥?¥?¥" ?¥?¥?¥ />
052     * ●body?šなã�?
053     *
054     * ●Tag定義??
055     *   <og:regQuery
056     *       baseKey          ○ã?TAG】検索ベã?スキーを設定しまã�?HKEY_CURRENT_USER/Software/XXXX の XXXX を指定しまã�?(å¿??)ã€?
057     *       hkeyType           【TAG】HKEY_CURRENT_USER(="user") を読ã‚?�‹、HKEY_LOCAL_MACHINE(="system") を読ã‚?�‹を指定しまã�?初期値:user)ã€?
058     *       key                【TAG】検索キーを設定しまã�?
059     *       value              【TAG】検索バリューを設定しまã�?
060     *       maxRowCount        【TAG】レジストリのæœ?¤§検索件数をセãƒ?ƒˆしまã�?初期値:0[無制限])
061     *       orderBy            【TAG】検索した結果を表示する表示é ?‚’ファイル属æ?名でæŒ?®šしまã�?
062     *       maxLevel           【TAG】検索時ã?æœ?¤§展開レベル(0は無制é™?を指定しまã�?初期値:1)
063     *       like               【TAG】キーおよびバリューにつã�?�¦,like 検索を行うかどã�?�‹[true/false]を指定しまã�?初期値:false)
064     *       tableId            【TAGã€?通常は使ã�?�¾せん)結果をDBTableModelに書き込んで、sessionに登録するときã?キーを指定しまã�?
065     *       command            【TAG】コマンãƒ?NEW,RENEW)をセãƒ?ƒˆしまã�?初期値:NEW)
066     *       displayMsg         【TAG】検索結果を画面上に表示するメãƒ?‚»ージIDを指定しまã�?初期値:MSG0033[ 件検索しました])
067     *       notfoundMsg        【TAG】検索結果がゼロ件の場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0077[対象ãƒ??タはありませんでした])
068     *       overflowMsg        【TAG】オーバã?フロー時に画面上に表示するメãƒ?‚»ージIDを指定しまã�?初期値:MSG0007)
069     *       scope              【TAG】キャãƒ?‚·ュする場合ã?スコープ[request/page/session/applicaton]を指定しまã�?初期値:session)
070     *       mainTrans          【TAGã€?通常使ã�?�¾せん)タグで処ç�?�•れる処ç�?�Œメインとなるトランザクション処ç�?�‹どã�?�‹を指定しまã�?初期値:false)
071     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
072     *   />
073     *
074     * ●使用ä¾?
075     *    <og:regQuery  debug="false"
076     *        command     = "NEW"                       NEW,RENEW が使用できますã?
077     *        baseKey     = "/"                         検索時ã?ベã?スとなるレジストリキーå�?
078     *        key         = "driver"                    検索したã�?ƒ¬ジストリキーå�?初期値は全件)
079     *        value       = "Ne"                        検索したã�?ƒ¬ジストリ値(初期値は全件)
080     *        maxRowCount = "0"                         æœ?¤§検索件数(0で無制é™?
081     *        maxLevel    = "0"                         æœ?¤§検索階層レベル(0で無制é™?
082     *        like        = "true"                      true で曖昧検索/false はä¸??検索
083     *    />
084     *
085     * like は、key / value を設定したときã?み有効ですã?またã?key / value を両方同時に設定したå?合ã?ã€?
086     * like 属æ?は両方に同時に適用されますã?
087     *
088     * @og.rev 3.1.0.0 (2003/03/20) Windowsレジストリにアクセスできる、RegistryQueryTag.java を新規に作æ?ã€?
089     * @og.group そã?他å?åŠ?
090     *
091     * @version  4.0
092     * @author       Kazuhiko Hasegawa
093     * @since    JDK5.0,
094     */
095    public class RegistryQueryTag extends CommonTagSupport {
096            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
097            private static final String VERSION = "5.6.8.2 (2013/09/20)" ;
098    
099            private static final long serialVersionUID = 568220130920L ;
100    
101            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 新è¦?{@value} */
102            public static final String CMD_NEW       = "NEW" ;
103            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 再検索 {@value} */
104            public static final String CMD_RENEW = "RENEW" ;
105            /** command 引数に渡す事ã?出来ã‚?コマンãƒ?リスãƒ? */
106            private static final String[] COMMAND_LIST = new String[] { CMD_NEW , CMD_RENEW };
107    
108    //      private static final String PREF_ROOT = "HKEY_CURRENT_USER/Software/Muratec" ;
109    //      private static final String PREF_ROOT = "/Software/" ;
110    
111            private static final String[] COLUMN_KEY = new String[] { "LEBEL","KEY","VALUE","CHILD","PATH" };
112    
113            private String  tableId                 = HybsSystem.TBL_MDL_KEY;                       // session?·?°
114            private String  command                 = CMD_NEW;                                                      // ?º?�ンï¾?¾?
115            private String  baseKey                 = null;                                                         // 検索ベã?ス?·?°
116            private String  key                             = null;                                                         // 検索キー
117            private String  value                   = null;                                                         // 検索バリュー
118            private int     maxRowCount             = 0;                                                            // æœ?¤§検索数(0は無制é™?
119            private String  orderBy                 = null;                                                         // ソートé?目
120    //      private String  displayMsg              = "MSG0033";                                            // ã€?»¶検索しましたã€?
121            private String  displayMsg              = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
122            private String  overflowMsg             = "MSG0007";                                            // 検索結果がã?制限行数をè¶?�ˆましたので、残りはカãƒ?ƒˆされましたã€?
123            private String  notfoundMsg             = "MSG0077";                                            // 対象ãƒ??タはありませんでしたã€?
124            private int             maxLevel                = 1;                                                            // 下位層展開æœ?¤§レベル(0は無制é™?
125            private boolean like                    = false;                                                        // あいまã�?¤œ索?Œラク??
126    
127            private int             executeCount    = 0;                                                            // 検索/実行件数
128            private boolean isMainTrans             = true;                                                         // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
129            private int             hkeyType                = 0;                                                            // 5.6.8.2 (2013/09/20) 0:HKEY_CURRENT_USER(="user") , 1:HKEY_LOCAL_MACHINE(="system")
130    
131            // 5.6.8.2 (2013/09/20) エラーメãƒ?‚»ージ等に使ã�?–‡字å?
132            private static final String[] HKEY_TYPE = new String[] { "HKEY_CURRENT_USER","HKEY_LOCAL_MACHINE" } ;
133    
134            /**
135             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
136             *
137             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
138             * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェãƒ?‚¯を行いますã?
139             * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ージリソース統å�? getResource().getMessage > getResource().getLabel )
140             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??、DBTableModelが新規作æ?されたå?ç�?�§のみ行うã€?
141             *
142             * @return      後続å?ç�??æŒ?¤º
143             */
144            @Override
145            public int doEndTag() {
146                    debugPrint();           // 4.0.0 (2005/02/28)
147    
148                    if( check( command, COMMAND_LIST ) ) {
149                            useMainTrans( isMainTrans );                    // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
150                            startQueryTransaction( tableId );               // 3.6.0.8 (2004/11/19)
151    
152                            DBTableModel table = makeDBTable();
153                            // 3.6.0.8 (2004/11/19) トランザクションチェãƒ?‚¯を行いますã?
154                            if( ! commitTableObject( tableId, table ) ) {
155                                    jspPrint( "RegistryQueryTag Query処ç�?�Œ割り込まれましたã€?BTableModel は登録しませんã€? );
156                                    return (SKIP_PAGE);
157                            }
158    
159    //                      String label  = "";                             // 4.0.0 (2005/11/30) 検索しなかったå?合ã?
160                            StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
161    
162                            // 実行件数の表示 command="NEW" のときã?み、displayMsg を表示させますã?
163                            // 4.0.0 (2005/11/30) 出力é?の変更。ä¸?•ªæœ??に出力しますã?
164    //                      boolean useStatusBar = HybsSystem.sysBool( "VIEW_USE_DISPLAY_MSG" );
165                            if( CMD_NEW.equals( command ) ) {
166    //                              if( useStatusBar && executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
167                                    if( executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
168                                            buf.append( executeCount );
169    //                                      buf.append( getResource().getMessage( displayMsg ) );
170                                            buf.append( getResource().getLabel( displayMsg ) );
171                                            buf.append( HybsSystem.BR );
172                                    }
173                                    else if( executeCount == 0 && notfoundMsg != null && notfoundMsg.length() > 0 ) {
174    //                                      buf.append( getResource().getMessage( notfoundMsg ) );
175                                            buf.append( getResource().getLabel( notfoundMsg ) );
176                                            buf.append( HybsSystem.BR );
177                                    }
178                            }
179    
180                            if( maxRowCount > 0 && maxRowCount <= executeCount ) {
181    //                              buf.append( getResource().getMessage( overflowMsg ) );
182                                    buf.append( getResource().getLabel( overflowMsg ) );
183                                    buf.append( HybsSystem.BR );
184                            }
185    //                      label = buf.toString();
186    
187                            jspPrint( buf.toString() );
188                    }
189    
190                    return(EVAL_PAGE);
191            }
192    
193            /**
194             * タグリブオブジェクトをリリースしますã?
195             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
196             *
197             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
198             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
199             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??、DBTableModelが新規作æ?されたå?ç�?�§のみ行うã€?
200             * @og.rev 5.6.8.2 (2013/09/20) hkeyType 追åŠ?
201             *
202             */
203            @Override
204            protected void release2() {
205                    super.release2();
206    
207                    tableId                 = HybsSystem.TBL_MDL_KEY;                       // session?·?°
208                    orderBy                 = null;                                                         // ソートé?目
209                    command                 = CMD_NEW;                                                      // ?º?�ンï¾?¾?
210                    baseKey                 = null;                                                         // 検索ベã?ス?·?°
211                    key                             = null;                                                         // 検索キー
212                    value                   = null;                                                         // 5.6.8.2 (2013/09/20) 検索バリュー 入れ忘れ
213                    executeCount    = 0;                                                            // 検索/実行件数
214                    maxRowCount             = 0;                                                            // æœ?¤§検索数(0は無制é™?
215    //              displayMsg              = "MSG0033";                                            // 件検索しましたã€?
216                    displayMsg              = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
217                    overflowMsg             = "MSG0007";                                            // 検索結果がã?制限行数をè¶?�ˆましたので、残りはカãƒ?ƒˆされましたã€?
218                    notfoundMsg             = "MSG0077";                                            // 対象ãƒ??タはありませんでしたã€?
219                    maxLevel                = 1;                                                            // 下位層展開æœ?¤§レベル(0は無制é™?
220                    like                    = false;                                                        // あいまã�?¤œ索?Œラク??
221                    isMainTrans             = true;                                                         // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
222                    hkeyType                = 0;                                                            // 5.6.8.2 (2013/09/20) 0:HKEY_CURRENT_USER(="user") , 1:HKEY_LOCAL_MACHINE(="system")
223            }
224    
225            /**
226             * レジストリ から、å?を取りå?しã?DBTableModel を作æ?しますã?
227             *
228             * @og.rev 5.6.8.2 (2013/09/20) hkeyType 追åŠ?�«伴ã�?�„種修正
229             *
230             * @return      ãƒ??ブルモãƒ?ƒ«
231             */
232            private DBTableModel makeDBTable() {
233                    DBTableModel table = DBTableModelUtil.newDBTable();
234                    table.init( COLUMN_KEY.length );
235                    for( int i=0; i<COLUMN_KEY.length; i++ ) {
236                            DBColumn dbColumn = getResource().makeDBColumn( COLUMN_KEY[i] );
237                            table.setDBColumn( i,dbColumn );
238                    }
239    
240                    // 5.6.8.2 (2013/09/20) 0:HKEY_CURRENT_USER(="user") , 1:HKEY_LOCAL_MACHINE(="system")
241    //              Preferences hayabusaRoot = Preferences.userRoot();
242                    Preferences hayabusaRoot = ( hkeyType == 0 ) ? Preferences.userRoot() : Preferences.systemRoot();
243    
244                    try {
245                            if( ! hayabusaRoot.nodeExists( baseKey ) ) {
246                                    String errMsg = "Preferences BaseKey ã�?Windows Registry に存在しませんでしたã€?
247    //                                                              + "[" + PREF_ROOT + baseKey + "]" ;
248    //                                                              + "[" + HKEY_TYPE[hkeyType] + PREF_ROOT + baseKey + "]" ;
249                                                                    + "[" + HKEY_TYPE[hkeyType] + "\\" + hayabusaRoot.absolutePath() + "]" ;
250                                    throw new HybsSystemException( errMsg );
251                            }
252    
253                            showChild( table,hayabusaRoot.node(baseKey),1 );
254                    }
255                    catch(BackingStoreException ex) {
256                            String errMsg = "レジストリ から、å?を取りå?す事が出来ませんでしたã€?
257    //                                                      + "[" + PREF_ROOT + baseKey + "]" ;             // 5.1.8.0 (2010/07/01) errMsg 修正
258    //                                                      + "[" + HKEY_TYPE[hkeyType] + PREF_ROOT + baseKey + "]" ;
259                                                                    + "[" + HKEY_TYPE[hkeyType] + "\\" + hayabusaRoot.absolutePath() + "]" ;
260                            throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数の並びé ?¤‰更
261                    }
262    
263                    return table ;
264            }
265    
266            /**
267             * Preferences の子要ç´?‚’検索しますã?
268             *
269             * こã?処ç�??、å?帰定義によりã€?šŽ層をé?次下がってã�?��ますã?
270             * レベル制限ã?検索æœ?¤§数制限ã?チェãƒ?‚¯を行ってã�?�¾すã?
271             * addTableValue メソãƒ?ƒ‰を呼び出して、検索結果をã?DBTableModel にé ?¬¡追åŠ?�—てã�?��ますã?
272             *
273             * @og.rev 5.6.8.2 (2013/09/20) BackingStoreException ã‚?throwしなã�?§˜に修正
274             *
275             * @param       table   DBTableModelオブジェクãƒ?
276             * @param       prefs   Preferencesオブジェクãƒ?
277             * @param       lvl             レベル制é™?
278             */
279            private void showChild( final DBTableModel table,
280                                                            final Preferences prefs,
281    //                                                      final int lvl ) throws BackingStoreException {
282                                                            final int lvl ) {
283    
284                    if( maxRowCount > 0 && maxRowCount <= executeCount ) { return ; }
285                    if( maxLevel > 0 && lvl > maxLevel ) { return; }
286    
287                    String name = null;
288                    try {
289                            String [] child = prefs.childrenNames();
290    
291                            if( child != null && child.length > 0 ) {
292                                    for( int i = 0; i < child.length; i++) {
293                                            name = child[i];
294    
295                                            // name に全角文字が使われてã�?‚‹場合ã?正常に処ç�?�§きなã�??で、Tableへの書き込みã�?�‘行いますã?
296                                            if( isZenkakuName( name ) ) {
297                                                    addTableValue( name,table,prefs,lvl,null,false );
298                                            }
299                                            else {
300                                                    Preferences childPrefs = prefs.node( name.toLowerCase(Locale.JAPAN) );
301    
302                                                    addTableValue( name,table,childPrefs,lvl,null,true );
303                                                    showChild( table,childPrefs,lvl+1 );
304                                            }
305                                    }
306                            }
307                            else {
308                                    showPrefs( table,prefs,lvl );
309                            }
310                    }
311                    // エラーが発生してもã?処ç�??継続しますã?
312                    catch( BackingStoreException ex ) {
313                            String errMsg = "BackingStoreエラーが発生しましたã€?" + (executeCount+1) + "]"
314                                                    + " key=[" + name + "] "
315                                                    + ex.getMessage() ;
316                            System.out.println( errMsg );
317                            addTableValue( name,table,prefs,lvl,errMsg,false );
318                    }
319                    // エラーが発生してもã?処ç�??継続しますã?
320                    catch( RuntimeException ex ) {
321                            String errMsg = "RuntimeExceptionエラーが発生しましたã€?" + (executeCount+1) + "]"
322                                                    + " key=[" + name + "] "
323                                                    + ex.getMessage() ;
324                            System.out.println( errMsg );
325                            addTableValue( name,table,prefs,lvl,errMsg,false );
326                    }
327            }
328    
329            /**
330             * レジストリのキーæƒ??がã?全角文字を含ã‚?�‹かどã�?�‹判定しますã?(含ã‚?�ªらã?true)ã€?
331             *
332             * name に全角文字が使われてã�?‚‹場合ã?正常に処ç�?�§きなã�??で、判定しますã?
333             *
334             * @param       name    レジストリのキーæƒ??
335             * @return      全角文字が使われてã�?‚‹場合ã?true を返しますã?
336             */
337            private boolean isZenkakuName( final String name ) {
338                    boolean isZenkaku = false;
339                    for( int i=0; i<name.length(); i++ ) {
340                            char ch =name.charAt(i);
341                            if ((ch < 0x0020)||(ch > 0x007f)){
342                                    isZenkaku = true;
343                                    break;
344                            }
345                    }
346                    return isZenkaku;
347            }
348    
349            /**
350             * Preferences の属æ?を検索しますã?
351             *
352             * addTableValue メソãƒ?ƒ‰を呼び出して、検索結果をã?DBTableModel にé ?¬¡追åŠ?�—てã�?��ますã?
353             *
354             * @param       table   DBTableModelオブジェクãƒ?
355             * @param       prefs   Preferencesオブジェクãƒ?
356             * @param       lvl             レベル制é™?
357             */
358            private void showPrefs( final DBTableModel table,
359                                                            final Preferences prefs,
360                                                            final int lvl ) throws BackingStoreException {
361    
362                    String [] keys = prefs.keys();
363    
364                    if( keys != null ) {
365                            for( int i = 0; i < keys.length; i++) {
366                                    String name = keys[i];
367                                    addTableValue( name,table,prefs,lvl,null,false );
368                            }
369                    }
370            }
371    
372            /**
373             * 検索されã�?Preferencesをã?DBTableModel にé ?¬¡追åŠ?�—てã�?��ますã?
374             *
375             * @param       name    検索キー
376             * @param       table   DBTableModelオブジェクãƒ?
377             * @param       prefs   Preferencesオブジェクãƒ?
378             * @param       lvl             レベル制é™?
379             * @param       msg             値にメãƒ?‚»ージを書き込みたい場å�?正常時ならnullでかまわなã�?ã€?
380             * @param       flag    true:値に空æ–?­—å?/false:Preferencesから、検索キーを使用して値を取å¾?
381             */
382            private void addTableValue( final String name,
383                                                                    final DBTableModel table,
384                                                                    final Preferences prefs,
385                                                                    final int lvl,
386                                                                    final String msg,
387                                                                    final boolean flag ) {
388    
389                    if( maxRowCount > 0 && maxRowCount <= executeCount ) { return ; }
390    
391                    String lowerName = name.toLowerCase(Locale.JAPAN);
392                    String val               = (msg != null) ? msg : ( ( flag ) ? "" : prefs.get(lowerName, "") );
393    //              String path              = (prefs == null) ? "不æ?" : prefs.absolutePath() ;
394    
395                    if( key != null ) {
396                            if( like ) {
397                                    if( lowerName.indexOf( key ) < 0 ) { return; }
398                            }
399                            else {
400                                    if( ! lowerName.equalsIgnoreCase( key ) ) { return; }
401                            }
402                    }
403                    if( value != null ) {
404                            if( like ) {
405                                    if( (val.toLowerCase(Locale.JAPAN)).indexOf( value ) < 0 ) { return; }
406                            }
407                            else {
408                                    if( ! val.equalsIgnoreCase( value ) ) { return; }
409                            }
410                    }
411    
412                    String[] clmVals = new String[COLUMN_KEY.length];
413                    clmVals[0] = String.valueOf( lvl );                             // LEVEL
414                    clmVals[1] = name;                                                              // KEY
415                    clmVals[2] = val;                                                                       // VALUE
416                    clmVals[3] = String.valueOf( flag );                            // CHILD
417                    clmVals[4] = prefs.absolutePath() ;                             // PATH
418    //              clmVals[4] = path ;                                                             // PATH
419    
420                    table.addColumnValues( clmVals );
421                    executeCount++ ;
422            }
423    
424            /**
425             * 【TAGã€?通常は使ã�?�¾せん)結果をDBTableModelに書き込んで、sessionに登録するときã?キーを指定しますã?
426             *
427             * @og.tag
428             * 初期値は、HybsSystem.TBL_MDL_KEY ですã?
429             *
430             * @param       id sessionに登録する時ã? ID
431             */
432            public void setTableId( final String id ) {
433                    tableId = nval( getRequestParameter( id ), tableId );
434            }
435    
436            /**
437             * 【TAG】検索した結果を表示する表示é ?‚’ファイル属æ?名でæŒ?®šしますã?
438             *
439             * @og.tag
440             * 現仕様では、è¤?•°のキーを指定することは出来ませんã€?
441             *
442             * @param       ordr    ソートキーを指定ã?
443             */
444            public void setOrderBy( final String ordr ) {
445                    orderBy = nval( getRequestParameter( ordr ),orderBy );
446            }
447    
448            /**
449             * 【TAG】コマンãƒ?NEW,RENEW)をセãƒ?ƒˆしまã�?初期値:NEW)ã€?
450             *
451             * @og.tag
452             * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
453             * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
454             * 何も設定されなã�??またã?、null の場合ã?ã€?NEW" がå?期å?にセãƒ?ƒˆされますã?
455             *
456             * @param       cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?­—å?)
457             * @see         <a href="{&#064;docRoot}/constant-values.html#org.opengion.hayabusa.taglib.RegistryQueryTag.CMD_NEW">コマンド定数</a>
458             */
459            public void setCommand( final String cmd ) {
460                    String cmd2 = getRequestParameter( cmd );
461                    if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
462            }
463    
464            /**
465             * 【TAG】検索ベã?スキーを設定しまã�?HKEY_CURRENT_USER/Software/XXX の XXX をã?ースとしまã�?ã€?
466             *
467             * @og.tag
468             * レジストリの検索で、HKEY_CURRENT_USER かã?HKEY_LOCAL_MACHINE の区別をã?hkeyType 属æ?で付ける事が
469             * できるようにしました。æ?は、HKEY_CURRENT_USER/Software/ 以下ã?検索ができてã�?�¾したがã?
470             * 今現在は、できなくなってã�?‚‹ようですã??ˆまたã?、使ã�?–¹が間違ってã�?‚‹かï¼?
471             * そこで、標æº?/JavaSoft/Prefs)ã€?Muratecã€?Microsoft ã�?�‘、検索できるようにã€?
472             * XXXXPreferencesFactory を作æ?しましたã€?
473             * 詳細は、opengionV6/src/jdk170uXX_WindowsPreference を参照願いますã?
474             * これにより、従来通りの方法で?ˆ制限ã?かかりますが?‰レジストリを検索できますã?
475             * 
476             * ベã?スキー にæŒ?®šできるのはã€?/Muratec" , "/Microsoft" で始まるキーã�?�‘ですã?
477             * それに続く "/" で区åˆ?�£た階層構é?も表現可能ですã?
478             * 標æº?/JavaSoft/Prefs) は、何もæŒ?®šしなã�?�“とで、標準であることを示しますã?
479             *
480             * @param       bkey 検索ベã?スキー
481             */
482            public void setBaseKey( final String bkey ) {
483                    baseKey = nval( getRequestParameter( bkey ),baseKey );
484            }
485    
486            /**
487             * 【TAG】検索キーを設定しますã?
488             *
489             * @og.tag 検索キーを設定しますã?
490             *
491             * @param       ky 検索キー
492             */
493            public void setKey( final String ky ) {
494                    key = nval( getRequestParameter( ky ),key );
495                    if( key != null ) { key = key.toLowerCase(Locale.JAPAN); }
496            }
497    
498            /**
499             * 【TAG】検索バリューを設定しますã?
500             *
501             * @og.tag 検索バリューを設定しますã?
502             *
503             * @param       val 検索バリュー
504             */
505            public void setValue( final String val ) {
506                    value = nval( getRequestParameter( val ),value );
507                    if( value != null ) { value = value.toLowerCase(Locale.JAPAN); }
508            }
509    
510            /**
511             * 【TAG】レジストリのæœ?¤§検索件数をセãƒ?ƒˆしまã�?初期値:0[無制限])ã€?
512             *
513             * @og.tag
514             * DBTableModelのãƒ??タとして登録するæœ?¤§件数をこの値に設定しますã?
515             * サーバã?のメモリè³?º�と応答時間ã?確保ã?為ですã?
516             * 初期値はã€? は、無制限ですã?
517             *
518             * @param       count レジストリのæœ?¤§検索件数
519             */
520            public void setMaxRowCount( final String count ) {
521                    maxRowCount = nval( getRequestParameter( count ),maxRowCount );
522            }
523    
524            /**
525             * 【TAG】検索結果を画面上に表示するメãƒ?‚»ージIDを指定しまã�?初期値:MSG0033[ 件検索しました])ã€?
526             *
527             * @og.tag
528             * ここでは、検索結果の件数ã‚?™»録された件数をまずå?力しã€?
529             * そã?次に、ここでæŒ?®šしたメãƒ?‚»ージをリソースから取得して
530             * 表示しますã?
531             * 表示させたくなã�??合ã?, displayMsg = "" をセãƒ?ƒˆしてくださいã€?
532             * 初期値は、検索件数を表示しますã?
533             *
534             * @param       id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
535             */
536            public void setDisplayMsg( final String id ) {
537                    displayMsg = getRequestParameter( id );
538            }
539    
540            /**
541             * 【TAG】検索結果がゼロ件の場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0077[対象ãƒ??タはありませんでした])ã€?
542             *
543             * @og.tag
544             * ここでは、検索結果がゼロ件の場合ã?み、特別なメãƒ?‚»ージを表示させますã?
545             * 従来は、displayMsg と兼用で、ã?0ã€?»¶検索しました』とã�?�†表示でしたがã?
546             * displayMsg の初期表示は、OFF になりましたので、ゼロ件の場合ã?み別に表示させますã?
547             * 表示させたくなã�??合ã?, notfoundMsg = "" をセãƒ?ƒˆしてくださいã€?
548             * 初期値は、MSG0077[対象ãƒ??タはありませんでした]ですã?
549             *
550             * @param       id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
551             */
552            public void setNotfoundMsg( final String id ) {
553                    String ids = getRequestParameter( id );
554                    if( ids != null ) { notfoundMsg = ids; }
555            }
556    
557            /**
558             * 【TAG】オーバã?フロー時に画面上に表示するメãƒ?‚»ージIDを指定しまã�?初期値:MSG0007)ã€?
559             *
560             * @og.tag
561             * 表示させたくなã�??合ã?, overflowMsg = "" をセãƒ?ƒˆしてくださいã€?
562             *
563             * @param       id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
564             */
565            public void setOverflowMsg( final String id ) {
566                    overflowMsg = getRequestParameter( id );
567            }
568    
569            /**
570             * 【TAG】検索時ã?æœ?¤§展開レベル(0は無制é™?を指定しまã�?初期値:1)ã€?
571             *
572             * @og.tag
573             * ?�をæŒ?®šすると、無制限に階層を展開しますã?
574             * 初期値はã€?¼‘レベルですã?
575             *
576             * @param       lvl 検索時ã?æœ?¤§展開レベル
577             */
578            public void setMaxLevel( final String lvl ) {
579                    maxLevel = nval( getRequestParameter( lvl ),maxLevel );
580            }
581    
582            /**
583             * 【TAG】キーおよびバリューにつã�?�¦,like 検索を行うかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
584             *
585             * @og.tag
586             * like検索とは、キーのä¸?ƒ¨のæ–?­—を含ã‚??合にマッチしたとして、å?を取りå?しますã?
587             * ここでの設定ã?、キーもバリューも同時に適用されますã?またã?大æ–?­—小文字ã?区別も行いませんã€?
588             *
589             * @param       lik like 検索を行うかどã�?�‹
590             */
591            public void setLike( final String lik ) {
592                    like = nval( getRequestParameter( lik ),like );
593            }
594    
595            /**
596             * 【TAG】レジストリの読み込ã‚?ƒ«ートを(user/system)でæŒ?®šしまã�?初期値:user)ã€?
597             *
598             * @og.tag
599             * HKEY_CURRENT_USER/Software/XXXX を読ã‚??合ã?ã€?user" をã?HKEY_LOCAL_MACHINE/Software/XXXX 
600             * を読ã‚??合ã?ã€?system" を指定しますã?それ以外ã?æŒ?®šã?、エラーにしてã�?�¾すã?
601             * ここでの設定ã?、大æ–?­—小文字ã?区別は行いませんã€?
602             * 初期値はã€?user"(HKEY_CURRENT_USER) ですã?
603             *
604             * @og.rev 5.6.8.2 (2013/09/20) 新規追åŠ?
605             *
606             * @param       type レジストリの読み込ã‚?ƒ«ーãƒ?user/system)
607             */
608            public void setHkeyType( final String type ) {
609                    String temp = nval( getRequestParameter( type ),null );
610                    if( temp != null ) {
611                            if(        "user".equalsIgnoreCase( temp ) ) { hkeyType = 0; }
612                            else if( "system".equalsIgnoreCase( temp ) ) { hkeyType = 1; }
613                            else {
614                                    String errMsg = "hkeyType は、[user] かã?[system] のどちらかを指定してくださいã€?
615                                                            + " hkeyType[" + temp + "]" ;
616                                    throw new HybsSystemException( errMsg );
617                            }
618                    }
619            }
620    
621            /**
622             * タグの名称をã?返しますã?
623             * 自åˆ??身のクラス名よりã?自動的に取り出せなã�?�Ÿめã?こã?メソãƒ?ƒ‰をオーバã?ライドしますã?
624             *
625             * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
626             *
627             * @return  タグの名称
628             */
629            @Override
630            protected String getTagName() {
631                    return "regQuery" ;
632            }
633    
634            /**
635             * 【TAGã€?通常使ã�?�¾せん)タグで処ç�?�•れる処ç�?�Œメインとなるトランザクション処ç�?�‹どã�?�‹を指定しまã�?初期値:false)ã€?
636             *
637             * @og.tag
638             * こã?値は、ファイルãƒ?‚¦ンロードå?ç�?�«影響しますã?こã?値がtrueにæŒ?®šされた時にcommitされたDBTableModelã�?
639             * ファイルãƒ?‚¦ンロードã?対象の表になりますã?
640             *
641             * こã?パラメーターはã€??常、各タグにより実è£?�•れã?ユーザーが指定するå¿?¦�ã?ありませんã€?
642             * ä½?�—ã€?つのJSPå†?�§DBTableModelがè¤?•°生æ?されるå?合に、前に処ç�?�—たDBTableModelにつã�?�¦ファイルãƒ?‚¦ンロードをさせたい
643             * 場合ã?、後ろでDBTableModelを生成するタグで、æ?示çš?�«こã?値をfalseにæŒ?®šすることで、ファイルãƒ?‚¦ンロードå?ç�??対象から
644             * 除外することができますã?
645             *
646             * @og.rev 5.1.6.0 (2010/05/01) 新規作æ?
647             *
648             * @param  flag メイントランザクションかどã�?�‹
649             */
650            public void setMainTrans( final String flag ) {
651                    isMainTrans = nval( getRequestParameter( flag ),isMainTrans );
652            }
653    
654            /**
655             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
656             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
657             *
658             * @return こã?クラスのæ–?­—å?表現
659             */
660            @Override
661            public String toString() {
662                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
663                                    .println( "VERSION"             ,VERSION                )
664                                    .println( "tableId"             ,tableId                )
665                                    .println( "command"             ,command                )
666                                    .println( "baseKey"             ,baseKey                )
667                                    .println( "key"                 ,key                    )
668                                    .println( "value"               ,value                  )
669                                    .println( "maxRowCount" ,maxRowCount    )
670                                    .println( "orderBy"             ,orderBy                )
671                                    .println( "displayMsg"  ,displayMsg             )
672                                    .println( "overflowMsg" ,overflowMsg    )
673                                    .println( "maxLevel"    ,maxLevel               )
674                                    .println( "like"                ,like                   )
675                                    .println( "executeCount",executeCount   )
676                                    .println( "COLUMN_KEY"  ,COLUMN_KEY             )
677                                    .println( "Other..."    ,getAttributes().getAttribute() )
678                                    .fixForm().toString() ;
679            }
680    }