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 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
427 *
428 * @og.tag
429 * 検索結果より、DBTableModelオブジェクトを作æ?しますã?これをã?下流ã?viewタグ等に
430 * 渡すå?合にã€??常は、session を利用しますã?そã?場合ã?登録キーですã?
431 * query タグを同時に実行して、結果を求めるå?合ã?同ä¸?ƒ¡モリに配置される為ã€?
432 * こã? tableId 属æ?を利用して、メモリ空間をåˆ?�‘ますã?
433 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
434 *
435 * @param id sessionに登録する時ã? ID
436 */
437 public void setTableId( final String id ) {
438 tableId = nval( getRequestParameter( id ), tableId );
439 }
440
441 /**
442 * 【TAG】検索した結果を表示する表示é ?‚’ファイル属æ?名でæŒ?®šしますã?
443 *
444 * @og.tag
445 * 現仕様では、è¤?•°のキーを指定することは出来ませんã€?
446 *
447 * @param ordr ソートキーを指定ã?
448 */
449 public void setOrderBy( final String ordr ) {
450 orderBy = nval( getRequestParameter( ordr ),orderBy );
451 }
452
453 /**
454 * 【TAG】コマンãƒ?NEW,RENEW)をセãƒ?ƒˆしまã�?初期値:NEW)ã€?
455 *
456 * @og.tag
457 * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
458 * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
459 * 何も設定されなã�??またã?、null の場合ã?ã€?NEW" がå?期å?にセãƒ?ƒˆされますã?
460 *
461 * @param cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?—å?)
462 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.RegistryQueryTag.CMD_NEW">コマンド定数</a>
463 */
464 public void setCommand( final String cmd ) {
465 String cmd2 = getRequestParameter( cmd );
466 if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
467 }
468
469 /**
470 * 【TAG】検索ベã?スキーを設定しまã�?HKEY_CURRENT_USER/Software/XXX の XXX をã?ースとしまã�?ã€?
471 *
472 * @og.tag
473 * レジストリの検索で、HKEY_CURRENT_USER かã?HKEY_LOCAL_MACHINE の区別をã?hkeyType 属æ?で付ける事が
474 * できるようにしました。æ?は、HKEY_CURRENT_USER/Software/ 以下ã?検索ができてã�?�¾したがã?
475 * 今現在は、できなくなってã�?‚‹ようですã??ˆまたã?、使ã�?–¹が間違ってã�?‚‹かï¼?
476 * そこで、標æº?/JavaSoft/Prefs)ã€?Muratecã€?Microsoft ã�?�‘、検索できるようにã€?
477 * XXXXPreferencesFactory を作æ?しましたã€?
478 * 詳細は、opengionV6/src/jdk170uXX_WindowsPreference を参照願いますã?
479 * これにより、従来通りの方法で?ˆ制限ã?かかりますが?‰レジストリを検索できますã?
480 *
481 * ベã?スキー にæŒ?®šできるのはã€?/Muratec" , "/Microsoft" で始まるキーã�?�‘ですã?
482 * それに続く "/" で区åˆ?�£た階層構é?も表現可能ですã?
483 * 標æº?/JavaSoft/Prefs) は、何もæŒ?®šしなã�?�“とで、標準であることを示しますã?
484 *
485 * @param bkey 検索ベã?スキー
486 */
487 public void setBaseKey( final String bkey ) {
488 baseKey = nval( getRequestParameter( bkey ),baseKey );
489 }
490
491 /**
492 * 【TAG】検索キーを設定しますã?
493 *
494 * @og.tag 検索キーを設定しますã?
495 *
496 * @param ky 検索キー
497 */
498 public void setKey( final String ky ) {
499 key = nval( getRequestParameter( ky ),key );
500 if( key != null ) { key = key.toLowerCase(Locale.JAPAN); }
501 }
502
503 /**
504 * 【TAG】検索バリューを設定しますã?
505 *
506 * @og.tag 検索バリューを設定しますã?
507 *
508 * @param val 検索バリュー
509 */
510 public void setValue( final String val ) {
511 value = nval( getRequestParameter( val ),value );
512 if( value != null ) { value = value.toLowerCase(Locale.JAPAN); }
513 }
514
515 /**
516 * 【TAG】レジストリのæœ?¤§検索件数をセãƒ?ƒˆしまã�?初期値:0[無制限])ã€?
517 *
518 * @og.tag
519 * DBTableModelのãƒ??タとして登録するæœ?¤§件数をこの値に設定しますã?
520 * サーバã?のメモリè³?º�と応答時間ã?確保ã?為ですã?
521 * 初期値はã€? は、無制限ですã?
522 *
523 * @param count レジストリのæœ?¤§検索件数
524 */
525 public void setMaxRowCount( final String count ) {
526 maxRowCount = nval( getRequestParameter( count ),maxRowCount );
527 }
528
529 /**
530 * 【TAG】検索結果を画面上に表示するメãƒ?‚»ージIDを指定しまã�?初期値:MSG0033[ 件検索しました])ã€?
531 *
532 * @og.tag
533 * ここでは、検索結果の件数ã‚?™»録された件数をまずå?力しã€?
534 * そã?次に、ここでæŒ?®šしたメãƒ?‚»ージをリソースから取得して
535 * 表示しますã?
536 * 表示させたくなã�??合ã?, displayMsg = "" をセãƒ?ƒˆしてくださいã€?
537 * 初期値は、検索件数を表示しますã?
538 *
539 * @param id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
540 */
541 public void setDisplayMsg( final String id ) {
542 displayMsg = getRequestParameter( id );
543 }
544
545 /**
546 * 【TAG】検索結果がゼロ件の場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0077[対象ãƒ??タはありませんでした])ã€?
547 *
548 * @og.tag
549 * ここでは、検索結果がゼロ件の場合ã?み、特別なメãƒ?‚»ージを表示させますã?
550 * 従来は、displayMsg と兼用で、ã?0ã€?»¶検索しました』とã�?�†表示でしたがã?
551 * displayMsg の初期表示は、OFF になりましたので、ゼロ件の場合ã?み別に表示させますã?
552 * 表示させたくなã�??合ã?, notfoundMsg = "" をセãƒ?ƒˆしてくださいã€?
553 * 初期値は、MSG0077[対象ãƒ??タはありませんでした]ですã?
554 *
555 * @param id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
556 */
557 public void setNotfoundMsg( final String id ) {
558 String ids = getRequestParameter( id );
559 if( ids != null ) { notfoundMsg = ids; }
560 }
561
562 /**
563 * 【TAG】オーバã?フロー時に画面上に表示するメãƒ?‚»ージIDを指定しまã�?初期値:MSG0007)ã€?
564 *
565 * @og.tag
566 * 表示させたくなã�??合ã?, overflowMsg = "" をセãƒ?ƒˆしてくださいã€?
567 *
568 * @param id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
569 */
570 public void setOverflowMsg( final String id ) {
571 overflowMsg = getRequestParameter( id );
572 }
573
574 /**
575 * 【TAG】検索時ã?æœ?¤§展開レベル(0は無制é™?を指定しまã�?初期値:1)ã€?
576 *
577 * @og.tag
578 * ?�をæŒ?®šすると、無制限に階層を展開しますã?
579 * 初期値はã€?¼‘レベルですã?
580 *
581 * @param lvl 検索時ã?æœ?¤§展開レベル
582 */
583 public void setMaxLevel( final String lvl ) {
584 maxLevel = nval( getRequestParameter( lvl ),maxLevel );
585 }
586
587 /**
588 * 【TAG】キーおよびバリューにつã�?�¦,like 検索を行うかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
589 *
590 * @og.tag
591 * like検索とは、キーのä¸?ƒ¨のæ–?—を含ã‚??合にマッチしたとして、å?を取りå?しますã?
592 * ここでの設定ã?、キーもバリューも同時に適用されますã?またã?大æ–?—小文字ã?区別も行いませんã€?
593 *
594 * @param lik like 検索を行うかどã�?�‹
595 */
596 public void setLike( final String lik ) {
597 like = nval( getRequestParameter( lik ),like );
598 }
599
600 /**
601 * 【TAG】レジストリの読み込ã‚?ƒ«ートを(user/system)でæŒ?®šしまã�?初期値:user)ã€?
602 *
603 * @og.tag
604 * HKEY_CURRENT_USER/Software/XXXX を読ã‚??合ã?ã€?user" をã?HKEY_LOCAL_MACHINE/Software/XXXX
605 * を読ã‚??合ã?ã€?system" を指定しますã?それ以外ã?æŒ?®šã?、エラーにしてã�?�¾すã?
606 * ここでの設定ã?、大æ–?—小文字ã?区別は行いませんã€?
607 * 初期値はã€?user"(HKEY_CURRENT_USER) ですã?
608 *
609 * @og.rev 5.6.8.2 (2013/09/20) 新規追åŠ?
610 *
611 * @param type レジストリの読み込ã‚?ƒ«ーãƒ?user/system)
612 */
613 public void setHkeyType( final String type ) {
614 String temp = nval( getRequestParameter( type ),null );
615 if( temp != null ) {
616 if( "user".equalsIgnoreCase( temp ) ) { hkeyType = 0; }
617 else if( "system".equalsIgnoreCase( temp ) ) { hkeyType = 1; }
618 else {
619 String errMsg = "hkeyType は、[user] かã?[system] のどちらかを指定してくださいã€?
620 + " hkeyType[" + temp + "]" ;
621 throw new HybsSystemException( errMsg );
622 }
623 }
624 }
625
626 /**
627 * タグの名称をã?返しますã?
628 * 自åˆ??身のクラス名よりã?自動的に取り出せなã�?�Ÿめã?こã?メソãƒ?ƒ‰をオーバã?ライドしますã?
629 *
630 * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
631 *
632 * @return タグの名称
633 */
634 @Override
635 protected String getTagName() {
636 return "regQuery" ;
637 }
638
639 /**
640 * 【TAGã€?通常使ã�?�¾せん)タグで処ç�?�•れる処ç�?�Œメインとなるトランザクション処ç�?�‹どã�?�‹を指定しまã�?初期値:false)ã€?
641 *
642 * @og.tag
643 * こã?値は、ファイルãƒ?‚¦ンロードå?ç�?�«影響しますã?こã?値がtrueにæŒ?®šされた時にcommitされたDBTableModelã�?
644 * ファイルãƒ?‚¦ンロードã?対象の表になりますã?
645 *
646 * こã?パラメーターはã€??常、各タグにより実è£?�•れã?ユーザーが指定するå¿?¦�ã?ありませんã€?
647 * ä½?�—ã€?つのJSPå†?�§DBTableModelがè¤?•°生æ?されるå?合に、前に処ç�?�—たDBTableModelにつã�?�¦ファイルãƒ?‚¦ンロードをさせたい
648 * 場合ã?、後ろでDBTableModelを生成するタグで、æ?示çš?�«こã?値をfalseにæŒ?®šすることで、ファイルãƒ?‚¦ンロードå?ç�??対象から
649 * 除外することができますã?
650 *
651 * @og.rev 5.1.6.0 (2010/05/01) 新規作æ?
652 *
653 * @param flag メイントランザクションかどã�?�‹
654 */
655 public void setMainTrans( final String flag ) {
656 isMainTrans = nval( getRequestParameter( flag ),isMainTrans );
657 }
658
659 /**
660 * こã?オブジェクトã?æ–?—å?表現を返しますã?
661 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
662 *
663 * @return こã?クラスのæ–?—å?表現
664 */
665 @Override
666 public String toString() {
667 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
668 .println( "VERSION" ,VERSION )
669 .println( "tableId" ,tableId )
670 .println( "command" ,command )
671 .println( "baseKey" ,baseKey )
672 .println( "key" ,key )
673 .println( "value" ,value )
674 .println( "maxRowCount" ,maxRowCount )
675 .println( "orderBy" ,orderBy )
676 .println( "displayMsg" ,displayMsg )
677 .println( "overflowMsg" ,overflowMsg )
678 .println( "maxLevel" ,maxLevel )
679 .println( "like" ,like )
680 .println( "executeCount",executeCount )
681 .println( "COLUMN_KEY" ,COLUMN_KEY )
682 .println( "Other..." ,getAttributes().getAttribute() )
683 .fixForm().toString() ;
684 }
685 }