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.db; 017 018import java.util.concurrent.ConcurrentMap; // 6.4.3.3 (2016/03/04) 019import java.util.concurrent.ConcurrentHashMap; // 6.4.3.1 (2016/02/12) refactoring 020import java.util.Set; // 6.0.2.4 (2014/10/17) 021import java.util.HashSet; // 6.0.2.4 (2014/10/17) 022import java.util.function.BiConsumer; // 6.4.5.0 (2016/04/08) 023import java.util.regex.Pattern; 024 025import org.opengion.fukurou.util.StringUtil; 026import static org.opengion.fukurou.system.HybsConst.BUFFER_MIDDLE; // 6.1.0.0 (2014/12/26) refactoring 027 028/** 029 * 編集設定情報を管理するためのデータ管理クラスです。 030 * ここで管理される各パラメーターの意味は以下の通りです。 031 * (各インデックス番号は、内部的に管理されているインデックス番号を意味します) 032 * 033 * ・0:編集名 034 * この編集設定オブジェクトの名称です。 035 * ・1:表示カラム 036 * 表示対象となるカラム一覧です。CSV形式で指定します。 037 * この一覧には、非表示のカラムも合わせて管理され、非表示カラムについては、 038 * カラム名の先頭に"!"をつけます。 039 * 例) AAA,!BBB,CCC ⇒ AAA,CCCの順に表示(BBBは非表示) 040 * ・2:集計カラム 041 * 各値をSUMする対象となるカラムです。(CSV形式で複数指定が可能) 042 * ここで指定されたカラムは数値型である必要があります。 043 * SQL構文における、SUM関数の引数として指定するカラムに相当します。 044 * ・3:グループカラム 045 * 集計カラムの各値をグルーピングするためのカラムです。(CSV形式で複数指定が可能) 046 * SQL構文における、GROUP BYに指定するカラムに相当します。 047 * ・4:小計カラム 048 * 集計カラムの各値に対し、小計行を付加するためのブレイクキーを指定します。(CSV形式で複数指定が可能) 049 * ・5:合計カラム 050 * 集計カラムの各値に対し、合計行を付加するためのブレイクキーを指定します。(CSV形式で複数指定が可能) 051 * ・6:総合計フラグ 052 * 集計カラムの各値に対し、総合計行を付加するかどうかを指定します。(0以外:追加する 0:追加しない) 053 * ・7:表示順カラム 054 * データの表示順をその順番にCSV形式で指定します。 055 * カラム名の先頭に"!"をつけた場合は、そのカラムは降順で表示されます。 056 * SQL構文における、orderby句に相当します。 057 * ・8:共通フラグ 058 * この編集設定オブジェクトが、共通(全ユーザー公開)編集かどうかを 059 * 指定します。(0以外:共通 0:個人のみ) 060 * 061 * @og.rev 5.3.6.0 (2011/06/01) 新規追加 062 * 063 * @version 5.0 064 * @author Hiroki Nakamura 065 * @since JDK6.0, 066 */ 067public class DBEditConfig { 068 069 private static final int EDIT_KEY_NAME = 0; 070 private static final int EDIT_KEY_VIEW = 1; 071 private static final int EDIT_KEY_SUM = 2; 072 private static final int EDIT_KEY_GROUP = 3; 073 private static final int EDIT_KEY_SUBTOTAL = 4; 074 private static final int EDIT_KEY_TOTAL = 5; 075 private static final int EDIT_KEY_GRANDTOTAL= 6; 076 private static final int EDIT_KEY_FIRSTTOTAL= 7; // 6.1.1.0 (2015/01/17) FIRSTTOTAL 追加 077 private static final int EDIT_KEY_ORDERBY = 8; 078 private static final int EDIT_KEY_COMMON = 9; 079 080 private static final String[] EDIT_KEYS // 6.3.9.1 (2015/11/27) 修飾子を、なし → private に変更。キーに、"EDIT_" を最初から付けておきます。 081 = { "EDIT_NAME", "EDIT_VIEW", "EDIT_SUM", "EDIT_GROUP", "EDIT_SUBTOTAL", "EDIT_TOTAL", "EDIT_GRANDTOTAL", "EDIT_FIRSTTOTAL", "EDIT_ORDERBY", "EDIT_COMMON" }; 082 083 private final String[] editVals = new String[EDIT_KEYS.length]; // 6.3.9.1 (2015/11/27) 再利用率が低いのと、コンパイラが何とかしてくれるでしょう。 084 085 private int sumClmCount; 086 private int groupClmCount; 087 private int subTotalClmCount; 088 private int totalClmCount; 089 /** 6.4.3.1 (2016/02/12) PMD refactoring. HashMap → ConcurrentHashMap に置き換え。 */ 090 private final ConcurrentMap<String,String> orderMap = new ConcurrentHashMap<>(); 091 private String orderByDescClms; 092 093 /** 094 * コンストラクタ 095 * 096 * 空の編集設定オブジェクトを構築します。 097 */ 098 public DBEditConfig() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 099 100 /** 101 * コンストラクタ 102 * 103 * 各種パラメーターを指定して編集設定オブジェクトを構築します。 104 * 105 * @og.rev 6.1.1.0 (2015/01/17) 総合計を最初の行に追加するかどうか(FirstTotal)の属性を追加 106 * 107 * @param editName 編集名称 108 * @param viewClms 画面表示カラム 109 * @param sumClms 集計カラム 110 * @param groupClms グループカラム 111 * @param subTotalClms 小計カラム 112 * @param totalClms 合計カラム 113 * @param useGrandTotal 総合計行を追加するか(1:追加する 1以外:追加しない) 114 * @param useFirstTotal 総合計行を追加するか(1:追加する 1以外:追加しない) 115 * @param orderByClms 表示順 116 * @param isCommon 共通編集かどうか(1:共通 1以外:個人のみ) 117 */ 118 public DBEditConfig( final String editName, final String viewClms 119 , final String sumClms, final String groupClms 120 , final String subTotalClms, final String totalClms 121 , final String useGrandTotal, final String useFirstTotal 122 , final String orderByClms, final String isCommon ) { 123 124 editVals[EDIT_KEY_NAME] = editName; 125 editVals[EDIT_KEY_VIEW] = viewClms; 126 editVals[EDIT_KEY_SUM] = sumClms; 127 editVals[EDIT_KEY_GROUP] = groupClms; 128 editVals[EDIT_KEY_SUBTOTAL] = subTotalClms; 129 editVals[EDIT_KEY_TOTAL] = totalClms; 130 editVals[EDIT_KEY_GRANDTOTAL] = useGrandTotal; 131 editVals[EDIT_KEY_FIRSTTOTAL] = useFirstTotal; // 6.1.1.0 (2015/01/17) 132 editVals[EDIT_KEY_ORDERBY] = orderByClms; 133 editVals[EDIT_KEY_COMMON] = isCommon; 134 135 init(); 136 } 137 138 /** 139 * コンストラクタ 140 * 141 * 各種パラメーターを配列で指定して編集設定オブジェクトを構築します。 142 * 各パラメータの配列インデックスは、{@link #getEditKeys(String,String)}で返される 143 * キー一覧の配列インデックスと一致します。 144 * 各パラメーターの意味については、クラスのJavadoc{@link DBEditConfig}を参照して下さい。 145 * 146 * @param editVals 設定値(配列) 147 */ 148 public DBEditConfig( final String[] editVals ) { 149 System.arraycopy( editVals, 0, this.editVals, 0, editVals.length ); 150 init(); 151 } 152 153 /** 154 * 編集設定オブジェクト作成時の初期化処理です。 155 * コンストラクタの引数に基づき内部変数の初期設定を行います。 156 */ 157 private void init() { 158 sumClmCount = StringUtil.csv2Array( editVals[EDIT_KEY_SUM] ).length; 159 groupClmCount = StringUtil.csv2Array( editVals[EDIT_KEY_GROUP] ).length; 160 subTotalClmCount= StringUtil.csv2Array( editVals[EDIT_KEY_SUBTOTAL] ).length; 161 totalClmCount = StringUtil.csv2Array( editVals[EDIT_KEY_TOTAL] ).length; 162 163 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..; 164 if( editVals[EDIT_KEY_ORDERBY] == null ) { 165 orderByDescClms = null; 166 } 167 else { 168 final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ); 169 final String[] ary = StringUtil.csv2Array( editVals[EDIT_KEY_ORDERBY] ); 170 for( int i=0; i<ary.length ;i++ ) { 171 String str = ary[i]; 172 if( StringUtil.startsChar( str , '!' ) ) { // 6.2.0.0 (2015/02/27) 1文字 String.startsWith 173 str = str.substring( 1 ); 174 if( buf.length() > 0 ) { buf.append( ',' ); } // 6.0.2.5 (2014/10/31) char を append する。 175 buf.append( str ); 176 } 177 orderMap.put( str, String.valueOf( i+1 ) ); 178 } 179 orderByDescClms = buf.toString(); 180 } 181 } 182 183 /** 184 * 画面ID、編集名をキーに、編集設定オブジェクトの各設定値の管理キーを指定します。 185 * 186 * 編集設定オブジェクトで管理される各キーに対して、 187 * "EDIT_[KEY]_(画面ID)_(編集名)"というキーを生成し、これを配列にして返します。 188 * 189 * @og.rev 6.0.2.2 (2014/10/03) 新規追加。DBEditConfig から、移動 190 * @og.rev 6.3.9.1 (2015/11/27) DBEditConfigManager から、移動。 191 * 192 * @param guikey 画面ID 193 * @param editName 編集名 194 * 195 * @return 編集設定を管理するためのキー一覧 196 */ 197 public static String[] getEditKeys( final String guikey, final String editName ) { 198 final String[] rtn = new String[EDIT_KEYS.length]; 199 final String keyNm = "_" + guikey + "_" + editName; 200 201 for( int i=0; i<EDIT_KEYS.length; i++ ) { 202 rtn[i] = EDIT_KEYS[i] + keyNm; 203 } 204 return rtn; 205 } 206 207 /** 208 * 編集設定オブジェクトの各設定値を配列にして返します。 209 * 210 * 配列のインデックス番号は、{@link #getEditKeys(String,String)}で生成されるキーの 211 * インデックス番号と一致します。 212 * 213 * @return 編集設定オブジェクトの設定値一覧(配列) 214 */ 215 public String[] getEditVals() { 216 final String[] rtn = new String[editVals.length]; 217 System.arraycopy( editVals, 0, rtn, 0, editVals.length ); 218 return rtn; 219 } 220 221 /** 222 * 編集名を返します。 223 * 224 * @return 編集名 225 */ 226 public String getEditName() { 227 return editVals[EDIT_KEY_NAME]; 228 } 229 230 /** 231 * 書き込み許可するかどうかを決める為の情報を返します。 232 * 233 * EDITNAME利用時は、writeCheckタグ内で書き込み許可判定を行っています。(ROLE制御は別) 234 * USE_EDIT_WITH_EDITNAME か、writeCheckタグのuseEditをtrueにすれば、書き込み許可となり 235 * USE_EDIT_WITH_NAME_SEQ が true の場合は、このメソッドの戻り値がtrue なら書き込み許可となります。 236 * 237 * 成立条件: 238 * EDIT_KEY_NAME に、非表示(!カラム)がなく、集計カラム,グループカラム,小計カラム,合計カラム,総合計行 も 239 * 未使用の場合は、true を、それ以外は、false を返します。 240 * 要するに、列の並び替えと、表示順、(降順)指定のみの場合だけ、書き込み許可します。 241 * 242 * @og.rev 7.2.9.1 (2020/10/23) writeCheckタグ内で書き込み許可するかどうかを決める為の情報 243 * 244 * @return 編集名 245 */ 246 public boolean useEditName() { 247 return editVals[EDIT_KEY_VIEW] != null && editVals[EDIT_KEY_VIEW].indexOf( '!' ) < 0 && 248 !useSum() && !useGroup() && !useSubTotal() && !useTotal() && !useGrandTotal() ; 249 } 250 251 /** 252 * 表示カラム名の一覧をCSV形式で返します。 253 * 非表示カラムについては、カラム名の先頭に"!"をつけて返されます。 254 * 例) AAA,!BBB,CCC ⇒ AAA,CCCの順に表示(BBBは非表示) 255 * 256 * @return 表示カラム名一覧(CSV形式) 257 */ 258 public String getViewClms() { 259 return editVals[EDIT_KEY_VIEW]; 260 } 261 262 /** 263 * 表示カラム(CSV形式)をチェックし、変更があれば、反映したカラムを作成します。 264 * 265 * 表示カラムは、並び順や非表示マーカー(!)などが加味され、ユーザー、画面ごとに 266 * データベースに記録されています。JSPソースを修正した場合、データベースに 267 * 書き込まれた表示カラムは、反映されないため、カラム選択画面等に表示されません。 268 * そこで、オリジナルのカラムに追加された場合は、カラムを比較することで、 269 * 追加分のカラムを、非表示カラムとして、後ろに追記します。 270 * 削除された場合は、ViewForm で警告表示することで、ユーザーに変更を促します。 271 * 272 * @og.rev 6.0.2.4 (2014/10/17) JSP修正時の追加カラム対応 273 * @og.rev 5.9.32.0 (2018/05/02) spritView使用時の対応 274 * 275 * @param orgClms オリジナルのカラム(CSV形式) 276 * 277 * @return 変更後の表示カラム(CSV形式) 278 */ 279 public String getViewClms( final String orgClms ) { 280 String viewClms = editVals[EDIT_KEY_VIEW]; 281 282 if( orgClms == null || orgClms.isEmpty() ) { return viewClms; } // orgClms がなければ、viewClms を返す。 283 // 基本的には、両者のカラムは、一致するはず。 284// final String[] vclms = viewClms.split( "," ); // 表示順、非表示処理を行ったカラム 285 final Pattern pattern1 = Pattern.compile("[,|]"); // spritView使用を考慮して、「 , or | 」で分割します。 5.9.32.0 ADD 286 final String[] vclms = pattern1.split(viewClms); 287// final String[] fclms = orgClms.split( "," ); // 元々の表示可能カラムすべて(fullClms) 288 final String[] fclms = vclms.clone(); // spritView使用時は未固定の列情報のみ渡されるため、vclmsの値から取得するように変更。5.9.32.0 ADD 289 for(int i=0; i<fclms.length; i++) { 290 fclms[i] = fclms[i].charAt(0) == '!' ? fclms[i].substring(1) : fclms[i]; // 非表示の(!)は削除します。 291 } 292 293 // 表示可能カラムすべての Set を作成します。 294 final Set<String> fset = new HashSet<>(); 295 for( int i=0; i<fclms.length; i++ ) { // orgClms をSet に追加します。 296 fset.add( fclms[i] ); 297 } 298 299 // 非表示カラムの内、表示可能カラムに存在しない分だけの Set を作成します。 300 // また、表示可能カラムから、順番に、viewClms の値を削除していきます。 301 final Set<String> vset = new HashSet<>(); 302 final StringBuilder vbuf = new StringBuilder( BUFFER_MIDDLE ); // 新しい viewClms 作成用 303 for( int i=0; i<vclms.length; i++ ) { // viewClms をSet に追加します。 304 String clm = vclms[i]; 305 if( clm == null || clm.isEmpty() ) { continue; } // 6.0.2.5 (2014/10/31) 潜在バグ? 先頭に"," が来るとアベンドする。 306 clm = clm.charAt(0) == '!' ? clm.substring(1) : clm ; // 非表示の (!) は削除します。 307 if( fset.remove( clm ) ) { // fullSet にあれば、削除するとともに、新viewClmsを作成する。 308 if( vbuf.length() > 0 ) { vbuf.append(','); } // 最初以降は、カンマで連結する。 // 6.0.2.5 (2014/10/31) char を append する。 309 vbuf.append( vclms[i] ); // append するのは、(!) 付のカラム 310 } 311 else { 312 vset.add( clm ); // fullSet になければ、viewSet に追加 313 } 314 } 315 316 // この段階で、fset、vset ともに、それぞれ独自のカラムが残っている。 317 // どちらも、残っていなければ、正常なので、viewClms を返す。 318 if( vset.isEmpty() && fset.isEmpty() ) { return viewClms; } 319 320 // fullSet にカラムが残っていれば、非表示で、新viewClmsに、追加する。 321 if( !fset.isEmpty() ) { 322 final String[] defClms = fset.toArray( new String[fset.size()] ); 323 for( int i=0; i<defClms.length; i++ ) { 324 if( vbuf.length() > 0 ) { vbuf.append(','); } // 6.0.2.5 (2014/10/31) 最初以降は、カンマで連結する。 325 vbuf.append('!').append( defClms[i] ); // 非表示カラムとして、後ろに追加する。 326 } 327 } 328 viewClms = vbuf.toString(); 329 330 editVals[EDIT_KEY_VIEW] = viewClms; 331 return viewClms; 332 } 333 334 /** 335 * 集計カラムの一覧をCSV形式で返します。 336 * 337 * @return 集計カラムの一覧(CSV形式) 338 */ 339 public String getSumClms() { 340 return editVals[EDIT_KEY_SUM]; 341 } 342 343 /** 344 * 集計処理を行うかどうかを返します。 345 * これは、集計カラムが指定されているか、と同じ意味です。 346 * 347 * @return true:対象 false:非対象 348 */ 349 public boolean useSum() { 350 return editVals[EDIT_KEY_SUM] != null && editVals[EDIT_KEY_SUM].length() > 0 ; 351 } 352 353 /** 354 * 指定されたカラムが集計対象のカラムかどうかを返します。 355 * 356 * @param clm カラム 357 * 358 * @return true:対象 false:非対象 359 */ 360 public boolean isSumClm( final String clm ) { 361 // 6.4.1.1 (2016/01/16) PMD refactoring. A method should have only one exit point, and that should be the last statement in the method 362 // 条件反転注意 363 return clm != null && editVals[EDIT_KEY_SUM] != null && ( ","+editVals[EDIT_KEY_SUM]+"," ).indexOf( ","+clm+"," ) >= 0 ; 364 } 365 366 /** 367 * 集計カラムのカラム数を返します。 368 * 369 * @return 集計カラムのカラム数 370 */ 371 public int getSumClmCount() { 372 return sumClmCount; 373 } 374 375 /** 376 * グループカラムの一覧をCSV形式で返します。 377 * 378 * @return グループカラムの一覧(CSV形式) 379 */ 380 public String getGroupClms() { 381 return editVals[EDIT_KEY_GROUP]; 382 } 383 384 /** 385 * グループ処理を行うかどうかを返します。 386 * これは、グループカラムが指定されているか、と同じ意味です。 387 * 388 * @return true:対象 false:非対象 389 */ 390 public boolean useGroup() { 391 return editVals[EDIT_KEY_GROUP] != null && editVals[EDIT_KEY_GROUP].length() > 0 ; 392 } 393 394 /** 395 * 指定されたカラムがグループ対象のカラムかどうかを返します。 396 * 397 * @param clm カラム 398 * 399 * @return true:対象 false:非対象 400 */ 401 public boolean isGroupClm( final String clm ) { 402 // 6.4.1.1 (2016/01/16) PMD refactoring. A method should have only one exit point, and that should be the last statement in the method 403 // 条件反転注意 404 return clm != null && editVals[EDIT_KEY_GROUP] != null && ( ","+editVals[EDIT_KEY_GROUP]+"," ).indexOf( ","+clm+"," ) >= 0 ; 405 } 406 407 /** 408 * グループカラムのカラム数を返します。 409 * 410 * @return グループカラムのカラム数 411 */ 412 public int getGroupClmCount() { 413 return groupClmCount; 414 } 415 416 /** 417 * 小計カラムの一覧をCSV形式で返します。 418 * 419 * @return 小計カラムの一覧(CSV形式) 420 */ 421 public String getSubTotalClms() { 422 return editVals[EDIT_KEY_SUBTOTAL]; 423 } 424 425 /** 426 * 小計処理を行うかどうかを返します。 427 * これは、小計カラムが指定されているか、と同じ意味です。 428 * 429 * @return true:対象 false:非対象 430 */ 431 public boolean useSubTotal() { 432 return editVals[EDIT_KEY_SUBTOTAL] != null && editVals[EDIT_KEY_SUBTOTAL].length() > 0 ; 433 } 434 435 /** 436 * 指定されたカラムが小計対象のカラムかどうかを返します。 437 * 438 * @param clm カラム 439 * 440 * @return true:対象 false:非対象 441 */ 442 public boolean isSubTotalClm( final String clm ) { 443 // 6.4.1.1 (2016/01/16) PMD refactoring. A method should have only one exit point, and that should be the last statement in the method 444 // 条件反転注意 445 return clm != null && editVals[EDIT_KEY_SUBTOTAL] != null && ( ","+editVals[EDIT_KEY_SUBTOTAL]+"," ).indexOf( ","+clm+"," ) >= 0 ; 446 } 447 448 /** 449 * 小計カラムのカラム数を返します。 450 * 451 * @return グループカラムのカラム数 452 */ 453 public int getSubTotalClmCount() { 454 return subTotalClmCount; 455 } 456 457 /** 458 * 合計カラムの一覧をCSV形式で返します。 459 * 460 * @return 合計カラムの一覧(CSV形式) 461 */ 462 public String getTotalClms() { 463 return editVals[EDIT_KEY_TOTAL]; 464 } 465 466 /** 467 * 合計処理を行うかどうかを返します。 468 * これは、合計カラムが指定されているか、と同じ意味です。 469 * 470 * @return true:対象 false:非対象 471 */ 472 public boolean useTotal() { 473 return editVals[EDIT_KEY_TOTAL] != null && editVals[EDIT_KEY_TOTAL].length() > 0 ; 474 } 475 476 /** 477 * 指定されたカラムが合計対象のカラムかどうかを返します。 478 * 479 * @param clm カラム 480 * 481 * @return true:対象 false:非対象 482 */ 483 public boolean isTotalClm( final String clm ) { 484 // 6.4.1.1 (2016/01/16) PMD refactoring. A method should have only one exit point, and that should be the last statement in the method 485 // 条件反転注意 486 return clm != null && editVals[EDIT_KEY_TOTAL] != null && ( ","+editVals[EDIT_KEY_TOTAL]+"," ).indexOf( ","+clm+"," ) >= 0 ; 487 } 488 489 /** 490 * 合計カラムのカラム数を返します。 491 * 492 * @return グループカラムのカラム数 493 */ 494 public int getTotalClmCount() { 495 return totalClmCount; 496 } 497 498 /** 499 * 総合計行を付加するかどうかを返します。 500 * 501 * @return true:対象 false:非対象 502 */ 503 public boolean useGrandTotal() { 504 return StringUtil.nval( editVals[EDIT_KEY_GRANDTOTAL], false ); 505 } 506 507 /** 508 * 総合計を最初の行に追加するかどうかを返します。 509 * 510 * @og.rev 6.1.1.0 (2015/01/17) 総合計を最初の行に追加するかどうか(FirstTotal)の属性を追加 511 * 512 * @return true:対象 false:非対象 513 */ 514 public boolean useFirstTotal() { 515 return StringUtil.nval( editVals[EDIT_KEY_FIRSTTOTAL], false ); 516 } 517 518 /** 519 * 表示順カラムをCSV形式で返します。 520 * カラムの並び順が表示順としての優先順になります。 521 * また、降順で表示するカラムについては、カラム名の先頭に"!"が付加されます。 522 * 523 * @return 標準順カラムの一覧(CSV形式) 524 */ 525 public String getOrderByClms() { 526 return editVals[EDIT_KEY_ORDERBY]; 527 } 528 529 /** 530 * 指定されたカラムの表示順の優先番号を返します。 531 * 指定カラムが標準として指定されていない場合は、""(ゼロストリング)を返します。 532 * 533 * @og.rev 6.4.3.1 (2016/02/12) PMD refactoring. HashMap → ConcurrentHashMap に置き換え。 534 * 535 * @param clm カラム 536 * 537 * @return 表示順の優先番号 538 * @og.rtnNotNull 539 */ 540 public String getOrder( final String clm ) { 541 // ConcurrentMap#getOrDefault(Object,V) を使用して、Map の値が null のときの初期値を返します。 542 return clm == null || editVals[EDIT_KEY_ORDERBY] == null 543 ? "" 544 : orderMap.getOrDefault( clm , "" ); 545 } 546 547 /** 548 * 指定されたカラムの表示順指定が降順であるかどうかを返します。 549 * 標準と指定されていない場合は、falseを返します。 550 * 551 * @param clm カラム 552 * 553 * @return true:降順 false:昇順 554 */ 555 public boolean isOrderByDesc( final String clm ) { 556 // 6.4.1.1 (2016/01/16) PMD refactoring. A method should have only one exit point, and that should be the last statement in the method 557 // 条件反転注意 558 return clm != null && orderByDescClms != null && ( ","+orderByDescClms+"," ).indexOf( ","+clm+"," ) >= 0 ; 559 } 560 561 /** 562 * 並び替え処理を行うかどうかを返します。 563 * これは、表示順カラムが指定されているか、と同じ意味です。 564 * 565 * @return true:対象 false:非対象 566 */ 567 public boolean useOrderBy() { 568 return editVals[EDIT_KEY_ORDERBY] != null && editVals[EDIT_KEY_ORDERBY].length() > 0 ; 569 } 570 571 /** 572 * この編集設定オブジェクトが、共通(全ユーザー公開)編集か 573 * どうかを返します。 574 * 575 * @return 0以外:共通 0:個人のみ 576 */ 577 public boolean isCommon() { 578 return StringUtil.nval( editVals[EDIT_KEY_COMMON], false ); 579 } 580 581 /** 582 * 画面IDに対応した、内部のキーと値の各要素に対して指定されたアクションを実行します。 583 * 584 * getEditKeys(String,String) で得られるキーの文字列配列と、getEditVals()で得られる値の文字列配列 585 * を、順次、action メソッドに渡していきます。 586 * キーの文字列配列の作成時の編集名は、このオブジェクトの編集名を使用します。 587 * 588 * @og.rev 6.4.5.0 (2016/04/08) UserInfo のEditConfig関連機能を、DBEditConfigManagerに移植します。新規追加 589 * 590 * @param guikey 画面ID 591 * @param action 各要素に対して実行される関数型インタフェース( editKey、editVal ) 592 */ 593 public void forEach( final String guikey, final BiConsumer<String ,String> action ) { 594 final String keyNm = "_" + guikey + "_" + editVals[EDIT_KEY_NAME]; 595 596 for( int i=0; i<EDIT_KEYS.length; i++ ) { 597 action.accept( EDIT_KEYS[i] + keyNm , editVals[i] ); 598 } 599 } 600}