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 */ 016package org.opengion.hayabusa.taglib; 017 018import org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.hayabusa.common.HybsSystemException; 020import org.opengion.hayabusa.db.DBTableModel; 021import org.opengion.hayabusa.db.DBTableModelUtil; 022import org.opengion.hayabusa.db.DBColumn; 023 024import static org.opengion.fukurou.util.StringUtil.nval ; 025 026import java.util.prefs.Preferences; 027import java.util.prefs.BackingStoreException; 028import java.util.Locale ; 029 030/** 031 * 指定の Windowsレジストリにアクセスするためのタグです(特殊な環境設定が必要です)。 032 * 033 * 検索した結果は、DBTableModel にセットされるため、 034 * JDBCQuery と同様に、viewタグで表示させることが可能です。 035 * 036 * 注意1: 037 * 通常であれば、以下の2つのルートパス以下のレジストリにアクセスできます。 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 * 以下の2つのルートパス以下のレジストリにアクセスできます。 049 * 050 * @og.formSample 051 * ●形式:<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 */ 095public 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処理が割り込まれました。DBTableModel は登録しません。" ); 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 * 初期値は、0 は、無制限です。 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 * 0を指定すると、無制限に階層を展開します。 579 * 初期値は、1レベルです。 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 * 但し、1つの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}