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; 023import org.opengion.fukurou.util.ToString; // 6.1.1.0 (2015/01/17) 024import org.opengion.fukurou.util.ArraySet; // 6.4.3.4 (2016/03/11) 025 026import static org.opengion.fukurou.util.StringUtil.nval ; 027import static org.opengion.fukurou.system.HybsConst.BR; // 6.1.0.0 (2014/12/26) refactoring 028 029import java.util.prefs.Preferences; 030import java.util.prefs.BackingStoreException; 031import java.util.Locale ; 032 033/** 034 * 指定の Windowsレジストリにアクセスするためのタグです(特殊な環境設定が必要です)。 035 * 036 * 検索した結果は、DBTableModel にセットされるため、 037 * JDBCQuery と同様に、viewタグで表示させることが可能です。 038 * 039 * 注意1: 040 * 通常であれば、以下の2つのルートパス以下のレジストリにアクセスできます。 041 * HKEY_CURRENT_USER/Software/JavaSoft/Prefs 042 * HKEY_LOCAL_MACHINE/Software/JavaSoft/Prefs 043 * 044 * 注意2: 045 * ルートパスを強制的に変更する為、java.util.prefs.WindowsPreferenceクラスを 046 * 直接書き換えた、ogPreferences.jar を用意しています。 047 * これを、tomcat/endorsed フォルダにコピーして使います。 048 * その場合は、 049 * HKEY_CURRENT_USER/Software/Muratec 050 * HKEY_LOCAL_MACHINE/Software/Muratec 051 * 以下の2つのルートパス以下のレジストリにアクセスできます。 052 * 053 * @og.formSample 054 * ●形式:<og:regQuery baseKey="・・・" ・・・ /> 055 * ●body:なし 056 * 057 * ●Tag定義: 058 * <og:regQuery 059 * baseKey ○【TAG】検索ベースキーを設定します(HKEY_CURRENT_USER/Software/XXXX の XXXX を指定します)(必須)。 060 * hkeyType 【TAG】HKEY_CURRENT_USER(="user") を読むか、HKEY_LOCAL_MACHINE(="system") を読むかを指定します(初期値:user)。 061 * key 【TAG】検索キーを設定します 062 * value 【TAG】検索バリューを設定します 063 * maxRowCount 【TAG】レジストリの最大検索件数をセットします(初期値:0[無制限]) 064 * orderBy 【TAG】検索した結果を表示する表示順をファイル属性名で指定します 065 * maxLevel 【TAG】検索時の最大展開レベル(0は無制限)を指定します(初期値:1) 066 * like 【TAG】キーおよびバリューについて,like 検索を行うかどうか[true/false]を指定します(初期値:false) 067 * tableId 【TAG】(通常は使いません)結果をDBTableModelに書き込んで、sessionに登録するときのキーを指定します 068 * command 【TAG】コマンド (NEW,RENEW)をセットします(初期値:NEW) 069 * displayMsg 【TAG】検索結果を画面上に表示するメッセージIDを指定します(初期値:VIEW_DISPLAY_MSG[={@og.value SystemData#VIEW_DISPLAY_MSG}]) 070 * notfoundMsg 【TAG】検索結果がゼロ件の場合に表示するメッセージリソースIDを指定します(初期値:MSG0077[対象データはありませんでした]) 071 * overflowMsg 【TAG】オーバーフロー時に画面上に表示するメッセージIDを指定します(初期値:MSG0007) 072 * scope 【TAG】キャッシュする場合のスコープ[request/page/session/application]を指定します(初期値:session) 073 * mainTrans 【TAG】(通常は使いません)タグで処理される処理がメインとなるトランザクション処理かどうかを指定します(初期値:false) 074 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 075 * /> 076 * 077 * ●使用例 078 * <og:regQuery debug="false" 079 * command = "NEW" NEW,RENEW が使用できます。 080 * baseKey = "/" 検索時のベースとなるレジストリキー名 081 * key = "driver" 検索したいレジストリキー名(初期値は全件) 082 * value = "Ne" 検索したいレジストリ値(初期値は全件) 083 * maxRowCount = "0" 最大検索件数(0で無制限) 084 * maxLevel = "0" 最大検索階層レベル(0で無制限) 085 * like = "true" true で曖昧検索/false は一致検索 086 * /> 087 * 088 * like は、key / value を設定したときのみ有効です。また、key / value を両方同時に設定した場合は、 089 * like 属性は両方に同時に適用されます。 090 * 091 * @og.rev 3.1.0.0 (2003/03/20) Windowsレジストリにアクセスできる、RegistryQueryTag.java を新規に作成。 092 * @og.group その他入力 093 * 094 * @version 4.0 095 * @author Kazuhiko Hasegawa 096 * @since JDK5.0, 097 */ 098public class RegistryQueryTag extends CommonTagSupport { 099 /** このプログラムのVERSION文字列を設定します。 {@value} */ 100 private static final String VERSION = "6.4.3.4 (2016/03/11)" ; 101 private static final long serialVersionUID = 643420160311L ; 102 103 /** command 引数に渡す事の出来る コマンド 新規 {@value} */ 104 public static final String CMD_NEW = "NEW" ; 105 /** command 引数に渡す事の出来る コマンド 再検索 {@value} */ 106 public static final String CMD_RENEW = "RENEW" ; 107 108 // 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。 109 private static final ArraySet<String> COMMAND_SET = new ArraySet<>( "LEBEL","KEY","VALUE","CHILD","PATH" ); 110 111 // 5.6.8.2 (2013/09/20) エラーメッセージ等に使う文字列 112 private static final String[] HKEY_TYPE = { "HKEY_CURRENT_USER","HKEY_LOCAL_MACHINE" } ; 113 114 private String tableId = HybsSystem.TBL_MDL_KEY; // sessionキー 115 private String command = CMD_NEW; // コマンド 116 private String baseKey ; // 検索ベースキー 117 private String key ; // 検索キー 118 private String value ; // 検索バリュー 119 private int maxRowCount ; // 最大検索数(0は無制限) 120 private String orderBy ; // ソート項目 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 ; // あいまい検索フラグ 126 127 private int executeCount ; // 検索/実行件数 128 private boolean isMainTrans = true; // 5.1.6.0 (2010/05/01) DBLastSqlの処理の見直し 129 private int hkeyType ; // 5.6.8.2 (2013/09/20) 0:HKEY_CURRENT_USER(="user") , 1:HKEY_LOCAL_MACHINE(="system") 130 131 /** 132 * デフォルトコンストラクター 133 * 134 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 135 */ 136 public RegistryQueryTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 137 138 /** 139 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 140 * 141 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 142 * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェックを行います。 143 * @og.rev 4.0.0.0 (2007/10/18) メッセージリソース統合( getResource().getMessage ⇒ getResource().getLabel ) 144 * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処理は、DBTableModelが新規作成された処理でのみ行う。 145 * @og.rev 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。 146 * 147 * @return 後続処理の指示 148 */ 149 @Override 150 public int doEndTag() { 151 debugPrint(); // 4.0.0 (2005/02/28) 152 153 if( check( command, COMMAND_SET ) ) { 154 useMainTrans( isMainTrans ); // 5.1.6.0 (2010/05/01) DBLastSqlの処理の見直し 155 startQueryTransaction( tableId ); // 3.6.0.8 (2004/11/19) 156 157 final DBTableModel table = makeDBTable(); 158 // 3.6.0.8 (2004/11/19) トランザクションチェックを行います。 159 if( ! commitTableObject( tableId, table ) ) { 160 jspPrint( "RegistryQueryTag Query処理が割り込まれました。DBTableModel は登録しません。" ); 161 return SKIP_PAGE; 162 } 163 164 final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ); 165 166 // 実行件数の表示 command="NEW" のときのみ、displayMsg を表示させます。 167 // 4.0.0 (2005/11/30) 出力順の変更。一番最初に出力します。 168 if( CMD_NEW.equals( command ) ) { 169 if( executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) { 170 buf.append( executeCount ) 171 .append( getResource().getLabel( displayMsg ) ) 172 .append( BR ); 173 } 174 else if( executeCount == 0 && notfoundMsg != null && notfoundMsg.length() > 0 ) { 175 buf.append( getResource().getLabel( notfoundMsg ) ) 176 .append( BR ); 177 } 178 } 179 180 if( maxRowCount > 0 && maxRowCount <= executeCount ) { 181 buf.append( getResource().getLabel( overflowMsg ) ) 182 .append( BR ); 183 } 184 185 jspPrint( buf.toString() ); 186 } 187 188 return EVAL_PAGE ; 189 } 190 191 /** 192 * タグリブオブジェクトをリリースします。 193 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 194 * 195 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 196 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 197 * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処理は、DBTableModelが新規作成された処理でのみ行う。 198 * @og.rev 5.6.8.2 (2013/09/20) hkeyType 追加 199 * 200 */ 201 @Override 202 protected void release2() { 203 super.release2(); 204 205 tableId = HybsSystem.TBL_MDL_KEY; // sessionキー 206 orderBy = null; // ソート項目 207 command = CMD_NEW; // コマンド 208 baseKey = null; // 検索ベースキー 209 key = null; // 検索キー 210 value = null; // 5.6.8.2 (2013/09/20) 検索バリュー 入れ忘れ 211 executeCount = 0; // 検索/実行件数 212 maxRowCount = 0; // 最大検索数(0は無制限) 213 displayMsg = HybsSystem.sys( "VIEW_DISPLAY_MSG" ); 214 overflowMsg = "MSG0007"; // 検索結果が、制限行数を超えましたので、残りはカットされました。 215 notfoundMsg = "MSG0077"; // 対象データはありませんでした。 216 maxLevel = 1; // 下位層展開最大レベル(0は無制限) 217 like = false; // あいまい検索フラグ 218 isMainTrans = true; // 5.1.6.0 (2010/05/01) DBLastSqlの処理の見直し 219 hkeyType = 0; // 5.6.8.2 (2013/09/20) 0:HKEY_CURRENT_USER(="user") , 1:HKEY_LOCAL_MACHINE(="system") 220 } 221 222 /** 223 * レジストリ から、値を取り出し、DBTableModel を作成します。 224 * 225 * @og.rev 5.6.8.2 (2013/09/20) hkeyType 追加に伴う各種修正 226 * @og.rev 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。 227 * 228 * @return テーブルモデル 229 */ 230 private DBTableModel makeDBTable() { 231 final DBTableModel table = DBTableModelUtil.newDBTable(); 232 table.init( COMMAND_SET.size() ); 233 234 // オリジナルの forEach。カウンタ初期値とラムダ式を与えると、ラムダ式の引数に、カウンタと値が設定される。 235 COMMAND_SET.forEach( 0 , (i,v) -> { 236 final DBColumn dbColumn = getResource().makeDBColumn( v ); 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 final Preferences hayabusaRoot = ( hkeyType == 0 ) ? Preferences.userRoot() : Preferences.systemRoot(); 242 243 try { 244 if( ! hayabusaRoot.nodeExists( baseKey ) ) { 245 final String errMsg = "Preferences BaseKey が Windows Registry に存在しませんでした。" 246 + "[" + HKEY_TYPE[hkeyType] + "\\" + hayabusaRoot.absolutePath() + "]" ; 247 throw new HybsSystemException( errMsg ); 248 } 249 250 showChild( table,hayabusaRoot.node(baseKey),1 ); 251 } 252 catch( final BackingStoreException ex ) { 253 final String errMsg = "レジストリ から、値を取り出す事が出来ませんでした。" 254 + "[" + HKEY_TYPE[hkeyType] + "\\" + hayabusaRoot.absolutePath() + "]" ; 255 throw new HybsSystemException( errMsg,ex ); // 3.5.5.4 (2004/04/15) 引数の並び順変更 256 } 257 258 return table ; 259 } 260 261 /** 262 * Preferences の子要素を検索します。 263 * 264 * この処理は、再帰定義により、階層を順次下がっていきます。 265 * レベル制限、検索最大数制限のチェックを行っています。 266 * addTableValue メソッドを呼び出して、検索結果を、DBTableModel に順次追加していきます。 267 * 268 * @og.rev 5.6.8.2 (2013/09/20) BackingStoreException を throwしない様に修正 269 * 270 * @param table DBTableModelオブジェクト 271 * @param prefs Preferencesオブジェクト 272 * @param lvl レベル制限 273 */ 274 private void showChild( final DBTableModel table, 275 final Preferences prefs, 276 final int lvl ) { 277 278 if( maxRowCount > 0 && maxRowCount <= executeCount ) { return ; } 279 if( maxLevel > 0 && lvl > maxLevel ) { return; } 280 281 String name = null; 282 try { 283 final String [] child = prefs.childrenNames(); 284 285 if( child != null && child.length > 0 ) { 286 for( int i=0; i<child.length; i++ ) { 287 name = child[i]; 288 289 // name に全角文字が使われている場合、正常に処理できないので、Tableへの書き込みだけ行います。 290 if( isZenkakuName( name ) ) { 291 addTableValue( name,table,prefs,lvl,null,false ); 292 } 293 else { 294 final Preferences childPrefs = prefs.node( name.toLowerCase(Locale.JAPAN) ); 295 296 addTableValue( name,table,childPrefs,lvl,null,true ); 297 showChild( table,childPrefs,lvl+1 ); 298 } 299 } 300 } 301 else { 302 showPrefs( table,prefs,lvl ); 303 } 304 } 305 // エラーが発生しても、処理は継続します。 306 catch( final BackingStoreException ex ) { 307 final String errMsg = "BackingStoreエラーが発生しました。[" + (executeCount+1) + "]" 308 + " key=[" + name + "] " 309 + ex.getMessage() ; 310 System.out.println( errMsg ); 311 addTableValue( name,table,prefs,lvl,errMsg,false ); 312 } 313 // エラーが発生しても、処理は継続します。 314 catch( final RuntimeException ex ) { 315 final String errMsg = "RuntimeExceptionエラーが発生しました。[" + (executeCount+1) + "]" 316 + " key=[" + name + "] " 317 + ex.getMessage() ; 318 System.out.println( errMsg ); 319 addTableValue( name,table,prefs,lvl,errMsg,false ); 320 } 321 } 322 323 /** 324 * レジストリのキー情報が、全角文字を含むかかどうか判定します。(含むなら、true)。 325 * 326 * name に全角文字が使われている場合、正常に処理できないので、判定します。 327 * 328 * @param name レジストリのキー情報 329 * @return 全角文字が使われている場合、true を返します。 330 */ 331 private boolean isZenkakuName( final String name ) { 332 boolean isZenkaku = false; 333 for( int i=0; i<name.length(); i++ ) { 334 final char ch =name.charAt(i); 335 if( ch < 0x0020 || ch > 0x007f ) { 336 isZenkaku = true; 337 break; 338 } 339 } 340 return isZenkaku; 341 } 342 343 /** 344 * Preferences の属性を検索します。 345 * 346 * addTableValue メソッドを呼び出して、検索結果を、DBTableModel に順次追加していきます。 347 * 348 * @param table DBTableModelオブジェクト 349 * @param prefs Preferencesオブジェクト 350 * @param lvl レベル制限 351 */ 352 private void showPrefs( final DBTableModel table, 353 final Preferences prefs, 354 final int lvl ) throws BackingStoreException { 355 356 final String [] keys = prefs.keys(); 357 358 if( keys != null ) { 359 for( int i=0; i<keys.length; i++ ) { 360 final String name = keys[i]; 361 addTableValue( name,table,prefs,lvl,null,false ); 362 } 363 } 364 } 365 366 /** 367 * 検索された Preferencesを、DBTableModel に順次追加していきます。 368 * 369 * @og.rev 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。 370 * 371 * @param name 検索キー 372 * @param table DBTableModelオブジェクト 373 * @param prefs Preferencesオブジェクト 374 * @param lvl レベル制限 375 * @param msg 値にメッセージを書き込みたい場合 (正常時ならnullでかまわない) 376 * @param flag 値の取得方法 [true:空文字列/false:Preferencesから、検索キーを使用して取得] 377 */ 378 private void addTableValue( final String name, 379 final DBTableModel table, 380 final Preferences prefs, 381 final int lvl, 382 final String msg, 383 final boolean flag ) { 384 385 if( maxRowCount > 0 && maxRowCount <= executeCount ) { return ; } 386 387 final String lowerName = name.toLowerCase(Locale.JAPAN); 388 389 if( key != null ) { 390 if( like ) { 391 if( lowerName.indexOf( key ) < 0 ) { return; } 392 } 393 else { 394 if( ! lowerName.equalsIgnoreCase( key ) ) { return; } 395 } 396 } 397 398 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid declaring a variable if it is unreferenced before a possible exit point. 399 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..; 400 final String val = msg == null ? ( flag ? "" : prefs.get(lowerName, "") ) : msg ; 401 if( value != null ) { 402 if( like ) { 403 if( (val.toLowerCase(Locale.JAPAN)).indexOf( value ) < 0 ) { return; } 404 } 405 else { 406 if( ! val.equalsIgnoreCase( value ) ) { return; } 407 } 408 } 409 410 String[] clmVals = new String[COMMAND_SET.size()]; 411 clmVals[0] = String.valueOf( lvl ); // LEVEL 412 clmVals[1] = name; // KEY 413 clmVals[2] = val; // VALUE 414 clmVals[3] = String.valueOf( flag ); // CHILD 415 clmVals[4] = prefs.absolutePath() ; // PATH 416 417 table.addColumnValues( clmVals ); 418 executeCount++ ; 419 } 420 421 /** 422 * 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します 423 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。 424 * 425 * @og.tag 426 * 検索結果より、DBTableModelオブジェクトを作成します。これを、下流のviewタグ等に 427 * 渡す場合に、通常は、session を利用します。その場合の登録キーです。 428 * query タグを同時に実行して、結果を求める場合、同一メモリに配置される為、 429 * この tableId 属性を利用して、メモリ空間を分けます。 430 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。 431 * 432 * @param id テーブルID (sessionに登録する時のID) 433 */ 434 public void setTableId( final String id ) { 435 tableId = nval( getRequestParameter( id ), tableId ); 436 } 437 438 /** 439 * 【TAG】検索した結果を表示する表示順をファイル属性名で指定します。 440 * 441 * @og.tag 442 * 現仕様では、複数のキーを指定することは出来ません。 443 * 444 * @param ordr ソートキー 445 */ 446 public void setOrderBy( final String ordr ) { 447 orderBy = nval( getRequestParameter( ordr ),orderBy ); 448 } 449 450 /** 451 * 【TAG】コマンド (NEW,RENEW)をセットします(初期値:NEW)。 452 * 453 * @og.tag 454 * コマンドは,HTMLから(get/post)指定されますので,CMD_xxx で設定される 455 * フィールド定数値のいづれかを、指定できます。 456 * 何も設定されない、または、null の場合は、"NEW" が初期値にセットされます。 457 * 458 * @param cmd コマンド (public static final 宣言されている文字列) 459 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.RegistryQueryTag.CMD_NEW">コマンド定数</a> 460 */ 461 public void setCommand( final String cmd ) { 462 final String cmd2 = getRequestParameter( cmd ); 463 if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); } 464 } 465 466 /** 467 * 【TAG】検索ベースキーを設定します(HKEY_CURRENT_USER/Software/XXX の XXX をベースとします)。 468 * 469 * @og.tag 470 * レジストリの検索で、HKEY_CURRENT_USER か、HKEY_LOCAL_MACHINE の区別を、hkeyType 属性で付ける事が 471 * できるようにしました。昔は、HKEY_CURRENT_USER/Software/ 以下の検索ができていましたが、 472 * 今現在は、できなくなっているようです。(または、使い方が間違っているか) 473 * そこで、標準(/JavaSoft/Prefs)、/Muratec、/Microsoft だけ、検索できるように、 474 * XXXXPreferencesFactory を作成しました。 475 * 詳細は、opengionV6/src/jdk170uXX_WindowsPreference を参照願います。 476 * これにより、従来通りの方法で(制限はかかりますが)レジストリを検索できます。 477 * 478 * ベースキー に指定できるのは、"/Muratec" , "/Microsoft" で始まるキーだけです。 479 * それに続く "/" で区切った階層構造も表現可能です。 480 * 標準(/JavaSoft/Prefs) は、何も指定しないことで、標準であることを示します。 481 * 482 * @param bkey 検索ベースキー 483 */ 484 public void setBaseKey( final String bkey ) { 485 baseKey = nval( getRequestParameter( bkey ),baseKey ); 486 } 487 488 /** 489 * 【TAG】検索キーを設定します。 490 * 491 * @og.tag 検索キーを設定します。 492 * 493 * @param ky 検索キー 494 */ 495 public void setKey( final String ky ) { 496 key = nval( getRequestParameter( ky ),key ); 497 if( key != null ) { key = key.toLowerCase(Locale.JAPAN); } 498 } 499 500 /** 501 * 【TAG】検索バリューを設定します。 502 * 503 * @og.tag 検索バリューを設定します。 504 * 505 * @param val 検索バリュー 506 */ 507 public void setValue( final String val ) { 508 value = nval( getRequestParameter( val ),value ); 509 if( value != null ) { value = value.toLowerCase(Locale.JAPAN); } 510 } 511 512 /** 513 * 【TAG】レジストリの最大検索件数をセットします(初期値:0[無制限])。 514 * 515 * @og.tag 516 * DBTableModelのデータとして登録する最大件数をこの値に設定します。 517 * サーバーのメモリ資源と応答時間の確保の為です。 518 * 初期値は、0 は、無制限です。 519 * 520 * @param count 最大件数 521 */ 522 public void setMaxRowCount( final String count ) { 523 maxRowCount = nval( getRequestParameter( count ),maxRowCount ); 524 } 525 526 /** 527 * 【TAG】検索結果を画面上に表示するメッセージIDを指定します 528 * (初期値:VIEW_DISPLAY_MSG[={@og.value SystemData#VIEW_DISPLAY_MSG}])。 529 * 530 * @og.tag 531 * ここでは、検索結果の件数や登録された件数をまず出力し、 532 * その次に、ここで指定したメッセージをリソースから取得して 533 * 表示します。 534 * 件数を表示させる場合は、displayMsg = "MSG0033"[ 件検索しました] をセットしてください。 535 * 表示させたくない場合は, displayMsg = "" をセットしてください。 536 * (初期値:システム定数のVIEW_DISPLAY_MSG[={@og.value SystemData#VIEW_DISPLAY_MSG}])。 537 * 538 * @param id 処理結果表示メッセージID 539 */ 540 public void setDisplayMsg( final String id ) { 541 displayMsg = getRequestParameter( id ); 542 } 543 544 /** 545 * 【TAG】検索結果がゼロ件の場合に表示するメッセージリソースIDを指定します(初期値:MSG0077[対象データはありませんでした])。 546 * 547 * @og.tag 548 * ここでは、検索結果がゼロ件の場合のみ、特別なメッセージを表示させます。 549 * 従来は、displayMsg と兼用で、『0 件検索しました』という表示でしたが、 550 * displayMsg の初期表示は、OFF になりましたので、ゼロ件の場合のみ別に表示させます。 551 * 表示させたくない場合は, notfoundMsg = "" をセットしてください。 552 * 初期値は、MSG0077[対象データはありませんでした]です。 553 * 554 * @param id ゼロ件時表示メッセージID 555 */ 556 public void setNotfoundMsg( final String id ) { 557 final String ids = getRequestParameter( id ); 558 if( ids != null ) { notfoundMsg = ids; } 559 } 560 561 /** 562 * 【TAG】検索データが最大検索数をオーバーした場合に表示するメッセージリソースIDを指定します 563 * (初期値: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 曖昧検索を行うかどうか [true:行う/false:行わない] 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 final 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 final 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 * @og.rtnNotNull 634 */ 635 @Override 636 protected String getTagName() { 637 return "regQuery" ; 638 } 639 640 /** 641 * 【TAG】(通常は使いません)タグで処理される処理がメインとなるトランザクション処理かどうかを指定します(初期値:true)。 642 * 643 * @og.tag 644 * この値は、ファイルダウンロード処理に影響します。この値がtrueに指定された時にcommitされたDBTableModelが 645 * ファイルダウンロードの対象の表になります。 646 * 647 * このパラメーターは、通常、各タグにより実装され、ユーザーが指定する必要はありません。 648 * 但し、1つのJSP内でDBTableModelが複数生成される場合に、前に処理したDBTableModelについてファイルダウンロードをさせたい 649 * 場合は、後ろでDBTableModelを生成するタグで、明示的にこの値をfalseに指定することで、ファイルダウンロード処理の対象から 650 * 除外することができます。 651 * 652 * @og.rev 5.1.6.0 (2010/05/01) 新規作成 653 * 654 * @param flag メイントランザクションかどうか [true:メイン/false:その他] 655 */ 656 public void setMainTrans( final String flag ) { 657 isMainTrans = nval( getRequestParameter( flag ),isMainTrans ); 658 } 659 660 /** 661 * このオブジェクトの文字列表現を返します。 662 * 基本的にデバッグ目的に使用します。 663 * 664 * @return このクラスの文字列表現 665 * @og.rtnNotNull 666 */ 667 @Override 668 public String toString() { 669 return ToString.title( this.getClass().getName() ) 670 .println( "VERSION" ,VERSION ) 671 .println( "tableId" ,tableId ) 672 .println( "command" ,command ) 673 .println( "baseKey" ,baseKey ) 674 .println( "key" ,key ) 675 .println( "value" ,value ) 676 .println( "maxRowCount" ,maxRowCount ) 677 .println( "orderBy" ,orderBy ) 678 .println( "displayMsg" ,displayMsg ) 679 .println( "overflowMsg" ,overflowMsg ) 680 .println( "maxLevel" ,maxLevel ) 681 .println( "like" ,like ) 682 .println( "executeCount",executeCount ) 683 .println( "COMMAND_SET" ,COMMAND_SET ) 684 .println( "Other..." ,getAttributes().getAttribute() ) 685 .fixForm().toString() ; 686 } 687}