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.html; 017 018import java.util.Arrays; 019import java.util.Iterator; 020import java.util.List; 021import java.util.Map; 022import java.util.concurrent.ConcurrentMap; // 6.4.3.3 (2016/03/04) 023import java.util.stream.Collectors; // 6.4.3.4 (2016/03/11) 024import java.io.Writer; 025import java.io.IOException; 026 027import org.opengion.fukurou.system.HybsConst ; // 6.1.0.0 (2014/12/26) 028import org.opengion.fukurou.util.StringUtil; 029import org.opengion.fukurou.util.Attributes; 030 031import org.opengion.hayabusa.common.HybsSystem; 032import org.opengion.hayabusa.common.HybsSystemException; 033import org.opengion.hayabusa.db.DBColumn; 034import org.opengion.hayabusa.db.DBTableModel; 035import org.opengion.hayabusa.db.DBColumnConfig; 036import org.opengion.hayabusa.resource.ResourceManager; 037 038/** 039 * ViewForm インターフェース の実装Abstractクラスです。 040 * これを,共通のスーパークラスとして 各種表示フォーム(例:HTML表示等)に使います。 041 * 042 * このクラス は、setter/getterメソッドのデフォルト実装を提供しています。 043 * 各種表示フォームに対応したサブクラス上で, create() をオーバーライドして下さい。 044 * 045 * @og.group 画面表示 046 * 047 * @version 4.0 048 * @author Kazuhiko Hasegawa 049 * @since JDK5.0, 050 */ 051public abstract class AbstractViewForm implements ViewForm { 052 // 5.2.1.0 (2010/10/01) 053 // 6.1.1.0 (2015/01/17) BulkSet用の表示サイズは、一覧側のサイズになります。 054 055 /** システムの改行コードを設定します。*/ 056 protected static final String CR = HybsConst.CR; // 6.1.0.0 (2014/12/26) refactoring 057 /** StringBilderなどの初期値を設定します。 {@value} */ 058 protected static final int BUFFER_MIDDLE = HybsConst.BUFFER_MIDDLE; // 6.1.0.0 (2014/12/26) refactoring 059 /** StringBilderなどの初期値を設定します。 {@value} */ 060 protected static final int BUFFER_LARGE = HybsConst.BUFFER_LARGE; // 6.1.0.0 (2014/12/26) refactoring 061 062 // 3.8.0.3 (2005/07/15) 新しいヘッダー固定用のDIV要素を分ける。 063 private static final String LAYER_ST0 = "" ; 064 private static final String LAYER_END0 = "" ; 065 private static final String LAYER_END2 = "<a href=\"#top\" name=\"h_end\" id=\"h_end\" ></a></div></div></div></div>" ; 066 067 // 5.1.8.0 (2010/07/01) groupClass のタイプを定義します。 068 /** カラムのグループ化指定の enum static 定数です。 */ 069 private enum CLM_GRP { KIGO , CHAR }; 070// private static enum CLM_GRP { KIGO , CHAR }; 071 072 private String name = ""; // メニューの名前 073 private DBTableModel table ; 074 private DBColumn[] dbColumn ; 075 private boolean[] clmWritable ; 076 private boolean[] writeCtrl ; // 3.8.0.9 (2005/10/17) 077 private boolean[] clmDisplay ; 078 private boolean[] tdClassClms ; // 8.0.1.0 (2021/11/02) 079 private String tdClass ; // 8.0.1.0 (2021/11/02) 080 private boolean[] clmGroup ; // 3.8.5.0 (2006/03/20) 081 private String groupClass = ""; // 5.1.8.0 (2010/07/01) 082 private String noGroupClass ; // 8.2.1.0 (2022/07/15) 未設定は null で判断します。 083 private boolean useGroupDir ; // 6.7.3.0 (2017/01/27) 084 private CLM_GRP groupType ; // 5.1.8.0 (2010/07/01) 085 private boolean[] sortKeys ; // 3.6.0.0 (2004/09/17) 086 private boolean[] useEventCols ; // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 087 private boolean useSorterKeys ; // 3.6.0.0 (2004/09/17) 内部変数 088 private String sorterQuery = ""; // 3.6.0.0 (2004/09/17) 内部変数 089 private String viewFormID ; 090 private int startNo ; 091 private int pageSize = HybsSystem.sysInt( "HTML_PAGESIZE" ) ; 092 private boolean rowWritableFlag ; // 1カラム目が writable か? 093 private ViewMarker viewLink ; 094 private ViewMarker viewMarker ; 095 private ViewMarker editMarker ; // 3.8.6.1 (2006/10/20) 096 private String selectedType = "checkbox"; 097 private String numberType = "sequence" ; // 3.5.1.0 (2003/10/03) 新規作成 098 private int numberTypeClm = -1; // 3.5.1.0 (2003/10/03) 新規作成 099 private String[] numberTypeData ; // 3.5.1.0 (2003/10/03) 新規作成 100 private String optTypeAttri ; 101 private boolean noMessage ; 102 private int backLinkCount ; 103 private int headerSkipCount ; // 0:通常ヘッダ、n:n回ごとに現れる 104 private boolean skip = ViewForm.DEFAULT_SKIP; // 3.5.3.1 (2003/10/31) 105 private int useCheckControl ; // 3.7.0.1 (2005/01/31) 106 private boolean useTableSorter = HybsSystem.sysBool( "VIEW_USE_TABLE_SORTER" ) ; // 3.5.4.7 (2004/02/06) 107 private boolean numberDisplay = true ; // 3.5.5.0 (2004/03/12) 108 private int scrollRowNo = -1; // 3.7.0.3 (2005/03/01) 109 110 // 3.5.4.6 (2004/01/30) ヘッダー文字列を定義しておきます。 111 private static final String NO_HEADER = "No" ; 112 113 // 3.5.4.8 (2004/02/23) ViewParamTag のパラメータを受け取ります。 114 /** 6.4.3.1 (2016/02/12) 作成元のMapを、HashMap から ConcurrentHashMap に置き換え。 */ 115 private ConcurrentMap<String,String> viewParam ; // 6.4.3.3 (2016/03/04) 116 117 //5.5.8.3 (2012/11/17) Stringでなく、Objectタイプをもてるようにする(積上げガント対応) 118 private List<String[]> viewArrayList ; // 5.5.9.0 (2012/12/03) ObjectではなくArrayList 119 120 private int columnCount ; // 3.5.5.7 (2004/05/10) 121 private int rowCount ; // 4.0.0 (2006/01/06) 122 123 // 3.5.6.2 (2004/07/05) ゼブラ模様の指定を、ViewForm としてサポート 124 // 0(ゼブラなし)、-1(ワーニング)、-2以下(エラー)、1(ゼブラ)、2以上(行数まとめ) 125 private int bgColorCycle = 1 ; 126 // 行ごとに色を変更する時の、デフォルトクラス属性 127 private static final String BG_COLOR_ROW0 = " class=\"row_0\""; 128 // 行ごとに色を変更する時の、切り替え後クラス属性 129 private static final String BG_COLOR_ROW1 = " class=\"row_1\""; 130 131 // 行ごとに色を変更する時の、切り替え後クラス属性 132 private static final String BG_COLOR_ROWSEL = " class=\"row_sel\""; // 3.7.0.3 (2005/03/01) 133 134 // 警告時の行ごとに色を変更する時の、デフォルトクラス属性 135 private static final String BG_WARNING_COLOR_ROW0 = " class=\"row_0 row_warning\""; 136 // 警告時の行ごとに色を変更する時の、切り替え後クラス属性 137 private static final String BG_WARNING_COLOR_ROW1 = " class=\"row_1 row_warning\""; 138 139 // エラー時の行ごとに色を変更する時の、デフォルトクラス属性 140 private static final String BG_ERROR_COLOR_ROW0 = " class=\"row_0 row_error\""; 141 // エラー時の行ごとに色を変更する時の、切り替え後クラス属性 142 private static final String BG_ERROR_COLOR_ROW1 = " class=\"row_1 row_error\""; 143 144 private String colorRow0 = BG_COLOR_ROW0 ; 145 private String colorRow1 = BG_COLOR_ROW1 ; 146 147 // 5.1.8.0 (2010/07/01) 行に対して、動的にクラス属性を付与するカラム名を指定します。 148 private int bgColorClsClmNo = -1; 149 150 // 3.5.6.4 (2004/07/16) 151 private boolean useScrollBar = HybsSystem.sysBool( "VIEW_USE_SCROLLBAR" ) ; 152 153 // 3.6.0.0 (2004/09/17) 154 private boolean firstChecked ; 155 156 // 3.7.1.1 (2005/05/31) SEL_ROW機能使用時に、BG_COLOR_ROWSEL の使用 有/無を指定します。 157 private boolean useSelRowColor ; 158 159 // 4.0.0 (2007/04/16) tableタグを出力するときに付与します。 160 private String clazz = "viewTable"; 161 162 // 4.0.0.0 (2007/11/27) ResourceManagerを設定します。(クロス集計で使用) 163 private ResourceManager resourceManager ; 164 165 // 4.2.0.0 (2008/03/03) ビューの幅と高さを指定できるようにします。 166 private String height ; 167 private String width ; 168 169 // 4.3.1.0 (2008/09/08) 170 private boolean skipNoEdit ; 171 172 // 4.3.3.0 (2008/10/01) 画面遷移なしモード時に各行に出力する行番号及び改廃Cのキーを定義します。 173 private static final String HIDDEN_ROW_KEY = "rid"; // 6.4.1.1 (2016/01/16) hiddenRowKey → HIDDEN_ROW_KEY refactoring 174 private static final String HIDDEN_CDKH_KEY = "kh"; // 6.4.1.1 (2016/01/16) hiddenCdkhKey → HIDDEN_CDKH_KEY refactoring 175 176 private boolean noTransition ; 177 178 // 5.1.7.0 (2010/06/01) ViewFormのキャッシュ復元を画面ID単位に行う 179 private String gamenId ; 180 181 // 5.2.1.0 (2010/10/01) 一括入力カラムのアシスト機能を利用するカラムを指定します。 182 private boolean[] clmBulkSet ; 183 184 // 5.5.4.2 (2012/07/13) mustとmustAnyを保持する 185 private String[] nullCheck ; 186 private String[] mustAnyCheck; // 3.8.0.9 (2005/10/17) 187 188 // 5.9.5.3 (2016/02/26) 189 // 6.4.6.1 (2016/06/03) tableId 廃止(利用目的を明確にするため、パラメータ名をviewClassに変更) 190 private String viewClass = "VIEW_" + HybsSystem.TBL_MDL_KEY; // 初期値 191 192 /** 193 * デフォルトコンストラクター 194 * 195 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 196 */ 197 protected AbstractViewForm() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 198 199 /** 200 * 初期化します。 201 * ここでは、内部で使用されているキャッシュをクリアし、 202 * 新しいモデル(DBTableModel)と言語(lang) を元に内部データを再構築します。 203 * なお、テーブルモデルに対してViewFormで変更を加える場合は、変更処理を行った後に 204 * このメソッドを実行するようにして下さい。 205 * 206 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 207 * @og.rev 3.5.6.1 (2004/06/25) lang 言語コード 属性を削除します。 208 * @og.rev 3.5.6.3 (2004/07/12) 呼ばれたら、必ず初期化するように修正(元に戻す) 209 * @og.rev 3.6.0.0 (2004/09/17) sortKeys 追加 210 * @og.rev 3.8.0.9 (2005/10/17) writeCtrl 追加 211 * @og.rev 3.8.5.0 (2006/03/20) clmGroup 追加 212 * @og.rev 4.0.0.0 (2006/01/06) rowCount 追加 213 * @og.rev 4.0.1.0 (2007/12/13) コメントの追加 214 * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 215 * @og.rev 5.2.0.0 (2010/09/01) 2回連続登録時に選択行にスクロールしないバグを修正。 216 * @og.rev 5.2.1.0 (2010/10/01) 一括入力カラムのアシスト機能を利用するカラム(clmBulkSet) 追加 217 * @og.rev 5.5.4.2 (2012/07/13) mustとmustany保持 218 * @og.rev 8.0.1.0 (2021/11/02) tdClassClms,tdClass追加 219 * 220 * @param table DBTableModelオブジェクト 221 */ 222 @Override // ViewForm 223 public void init( final DBTableModel table ) { 224 this.table = table; 225 if( table != null ) { 226 rowCount = table.getRowCount(); // 4.0.0 (2006/01/06) 227 columnCount = table.getColumnCount(); 228 clmWritable = new boolean[columnCount]; 229 writeCtrl = new boolean[columnCount]; // 3.8.0.9 (2005/10/17) 230 clmDisplay = new boolean[columnCount]; 231 tdClassClms = new boolean[columnCount]; // 8.0.1.0 (2021/11/02) 232 tdClass = null ; // 8.0.1.0 (2021/11/02) 233 clmGroup = new boolean[columnCount]; // 3.8.5.0 (2006/03/20) 234 sortKeys = new boolean[columnCount]; // 3.6.0.0 (2004/09/17) 235 dbColumn = new DBColumn[columnCount]; 236 useEventCols= new boolean[columnCount]; // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 237 clmBulkSet = new boolean[columnCount]; // 5.2.1.0 (2010/10/01) 238 Arrays.fill( clmWritable,DEFAULT_CLM_WRITABLE ); // カラムの書込み許可 239 Arrays.fill( writeCtrl,false ); // 書き込み制御の許可 240 Arrays.fill( clmDisplay ,true ); // カラムの表示許可 241 Arrays.fill( tdClassClms ,false ); // 8.0.1.0 (2021/11/02) tdClassClms,tdClass追加 242 Arrays.fill( clmGroup ,false ); // 3.8.5.0 (2006/03/20) カラムのグループ化 243 Arrays.fill( sortKeys ,false ); // すべてリンクしないに設定する。 244 Arrays.fill( useEventCols, false ); // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 245 Arrays.fill( clmBulkSet, false ); // 5.2.1.0 (2010/10/01) 246 for( int i=0; i<columnCount; i++ ) { 247 dbColumn[i] = table.getDBColumn( i ); 248 } 249 250 // 1カラム目(最初のカラム=配列0番目)が writable か? 251 rowWritableFlag = "WRITABLE".equalsIgnoreCase( getColumnName(0) ); 252 253 // 5.2.0.0 (2010/09/01) 2回連続登録時に選択行にスクロールしないバグを修正。 254 scrollRowNo = -1; 255 firstChecked = false; 256 257 // 5.5.4.2 (2102/07/13) 258 nullCheck = table.getMustArray(); 259 mustAnyCheck = table.getMustAnyArray(); 260 } 261 } 262 263 /** 264 * 内部の DBTableModel を返します。 265 * 266 * @return DBTableModelオブジェクト 267 */ 268 @Override // ViewForm 269 public DBTableModel getDBTableModel() { 270 return table; 271 } 272 273 /** 274 * ViewForm の識別IDをセットします。 275 * これは、ViewFormFactory でプールする場合の識別キーになります。 276 * プールに戻すときに自分自身に この識別IDを使用します。 277 * 278 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 279 * @og.rev 3.5.6.2 (2004/07/05) メソッド名がまぎらわしい為、変更します。 280 * 281 * @param viewFormID 識別ID 282 */ 283 @Override // ViewForm 284 public void setId( final String viewFormID ) { 285 this.viewFormID = viewFormID; 286 } 287 288 /** 289 * ViewForm の識別IDを返します。 290 * これは、ViewFormFactory でプールする場合の識別キーになります。 291 * プールに戻すときに自分自身に この識別IDを使用します。 292 * 293 * @og.rev 3.5.6.2 (2004/07/05) メソッド名がまぎらわしい為、変更します。 294 * 295 * @return 識別ID 296 */ 297 @Override // ViewForm 298 public String getId() { 299 return viewFormID; 300 } 301 302 /** 303 * DBTableModel から HTML文字列を作成して返します。 304 * 305 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 306 * 307 * @return DBTableModelから作成された HTML文字列 308 */ 309 @Override // ViewForm 310 public String create() { 311 return create( 0, rowCount ); 312 } 313 314 /** 315 * DBTableModel から View文字列を作成して、Writer にセットします。 316 * 処理内容は、create( int , int ) と同じですが、中間の文字列(StringBuilder) 317 * を作成せずに、直接、Writer に書き出します。 318 * よって、データ作成途中でエラーが発生しても、すでにいくつかのデータは 319 * クライアントに返されています。 320 * 321 * @og.rev 5.0.0.1 (2009/08/15) 直接出力用の Writer 引数追加 322 * 323 * @param startNo 表示開始位置 324 * @param pageSize 表示件数 325 * @param wrt 直接登録用の Writer 326 */ 327 @Override // ViewForm 328 public void create( final int startNo, final int pageSize, final Writer wrt ) throws IOException { 329 final String errMsg = "このメソッドは、直接登録用の Writer のビューでのみ使用できます。"; 330 throw new UnsupportedOperationException( errMsg ); 331 } 332 333 /** 334 * 内容をクリア(初期化)します。 335 * 336 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 337 * @og.rev 3.5.1.0 (2003/10/03) displayNumber 廃止。numberType 新規追加。 338 * @og.rev 3.5.2.0 (2003/10/20) headerSkipCount属性を追加 339 * @og.rev 3.5.3.1 (2003/10/31) skip属性を追加 340 * @og.rev 3.5.4.3 (2004/01/05) useCheckControl属性を追加 341 * @og.rev 3.5.4.3 (2004/01/05) viewFormID属性を削除(初期化しない) 342 * @og.rev 3.5.4.7 (2004/02/06) useTableSorter属性を追加 343 * @og.rev 3.5.4.7 (2004/02/06) columnMaxSize は使用されていないので削除します。 344 * @og.rev 3.5.4.8 (2004/02/23) ViewParamTag のパラメータを追加します。 345 * @og.rev 3.5.5.0 (2004/03/12) numberType 属性の "delete" 値追加に伴なう、numberDisplay 変数の追加。 346 * @og.rev 3.5.6.2 (2004/07/05) bgColorCycle 変数の追加。 347 * @og.rev 3.5.6.4 (2004/07/16) useScrollBar 変数の追加。 348 * @og.rev 3.6.0.0 (2004/09/17) sortKeys , firstChecked , useSorterKeys , sorterQuery 変数の追加。 349 * @og.rev 3.7.0.1 (2005/01/31) 全件チェックコントロール変更( boolean ⇒ int ) 350 * @og.rev 3.7.1.1 (2005/05/31) useSelRowColor 変数の追加。 351 * @og.rev 3.8.0.3 (2005/07/15) scrollBarType 変数の追加 352 * @og.rev 3.8.0.9 (2005/10/17) writeCtrl 変数の追加 353 * @og.rev 3.8.5.0 (2006/03/20) clmGroup 変数の追加 354 * @og.rev 3.8.6.1 (2006/10/20) editMarker 変数の追加 355 * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 356 * @og.rev 5.1.8.0 (2010/07/01) groupClass , groupType 変数の追加 357 * @og.rev 5.1.8.0 (2010/07/01) bgColorClsClmNo 属性を追加します。 358 * @og.rev 5.2.1.0 (2010/10/01) 一括入力カラムのアシスト機能を利用するカラム(clmBulkSet) 追加 359 * @og.rev 5.5.4.2 (2012/07/13) mustとmustany追加 360 * @og.rev 5.5.9.0 (2012/12/03) viewArrayList追加(viewObjectは削除) 361 * @og.rev 6.7.3.0 (2017/01/27) useGroupDir追加 362 * @og.rev 8.0.1.0 (2021/11/02) tdClassClms,tdClass追加 363 * @og.rev 8.2.1.0 (2022/07/15) noGroupClass 変数の追加 364 */ 365 @Override // ViewForm 366 public void clear() { 367 name = ""; // メニューの名前 368 table = null; 369 dbColumn = null; 370 clmWritable = null; 371 writeCtrl = null; // 3.8.0.9 (2005/10/17) 372 clmDisplay = null; 373 tdClassClms = null; // 8.0.1.0 (2021/11/02) 374 tdClass = null; // 8.0.1.0 (2021/11/02) 375 clmGroup = null; // 3.8.5.0 (2006/03/20) 376 groupClass = ""; // 5.1.8.0 (2010/07/01) 377 noGroupClass = null; // 8.2.1.0 (2022/07/15) 378 useGroupDir = false; // 6.7.3.0 (2017/01/27) 379 groupType = null; // 5.1.8.0 (2010/07/01) 380 sortKeys = null; // 3.6.0.0 (2004/09/17) 381 useSorterKeys = false; // 3.6.0.0 (2004/09/17) 382 sorterQuery = ""; // 3.6.0.0 (2004/09/17) 383 startNo = 0 ; 384 pageSize = HybsSystem.sysInt( "HTML_PAGESIZE" ) ; 385 rowWritableFlag = false; // 1カラム目が writable か? 386 viewLink = null; 387 viewMarker = null; 388 editMarker = null; // 3.8.6.1 (2006/10/20) 389 backLinkCount = 0; 390 selectedType = "checkbox"; 391 numberType = "sequence"; 392 numberTypeClm = -1; 393 numberTypeData = null; 394 headerSkipCount = 0; // 0:通常ヘッダ、n:n回ごとに現れる 395 skip = ViewForm.DEFAULT_SKIP; // 3.5.3.1 (2003/10/31) 396 useCheckControl = 0 ; // 3.7.0.1 (2005/01/31) 397 viewParam = null; // 3.5.4.8 (2004/02/23) 398 viewArrayList = null; // 5.5.8.3 (2012/12/03) 399 numberDisplay = true ; // 3.5.5.0 (2004/03/12) 400 columnCount = 0; // 3.5.5.7 (2004/05/10) 401 bgColorCycle = 1; // 3.5.6.2 (2004/07/05) 402 bgColorClsClmNo = -1; // 5.1.8.0 (2010/07/01) 403 colorRow0 = BG_COLOR_ROW0 ; // 3.5.6.2 (2004/07/05) 404 colorRow1 = BG_COLOR_ROW1 ; // 3.5.6.2 (2004/07/05) 405 useScrollBar = HybsSystem.sysBool( "VIEW_USE_SCROLLBAR" ) ; // 3.5.6.4 (2004/07/16) 406 firstChecked = false; 407 useSelRowColor = false; // 3.7.1.1 (2005/05/31) 408 height = null; // 4.2.0.0 (2008/03/18) 409 width = null; // 4.2.0.0 (2008/03/18) 410 skipNoEdit = false; // 4.3.2.0 (2008/09/10) 411 useEventCols = null; // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 412 clmBulkSet = null; // 5.2.1.0 (2010/10/01) 一括入力カラムのアシスト機能を利用するカラム(clmBulkSet) 追加 413 nullCheck = null; // 5.5.4.2 (2012/07/13) 414 mustAnyCheck = null; // 5.5.4.2 (2012/07/13) 415 } 416 417 /** 418 * テーブルのヘッダーの前に、そのデータの表示範囲を示す文字列を作成します。 419 * [開始No - 終了No]/[件数] です。 420 * 421 * ※ result_info.jsp に id="rowCountMessage" を記述しておき、resultScript.js 内部で 422 * orgRowCntMsg を見つけて rowCountMessage の場所まで移動させています。 423 * 424 * @og.rev 2.0.0.2 (2002/09/24) [1 - 4]/[4] 等のメッセージ出力後の <br> 出力を中止。 425 * @og.rev 4.3.6.0 (2008/04/01) [1 - 4]/[4]のメッセージをJavaScriptで入れ替えるように変更 426 * @og.rev 4.3.8.0 (2009/08/01) 同メッセージ複数対応及びheadでコントロール可能にする 427 * 428 * @param stNo 表示開始位置 429 * @param pgSize 表示件数 430 * 431 * @return テーブルのヘッダータグ文字列 432 * @og.rtnNotNull 433 */ 434 protected String getCountForm( final int stNo, final int pgSize ) { 435 if( noMessage ) { return ""; } 436 437 final int lstNo = stNo+pgSize > rowCount ? rowCount : stNo+pgSize ; 438 439 // 6.0.2.5 (2014/10/31) char を append する。 440 final StringBuilder out = new StringBuilder( BUFFER_MIDDLE ) 441 .append( "<div class=\"orgRowCntMsg\">" ) 442 .append( '[' ).append( stNo+1 ).append( " - " ).append( lstNo ) 443 .append( "]/[" ).append( rowCount ) 444 .append( "]</div>" ); 445 446 return out.toString() ; 447 } 448 449 /** 450 * カラムのラベル名を返します。 451 * カラムの項目名に対して,見える形の文字列を返します。 452 * 一般には,リソースバンドルと組合せて,各国ロケール毎にラベルを 453 * 切替えます。 454 * 455 * @param column カラム番号 456 * 457 * @return カラムのラベル名 458 */ 459 protected String getColumnLabel( final int column ) { 460 return dbColumn[column].getLabel(); 461 } 462 463 /** 464 * カラム名を返します。 465 * データベースで検索したときのカラムの項目名を返します。 466 * 467 * @param column カラム番号 468 * 469 * @return カラム名 470 */ 471 protected String getColumnName( final int column ) { 472 return dbColumn[column].getName(); 473 } 474 475 /** 476 * row行,colum列 のデータの値を返します。 477 * 478 * @param row 行番号 479 * @param column カラム番号 480 * 481 * @return row行,colum列 のデータの値 482 */ 483 protected String getValue( final int row,final int column ) { 484 return table.getValue( row,column ) ; 485 } 486 487 /** 488 * row行,colum列 のデータの値を返します。 489 * これは、データの値そのものではなく、その値のラベル文字を返します。 490 * 491 * @og.rev 3.8.0.9 (2005/10/17) 互換性確保のメソッド 492 * 493 * @param row 行番号 494 * @param column カラム番号 495 * 496 * @return row行,colum列 のデータの値 497 * @og.rtnNotNull 498 */ 499 protected String getRendererValue( final int row,final int column) { 500 return getRendererValue( row,column,getValue( row,column ) ); 501 } 502 503 /** 504 * row行,colum列 のデータの値を返します。 505 * これは、データの値そのものではなく、その値のラベル文字を返します。 506 * 507 * @og.rev 3.8.0.9 (2005/10/17) writableControl 追加による引数変更 508 * @og.rev 3.8.5.0 (2006/03/20) clmGroup 追加によるグループ化処理 509 * @og.rev 4.0.0.0 (2005/11/30) 行番号に対応した値を返すように変更します。 510 * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 511 * @og.rev 5.1.8.0 (2010/07/01) カラムグループの groupClass 対応 512 * @og.rev 6.7.3.0 (2017/01/27) useGroupDir 追加 513 * @og.rev 8.2.1.0 (2022/07/15) noGroupClass 変数の追加 514 * 515 * @param row 行番号 516 * @param column カラム番号 517 * @param inVal データの値 518 * 519 * @return row行,colum列 のデータの値 520 */ 521 protected String getRendererValue( final int row,final int column , final String inVal ) { 522 String val = dbColumn[column].getRendererValue( row,inVal ); 523 524 // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 525 if( useEventCols[column] && isWritable( row ) ) { 526 val = dbColumn[column].getEventColumnTag( val, getValue( row,column ), row, false ); 527 } 528 if( viewLink != null ) { 529 val = viewLink.getMarkerString( row,column,val ); 530 } 531 if( viewMarker != null ) { 532 val = viewMarker.getMarkerString( row,column,val ); 533 } 534 535 // 5.1.8.0 (2010/07/01) groupClass 対応:空文字の場合を考慮し、最後に処理を行う。 536 // 出力する値が、空文字列なら、前行と同じでも、空文字にしておきます。 537 538 // 6.7.3.0 (2017/01/27) useGroupDir 追加 539 if( groupType != null && clmGroup[column] && inVal != null && val != null && val.length() > 0 ) { 540 if( useGroupDir && column > 0 && inVal.equals( getValue( row,column-1 ) ) || 541 !useGroupDir && row > 0 && row != startNo && inVal.equals( getValue( row-1,column ) ) ) { 542 543 val = groupType == CLM_GRP.KIGO ? groupClass 544 : "<span class=\"" + groupClass + "\">" + val + "</span>"; 545 } 546 } 547 548 // 8.2.1.0 (2022/07/15) noGroupClass 変数の追加 549 if( noGroupClass != null && clmGroup[column] && inVal != null && val != null && val.length() > 0 ) { 550 if( useGroupDir && column > 0 && !inVal.equals( getValue( row,column-1 ) ) || 551 !useGroupDir && row > 0 && row != startNo && !inVal.equals( getValue( row-1,column ) ) ) { 552 val = "<span class=\"" + noGroupClass + "\">" + val + "</span>"; 553 } 554 } 555 556 return val; 557 } 558 559 /** 560 * row行,colum列 のデータの値をHTML文字列に変換して返します。 561 * リソースバンドルが登録されている場合は,リソースに応じた 562 * HTML文字列を作成します。 563 * 564 * @og.rev 3.8.0.9 (2005/10/17) writableControl 追加による引数変更 565 * @og.rev 3.8.6.1 (2006/10/20) editMarker 追加 566 * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 567 * 568 * @param row 行番号 569 * @param column カラム番号 570 * @param inVal データの値 571 * 572 * @return row行,colum列 のデータの値 573 */ 574 protected String getEditorValue( final int row, final int column, final String inVal ) { 575 String val = dbColumn[column].getEditorValue( row,inVal ); 576 // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 577 if( useEventCols[column] ) { 578 val = dbColumn[column].getEventColumnTag( val, getValue( row,column ), row, true ); 579 } 580 if( editMarker != null ) { 581 val = editMarker.getMarkerString( row,column,val ); 582 } 583 584 return val; 585 } 586 587 /** 588 * row行,colum列 のデータの値をHTML文字列に変換して返します。 589 * リソースバンドルが登録されている場合は,リソースに応じた 590 * HTML文字列を作成します。 591 * リソースバンドルが登録されていない場合は,getValue( int row,int column )を 592 * 返します。 593 * 新規機能として、writableControl によるエディター・レンデラー指定が出来ます。 594 * その場合、表示/編集ともに、先頭のアンダーバーは削除されます。 595 * 596 * @og.rev 3.8.0.9 (2005/10/17) writableControl によるエディター・レンデラー指定 597 * 598 * @param row 行番号 599 * @param column カラム番号 600 * 601 * @return row行,colum列 のデータの値 602 * @og.rtnNotNull 603 */ 604 protected String getValueLabel( final int row, final int column ) { 605 String val = getValue( row,column ) ; 606 boolean isEdit = isColumnWritable( column ) && isWritable( row ) ; 607 if( writeCtrl[column] && val != null && val.length() > 0 && val.charAt(0) == '_' ) { 608 isEdit = false; 609 val = val.substring(1); // 先頭の '_' を削除 610 } 611 612 // 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 613 return isEdit ? getEditorValue( row,column,val ) : getRendererValue( row,column,val ); 614 } 615 616 /** 617 * カラムのクラスを文字列にした名称を返します。 618 * これは,HTML上の各種タグに,データベース定義に応じたクラスを 619 * セットし,CSS(Cascading Style Sheet)の class="xxxxx" とする事により 620 * 各種スタイルを表現するのに使用します。 621 * 622 * ここでは, カラムリソースの DBTYPE 属性で指定の文字列(X,S9,KXなど)を返します。 623 * 624 * ※ 従来は、class属性に使用する値を取得していましたが、 625 * org.opengion.plugin.view.ViewForm_HTMLTable#makeNthChild( StringBuilder , int , String ) 626 * の引数に渡すことをメインに使用します。 627 * 628 * @og.rev 4.0.0.0 (2005/01/31) 新規作成(getColumnClassName ⇒ getColumnDbType) 629 * @og.rev 5.2.2.0 (2010/11/01) className が VARCHAR2,NUMBER以外の場合は、合わせて出力します。 630 * @og.rev 6.4.4.2 (2016/04/01) contains 判定を行う新しいメソッドを使用します。 631 * @og.rev 6.4.5.0 (2016/04/08) protected化と、純粋なDBTYPE 属性を返すように変更。 632 * 633 * @param column カラム番号 634 * 635 * @return カラムの DBTYPE 属性 636 */ 637 protected String getColumnDbType( final int column ) { 638 return dbColumn[column].getDbType(); 639 } 640 641 /** 642 * カラムのクラスを文字列にした名称を返します。 643 * 内容的には、カラムの className の値と、dbTypeの値をマージした値になります。 644 * さらに、editorAttributesの "class"キーワードの値もマージします。 645 * ただし、この値には、must属性も設定されているため、それだけは除外します。 646 * 各種スタイルを表現するのに使用します。 647 * 648 * @og.rev 6.4.5.0 (2016/04/08) 新規追加 649 * 650 * @param column カラム番号 651 * 652 * @return カラムの DBTYPE 属性 653 */ 654 protected String getClassName( final int column ) { 655 return dbColumn[column].getClassName(); 656 } 657 658 /** 659 * カラムが書き込み可能かどうかを返します。 660 * 661 * @param column カラム番号 662 * 663 * @return 書込み可能(true)/不可能(false) 664 */ 665 protected boolean isColumnWritable( final int column ) { 666 return clmWritable[column]; 667 } 668 669 /** 670 * カラムが書き込み可能かどうかをセットします。 671 * 672 * @param column カラム番号 673 * @param rw 書込み可能(true)/不可能(false) 674 */ 675 @Override // ViewForm 676 public void setColumnWritable( final int column,final boolean rw ) { 677 clmWritable[column] = rw; 678 } 679 680 /** 681 * 書き込み可能カラム名を、CSV形式で与えます。 682 * 例:"OYA,KO,HJO,SU,DYSET,DYUPD" 683 * setColumnWritable( int column,boolean rw ) の簡易版です。 684 * null を与えた場合は,なにもしません。 685 * また、全カラムについて、有効にする場合は、columnName="*" を設定します。 686 * 687 * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 688 * @og.rev 5.1.8.0 (2010/07/01) 内部ロジック変更(setBooleanArray) 689 * 690 * @param columnName カラム名 691 */ 692 @Override // ViewForm 693 public void setColumnWritable( final String columnName ) { 694 if( columnName != null ) { 695 setBooleanArray( columnName,true,clmWritable ); 696 697 // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 698 setUseEventCols(); 699 } 700 } 701 702 /** 703 * 書き込み不可カラム名を、CSV形式で与えます。 704 * 例:"OYA,KO,HJO,SU,DYSET,DYUPD" 705 * null を与えた場合は,なにもしません。 706 * また、全カラムについて、有効にする場合は、columnName="*" を設定します。 707 * 708 * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 709 * @og.rev 5.1.8.0 (2010/07/01) 内部ロジック変更(setBooleanArray) 710 * 711 * @param columnName カラム名 712 */ 713 @Override // ViewForm 714 public void setNoWritable( final String columnName ) { 715 if( columnName != null ) { 716 setBooleanArray( columnName,false,clmWritable ); 717 // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 718 setUseEventCols(); 719 } 720 } 721 722 /** 723 * 各項目がイベントカラムをするかどうかをセットします。 724 * 725 * @og.rev 5.1.7.0 (2010/06/01) 新規作成(動的プルダウン実装見直し) 726 */ 727 private void setUseEventCols() { 728 for( int column=0; column<dbColumn.length; column++ ) { 729 final String evCols = dbColumn[column].getEventColumn(); 730 if( evCols != null && evCols.length() > 0 ) { 731 final String[] evColsArr = StringUtil.csv2Array( evCols ); 732 for( int i=0; i<evColsArr.length; i++ ) { 733 String evCol = evColsArr[i]; 734 if( evCol.charAt(0) == '_' ) { evCol = evCol.substring( 1 ); } 735 if( isColumnWritable( table.getColumnNo( evCol ) ) ) { 736 useEventCols[column] = true; 737 break; 738 } 739 } 740 } 741 } 742 } 743 744 /** 745 * 行指定の書込み許可を返します。 746 * 747 * @og.rev 3.5.4.2 (2003/12/15) writable カラムが "2" のときも、書き込み許可とする 748 * @og.rev 3.5.5.7 (2004/05/10) 判定ロジックを若干見直します。 749 * 750 * @param row 行番号 751 * 752 * @return 書込み可能(true)/不可能(false) 753 */ 754 protected boolean isWritable( final int row ) { 755 boolean rtn = table.isRowWritable( row ); 756 if( rtn && rowWritableFlag ) { 757 final String val = table.getValue( row,0 ); 758 rtn = "TRUE".equalsIgnoreCase( val ) 759 || "1".equalsIgnoreCase( val ) 760 || "2".equalsIgnoreCase( val ) ; 761 762 if( ! rtn && 763 ! "FALSE".equalsIgnoreCase( val ) && 764 ! "0".equalsIgnoreCase( val ) && 765 ! "".equalsIgnoreCase( val ) ) { 766 final String errMsg = "writable は、TRUE,FALSE,0,1,2,null 以外指定できません。" + 767 " row=[" + (row+1) + "] val=[" + val + "]"; 768 throw new HybsSystemException( errMsg ); 769 } 770 } 771 return rtn; 772 } 773 774 /** 775 * 書き込み可能な行(rowWritable == true)のチェックボックスに対して 776 * 初期値を 選択済みにするか、非選択済みにするかを指定します。 777 * 778 * @og.rev 3.5.4.2 (2003/12/15) writable カラムが "2" のとき、チェックを付ける。 779 * 780 * @param row 行の指定 781 * 782 * @return チェックON(true)/チェックOFF(false) 783 */ 784 protected boolean isChecked( final int row ) { 785 boolean rtn = table.isRowChecked( row ); 786 if( rowWritableFlag ) { 787 final String val = table.getValue( row,0 ); 788 rtn = rtn || "2".equalsIgnoreCase( val ) ; 789 } 790 return rtn; 791 } 792 793 /** 794 * チェック済みの行の先頭に、フォーカスを当てる処理で、チェックの一つ前の 795 * 行番号欄にダミーのリンクを作成する為の判定を行います。 796 * つまり、指定の行番号の次の値が、チェックされているかどうかを判断します。 797 * さらに、これは、一番上位にチェックされている番号の時のみ 798 * 返します。(表示テーブル中、最高一回のみ、true が返る。) 799 * 800 * @og.rev 3.6.0.0 (2004/09/17) 新規作成 801 * @og.rev 3.7.0.3 (2005/03/01) setScrollRowNo の対応 802 * @og.rev 3.8.8.3 (2007/02/09) 最初の選択行 より指定行番号へのフォーカスを優先 803 * @og.rev 4.2.3.1 (2008/06/11) 1件目がチェックされている場合は、対象外とする。 804 * @og.rev 4.2.4.0 (2008/06/25) 1件目対象外の判定で、指定行番号へのフォーカスを優先する。 805 * @og.rev 5.1.1.1 (2009/12/02) 選択行アンカーは、自身の行に出す(default.js#focus2()も合わせて変更) 806 * 807 * @param row 行の指定 808 * 809 * @return チェックON(true)/チェックOFF(false) 810 */ 811 protected boolean isFirstChecked( final int row ) { 812 813 // 最初の1回のみ、true を返す。よって、元がtrue なら、false を返す。 814 if( firstChecked ) { return false; } 815 816 // 指定の次の行を見るため、範囲オーバーしていないか確認 817 if( row >= rowCount ) { return false; } // 5.1.1.1 (2009/12/02) 818 819 final boolean rtn; 820 // 3.8.8.3 (2007/02/09) 最初の選択行 より指定行番号へのフォーカスを優先 821 if( scrollRowNo >= 0 ) { 822 rtn = row == scrollRowNo ; // 5.1.1.1 (2009/12/02) 823 } 824 else { 825 // 1件目がチェックされている場合は、対象外とする。4.2.3.1 (2008/06/11) 826 if( row == 0 && table.isRowChecked( row ) ) { 827 firstChecked = true; 828 return false; 829 } 830 831 rtn = table.isRowChecked( row ); // 5.1.1.1 (2009/12/02) 832 } 833 834 // 最初の1回のみ、true を返す。よって、元がtrue なら、false を返す。 835 if( rtn ) { firstChecked = true; } 836 return rtn; 837 } 838 839 /** 840 * その行が、処理対象かどうかをチェックします。 841 * 処理対象かどうかは、書き込み可能な行(rowWritable == true) 842 * で且つ チェックされた行(rowChecked == true) とします。 843 * 例えば,NEXT/PREVでスキップ等の処理を行う場合は、 処理対象以外を 844 * スキップすることで実現できます。 845 * 846 * @param row 行番号 847 * 848 * @return 処理対象(true)/処理対象でない(false) 849 */ 850 @Override // ViewForm 851 public boolean isMarked( final int row ) { 852 return isWritable( row ) && isChecked( row ) ; 853 } 854 855 /** 856 * カラムが表示可能かどうかを返します。 857 * もし,表示不可の場合は,このカラムの全データが,表示対象から外されます。 858 * 859 * @param column カラム番号 860 * 861 * @return 表示可能(true)/不可能(false) 862 */ 863 protected boolean isColumnDisplay( final int column ) { 864 // 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 865 // 条件変更注意 866 return !( rowWritableFlag && column == 0 ) && clmDisplay[column]; 867 } 868 869 /** 870 * 表示可能なカラムの数を返します。 871 * 872 * @return 表示可能なカラム数 873 */ 874 protected int getColumnDisplayCount() { 875 int rtn = 0; 876 for( int i=0; i<columnCount; i++ ) { 877 if( isColumnDisplay(i) ) { rtn++ ; } 878 } 879 880 return rtn; 881 } 882 883 /** 884 * カラムが表示可能かどうかをセットします。 885 * DBColumnのROLE属性による表示可否は、ViewFormTag で設定されます。 886 * 887 * @param column カラム番号 888 * @param rw 表示可能(true)/不可能(false) 889 */ 890 @Override // ViewForm 891 public void setColumnDisplay( final int column,final boolean rw ) { 892 clmDisplay[column] = rw; 893 } 894 895 /** 896 * 表示可能カラム名を、CSV形式で与えます。 897 * 例:"OYA,KO,HJO,SU,DYSET,DYUPD" 898 * setColumnDisplay( int column,boolean rw ) の簡易版です。 899 * null を与えた場合は,なにもしません。 900 * また、全カラムについて、有効にする場合は、columnName="*" を設定します。 901 * 902 * @og.rev 5.1.8.0 (2010/07/01) 内部ロジック変更(setBooleanArray) 903 * 904 * @param columnName カラム名 905 */ 906 @Override // ViewForm 907 public void setColumnDisplay( final String columnName ) { 908 setBooleanArray( columnName,true,clmDisplay ); 909 } 910 911 /** 912 * 表示不可カラム名を、CSV形式で与えます。 913 * 例:"OYA,KO,HJO,SU,DYSET,DYUPD" 914 * null を与えた場合は,なにもしません。 915 * また、全カラムについて、有効にする場合は、columnName="*" を設定します。 916 * 917 * @og.rev 5.1.8.0 (2010/07/01) 内部ロジック変更(setBooleanArray) 918 * 919 * @param columnName カラム名 920 */ 921 @Override // ViewForm 922 public void setNoDisplay( final String columnName ) { 923 setBooleanArray( columnName,false,clmDisplay ); 924 } 925 926 /** 927 * 指定のカラム(CSV指定)に、指定のクラス属性を追加します。。 928 * 929 * どちらかが、nullか、空文字列の場合は、無視します。 930 * 931 * @og.rev 8.0.1.0 (2021/11/02) tdClassClms,tdClass追加 932 * 933 * @param clms 指定のクラス属性をtd に追加するカラム (CSV形式) (例:"OYA,KO,HJO,SU,DYSET,DYUPD") 934 * @param tdCls td に追加するクラス属性 935 */ 936 @Override // ViewForm 937 public void setTdClass( final String clms,final String tdCls ) { 938 if( !StringUtil.isNull( clms,tdCls ) ) { 939 setBooleanArray( clms,true,tdClassClms ); 940 tdClass = " class='" + tdCls + "'" ; 941 } 942 } 943 944 /** 945 * setTdClassでクラス属性が指定されている場合は、class属性を追加した文字列を返します。 946 * 947 * 無指定の場合は、空文字列を返します。 948 * 949 * @og.rev 8.0.1.0 (2021/11/02) tdClassClms,tdClass追加 950 * 951 * @param column カラム番号 952 * @return display:none;(true)/通常(false) 953 */ 954 protected String getTdClass( final int column ) { 955 return tdClassClms[column] ? tdClass : "" ; 956 } 957 958 /** 959 * 同一表示データをまとめる(表示しない)カラム名を、CSV形式で与えます。 960 * 961 * これは、カラムのグループ化指定を行います。 962 * 同じカラム番号で一つ上の行番号と同じ内容の場合に、表示しないというものです。 963 * 対応は、表示(Renderer)時のみとします。 964 * カラム単位なので、新しいゼブラによる色分けは行いません。(任意のカラムに適用できる為) 965 * また、ファイル出力などのデータ自身は変更されていませんので、そのままデータが落ちます。 966 * また、全カラムについて、有効にする場合は、group="*" を設定します。 967 * 968 * @og.rev 3.8.5.0 (2006/03/20) 新規追加 969 * @og.rev 5.1.8.0 (2010/07/01) 内部ロジック変更(setBooleanArray) 970 * 971 * @param group まとめるカラム名(CSV形式) 972 */ 973 @Override // ViewForm 974 public void setColumnGroup( final String group ) { 975 if( group != null ) { 976 if( groupType == null ) { groupType = CLM_GRP.KIGO ; } 977 setBooleanArray( group,true,clmGroup ); 978 } 979 } 980 981 /** 982 * 同一表示データをまとめないカラム名を、CSV形式で与えます。 983 * 984 * これは、カラムのグループ化指定で、同一でもまとめないカラムを指定するほうが簡単な場合に 985 * 使用します。例えば、キー情報以外は、グループ化指定したい場合などに便利です。 986 * 動作は、columnGroup の動きと同じです。(まとめないカラムを指定するだけです。) 987 * 988 * これは、同一表示データをまとめるカラム名の指定(columnGroup)と同時にセットする 989 * ことは出来ません。 990 * また、全カラムについて、有効にする場合は、group="*" を設定します。 991 * 992 * @og.rev 5.1.8.0 (2010/07/01) 新規追加 993 * 994 * @param group まとめるカラム名(CSV形式) 995 */ 996 public void setNoGroup( final String group ) { 997 if( group != null ) { 998 if( groupType == null ) { groupType = CLM_GRP.KIGO ; } 999 setBooleanArray( group,false,clmGroup ); 1000 } 1001 } 1002 1003 /** 1004 * 同一表示データをまとめる場合の、表示方法を指定します。 1005 * 1006 * これは、カラムのグループ化指定(columnGroup)を行う場合の、まとめ表示の方法を指定します。 1007 * なにも指定しない場合は、まとめカラムは、表示しない(ゼロ文字列)になります。 1008 * その場合、先の行と同じ場合も、変更されたカラムが、NULL(ゼロ文字列)であった場合も、 1009 * 同じ用に表示されるため、区別が付きません。 1010 * そこで、前の行と同じデータの場合に、特殊な処理を行うことで、区別できるようにします。 1011 * 指定方法が特殊なので、注意が必要です。 1012 * 記号の場合: 1013 * 記号(-- , → , ↓ , * など)が指定された場合は、そのままの文字に置き換えられます。 1014 * アルファベットの場合: 1015 * アルファベット(a-z,A-Z)の場合は、<span class="アルファベット">元の文字</span> 1016 * 例えば、バックカラーに色を付ける、文字を薄い灰色にする、などできます。 1017 * ただし、データ量が圧倒的に増えるため、大量のデータ等で使用するのは避けたほうが良いと思います。 1018 * 1019 * @og.rev 3.8.5.0 (2006/03/20) 新規追加 1020 * @og.rev 6.3.9.0 (2015/11/06) 判定条件の記述が間違っていた。 1021 * 1022 * @param grpCls まとめ表示の方法 1023 */ 1024 public void setGroupClass( final String grpCls ) { 1025 if( grpCls != null ) { 1026 groupClass = grpCls ; 1027 if( groupClass.isEmpty() ) { // ゼロ文字列の場合 1028 groupType = CLM_GRP.KIGO ; 1029 } 1030 else { 1031 final char ch = groupClass.charAt(0); 1032 if( ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' ) { // 6.3.9.0 (2015/11/06) 6.9.7.0 (2018/05/14) PMD Useless parentheses. 1033 groupType = CLM_GRP.CHAR ; 1034 } 1035 else { 1036 groupType = CLM_GRP.KIGO ; 1037 } 1038 } 1039 } 1040 } 1041 1042 /** 1043 * 同一表示データ以外の箇所の表示方法を指定します。 1044 * 1045 * これは、カラムのグループ化指定(columnGroup)を行う場合の、まとめ表示しないカラムの表示方法を指定します。 1046 * groupClass と異なり、何らかの値が存在しているはずなので、ここで指定するのは、spanタグ内に 1047 * class属性を付ける場合です。 1048 * groupClass の指定に、アルファベットを使用した場合の動きと同じになります。 1049 * <span class="アルファベット">元の文字</span> 1050 * 例えば、バックカラーに色を付ける、文字を薄い灰色にする、などできます。 1051 * ただし、データ量が圧倒的に増えるため、ほとんどが同じデータで、一部異なる場合に使用するのがお勧めです。 1052 * 1053 * @og.rev 8.2.1.0 (2022/07/15) 新規追加 1054 * 1055 * @param grpCls まとめ表示の方法 1056 */ 1057 public void setNoGroupClass( final String grpCls ) { 1058 if( grpCls != null ) { 1059 noGroupClass = grpCls ; 1060 } 1061 } 1062 1063 /** 1064 * 同一表示データをまとめる場合に、行(row)か列(column)を指定します(初期値:false:ROW) 1065 * 1066 * これは、カラムのグループ化指定(columnGroup)を行う場合の、まとめ表示の方向を指定します。 1067 * ROW(初期値:false)を指定すると、指定のカラムで、行単位に同一データかどうかを判定します。 1068 * COLUMN(true)を指定すると、columnGroup で指定した順番に、列方向に同一データかどうかを判定します。 1069 * DBTableModelの登録順で、ひとつ前のカラムと比較します。 1070 * 1071 * @og.rev 6.7.3.0 (2017/01/27) 新規追加 1072 * 1073 * @param dir まとめ表示の方向(false:ROW/true:COLUMN) 1074 * @see #setColumnGroup( String ) 1075 */ 1076 @Override // ViewForm 1077 public void setGroupDir( final boolean dir ) { 1078 useGroupDir = dir; 1079 } 1080 1081 /** 1082 * カラム名リンクソートを表示するカラム名を、CSV形式で与えます。 1083 * 1084 * ヘッダーにソート用リンクを作成する useTableSorter 属性 に対して、 1085 * カラム個別に作成する場合のカラム名をCSV形式で指定します。 1086 * この tableSorterKeys 属性は、useTableSorter 属性 と無関係に、指定した 1087 * カラムのみ、リンクを表示します。 1088 * また、全カラムについて、有効にする場合は、columnName="*" を設定します。 1089 * 例:"OYA,KO,HJO,SU,DYSET,DYUPD" 1090 * 1091 * @og.rev 3.6.0.0 (2004/09/17) 新規作成 1092 * @og.rev 5.1.8.0 (2010/07/01) 内部ロジック変更(setBooleanArray) 1093 * 1094 * @param columnName カラム名 1095 */ 1096 @Override // ViewForm 1097 public void setTableSorterKeys( final String columnName ) { 1098 if( columnName != null ) { 1099 setBooleanArray( columnName,true,sortKeys ); 1100 1101 useSorterKeys = true; // 使用したことを記憶 1102 } 1103 } 1104 1105 /** 1106 * 各カラムのフィールドのデータ長を返します。 1107 * 1108 * @og.rev 3.5.5.5 (2004/04/23) DBColumn の size と maxlength の 意味を変更 1109 * 1110 * @param column カラム番号 1111 * 1112 * @return カラム数 1113 */ 1114 protected int getColumnSize( final int column ) { 1115 return dbColumn[column].getTotalSize(); // 4.0.0 (2005/01/31) メソッド名変更 1116 } 1117 1118 /** 1119 * カラム数を返します。 1120 * 1121 * @return カラム数 1122 */ 1123 protected int getColumnCount() { 1124 return columnCount ; 1125 } 1126 1127 /** 1128 * 行数を返します。 1129 * 1130 * @return 行数 1131 */ 1132 protected int getRowCount() { 1133 return rowCount; 1134 } 1135 1136 /** 1137 * リストボックスを作成する場合の name をセットします。 1138 * 1139 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 1140 * 1141 * @param name 属性 1142 */ 1143 protected void setName( final String name ) { 1144 this.name = name; 1145 } 1146 1147 /** 1148 * リストボックスを作成する場合の name を返します。 1149 * 1150 * @return name属性 1151 */ 1152 protected String getName() { 1153 return name; 1154 } 1155 1156 /** 1157 * カラム名をもとに、そのカラム番号を返します。 1158 * カラム名が存在しない場合は、 HybsSystemException を throw します。 1159 * 1160 * @param columnName カラム名 1161 * 1162 * @return カラム番号 1163 */ 1164 protected int getColumnNo( final String columnName ) { 1165 return table.getColumnNo( columnName ); 1166 } 1167 1168 /** 1169 * 表示開始位置を返します。 1170 * 1171 * @return 表示開始位置 1172 */ 1173 @Override // ViewForm 1174 public int getStartNo() { 1175 return startNo; 1176 } 1177 1178 /** 1179 * 表示開始位置をセットします。 1180 * 1181 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 1182 * 1183 * @param no 表示開始位置 1184 */ 1185 @Override // ViewForm 1186 public void setStartNo( final int no ) { 1187 if( no >= 0 ) { startNo = no; } 1188 } 1189 1190 /** 1191 * 先頭へ戻るリンク間隔を返します。 1192 * 1193 * @return backLinkCount リンク間隔 1194 */ 1195 @Override // ViewForm 1196 public int getBackLinkCount() { 1197 return backLinkCount; 1198 } 1199 1200 /** 1201 * 先頭へ戻るリンク間隔をセットします。 1202 * 1203 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 1204 * 1205 * @param no リンク間隔 1206 */ 1207 @Override // ViewForm 1208 public void setBackLinkCount( final int no ) { 1209 if( no >= 0 ) { backLinkCount = no; } 1210 } 1211 1212 /** 1213 * ヘッダーを出力する間隔を取得します。 1214 * 1215 * @og.rev 3.5.2.0 (2003/10/20) 新規作成 1216 * 1217 * @return ヘッダーの表示間隔 ( 0:通常ヘッダ、n:n回ごとに現れる ) 1218 */ 1219 @Override // ViewForm 1220 public int getHeaderSkipCount() { 1221 return headerSkipCount; 1222 } 1223 1224 /** 1225 * ヘッダーを出力する間隔をセットします。 1226 * 1227 * 0を指定すると、繰り返しません(つまり、ヘッダーを最初に表示するだけです。) 1228 * 数字を指定すると、その回数毎に、ヘッダーをデータの行に挿入します。 1229 * 1230 * @og.rev 3.5.2.0 (2003/10/20) 新規作成 1231 * 1232 * @param hsc ヘッダーの表示間隔 ( 0:通常ヘッダ、n:n回ごとに現れる ) 1233 */ 1234 @Override // ViewForm 1235 public void setHeaderSkipCount( final int hsc ) { 1236 headerSkipCount = hsc; 1237 } 1238 1239 /** 1240 * 表示件数を取得します。 1241 * 1242 * @return 表示件数 1243 */ 1244 @Override // ViewForm 1245 public int getPageSize() { 1246 return pageSize; 1247 } 1248 1249 /** 1250 * 表示件数をセットします。 1251 * 1252 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 1253 * 1254 * @param psize 表示件数 1255 */ 1256 @Override // ViewForm 1257 public void setPageSize( final int psize ) { 1258 if( psize > 0 ) { pageSize = psize; } 1259 } 1260 1261 /** 1262 * フォーマットを設定します。 1263 * ※ このクラスでは実装されていません。 1264 * 1265 * @og.rev 3.5.4.0 (2003/11/25) 新規作成 1266 * @param list TableFormatterのリスト 1267 */ 1268 @Override // ViewForm 1269 public void setFormatterList( final List<TableFormatter> list ) { // 4.3.3.6 (2008/11/15) Generics警告対応 1270 final String errMsg = "このメソッドは、フォーマット関係のビューでのみ使用できます。"; 1271 throw new UnsupportedOperationException( errMsg ); 1272 } 1273 1274 /** 1275 * TableFormatterのタイプ値に対応した値を返します。 1276 * 1277 * タイプ値は、(#,$,!) が指定可能です。 1278 * rowが、-1 の場合は、getSortedColumnLabel(col) を返します。 1279 * 1280 * TableFormatterのタイプ別に値を返します。 1281 * '#' : getColumnLabel(loc) 1282 * '$' : getRendererValue(row,loc) 1283 * '!' : getValue(row,loc) 1284 * それ以外 : getValueLabel(row,loc)/getSortedColumnLabel(loc) 1285 * 1286 * @og.rev 6.4.4.2 (2016/04/01) TableFormatterのタイプ別値取得 1287 * 1288 * @param type TableFormatterのタイプ 1289 * @param row データを取得する行番号 1290 * @param col データを取得する列番号 1291 * @return タイプ別の値 1292 */ 1293 protected String getTypeCaseValue( final char type , final int row , final int col ) { 1294 final String rtn ; 1295 1296 if( row < 0 ) { 1297 switch( type ) { 1298 case '#' : rtn = getColumnLabel(col); break; 1299 case '$' : rtn = getRendererValue(0,col); break; 1300 case '!' : rtn = getValue(0,col); break; 1301 default : rtn = getSortedColumnLabel(col); break; // row が負の場合 1302 } 1303 } 1304 else { 1305 switch( type ) { 1306 case '#' : rtn = getColumnLabel(col); break; 1307 case '$' : rtn = getRendererValue(row,col); break; 1308 case '!' : rtn = getValue(row,col); break; 1309 default : rtn = getValueLabel(row,col); break; // 1310 } 1311 } 1312 1313 return rtn; 1314 } 1315 1316 /** 1317 * 表示時の選択用オブジェクトのタイプを指定します。 1318 * ・複数選択可能時は "checkbox" を指定します。 1319 * ・一つだけ選ばせる場合は, "radio" を指定します。 1320 * ・隠しフィールドで全件を選ぶ場合は、"hidden" を指定します。 1321 * ・行番号に関する情報を出さない場合は、"none" を指定します(行番号は表示します)。 1322 * 初期値は、"checkbox" です。 1323 * 1324 * @og.rev 2.2.0.0 (2002/12/17) 選択用オブジェクトのタイプとして"hidden" を追加 1325 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 1326 * @og.rev 3.5.1.0 (2003/10/03) displayNumber 廃止。numberType 新規追加。 1327 * 1328 * @param type 選択用オブジェクトのタイプ( "checkbox"/"radio"/"hidden"/"null" ) 1329 */ 1330 @Override // ViewForm 1331 public void setSelectedType( final String type ) { 1332 if( type != null ) { 1333 if( "checkbox".equalsIgnoreCase( type ) || 1334 "radio".equalsIgnoreCase( type ) || 1335 "hidden".equalsIgnoreCase( type ) ) { 1336 selectedType = type; 1337 } 1338 else { 1339 selectedType = null; 1340 } 1341 } 1342 } 1343 1344 /** 1345 * 表示時の行番号の表示方法を指定します。 1346 * ・sequenceは、1から始まる連番です。 1347 * ・none を指定すると、番号は表示されません。 1348 * ・delete を指定すると、行番号表示そのもののタグを取り除きます。(3.5.5.0 追加) 1349 * ・skip=カラム名を指定すると、そのカラムの値が NULL の場合は、番号をスキップします。 1350 * ・view=カラム名を指定すると、そのカラムの値が、使用されます。(ラベルは付きません) 1351 * skip=XX と、view=XX は、=の前後にスペースを入れないで下さい。 1352 * 初期値は、"sequence" です。 1353 * 1354 * @og.rev 3.5.1.0 (2003/10/03) 新規作成 1355 * @og.rev 3.5.5.0 (2004/03/12) numberType 属性の "delete" 値追加に伴なう、numberDisplay 変数の追加。 1356 * @og.rev 5.3.0.0 (2010/12/01) 左右分割スクロール(SplitViewTag)対応。numberType 再設定時のnumberDisplay初期化 1357 * 1358 * @param type 行番号の表示方法のタイプ( /sequence/none/delete/skip=カラム名/view=カラム名/ ) 1359 */ 1360 @Override // ViewForm 1361 public void setNumberType( final String type ) { 1362 1363 numberType = type ; 1364 numberDisplay = true; // 5.3.0.0 (2010/12/01) numberType 再設定時のnumberDisplay初期化 1365 if( type != null && !type.startsWith( "seq" ) && !type.startsWith( "none" ) ) { 1366 if( type.startsWith( "skip=" ) ) { 1367 numberTypeClm = table.getColumnNo( type.substring( 5 ) ); 1368 numberTypeData = new String[rowCount]; 1369 int cnt = 1; 1370 for( int i=0; i<rowCount; i++ ) { 1371 final String tmp = table.getValue( i,numberTypeClm ); 1372 if( tmp != null && tmp.length() > 0 ) { 1373 numberTypeData[i] = String.valueOf( cnt ); 1374 cnt++ ; 1375 } 1376 else { 1377 numberTypeData[i] = "" ; 1378 } 1379 } 1380 } 1381 else if( type.startsWith( "view=" ) ) { 1382 numberTypeClm = getColumnNo( type.substring( 5 ) ); 1383 } 1384 // 3.5.5.0 (2004/03/12) 1385 else if( type.startsWith( "delete" ) ) { 1386 numberDisplay = false; 1387 } 1388 else { 1389 // 3.5.5.0 (2004/03/12) 不正な値をエラーチェック 1390 final String errMsg = "numberType属性の値が不正です。numberType=[" + numberType + "]" + 1391 CR + 1392 "設定できるのは、sequence/none/delete/skip=カラム名/view=カラム名/ です。"; 1393 throw new HybsSystemException( errMsg ); 1394 } 1395 } 1396 } 1397 1398 /** 1399 * 表示時の選択用オブジェクトのタイプを返します。 1400 * 複数選択可能時は "checkbox" 一つだけ選ばせる場合は, "radio" を指定します。 1401 * 初期値は、"checkbox" です。 1402 * "checkbox"/"radio"/"hidden" 以外の文字列の場合は, null を返します。 1403 * 1404 * @return 選択用オブジェクトのタイプ( "checkbox"/"radio"/"hidden"/"null" ) 1405 */ 1406 protected String getSelectedType() { 1407 return selectedType ; 1408 } 1409 1410 /** 1411 * No カラムの文字列を取得します。 1412 * setNumberType で指定した、(sequence / none / skip=カラム名 / view=カラム名)に 1413 * 応じた値(レンデラーの値)を返します。 1414 * 1415 * @og.rev 3.5.1.0 (2003/10/03) 新規作成 1416 * 1417 * @param row 行番号 1418 * 1419 * @return Noカラムの文字列 1420 */ 1421 protected String getNumberData( final int row ) { 1422 String rtn = null; 1423 1424 if( numberType == null || numberType.startsWith( "se" ) ) { // sequence 1425 rtn = String.valueOf( row + 1 ); 1426 } 1427 else { 1428 if( numberType.startsWith( "no" ) ) { // none 1429 rtn = ""; 1430 } 1431 else if( numberType.startsWith( "vi" ) ) { // view 1432 rtn = getRendererValue( row,numberTypeClm ); 1433 } 1434 else if( numberType.startsWith( "sk" ) ) { // skip 1435 rtn = numberTypeData[row]; 1436 } 1437 } 1438 1439 return rtn ; 1440 } 1441 1442 /** 1443 * No カラムのヘッダー文字列を取得します。 1444 * setNumberType で指定した、(sequence / none / skip=カラム名 / view=カラム名)に 1445 * 応じた値(ラベル)を返します。 1446 * 具体的には、none 以外は、"No" という文字を、none の時は、""(ゼロストリング)を返します。 1447 * 1448 * @og.rev 3.5.4.6 (2004/01/30) 新規作成 1449 * 1450 * @return Noカラムのヘッダー文字列 1451 */ 1452 protected String getNumberHeader() { 1453 String rtn = NO_HEADER; 1454 1455 if( numberType.startsWith( "no" ) ) { // none 1456 rtn = ""; 1457 } 1458 1459 return rtn ; 1460 } 1461 1462 /** 1463 * テーブル等のチェックボックスに属性を付加します 1464 * JavaScript などの HTML基本タグ以外の属性を、そのまま 1465 * チェックボックス/ラジオボタン等に使用します。 1466 * 1467 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 1468 * 1469 * @param option オプション属性文字列 1470 */ 1471 @Override // ViewForm 1472 public void setOptionTypeAttributes( final String option ) { 1473 optTypeAttri = option; 1474 } 1475 1476 /** 1477 * テーブル等のチェックボックスに属性を付加します 1478 * JavaScript などの HTML基本タグ以外の属性を、そのまま 1479 * チェックボックス/ラジオボタン等に使用します。 1480 * 1481 * @return オプション属性 1482 */ 1483 protected String getOptionTypeAttributes() { 1484 return optTypeAttri ; 1485 } 1486 1487 /** 1488 * 最終表示番号を取得します。 1489 * 最終表示番号は、表示開始位置 + 表示件数 で求まります。 1490 * lastNo = startNo + pageSize; 1491 * 1492 * ただし、最終表示番号 > データ件数 の場合は、 最終表示番号 = データ件数 1493 * とします。 1494 * なお、表示件数 が -1 の場合は、デフォルトの表示件数を使用します。 1495 * 1496 * @param startNo 表示開始位置 1497 * @param pageSize 表示件数 1498 * 1499 * @return 最終表示番号 1500 */ 1501 protected int getLastNo( final int startNo, final int pageSize ) { 1502 int lastNo = startNo + ( pageSize < 0 ? getPageSize() : pageSize ); 1503 if( lastNo > rowCount ) { 1504 lastNo = rowCount ; 1505 } 1506 1507 if( rowCount < 0 || startNo < 0 || lastNo < 0 ) { 1508 final String errMsg = "startNo lastNo の範囲が不正です。" + CR 1509 + " startNo=" + startNo + " , lastNo=" + lastNo + " , RowCount=" + rowCount; 1510 throw new HybsSystemException( errMsg ); 1511 } 1512 1513 return lastNo ; 1514 } 1515 1516 /** 1517 * ビューフォームのタイプを返します。 1518 * これは、ViewFormFactory で、org.opengion.hayabusa.html.ViewForm_ + 『type』 1519 * で作成されるサブクラスの 『type』 部分を返します。 1520 * 1521 * @og.rev 3.5.4.3 (2004/01/05) viewFormID を使用するように変更します。 1522 * 1523 * @return ビューフォームのタイプ 1524 */ 1525 @Override // ViewForm 1526 public String getViewFormType() { 1527 return viewFormID ; 1528 } 1529 1530 /** 1531 * ビューリンクオブジェクトを設定します。 1532 * これは、ViewLink タグで作成された キー(カラム名)とリンク文字列を 1533 * 持っている Attributes オブジェクトを受け取り、内部でリンク表示に 1534 * 使用します。 1535 * 1536 * @og.rev 3.5.6.4 (2004/07/16) table が null の場合は、セットしません。 1537 * 1538 * @param link ビューリンクオブジェクト 1539 */ 1540 @Override // ViewForm 1541 public void setViewLink( final ViewMarker link ) { 1542 viewLink = link; 1543 if( viewLink != null && table != null ) { 1544 viewLink.setDBTableModel( table ) ; 1545 } 1546 } 1547 1548 /** 1549 * ビューマーカーオブジェクトを設定します。 1550 * これは、ViewMarker タグで作成された キー(カラム名)とマーカー文字列を 1551 * 持っている Attributes オブジェクトを受け取り、内部でマーカー表示に 1552 * 使用します。 1553 * 1554 * @og.rev 3.5.6.4 (2004/07/16) table が null の場合は、セットしません。 1555 * 1556 * @param marker ビューマーカーオブジェクト 1557 */ 1558 @Override // ViewForm 1559 public void setViewMarker( final ViewMarker marker ) { 1560 viewMarker = marker; 1561 if( viewMarker != null && table != null ) { 1562 viewMarker.setDBTableModel( table ) ; 1563 } 1564 } 1565 1566 /** 1567 * 編集マーカーオブジェクトを設定します。 1568 * これは、ViewMarker タグで、isRendere="false" で作成された 編集キー(カラム名)と 1569 * マーカー文字列を持っている Attributes オブジェクトを受け取り、内部でマーカー表示に 1570 * 使用します。 1571 * 1572 * @og.rev 3.8.6.1 (2006/10/20) 新規追加 1573 * 1574 * @param marker ビューマーカーオブジェクト 1575 */ 1576 @Override // ViewForm 1577 public void setEditMarker( final ViewMarker marker ) { 1578 editMarker = marker; 1579 if( editMarker != null && table != null ) { 1580 editMarker.setDBTableModel( table ) ; 1581 } 1582 } 1583 1584 /** 1585 * 検索結果メッセージを表示する/しないを設定します 1586 * 初期値は、表示する(false)です。 1587 * 1588 * @param noMessage [true:表示しない/false:表示する] 1589 */ 1590 @Override // ViewForm 1591 public void setNoMessage( final boolean noMessage ) { 1592 this.noMessage = noMessage; 1593 } 1594 1595 /** 1596 * DBColumn オブジェクトを返します。 1597 * 1598 * @og.rev 3.1.8.0 (2003/05/16) DBColumn オブジェクト取得用のメソッド追加 1599 * 1600 * @param column カラム番号 1601 * 1602 * @return DBColumnオブジェクト 1603 */ 1604 protected DBColumn getDBColumn( final int column ) { 1605 return dbColumn[column]; 1606 } 1607 1608 /** 1609 * カラム(列)にカラムオブジェクトを割り当てます。 1610 * カラムオブジェクトは,ラベルやネームなど,そのカラム情報を 1611 * 保持したオブジェクトです。 1612 * 1613 * @og.rev 5.6.2.3 (2013/03/22) 新規追加 1614 * 1615 * @param column カラムオブジェクト 1616 * @param clm ヘッダーを適応するカラム(列) 1617 */ 1618 protected void setDBColumn( final int column, final DBColumn clm ) { 1619 dbColumn[column] = clm; 1620 } 1621 1622 /** 1623 * チェックの入った行のみを表示させるかどうか指定します。 1624 * 1625 * "true" で、チェックの入った行のみを表示させます。 1626 * 従来は、TextField系のViewに対して、NEXT,PREVでチェックの 1627 * 入った行のみを表示させる機能でしたが、Table系のViewに対しても、 1628 * 同様に機能するように、しました。 1629 * 初期値は、ViewForm.DEFAULT_SKIP です。 1630 * 1631 * @og.rev 3.5.3.1 (2003/10/31) 新規追加 1632 * 1633 * @param skp チェックの入った行のみを表示させるかどうか(true:のみ表示/false:前件表示) 1634 */ 1635 @Override // ViewForm 1636 public void setSkip( final boolean skp ) { 1637 skip = skp; 1638 } 1639 1640 /** 1641 * チェックの入った行のみを表示させるかどうか(スキップするかどうか)を返します。 1642 * 1643 * skip=true で、かつ、チェックの入っていない行の場合に、trueを返します。 1644 * つまり、skip=trueの場合は、チェックの入っていない行は、スキップするという 1645 * 判断を行います。 1646 * skip属性の初期値は、ViewForm.DEFAULT_SKIP です。 1647 * 1648 * @og.rev 3.5.3.1 (2003/10/31) 新規追加 1649 * 1650 * @param row 行番号 1651 * 1652 * @return スキップする(true)/スキップしない(false) 1653 */ 1654 protected boolean isSkip( final int row ) { 1655 return skip && ! isChecked( row ); 1656 } 1657 1658 /** 1659 * チェックボックスの全チェックを選択するJavaScript の機能を使用するかどうかを指定します。 1660 * 1661 * 1 で、コントロール用のチェックボックスが現れて、この機能を使用することができるようになります。 1662 * 0 は、従来どおりです。 1663 * 使用するにあたり、jsp/commpn/default.js にJavaScriptを設定しておきます。(設定済み) 1664// * 初期値は、システムパラメータ の VIEW_USE_CHECK_CONTROL です。(0:使用しない) 1665 * 1666 * @og.rev 3.5.4.3 (2004/01/05) 新規追加 1667 * @og.rev 3.7.0.1 (2005/01/31) 全件チェックコントロール変更( boolean ⇒ int ) 1668 * 1669 * @param chCtrl チェックボックスの全チェックを選択する機能を使用するかどうか 1670 * (1:使用する/0:使用しない/2:初期値チェック済み) 1671 */ 1672 @Override // ViewForm 1673 public void setUseCheckControl( final int chCtrl ) { 1674 useCheckControl = chCtrl; 1675 } 1676 1677 /** 1678 * チェックボックスの全チェックを選択するJavaScript の機能を使用するかどうかを返します。 1679 * 1680 * 内部的には、(1:使用する/0:使用しない/2:初期値チェック済み)の値を保持していますが、 1681 * タグを作成する場合には、まず、使用するかどうかを指定する必要があるため、 1682 * 1:使用する/2:初期値チェック済み は、true:使用する、0 は、false:使用しない 1683 * を返します。 1684 * 1685 * @og.rev 3.5.4.3 (2004/01/05) 新規追加 1686 * 1687 * @return チェックボックスの全チェックを選択する機能を使用するかどうか(true:使用する/false:使用しない) 1688 */ 1689 protected boolean isUseCheckControl() { 1690 return useCheckControl > 0; 1691 } 1692 1693 /** 1694 * チェックボックスの全チェックを選択する タグ文字列を返します。 1695 * 1696 * 内部的には、(1:使用する/0:使用しない/2:初期値チェック済み)の値を 1697 * 保持していますので、それに対応した文字列を返します。 1698 * 1699 * @og.rev 3.7.0.1 (2005/01/31) 新規追加 1700 * @og.rev 5.1.8.0 (2010/07/01) 全チェックを押した状態で画面遷移した場合にチェック状態を保持する。 1701 * @og.rev 7.0.1.0 (2018/10/15) XHTML → HTML5 対応(空要素の、"/>" 止めを、">" に変更します)。 1702 * 1703 * @return チェックボックスの全チェックを選択する機能を使用するかどうか 1704 * (1:使用する/0:使用しない/2:初期値チェック済み) 1705 */ 1706 protected String getAllCheckControl() { 1707 final String rtn; 1708 switch( useCheckControl ) { 1709// case 1: rtn = "<input type=\"checkbox\" name=\"ALL_CHECK\" value=\"2\" onClick=\"checkbox(this);\" />" ; 1710 case 1: rtn = "<input type=\"checkbox\" name=\"ALL_CHECK\" value=\"2\" onClick=\"checkbox(this);\" >" ; 1711 break; 1712// case 2: rtn = "<input type=\"checkbox\" name=\"ALL_CHECK\" value=\"2\" onClick=\"checkbox(this);\" checked=\"checked\" />" ; 1713 case 2: rtn = "<input type=\"checkbox\" name=\"ALL_CHECK\" value=\"2\" onClick=\"checkbox(this);\" checked=\"checked\" >" ; 1714 break; 1715 default : rtn = "" ; 1716 break; // 6.0.2.5 (2014/10/31) break追記 1717 } 1718 return rtn ; 1719 } 1720 1721 /** 1722 * ヘッダーにソート用リンクを作成するかどうかを指定します。 1723 * 1724 * "true" で、ヘッダーにソート用リンクを作成します。 1725 * false は、作成しません。 1726 * 1727 * @og.rev 3.5.4.7 (2004/02/06) 新規追加 1728 * 1729 * @param flag ヘッダーにソート用リンクを作成するかどうか(true:作成する/false:作成しない) 1730 */ 1731 @Override // ViewForm 1732 public void setUseTableSorter( final boolean flag ) { 1733 useTableSorter = flag; 1734 } 1735 1736 /** 1737 * ヘッダーにソート用リンクを作成する時の、リクエスト引数のMapを設定します。 1738 * 1739 * ソート用URLに、リクエスト時の引数を設定する必要があります。 1740 * そのため、リクエスト時のキーと値のセットをMapで指定します。 1741 * このMap は、リクエストキャッシュより取り出します。 1742 * 実装では、このMapを元に、URLのQuery部文字列を作成します。処理過程において、 1743 * このMap を書き換えることは行いません。 1744 * 1745 * @og.rev 3.6.0.0 (2004/09/17) 新規作成 1746 * @og.rev 3.6.0.0 (2004/09/22) 引数が null の時の処理追加 1747 * @og.rev 4.0.0.0 (2005/01/31) Map.keySet より Map.entrySet を使用するように変更 1748 * @og.rev 5.10.1.1 (2018/07/13) keyのマルチバイト文字エンコード対応 1749 * 1750 * @param map ヘッダーソート時のリンクに追加するリクエスト変数のキャッシュMap 1751 */ 1752 @Override // ViewForm 1753 public void makeTableSorterQuery( final Map<?,?> map ) { // 4.3.3.6 (2008/11/15) Generics警告対応 1754 if( map == null ) { return; } // 3.6.0.0 (2004/09/22) 1755 1756 final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ); 1757 final Iterator<?> ite = map.entrySet().iterator() ; // 4.0.0 (2005/01/31) 1758 while( ite.hasNext() ) { 1759 final Map.Entry<?,?> entry = (Map.Entry<?,?>)ite.next(); // 4.3.3.6 (2008/11/15) Generics警告対応 1760 final String key = (String)entry.getKey(); 1761 if( key != null 1762 && ! key.equalsIgnoreCase( "command" ) 1763 && ! key.equalsIgnoreCase( HybsSystem.SORT_COLUMNS ) ) { 1764 final String[] vals = (String[])entry.getValue(); // 4.0.0 (2005/01/31) 1765 if( vals != null ) { 1766 for( int i=0; i<vals.length; i++ ) { 1767// buf.append( '&' ).append( key ).append( '=' ); // 6.0.2.5 (2014/10/31) char を append する。 1768 buf.append( '&' ).append( StringUtil.urlEncode( key ) ).append( '=' ) // 5.10.1.1 (2018/07/13) 1769 .append( StringUtil.urlEncode( vals[i] ) ); 1770 } 1771 } 1772 } 1773 } 1774 1775 if( buf.length() > 0 ) { 1776 sorterQuery = buf.toString(); 1777 } 1778 } 1779 1780 /** 1781 * カラムソート機能(リンク)の付いたラベル名を返します。 1782 * カラムの項目名に対して,見える形の文字列を返します。 1783 * 一般には,リソースバンドルと組合せて,各国ロケール毎にラベルを 1784 * 切替えます。 1785 * 1786 * @og.rev 3.5.4.7 (2004/02/06) 新規追加 1787 * @og.rev 3.6.0.0 (2004/09/17) sortKeys の使用によるカラム個別のリンク有無追加 1788 * @og.rev 5.2.1.0 (2010/10/01) 一括入力カラムのアシスト機能を利用する場合の処理を追加 1789 * @og.rev 5.2.3.0 (2010/12/01) チェックボックスでは、onChange ではなく、onClick でイベントを発生させます。 1790 * @og.rev 5.6.9.1 (2013/10/11) カラム長にカンマが入った場合の対応 1791 * @og.rev 5.7.8.1 (2014/07/18) カラム長が 1000 では、少ない為。(HTML5ではエラーになる為) 1792 * @og.rev 6.0.2.0 (2014/09/19) Bulkset エラー回避 1793 * @og.rev 6.1.1.0 (2015/01/17) Bulkset関係( ViewLength を使用、左寄せ、SLABEL設定 ) 1794 * @og.rev 6.2.0.0 (2015/02/27) class="W100" を追加することで、テーブル幅いっぱいの入力枠にする。 1795 * @og.rev 6.2.1.0 (2015/03/13) 動的カラム(COLUMN)は、TEXT に置き換える。 1796 * @og.rev 6.2.2.2 (2015/04/03) NO_MAXLEN キーの値が、"true" の場合、maxlength を強制削除する。 1797 * @og.rev 6.2.2.4 (2015/04/24) class="W100"の追加条件に、dbType 制限をかけます。 1798 * @og.rev 5.9.23.0 (2017/08/10) useSorterKeysが無い場合でもspanは外側に付ける 1799 * @og.rev 6.8.1.4 (2017/08/25) must の取り消し。これは、config.setEditorAttributes( attri ); の副作用で、config から、must をremoveする必要が出てきました。 1800 * @og.rev 6.9.9.2 (2018/09/18) ソートキーのマルチバイト文字エンコード対応 1801 * @og.rev 7.0.1.0 (2018/10/15) XHTML → HTML5 対応(空要素の、"/>" 止めを、">" に変更します)。 1802 * 1803 * @param column カラム番号 1804 * 1805 * @return ソート機能(リンク)の付いたラベル名 1806 */ 1807 protected String getSortedColumnLabel( final int column ) { 1808 // 6.4.2.1 (2016/02/05) PMD refactoring. Prefer StringBuffer over += for concatenating strings 1809 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 1810 1811 final String clmLbl = getColumnLabel( column ) ; 1812 1813 if( useSorterKeys && sortKeys[column] || ! useSorterKeys && useTableSorter ) { // 6.9.7.0 (2018/05/14) PMD Useless parentheses. 1814 rtn.append( "<a href=\"?command=VIEW&" ) 1815 .append( HybsSystem.SORT_COLUMNS ).append( '=' ) 1816 // .append( dbColumn[column].getName() ) 1817 .append( StringUtil.urlEncode( dbColumn[column].getName() ) ) // 6.9.9.2 (2018/09/18) ソートキーのマルチバイト文字エンコード対応 1818 .append( sorterQuery ).append( "\">" ) 1819 .append( clmLbl ).append( "</a>" ); 1820 } 1821 else { 1822 rtn.append( "<span>" ).append( clmLbl ).append( "</span>" ); // 5.9.23.0 (2017/08/10) 1823 } 1824 1825 // 5.2.1.0 (2010/10/01) 一括入力カラムのアシスト機能対応(bulkSet) 1826 if( isClmBulkSet( column ) ) { 1827 final DBColumnConfig config = dbColumn[column].getConfig(); 1828 config.setAddNoValue( true ); 1829 // 6.2.2.2 (2015/04/03) NO_MAXLEN キーの値が、"true" の場合、maxlength を強制削除する。 1830 final String editor = config.getEditor(); 1831 if( "RADIO".equals( editor ) ) { // 6.2.2.2 (2015/04/03) 1832 config.setEditor( "MENU" ); 1833 } 1834 // 6.2.1.0 (2015/03/13) 動的カラム(COLUMN)は、TEXT に置き換える。 1835 else if( "COLUMN".equals( editor ) ) { // 6.2.2.2 (2015/04/03) 1836 config.setEditor( "TEXT" ); 1837 } 1838 1839 final Attributes attri = new Attributes(); 1840 // 5.2.3.0 (2010/12/01) チェックボックスでは、onChange ではなく、onClick でイベントを発生させます。 1841 if( "CHBOX".equals( editor ) ) { // 6.2.2.2 (2015/04/03) 1842 attri.add( "onClick", "bulkSet(this);" ); 1843 } 1844 else { 1845 attri.add( "onChange", "bulkSet(this);" ); 1846 attri.add( "ondblclick","bulkPaste(this);" ); 1847 // 6.2.2.2 (2015/04/03) NO_MAXLEN キーの値が、"true" の場合、maxlength を強制削除する。 1848 attri.set( "NO_MAXLEN", "true" ); // W100 と連動 1849 attri.add( "style", "float:left;" ); // 6.1.1.0 (2015/01/17) CHBOX以外は左寄せ 1850 1851 // // 6.2.2.4 (2015/04/24) class="W100"の追加条件に、dbType 制限をかけます。 1852 final String dbType = "," + config.getDbType() + ","; 1853 if( ",X,K,KX,XK,ALL,".contains( dbType ) ) { 1854 attri.add( "class", "W100" ); // 6.2.0.0 (2015/02/27) テーブル幅いっぱいの入力枠にする。 1855 config.setFieldSize( "1" ); // 6.2.2.2 (2015/04/03) ここで設定しないと、後付けされる。 1856 } 1857 } 1858 attri.add( "onkeydown", "ctrlCV(this);" ); 1859 1860 config.setEditorAttributes( attri ); 1861 config.removeEditorAttributes( "class" , "must" ); // 6.8.1.4 (2017/08/25) must の取り消し 1862 config.setUseSLabel( "true" ); // 6.1.1.0 (2015/01/17) SLABEL設定。ほんとはMENU系のみでよい。 1863 1864 final String key = config.getName(); 1865 config.setName( "h_" + key ); 1866 1867 final DBColumn clm = new DBColumn( config ); 1868 1869 // 6.0.2.0 (2014/09/19) Bulkset エラー回避 1870 try { 1871 // 6.4.2.1 (2016/02/05) PMD refactoring. Prefer StringBuffer over += for concatenating strings 1872// rtn.append( "<br />" ).append( clm.getEditorValue( null ) ); // 注意:検索用のEditorが呼ばれる。 1873 rtn.append( "<br>" ).append( clm.getEditorValue( null ) ); // 注意:検索用のEditorが呼ばれる。 1874 } 1875 catch( final RuntimeException ex ) { 1876 final String errMsg = "bulkSet でエラーが発生しました。" + CR 1877 + " Label=" + rtn + " , Column=" + key + " , Editor=" + editor // 6.2.2.2 (2015/04/03) 1878 + CR 1879 + ex.getMessage(); 1880 System.err.println( errMsg ); 1881 } 1882 } 1883 1884 return rtn.toString(); // 6.4.2.1 (2016/02/05) 1885 } 1886 1887 /** 1888 * 指定カラムNoがmust指定されているかどうか。 1889 * 1890 * @og.rev 5.5.4.2 (2012/07/13) 1891 * 1892 * @param column カラムNO 1893 * @return must指定されているかどうか[true:されている/false:されていない] 1894 */ 1895 protected boolean isMustColumn( final int column){ 1896 if( nullCheck != null && nullCheck.length > 0 ){ 1897 for( int i=0; i<nullCheck.length; i++ ){ 1898 if( nullCheck[i].equals( dbColumn[column].getName() ) ){ 1899 return true; 1900 } 1901 } 1902 } 1903 return false; 1904 } 1905 1906 /** 1907 * 指定カラムNoがmustAny指定されているかどうか。 1908 * 1909 * @og.rev 5.5.4.2 (2012/07/13) 1910 * 1911 * @param column カラムNO 1912 * @return mustAny指定されているかどうか[true:されている/false:されていない] 1913 */ 1914 protected boolean isMustAnyColumn( final int column){ 1915 if( mustAnyCheck != null && mustAnyCheck.length > 0 ){ 1916 for( int i=0; i<mustAnyCheck.length; i++ ){ 1917 if( mustAnyCheck[i].equals( dbColumn[column].getName() ) ){ 1918 return true; 1919 } 1920 } 1921 } 1922 return false; 1923 } 1924 1925 /** 1926 * ViewForm のサブクラスに渡すパラメータマップを設定します。 1927 * 1928 * @og.rev 3.5.4.8 (2004/02/23) ViewParamTag のパラメータを追加します。 1929 * @og.rev 6.4.3.3 (2016/03/04) ConcurrentHashMap を受け取ることを明確にするため、I/FをConcurrentMapに変更します。 1930 * 1931 * @param map パラメータマップ 1932 */ 1933 @Override // ViewForm 1934 public void setParam( final ConcurrentMap<String,String> map ) { 1935 viewParam = map ; 1936 } 1937 1938 /** 1939 * ViewForm のサブクラスに渡すパラメータマップの値を返します。 1940 * パラメータが 存在しない(null)か、値が 存在しない(null)の場合は、 1941 * 初期値を返します。 1942 * 1943 * @og.rev 3.5.5.9 (2004/06/07) 新規追加 1944 * 1945 * @param key パラメータの取り出すキー 1946 * @param def パラメータが存在しない場合の初期値 1947 * 1948 * @return パラメータ値 1949 */ 1950 protected String getParam( final String key, final String def ) { 1951 if( viewParam == null ) { return def; } 1952 final String rtn = viewParam.get( key ); // 4.3.3.6 (2008/11/15) Generics警告対応 1953 1954 // 6.4.1.1 (2016/01/16) 条件反転 1955 return ( rtn == null ) ? def : rtn ; 1956 } 1957 1958 /** 1959 * ViewForm のサブクラスに渡すパラメータマップの値を返します。 1960 * パラメータは、初期値が設定されているものとし、そのまま、値を返します。 1961 * 1962 * @og.rev 5.5.5.6 (2012/08/31) 新規追加 1963 * 1964 * @param key パラメータの取り出すキー 1965 * 1966 * @return パラメータ値 1967 */ 1968 protected String getParam( final String key ) { 1969 return (viewParam == null) ? null : viewParam.get( key ); 1970 } 1971 1972 /** 1973 * ViewForm のサブクラスに渡すパラメータマップの値を int で返します。 1974 * パラメータは、初期値が設定されているものとし、null の場合は、-1 を返します。 1975 * 1976 * @og.rev 5.5.5.6 (2012/08/31) 新規追加 1977 * 1978 * @param key パラメータの取り出すキー 1979 * 1980 * @return パラメータ値(未設定時は、-1) 1981 */ 1982 protected int getIntParam( final String key ) { 1983 final String rtn = (viewParam == null) ? null : viewParam.get( key ); 1984 return (rtn == null) ? -1 : Integer.parseInt( rtn ); 1985 } 1986 1987 /** 1988 * ViewForm のサブクラスに渡すパラメータマップの値を boolean で返します。 1989 * パラメータは、初期値が設定されているものとし、null の場合は、false を返します。 1990 * 1991 * @og.rev 5.5.5.6 (2012/08/31) 新規追加 1992 * @og.rev 6.3.9.1 (2015/11/27) 3項演算子を || or && で簡素化できる(PMD)。 1993 * 1994 * @param key パラメータの取り出すキー 1995 * 1996 * @return パラメータ値(未設定時は、false) 1997 */ 1998 protected boolean getBoolParam( final String key ) { 1999 // 6.3.9.1 (2015/11/27) Boolean#parseBoolean(String) は、引数が null の場合、false を返す(引数のnullチェックは不要)。 2000 return viewParam != null && Boolean.parseBoolean( viewParam.get( key ) ); 2001 } 2002 2003 /** 2004 * ViewForm のサブクラスに渡すパラメータ(文字列配列のArrayList)を設定します。 2005 * 2006 * @og.rev 5.5.8.3 (2012/11/17) ViewParamTag のパラメータを追加します。 2007 * @og.rev 5.5.9.0 (2012/12/03) ArrayListに変更 2008 * 2009 * @param list 文字列配列のArrayList 2010 */ 2011 @Override // ViewForm 2012 public void setViewArrayList( final List<String[]> list ) { 2013 viewArrayList = list ; 2014 } 2015 2016 /** 2017 * ViewForm のサブクラスに渡すパラメータ(文字列配列のArrayList)の値を返します。 2018 * パラメータは、初期値が設定されているものとし、そのまま、値を返します。 2019 * 2020 * @og.rev 5.5.8.3 (2012/11/17) 新規追加 2021 * @og.rev 5.5.9.0 (2012/12/03) ArrayListに変更 2022 * 2023 * @return パラメータ値 2024 */ 2025 protected List<String[]> getViewArrayList() { 2026 return viewArrayList; 2027 } 2028 2029 /** 2030 * No 欄そのものを作成するかどうかを返します。 2031 * 2032 * numberType 属性に、"delete" という値を設定した場合は、No 欄そのものを 2033 * 作成しません。それ以外は、作成します。 2034 * 初期値は、作成する(true)です。 2035 * 2036 * @og.rev 3.5.5.0 (2004/03/12) 新規追加 2037 * 2038 * @return No欄そのものを作成するかどうか(true:作成する/false:作成しない) 2039 */ 2040 protected boolean isNumberDisplay() { 2041 return numberDisplay; 2042 } 2043 2044 /** 2045 * マーカーオブジェクト(リンク、マーカー)を設定します。 2046 * ここでは、旧 ViewForm 属性を 新ViewForm に直接セットします。 2047 * 2048 * @og.rev 3.5.6.1 (2004/06/25) 新規追加 2049 * @og.rev 3.8.6.1 (2006/10/20) editMarker 追加 2050 * 2051 * @param view ViewFormオブジェクト 2052 */ 2053 @Override // ViewForm 2054 public void markerSet( final ViewForm view ) { 2055 if( view instanceof AbstractViewForm ) { 2056 viewLink = ((AbstractViewForm)view).viewLink ; 2057 if( viewLink != null ) { viewLink.setDBTableModel( table ); } 2058 viewMarker = ((AbstractViewForm)view).viewMarker; 2059 if( viewMarker != null ) { viewMarker.setDBTableModel( table ); } 2060 editMarker = ((AbstractViewForm)view).editMarker; 2061 if( editMarker != null ) { editMarker.setDBTableModel( table ); } 2062 } 2063 else { 2064 final String errMsg = "AbstractViewForm 以外の view は、サポートしていません。" 2065 + " view=[" + view + "]" ; 2066 throw new HybsSystemException( errMsg ); 2067 } 2068 } 2069 2070 /** 2071 * テーブルのバックグラウンドカラーの入れ替えのサイクルをセットします。 2072 * 0(ゼブラなし)、-1(ワーニング)、-2以下(エラー)、1(ゼブラ)、2以上(行数まとめ) 2073 * 初期値は、1(ゼブラ)です。 2074 * 2075 * @og.rev 3.5.6.2 (2004/07/05) ViewForm_HTMLTable より移動 2076 * 2077 * @param sycle 0(ゼブラなし)、-1(ワーニング)、-2以下(エラー)、1(ゼブラ)、2以上(行数まとめ) 2078 */ 2079 @Override // ViewForm 2080 public void setBgColorCycle( final int sycle ) { 2081 bgColorCycle = 1; // 強制的に設定 2082 2083 if( sycle > 0 ) { // 1(ゼブラ)、2以上(行数まとめ) 2084 colorRow0 = BG_COLOR_ROW0 ; 2085 colorRow1 = BG_COLOR_ROW1 ; 2086 bgColorCycle = sycle; // このケースのみ引数を設定 2087 } 2088 else if( sycle == -1 ) { // -1(ワーニング) 2089 colorRow0 = BG_WARNING_COLOR_ROW0 ; 2090 colorRow1 = BG_WARNING_COLOR_ROW1 ; 2091 } 2092 else if( sycle < -1 ) { // -2以下(エラー) 2093 colorRow0 = BG_ERROR_COLOR_ROW0 ; 2094 colorRow1 = BG_ERROR_COLOR_ROW1 ; 2095 } 2096 else { // 0(ゼブラなし) 2097 colorRow0 = "" ; 2098 colorRow1 = "" ; 2099 } 2100 } 2101 2102 /** 2103 * テーブルのバックグラウンドカラーのクラスに指定するカラム名を指定します。 2104 * 2105 * 通常のゼブラ模様は、tr 属性のクラス指定として、row_0、row_1 が指定されます。 2106 * その代わりに、ここで指定されたカラムの値がクラス属性として設定されます。 2107 * (指定するのはカラム名です。行単位にクラス属性の値を変えることが可能です。) 2108 * 選択行(row_sel)は、優先して使用されます。 2109 * 出力されるクラス名は、"row_" + 属性値 になります。 2110 * 2111 * @og.rev 5.1.8.0 (2010/07/01) 新規追加 2112 * 2113 * @param clsClm ゼブラ模様の替わりに指定するクラスを格納したカラム名 2114 */ 2115 @Override // ViewForm 2116 public void setBgColorClsClm( final String clsClm ) { 2117 if( clsClm != null ) { 2118 bgColorClsClmNo = table.getColumnNo( clsClm ); 2119 } 2120 } 2121 2122 /** 2123 * テーブルのバックグラウンドカラーの値をセットします。 2124 * これは、DBTableModele が指定の行番号の時に、BG_COLOR_ROWSEL を 2125 * 返します。それ以外は、通常の getBgColorCycleClass( int )と 2126 * 同じ結果を返します。 2127 * BG_COLOR_ROWSEL の使用有無は、システムパラメータの 2128 * VIEW_USE_SELROW_COLOR 属性で指定できます。 2129 * 2130 * @og.rev 3.7.0.3 (2005/03/01) 新規追加 2131 * @og.rev 3.7.1.1 (2005/05/31) SEL_ROW機能使用時に、BG_COLOR_ROWSEL の使用 有/無を指定 2132 * 2133 * @param indx 先頭からの連番( 0から始める ) 2134 * @param row 行番号 2135 * 2136 * @return 行の色を指定する class 属性( cssファイルで指定 ) 2137 * @see #getBgColorCycleClass( int ) 2138 */ 2139 protected String getBgColorCycleClass( final int indx,final int row ) { 2140 return useSelRowColor && scrollRowNo == row ? BG_COLOR_ROWSEL : getBgColorCycleClass( indx ) ; // 6.4.2.1 (2016/02/05) PMD refactoring. Useless parentheses. 2141 } 2142 2143 /** 2144 * テーブルのバックグラウンドカラーの値をセットします。 2145 * 行番号は, 0から始まるので、偶数を HTML_BG_COLOR_ROW0 、 2146 * 奇数行を HTML_BG_COLOR_ROW1 とします。 2147 * setBgColorCycle で、設定値変換しています。 2148 * bgColorClsClm が指定されている場合は、その値を利用したクラス属性を返します。 2149 * クラス名は、"row_" + 指定カラムの値 です。 2150 * 指定カラムの値 が、null または、空文字列の場合は、従来のゼブラ模様が優先されます。 2151 * また、行選択があれば、そちらが最優先されます。 2152 * 2153 * @og.rev 3.5.6.2 (2004/07/05) ViewForm_HTMLTable より移動 2154 * @og.rev 5.1.8.0 (2010/07/01) bgColorClsClmNo 対応 2155 * 2156 * @param row 行番号( 0から始める ) 2157 * 2158 * @return 行の色を指定する class 属性( cssファイルで指定 ) 2159 * @see #setBgColorClsClm( String ) 2160 */ 2161 protected String getBgColorCycleClass( final int row ) { 2162 String rtn = null ; 2163 2164 // 5.1.8.0 (2010/07/01) bgColorClsClmNo 対応 2165 if( bgColorClsClmNo >= 0 ) { 2166 final String val = table.getValue( row,bgColorClsClmNo ); 2167 if( val != null && val.length() > 0 ) { 2168 rtn = " class=\"row_" + val + "\""; 2169 } 2170 } 2171 2172 if( rtn == null ) { 2173 if( (row/bgColorCycle) % 2 == 0 ) { 2174 rtn = colorRow0; // 偶数の場合 2175 } 2176 else { 2177 rtn = colorRow1; // 奇数の場合 2178 } 2179 } 2180 2181 return rtn ; 2182 } 2183 2184 /** 2185 * スクロールバー用のDIV要素を出力するかどうか(初期値はシステムパラメータ) 2186 * 2187 * スクロールバー対応する為、テーブルの先頭に、DIV要素を出力します。 2188 * 初期値は、システムパラメータ の VIEW_USE_SCROLLBAR です。 2189 * ※ 互換性の関係より、false になっています。 2190 * ※ 互換性の関係より、新しいタイプのヘッダー固定を、TYPE2 とします。 2191 * 2192 * @og.rev 3.5.6.4 (2004/07/16) 新規追加 2193 * @og.rev 3.8.0.3 (2005/07/15) barType 変数の追加 2194 * @og.rev 4.0.0.0 (2007/04/10) ヘッダー固定のスクロールタイプは、TYPE2 のみにする。 2195 * 2196 * @param useBar スクロールバー用のDIV要素の出力 [true:出力する/false:出力しない] 2197 */ 2198 @Override // ViewForm 2199 public void setUseScrollBar( final boolean useBar ) { 2200 useScrollBar = useBar; 2201 } 2202 2203 /** 2204 * スクロールバー用の開始DIV要素返します。 2205 * 2206 * スクロールバー対応する為、テーブルの先頭に、DIV要素を出力します。 2207 * 初期値は、システムパラメータ の VIEW_USE_SCROLLBAR で指定されたDIV要素です。 2208 * DIV要素の開始タグになります。 2209 * 2210 * @og.rev 3.8.0.3 (2005/07/15) 新規追加 2211 * @og.rev 4.2.0.0 (2008/03/18) outerにwidthとheightを出すように修正 2212 * 2213 * @return LAYER_ST スクロールバー用の開始DIV要素 2214 */ 2215 protected String getScrollBarStartDiv() { 2216 final String layerStart ; 2217 if( useScrollBar ) { 2218 // 6.1.0.0 (2014/12/26) refactoring:Prefer StringBuffer over += for concatenating strings 2219 final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ) 2220 .append( "<div id=\"divPos\" style=\"" ); 2221 if( height != null ){ 2222 buf.append( "height:" ).append( height ).append( ';' ); 2223 } 2224 if( width != null ){ 2225 buf.append( "width:" ).append( width ).append( ';' ); 2226 } 2227 buf.append( "\" ><div id=\"outer\"><div id=\"layer\" onscroll=\"SetScrollHeader(this);\"><div id=\"divHide\">" ); 2228 2229 layerStart = buf.toString(); 2230 } 2231 else { 2232 layerStart = LAYER_ST0; 2233 } 2234 2235 return layerStart; 2236 } 2237 2238 /** 2239 * スクロールバー用の終了DIV要素返します。 2240 * 2241 * スクロールバー対応する為、テーブルの終了に、DIV要素を出力します。 2242 * 初期値は、システムパラメータ の VIEW_USE_SCROLLBAR で指定されたDIV要素です。 2243 * DIV要素の終了タグになります。 2244 * 2245 * @og.rev 3.8.0.3 (2005/07/15) 新規追加 2246 * 2247 * @return スクロールバー用の終了DIV要素 2248 */ 2249 protected String getScrollBarEndDiv() { 2250 String layerEnd = LAYER_END0 ; 2251 if( useScrollBar ) { 2252 layerEnd = LAYER_END2 ; 2253 } 2254 return layerEnd; 2255 } 2256 2257 /** 2258 * 指定の行番号まで画面をスクロールさせる場合の行番号を設定します。 2259 * 2260 * 画面をスクロール後、リンク等で他画面を表示後、戻ってきた場合に、 2261 * 先のスクロール位置まで戻します。 2262 * ただし、厳密に戻すことはできないため、大体のあたりに戻します。 2263 * 指定しない場合(クリアする場合)は、-1 をセットしてください。 2264 * useSelRowColor は、選択行に色づけするかどうかを指定します。 2265 * 2266 * @og.rev 3.7.0.3 (2005/03/01) 新規追加 2267 * @og.rev 3.7.1.1 (2005/05/31) 選択行マーカーの使用有無 2268 * 2269 * @param rowNo 指定の行番号まで画面をスクロールさせる場合の行番号 2270 * @param useSelRowColor 選択行マーカーの使用有無 2271 */ 2272 @Override // ViewForm 2273 public void setScrollRowNo( final int rowNo, final boolean useSelRowColor ) { 2274 scrollRowNo = rowNo; 2275 firstChecked = false; 2276 this.useSelRowColor = useSelRowColor; 2277 } 2278 2279 /** 2280 * 設定値に "_" が含まれている場合にレンデラーを使用するカラムをCSV形式で指定します。 2281 * 2282 * これは、従来の カラム定義の WRITABLE エディターと同等の働きを行うように 2283 * カラム属性を指定します。 2284 * WRITABLE エディターは、設定値にアンダーバー "_" が含まれている場合に、 2285 * その値を書込み禁止にする機能です。これは、エディター自身が値を判断して 2286 * 書き込み許可か禁止かを判断しています。 2287 * この動きを汎用的にするため、指定のカラムをCSV形式(CSV)で指定 2288 * することにより、レンデラーとエディターを設定値によって動的に切り替える 2289 * 機能を実現します。 2290 * その場合、表示/編集ともに、先頭のアンダーバーは削除されます。 2291 * また、全カラムについて、有効にする場合は、writableControl="*" を設定します。 2292 * 2293 * @og.rev 3.8.0.9 (2005/10/17) 新規追加 2294 * @og.rev 5.1.8.0 (2010/07/01) 内部ロジック変更(setBooleanArray) 2295 * @og.rev 7.0.1.5 (2018/12/10) writeCtrlで出力時のアンダーバー削除 2296 * 2297 * @param wrtCtrl 書き込み制御を行いたいカラムをCSV形式で指定 2298 */ 2299 @Override // ViewForm 2300 public void setWritableControl( final String wrtCtrl ) { 2301 setBooleanArray( wrtCtrl,true,writeCtrl ); 2302 2303 for( int i=0; i<writeCtrl.length; i++ ) { 2304 if( writeCtrl[i] ) { 2305 final DBColumnConfig config = dbColumn[i].getConfig(); 2306 config.setWriteControl( true ); 2307 dbColumn[i] = new DBColumn( config ); 2308 table.setDBColumn( i,dbColumn[i] ); // DBTableModel にも書き戻す必要がある。 2309 } 2310 } 2311 } 2312 2313 /** 2314 * CSV形式で指定されたカラムに、true/false の初期設定を行います。 2315 * 2316 * 従来は、各クラスで実装されていた処理を、一箇所にまとめます。 2317 * これにより、各種機能をあらかじめ実装しておきます。 2318 * 指定のカラムが、null の場合は、何も処理を行いません。(つまり、初期値のまま) 2319 * 指定のカラムが、* の場合は、すべてのカラムが指定されたとみなし、配列に値を設定します。 2320 * 指定のカラムが、""(ゼロ文字列)と、"-" の場合は、なにもカラムが指定されていないものとみなされ、 2321 * 初期値の逆で埋められます。 2322 * 2323 * @og.rev 5.1.8.0 (2010/07/01) 新規追加 2324 * @og.rev 6.2.1.0 (2015/03/13) カラム名のゼロ文字列と、"-" も除外する。 2325 * @og.rev 5.9.27.0 (2017/12/01) protectedにして子クラスでも使えるようにしておく 2326 * 2327 * @param clsm 指定のカラムをCSV形式で指定 2328 * @param def 設定する値 2329 * @param arrays 設定するboolean配列 2330 */ 2331 protected void setBooleanArray( final String clsm , final boolean def , final boolean[] arrays ) { 2332 if( clsm != null ) { 2333 // 書き込み制御の許可 をカラム単位で設定。* の場合は、全カラム許可 2334 if( "*".equals( clsm ) ) { 2335 Arrays.fill( arrays,def ); // 全部埋める 2336 } 2337 // 6.2.1.0 (2015/03/13) カラム名のゼロ文字列と、"-" も除外する。 2338 else if( "-".equals( clsm ) || clsm.isEmpty() ) { 2339 Arrays.fill( arrays,!def ); // 全部逆で埋める 2340 } 2341 else { 2342 Arrays.fill( arrays,!def ); // 一旦、全部逆で埋める 2343 final String[] clmNames = StringUtil.csv2Array( clsm ); 2344 for( int i=0; i<clmNames.length; i++ ) { 2345 if( clmNames[i] != null && clmNames[i].length() > 0 ) { 2346 final int no = table.getColumnNo( clmNames[i] ); 2347 if( no >= 0 ) { arrays[no] = def; } 2348 } 2349 } 2350 } 2351 } 2352 } 2353 2354 /** 2355 * ogPopup で検索結果の値を返すキーを、CSV形式で指定します。 2356 * 2357 * popup の検索結果を返す画面で、結果のラジオボタンにイベントセットします。 2358 * この場合、オープンもとのwindow に値を返しますが、そのキーをCSV形式で 2359 * 指定します。 2360 * なお、このメソッドは、一覧表示(HTMLTable)関係のビューのみでサポートして 2361 * いますが、チェックメソッドの関係で、それ以外のビューに適用しても素通り 2362 * するようにします。(エラーにしません) 2363 * 2364 * @og.rev 3.8.6.1 (2006/10/20) 新規追加 2365 * 2366 * @param rtnKeys ogPopupで値を返すカラム文字列(CSV形式) 2367 */ 2368 @Override // ViewForm 2369 public void setPopupReturnKeys( final String rtnKeys ) { 2370 // このメソッドは、一覧表示(HTMLTable)関係のビューのみでサポートして 2371 // いますが、チェックメソッドの関係で、それ以外のビューに適用しても素通り 2372 // するようにします。(エラーにしません) 2373 } 2374 2375 /** 2376 * table要素に対して class 属性を設定します。 2377 * 2378 * 従来の システムリソースでのテーブルレイアウトの設定を廃止し、 2379 * CSSファイルで、指定するように変更しています。 2380 * これに伴い、CSSファイルのキーとして、クラス属性を出力します。 2381 * view(または、出力されるtableタグ)のレイアウトは、このクラス属性で 2382 * 指定することが可能になります。 2383 * 初期値は、viewTable です。 2384 * 2385 * @og.rev 4.0.0.0 (2007/04/16) 新規追加 2386 * 2387 * @param cls class属性を表す文字列 2388 */ 2389 @Override // ViewForm 2390 public void setTableClass( final String cls ) { 2391 if( cls != null ) { 2392 clazz = cls; 2393 } 2394 } 2395 2396 /** 2397 * table要素に対して class 属性を返します。 2398 * 2399 * @og.rev 4.0.0.0 (2007/04/16) 新規追加 2400 * @og.rev 5.9.5.3 (2016/02/26) classにtableIdを付加して返す 2401 * @og.rev 6.4.6.1 (2016/06/03) tableId 廃止(利用目的を明確にするため、パラメータ名をviewClassに変更) 2402 * 2403 * @return class属性を表す文字列 2404 */ 2405 protected String getTableClass() { 2406 return clazz + " " + viewClass; // 6.4.6.1 (2016/06/03) 2407 } 2408 2409 /** 2410 * outerのIDを持つDIV要素にheightを指定します。 2411 * 2412 * ビューの高さ、幅を指定できるようにします。 2413 * 内部的には、useScrollBar="true" 時に、div id="divPos" に、 2414 * style 属性を設定しています。(実際は、もう少し複雑) 2415 * これによって1画面に2つのビューを出力する事も可能となります。 2416 * セットする場合は、単位(pt,% など)を付けてください。 2417 * 初期値はnullです。 2418 * 2419 * @og.rev 4.2.0.0 (2008/03/18) 新規追加 2420 * 2421 * @param high ビューの高さ 2422 */ 2423 @Override // ViewForm 2424 public void setHeight( final String high ) { 2425 height = high; 2426 } 2427 2428 /** 2429 * 設定されたheightを返します。 2430 * 2431 * テーブル以外に、高さ、幅を使用する場合に、値を取得できるようにしています。 2432 * これは、セットされた文字列そのものを返しますので、 2433 * 単位(pt,% など)が付いています。 2434 * 初期値はnullです。 2435 * 2436 * @og.rev 6.9.7.0 (2018/05/14) 新規追加 2437 * 2438 * @return ビューの高さ(未設定の場合は、null) 2439 */ 2440 protected String getHeight() { 2441 return height; 2442 } 2443 2444 /** 2445 * outerのIDを持つDIV要素にwidthを指定します。 2446 * 2447 * ビューの高さ、幅を指定できるようにします。 2448 * 内部的には、useScrollBar="true" 時に、div id="divPos" に、 2449 * style 属性を設定しています。(実際は、もう少し複雑) 2450 * これによって1画面に2つのビューを出力する事も可能となります。 2451 * セットする場合は、単位(pt,% など)を付けてください。 2452 * 初期値はnullです。 2453 * 2454 * @og.rev 4.2.0.0 (2008/03/18) 新規追加 2455 * 2456 * @param wide ビューの高さ 2457 */ 2458 @Override // ViewForm 2459 public void setWidth( final String wide ) { 2460 width = wide; 2461 } 2462 2463 /** 2464 * 設定されたwidthを返します。 2465 * 2466 * テーブル以外に、高さ、幅を使用する場合に、値を取得できるようにしています。 2467 * これは、セットされた文字列そのものを返しますので、 2468 * 単位(pt,% など)が付いています。 2469 * 2470 * @og.rev 6.9.7.0 (2018/05/14) 新規追加 2471 * 2472 * @return ビューの高さ(未設定の場合は、null) 2473 */ 2474 protected String getWidth() { 2475 return width; 2476 } 2477 2478 /** 2479 * リソースマネージャを設定します。 2480 * クロス集計時に、useColumnHeader="true"とした場合のみ設定されます。 2481 * 2482 * @og.rev 4.0.0.0 (2007/11/29) 新規作成 2483 * 2484 * @param res リソースマネージャー 2485 */ 2486 @Override // ViewForm 2487 public void setResourceManager( final ResourceManager res ) { 2488 resourceManager = res; 2489 } 2490 2491 /** 2492 * リソースマネージャを取得します。 2493 * 2494 * @og.rev 4.0.0.0 (2007/11/29) 新規作成 2495 * 2496 * @return ResourceManagerリソースマネージャー 2497 */ 2498 protected ResourceManager getResourceManager() { 2499 return resourceManager; 2500 } 2501 2502 /** 2503 * 改廃Cのついていない行をスキップするかどうか指定します。 2504 * 2505 * "true" で、改廃Cのついた行をスキップします。 2506 * 初期値はfalseです。 2507 * 2508 * @og.rev 4.3.1.0 (2008/09/08) 新規追加 2509 * 2510 * @param sne 改廃Cのついていない行をスキップするかどうか(true:スキップする/false:スキップしない) 2511 */ 2512 @Override // ViewForm 2513 public void setSkipNoEdit( final boolean sne ) { 2514 skipNoEdit = sne; 2515 } 2516 2517 /** 2518 * 改廃Cのついていない行をスキップするかどうか指定します。 2519 * 2520 * skipNoEdit="true"でかつ、編集されていない(改廃Cがついていない)場合のみ 2521 * trueを返します。 2522 * 2523 * @og.rev 4.3.1.0 (2008/09/08) 新規追加 2524 * 2525 * @param row 行番号 2526 * 2527 * @return スキップ対象行か 2528 */ 2529 protected boolean isSkipNoEdit( final int row ) { 2530 return skipNoEdit && ( table.getModifyType( row ) == null || table.getModifyType( row ).isEmpty() ); 2531 } 2532 2533 /** 2534 * 画面遷移なしモードに対応した形で処理を行うかを指定します。 2535 * 2536 * "true" で、画面遷移なしモードに対応します。 2537 * 初期値はfalseです。 2538 * 2539 * @og.rev 4.3.3.0 (2008/10/01) 新規追加 2540 * 2541 * @param flag 画面遷移なしモードに対応するかどうか(true:対応する/false:対応しない) 2542 */ 2543 @Override // ViewForm 2544 public void setNoTransition( final boolean flag ) { 2545 noTransition = flag; 2546 } 2547 2548 /** 2549 * 画面遷移なしモードに対応した形で処理を行うかを返します。 2550 * 2551 * "true" で、画面遷移なしモードに対応します。 2552 * 初期値はfalseです。 2553 * 2554 * @og.rev 4.3.3.0 (2008/10/01) 新規追加 2555 * 2556 * @return 画面遷移なしモードに対応するかどうか(true:対応する/false:対応しない) 2557 */ 2558 protected boolean isNoTransition() { 2559 return noTransition; 2560 } 2561 2562 /** 2563 * 該当行の行番号と改廃Cを出力します。 2564 * 出力形式は、 rid="[行番号]" kh="[改廃C]" です。 2565 * 改廃Cが付加されていない場合は、改廃Cがnullの場合は、kh属性は出力されません。 2566 * (画面遷移なしモードで使用します) 2567 * 2568 * @og.rev 4.3.3.0 (2008/10/01) 新規作成 2569 * 2570 * @param row 行番号( 0から始める ) 2571 * 2572 * @return 該当行の行番号と改廃C 2573 * @og.rtnNotNull 2574 */ 2575 protected String getHiddenRowValue( final int row ) { 2576 String kh = ""; 2577 if( table.getModifyType( row ) != null && table.getModifyType( row ).length() > 0 ) { 2578 kh = " " + HIDDEN_CDKH_KEY + "=\"" + table.getModifyType( row ) + "\""; 2579 } 2580 return " " + HIDDEN_ROW_KEY + "=\"" + row + "\"" + kh; 2581 } 2582 2583 /** 2584 * ビューで表示したカラムの一覧をCSV形式で返します。 2585 * 2586 * @og.rev 5.1.6.0 (2010/05/01) 新規追加 2587 * 2588 * @return ビューで表示したカラムの一覧 2589 * @og.rtnNotNull 2590 */ 2591 @Override // ViewForm 2592 public String getViewClms() { 2593 final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ); 2594 for( int i=0; i<clmDisplay.length; i++ ) { 2595 if( clmDisplay[i] && !( rowWritableFlag && i==0 ) ) { 2596 if( buf.length() > 0 ) { buf.append( ',' ); } 2597 buf.append( dbColumn[i].getName() ); 2598 } 2599 } 2600 return buf.toString(); 2601 } 2602 2603 /** 2604 * ビューで表示したカラムの一覧をCSV形式で返します。 2605 * 2606 * このメソッドでは、TableFormatter を使用して表示されたカラム一覧を求めます。 2607 * 2608 * @og.rev 6.4.3.4 (2016/03/11) TableFormatter を使用して表示されたカラム一覧を求めます。 2609 * 2610 * @param format TableFormatterオブジェクト 2611 * @return ビューで表示したカラムの一覧 2612 * @og.rtnNotNull 2613 */ 2614 protected String getViewClms( final TableFormatter format ) { 2615 return format.getLocationStream() // IntStream の取得 2616 .filter( loc -> loc >= 0 ) // 処理条件 2617 .mapToObj( loc -> table.getColumnName( loc ) ) // int から String へStreamの変換 2618 .collect( Collectors.joining( "," ) ); // CSV連結 2619 } 2620 2621 /** 2622 * 表示項目の編集(並び替え)が可能かどうかを返します。 2623 * 2624 * @og.rev 5.1.6.0 (2010/05/01) 新規追加 2625 * 2626 * @return 表示項目の編集(並び替え)が可能かどうか(true:可能) 2627 */ 2628 @Override // ViewForm 2629 public boolean isEditable() { 2630 return true; 2631 } 2632 2633 /** 2634 * このViewFormが作成された画面IDをセットします。 2635 * 2636 * @og.rev 5.1.7.0 (2010/06/01) 新規追加 2637 * 2638 * @param gamenId 画面ID 2639 */ 2640 @Override // ViewForm 2641 public void setGamenId( final String gamenId ) { 2642 this.gamenId = gamenId; 2643 } 2644 2645 /** 2646 * このViewFormが作成された画面IDを返します。 2647 * 2648 * @og.rev 5.1.7.0 (2010/06/01) 新規追加 2649 * 2650 * @return 画面ID 2651 */ 2652 @Override // ViewForm 2653 public String getGamenId() { 2654 return gamenId; 2655 } 2656 2657 /** 2658 * カラムが一括入力アシスト機能を利用するかどうかを返します。 2659 * 2660 * 条件は、一括入力アシストカラムで、かつ、書き込み許可(isColumnWritable(clm)==true)の場合とする。 2661 * 2662 * @og.rev 5.2.1.0 (2010/10/01) 新規作成 2663 * 2664 * @param column カラム番号 2665 * 2666 * @return 利用する(true)/しない(false) 2667 */ 2668 protected boolean isClmBulkSet( final int column ) { 2669 return clmBulkSet[column] && clmWritable[column]; 2670 } 2671 2672 /** 2673 * 一括入力カラムのアシスト機能を利用するカラム名を、CSV形式で与えます。 2674 * 2675 * これは、カラムの書き込み時に、一括入力可能なカラムをヘッダーに表示し、 2676 * 一括登録できる機能を提供します。 2677 * この機能は、jsp/common/bulkSet.js JavaScript とともに提供されます。 2678 * IE については、クリップボードも利用できます。Ctrl-C と Ctrl-V でそれぞれ 2679 * 一連のカラムの値の取り出しと書き込みが可能になります。 2680 * "*" を指定すると、すべてのカラムを(columnBulkSet)指定したことになります。 2681 * 2682 * @og.rev 5.2.1.0 (2010/10/01) 新規作成 2683 * @og.rev 6.2.0.0 (2015/02/27) Popup(isRenderer=false のviewMarker)のBuikSet Off化対応 2684 * 2685 * @param columnName 例:"OYA,KO,HJO,SU,DYSET,DYUPD" 2686 */ 2687 @Override // ViewForm 2688 public void setColumnBulkSet( final String columnName ) { 2689 setBooleanArray( columnName,true,clmBulkSet ); 2690 2691 // 6.2.0.0 (2015/02/27) Popup(isRenderer=false のviewMarker)のBuikSet Off化対応 2692 // result.jsp から update.jsp に画面遷移するときに、再セットされるので、 2693 // 旧のView属性のコピーが必要。(コピーのタイミングでは、早すぎて、ここで書き換えられてしまう。) 2694 if( editMarker != null ) { 2695 final int[] clmNos = editMarker.getColumnNos(); 2696 if( clmNos != null ) { 2697 for( int i=0; i<clmNos.length; i++ ) { 2698 clmBulkSet[clmNos[i]] = false ; // 6.2.0.0 (2015/02/27) BulkSetしない 2699 } 2700 } 2701 } 2702 } 2703 2704 /** 2705 * 引数のフォーマッターに、noDisplayカラムのロケーションをクリアします。 2706 * 2707 * フォーマッター系の noDisplay 処理になります。 2708 * 2709 * @og.rev 6.2.0.0 (2015/02/27) フォーマット系の noDisplay 対応 2710 * @og.rev 6.2.0.1 (2015/03/06) 非表示のマーカーに、Formatter#NO_DISPLAY を使用する。 2711 * 2712 * @param format フォーマッター 2713 */ 2714 protected void setFormatNoDisplay( final TableFormatter format ) { 2715 final int size = format.getLocationSize(); 2716 for( int cl=0; cl<size; cl++ ) { 2717 final int loc = format.getLocation( cl ); 2718 if( loc >= 0 && !isColumnDisplay( loc ) ) { // 6.2.0.1 (2015/03/06) 非表示のマーカー 2719 format.setNoDisplay( cl ); // 6.2.0.1 (2015/03/06) 非表示のマーカー 2720 } 2721 } 2722 } 2723 2724 /** 2725 * このViewFormを作成するにあたり、区別するためのクラス属性をセットします。 2726 * 2727 * 通常は、viewForm より tableId を設定します。 2728 * SplitViewTag を使用する場合は、左右分割のため、同じtableId になるため、 2729 * 左右で異なるclassを設定してください。 2730 * 2731 * @og.rev 6.4.6.1 (2016/06/03) 新規追加 2732 * 2733 * @param clazz Viewのクラス属性 2734 */ 2735 @Override // ViewForm 2736 public void setViewClass( final String clazz ) { 2737 if( clazz != null ) { 2738 this.viewClass = clazz; 2739 } 2740 } 2741 2742 /** 2743 * このViewFormを作成するにあたり、区別するためのクラス属性を取得します。 2744 * 2745 * 通常は、viewForm より tableId を設定します。 2746 * SplitViewTag を使用する場合は、左右分割のため、同じtableId になるため、 2747 * 左右で異なるclassを設定してください。 2748 * 2749 * @og.rev 6.4.6.1 (2016/06/03) 新規追加 2750 * 2751 * @return Viewのクラス属性 2752 */ 2753 protected String getViewClass() { 2754 return viewClass; 2755 } 2756}