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