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