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.plugin.view; 017 018import org.opengion.fukurou.util.StringUtil; 019// import org.opengion.fukurou.system.OgBuilder ; // 6.4.4.2 (2016/04/01) 020 021/** 022 * 行と列を入れ替えて表示する、テーブル回転表示クラスです。 023 * 024 * このクラスは、表示のみ実行可能です。旧ヘッダー部分は、第一カラムに表示されます。 025 * このビューでは、行と列が入れ替わって表示している為、登録はできません。 026 * 027 * AbstractViewForm により、setter/getterメソッドのデフォルト実装を提供しています。 028 * 各HTMLのタグに必要な setter/getterメソッドのみ、追加定義しています。 029 * 030 * AbstractViewForm を継承している為、ロケールに応じたラベルを出力させる事が出来ます。 031 * 032 * @og.rev 3.5.3.0 (2003/10/27) 新規作成 033 * @og.group 画面表示 034 * 035 * @version 4.0 036 * @author Kazuhiko Hasegawa 037 * @since JDK5.0, 038 */ 039public class ViewForm_HTMLRotationTable extends ViewForm_HTMLTable { 040 /** このプログラムのVERSION文字列を設定します。 {@value} */ 041 private static final String VERSION = "7.0.4.0 (2019/05/31)" ; 042 043 private boolean noClass ; 044 045 /** 046 * デフォルトコンストラクター 047 * 048 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 049 */ 050 public ViewForm_HTMLRotationTable() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 051 052 /** 053 * DBTableModel から HTML文字列を作成して返します。 054 * startNo(表示開始位置)から、pageSize(表示件数)までのView文字列を作成します。 055 * 表示残りデータが pageSize 以下の場合は、残りのデータをすべて出力します。 056 * 057 * @og.rev 3.5.3.1 (2003/10/31) BgColorCycleClass の設定不具合修正。 058 * @og.rev 3.5.6.4 (2004/07/16) ヘッダーとボディー部をJavaScriptで分離 059 * @og.rev 3.8.8.5 (2007/03/09) 表示の仕方を修正しました。 060 * @og.rev 4.0.0.0 (2005/01/31) 新規作成(getColumnClassName ⇒ getColumnDbType) 061 * @og.rev 6.4.5.0 (2016/04/08) メソッド変更( getColumnDbType(int) → getClassName(int) ) 062 * 063 * @param startNo 表示開始位置 064 * @param pageSize 表示件数 065 * 066 * @return DBTableModelから作成された HTML文字列 067 * @og.rtnNotNull 068 */ 069 @Override 070 public String create( final int startNo, final int pageSize ) { 071 if( getRowCount() == 0 ) { return ""; } // 暫定処置 072 073 final int lastNo = getLastNo( startNo, pageSize ); 074 075 final StringBuilder out = new StringBuilder( BUFFER_LARGE ) 076 .append( getCountForm( startNo,pageSize ) ) 077 .append( getHeader() ) 078 .append("<tbody>").append( CR ); 079 080 // 6.3.9.1 (2015/11/27) Found 'DD'-anomaly for variable(PMD) 081 int bgClrCnt = 0; 082 final int clmCnt = getColumnCount(); // 3.5.5.7 (2004/05/10) 083 for( int column=0; column<clmCnt; column++ ) { 084 if( !isColumnDisplay( column ) ) { continue; } 085 final int dummyRow = bgClrCnt++ ; // 3.8.8.5 (2007/03/09) 086 087 out.append("<tr").append( getBgColorCycleClass( dummyRow ) ).append('>') // 6.0.2.5 (2014/10/31) char を append する。 088 .append( CR ); 089 // 3.8.8.5 (2007/03/09) numberType 属性を考慮 090 if( isNumberDisplay() ) { 091 out.append( "<td>" ).append( getNumberData( dummyRow ) ).append( "</td>" ) 092 .append( CR ); 093 } 094 out.append( "<td>" ) 095 .append( getColumnLabel(column) ).append("</td>") 096 .append( CR ); 097 098 // 6.3.9.1 (2015/11/27) Found 'DD'-anomaly for variable(PMD) 099 final String clmCls = noClass ? "<td>" : ("<td class=\"" + getClassName(column) + "\" >") ; // 6.4.5.0 (2016/04/08) 100 for( int row=startNo; row<lastNo; row++ ) { 101 out.append( clmCls ) 102 .append( getValueLabel(row,column) ) 103 .append("</td>").append( CR ); 104 } 105 out.append("</tr>").append( CR ); 106 } 107 out.append("</tbody>").append( CR ) 108 .append("</table>").append( CR ) 109 .append( getScrollBarEndDiv() ); // 3.8.0.3 (2005/07/15) 110 111 return out.toString(); 112 } 113 114 /** 115 * 内容をクリア(初期化)します。 116 * 117 */ 118 @Override 119 public void clear() { 120 super.clear(); 121 noClass = false; 122 } 123 124 /** 125 * テーブルのバックグラウンドカラーの値をセットします。 126 * 行番号は、0から始まるので、偶数を HTML_BG_COLOR_ROW0、 127 * 奇数行を HTML_BG_COLOR_ROW1 とします。 128 * setBgColorCycle で、設定値変換しています。 129 * なお、このクラスでは、最初の行に、row_h クラス属性を付加します。 130 * 131 * @og.rev 3.8.8.5 (2007/03/09) ヘッダー部の色付け 132 * 133 * @param indx 先頭からの連番( 0から始める ) 134 * 135 * @return 行の色を指定する class 属性( cssファイルで指定 ) 136 */ 137 @Override 138 protected String getBgColorCycleClass( final int indx ) { 139 return ( indx == 0 ) 140 ? " class=\"row_h\"" 141 : super.getBgColorCycleClass( indx ); 142 } 143 144 /** 145 * DBTableModel から テーブルのタグ文字列を作成して返します。 146 * 147 * @og.rev 5.9.1.2 (2015/10/23) 自己終了警告対応 148 * @og.rev 6.4.4.2 (2016/04/01) StringBuilderの代わりに、OgBuilderを使用する。 149 * @og.rev 7.0.4.0 (2019/05/31) colgroup 廃止 150 * 151 * @return テーブルのタグ文字列 152 * @og.rtnNotNull 153 */ 154 @Override 155 protected String getTableHead() { 156 return ""; 157// return new OgBuilder() 158// .appendIf( isNumberDisplay() , "<colgroup class=\"S9\" ><!-- --></colgroup>" ) 159// .appendCR( "<colgroup class=\"HEADER\" ><!-- --></colgroup>" ) 160// .toString(); 161 } 162 163 /** 164 * フォーマットメソッドを使用できるかどうかを問い合わせます。 165 * 166 * @return 使用可能(true)/ 使用不可能 (false) 167 */ 168 @Override 169 public boolean canUseFormat() { 170 return false; 171 } 172 173 /** 174 * カラムのクラス名(X,S9 など)のセットを行うかどうか指定します。 175 * 176 * "true" で、クラス属性を設定しません。これは、CSSファイルに書かれている属性を 177 * 使用しないことを意味します。 178 * 初期値は、"false" です。 179 * 180 * @param flag クラス名使用の有無(true:使用しない/false:使用する。) 181 */ 182 public void setBodyNoClass( final String flag ) { 183 noClass = StringUtil.nval( flag,noClass ); 184 } 185 186 /** 187 * 表示項目の編集(並び替え)が可能かどうかを返します。 188 * 189 * @og.rev 5.1.6.0 (2010/05/01) 新規追加 190 * 191 * @return 表示項目の編集(並び替え)が可能かどうか(false:不可能) 192 */ 193 @Override 194 public boolean isEditable() { 195 return false; 196 } 197}