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