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