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 */ 016 package org.opengion.plugin.view; 017 018 import java.util.List; 019 import java.util.ArrayList; 020 021 import org.opengion.hayabusa.common.HybsSystem; 022 import org.opengion.hayabusa.common.HybsSystemException; 023 import org.opengion.hayabusa.html.ViewTimeTableParam; 024 025 /** 026 * 時間軸を持つタイ?ーブルの表示を行うクラスです? 027 * 028 * パラメータが?な場合?、ViewTimeTableParamTag を使用してください? 029 * 030 * パラメータが設定されて???合?、ViewForm_HTMLTimeTable の初期値が使用されます? 031 * (パラメータを使用するには、viewタグのuseParam 属?をtrueに設定する?があります?) 032 * 033 * SELECT??、日付?キー、備??開始時刻、終?刻、リンクが????で、この並び??? 034 * 完?に固定です?よって、カラ?置を指定する??ありませんが?SELECT?自由に 035 * 設定することも?来ませんので、ご注意く??? 036 * こ?固定化に伴??WRITABLE ?も使用できません? 037 * なお?日付?キー、備?に関しては、columnDisplay 属?で、表示の ON/OFF 制御は可能です? 038 * また?日付ブレイク、キーブレイクの設定で、カラ??体を??ブルの外に出すことが可能です? 039 * (キーと備?はセ?になって?す?) 040 * 041 * タイ?ーブルが空き?場合?リンクを指定できます?(ViewTimeTableParam.NULL_LINK_CLM_ID) 042 * (ViewTimeTableParam の nullLinkColumn 属?) 043 * ?しな??合?、空き?リンクは作?されません? 044 * こ?リンクは、特殊で、引数に、パラメータを追?きますが?($1)"?($2)" で?します? 045 * こ?($1)?$2)は?始時刻、終?刻がセ?されますが、SELECT??固定カラ?同じ 046 * 並び?すが、DBTableModelの値を設定して?わけではありません? 047 * 空き?場合?、データ自体が存在しな??合と、日付?キー のみ?外部結合で生?され? 048 * レコードが実際に存在する場合がありますが、外部結合で生?されたレコードには? 049 * 開始時刻、終?刻はありません?$1) と($2)には、それぞれ??開始時刻と?終?刻? 050 * セ?します? 051 * 052 * 例として?amp;TMSTART=($1)&TMEND=($2) と???の ($*) 部?解析して割当ます? 053 * 054 * ブレーク処?行うカラ??をCSV形式でセ?できます?(ViewTimeTableParam.BREAK_CLMS) 055 * (ViewTimeTableParam の breakClms 属?) 056 * これは、ブレイク毎に??ブルが?かれて、テーブルの先?に、ブレイクした 057 * 値が表示されます? 058 * 例えば、日付カラ?ブレイクカラ?して設定すると、日付がブレイクするた?? 059 * 日付をヘッ??に出して、テーブルを作?します? 060 * ブレークカラ??、CSV形式で??できます?そ?場合?、???カラ?? 061 * 合?された?で、キーブレイクの判定を行います?(簡単に?と??判定になります?) 062 * なお?ブレイクカラ??した?合?、?動的に、noDisplay 属?にそ?値をセ? 063 * します? 064 * 065 * @og.rev 5.4.0.0 (2011/10/01) 新規追? 066 * @og.group 画面表示 067 * 068 * @version 4.0 069 * @author Kazuhiko Hasegawa 070 * @since JDK5.0, 071 */ 072 public class ViewForm_HTMLTimeTable extends ViewForm_HTMLTable { 073 //* こ?プログラ??VERSION??を設定します? {@value} */ 074 private static final String VERSION = "5.4.4.2 (2012/02/03)" ; 075 076 // private int intval = 5; // 30?5 単位に colspan を設定する? 077 // private int minStTime = 80; // 08:00 のこと?0?5 換? 078 // private int maxEdTime = 210; // 21:00 のこと? 079 private int intval = 30; // 30?単位に colspan を設定する? 080 private int minStTime = 480; // 08:00 のこと?H=480M 081 private int maxEdTime = 1260; // 21:00 のこと?1H=1260M 082 083 private static final int dyClmNo = 0; // ヘッ??1?た?、グループ化する場合?、外?? 084 private static final int keyClmNo = 1; // ヘッ??2?た?、グループ化する場合?、外?? 085 private static final int bikoClmNo = 2; // ヘッ??3???では使用して?せん? 086 087 private static final int tmstClmNo = 3; // 時間??開始時刻(含? 088 private static final int tmedClmNo = 4; // 時間??終?刻(含まな? 089 private static final int linkClmNo = 5; // 時間?表示する予?報(変更画面へのリンク) 090 091 private static final int clmCnt = 3; // 決め打ち。今?、dyClm,keyClm の?つ?表示 092 093 // 引数に、DYUSE=(dyClm)&UNITID=(keyClm)&TMSTART=(stTime)&TMEND=(edTime) を追?る? 094 // private String linkValue = "<a href=\"../GK0101/index.jsp?command=NEW&NORESERVE=" 095 // + "&DYUSE=($1)&UNITID=($2)&TMSTART=($3)&TMEND=($4)" 096 // + "&BACK_GAMENID=GK0000&GAMENID=GK0101&BACK_ADDRESS=/gk/jsp/GK0000/index.jsp\" target=\"CONTENTS\">" 097 // + "<img src=\"../customImage/gk/space.gif\" width=\"100%\" height=\"20px\" />" 098 // + "</a>" ; 099 // 引数パ?ス機?付き ??タが存在しな??合?リンクのベ?スを設定? 100 // private String linkValue = "" ; // null にするとエラーになる?で、空?? 101 private int nullLinkClmNo = -1 ; // 固定ではなく可変?場合に利用するリンクカラ?o 102 103 private int tdClassColumnNo = -1 ; // 5.4.3.7 (2012/01/20) ??タを?れるTDタグにclass属?を付与する?合?カラ?o 104 105 // private int[] breakClmNos = null; // ブレーク処?行うカラ?o 106 private boolean isDyBreak = true; // 日付でブレイクするかど?を指? 107 private boolean isBookingMerge = false; // 5.4.4.2 (2012/02/03) ブッキング??タを?ージするかど?を指? 108 109 /** 110 * ?をクリア(初期?します? 111 * 112 * @og.rev 5.4.3.7 (2012/01/20) tdClassColumnNo 追? 113 * @og.rev 5.4.4.2 (2012/02/03) isBookingMerge 追? 114 * 115 */ 116 @Override 117 public void clear() { 118 super.clear(); 119 120 // intval = 5; // 30?5 単位に colspan を設定する? 121 // minStTime = 80; // 08:00 のこと?0?5 換? 122 // maxEdTime = 210; // 21:00 のこと? 123 intval = 30; // 30?単位に colspan を設定する? 124 minStTime = 480; // 08:00 のこと?H=480M 125 maxEdTime = 1260; // 21:00 のこと?1H=1260M 126 127 // linkValue = "" ; // null にするとエラーになる?で、空?? 128 nullLinkClmNo = -1; // 固定ではなく可変?場合に利用するリンクカラ? 129 // breakClmNos = null; // ブレーク処?行うカラ?o 130 tdClassColumnNo = -1 ; // 5.4.3.7 (2012/01/20) ??タを?れるTDタグにclass属?を付与する?合?カラ?o 131 isDyBreak = true; // 日付でブレイクするかど?を指? 132 isBookingMerge = false; // 5.4.4.2 (2012/02/03) ブッキング??タを?ージするかど?を指? 133 } 134 135 /** 136 * DBTableModel から HTML??を作?して返します? 137 * startNo(表示開始位置)から、pageSize(表示件数)までのView??を作?します? 138 * 表示残り??タ?pageSize 以下?場合?,残りの??タをすべて出力します? 139 * 140 * @og.rev 5.4.3.7 (2012/01/20) tdClassColumnNo 追? 141 * @og.rev 5.4.4.2 (2012/02/03) isBookingMerge 追? 142 * 143 * @param startNo 表示開始位置 144 * @param pageSize 表示件数 145 * 146 * @return DBTableModelから作?され?HTML?? 147 */ 148 @Override 149 public String create( final int startNo, final int pageSize ) { 150 if( getRowCount() == 0 ) { return ""; } // 暫定?置 151 152 paramInit(); 153 headerLine = null; 154 int lastNo = getLastNo( startNo, pageSize ); 155 int hsc = getHeaderSkipCount(); 156 int hscCnt = 1; 157 158 StringBuilder out = new StringBuilder( HybsSystem.BUFFER_LARGE ); 159 160 if( isDyBreak ) { 161 out.append( getRendererValue( 0,dyClmNo ) ).append( HybsSystem.CR ); 162 setColumnDisplay( dyClmNo,false ); // 日付ブレイクなら?setColumnDisplay をfalse にセ? 163 } 164 165 out.append( getHeader() ); 166 167 out.append("<tbody>").append( HybsSystem.CR ); 168 int bgClrCnt = 0; 169 170 int maxColspan = (maxEdTime-minStTime)/intval ; // こ?数が?TDの数になる? 171 int rowColspan = 0; // 5.5.0.3(2012/03/12) ?行?累積TD数。最大は、maxColspan で? 172 int stTime = minStTime; 173 174 String backData = ""; // 初期値。1回目にキーブレイクさせる? 175 176 List<String> dblBooking = new ArrayList<String>(); // 重?ータがあったとき???タ格? 177 String nlVal = null; // 空リンクのベ?ス値 178 String tdCls = null; // 5.4.3.7 (2012/01/20) tdClassColumnNo 追? 179 String dyVal = null; // 日付?目の値 180 String keyVal = null; // キー?の値 181 // String breakVal = null; // キーブレイクの値 182 String bk_nlVal = null; // キーブレイク時???空リンクのベ?ス値 183 String bk_dyVal = ""; // キーブレイク時???日? 184 // String bk_breakVal = ""; // キーブレイクの??値 185 for( int row=startNo; row<lastNo; row++ ) { 186 // キーブレイクの判? 187 bk_nlVal = nlVal; 188 // bk_dyVal = dyVal; 189 // bk_keyVal = keyVal; 190 191 // nlVal = (nullLinkClmNo < 0 ) ? linkValue : getRendererValue( row,nullLinkClmNo ); 192 nlVal = (nullLinkClmNo < 0 ) ? null : getRendererValue( row,nullLinkClmNo ); 193 tdCls = (tdClassColumnNo < 0 ) ? null : getValue( row,tdClassColumnNo ); // 5.4.3.7 (2012/01/20) 194 dyVal = getValue( row,dyClmNo ); 195 keyVal = getValue( row,keyClmNo ); 196 if( row==startNo ) { bk_dyVal = dyVal; } // 初期??タをセ?? 197 // 198 // if( breakClmNos != null ) { 199 // StringBuilder blkVal = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 200 // for( int i=0; i<breakClmNos.length; i++ ) { 201 // blkVal.append( getValue( row,breakClmNos[i] ) ); 202 // } 203 // breakVal = blkVal.toString(); 204 // } 205 206 String linkVal = getRendererValue( row,linkClmNo ); 207 208 // キーブレイク判定?キーブレイクは、?初めから来る? 209 if( !backData.equals( dyVal + keyVal ) ) { 210 backData = dyVal + keyVal; // null は来な??? 211 212 // minStTime < stTime の時だけ?処?行う???のキーブレイクは処?な?? 213 if( minStTime < stTime ) { 214 // まず?、前の td の残りを?力する?ここでは、キーブレイク前?値を使用する? 215 if( stTime < maxEdTime ) { 216 out.append(" "); // td タグの出力前の段落 217 // 残データの書き?し?、最大TD数-それまでにセ?した数? 218 int td = maxColspan - rowColspan; // 5.5.0.3(2012/03/12) 219 // appendTag( out , "td" , (maxEdTime-stTime)/intval , 220 // appendTDTag( out , null , (maxEdTime-stTime)/intval , // 5.4.3.7 (2012/01/20) 221 appendTDTag( out , null , td , // 5.5.0.3(2012/03/12) 222 makeLinkValue( bk_nlVal , stTime , maxEdTime ) ); 223 // makeLinkValue( bk_nlVal , bk_dyVal , bk_keyVal , stTime , maxEdTime ) ); 224 } 225 out.append("</tr>").append( HybsSystem.CR ); 226 } 227 stTime = minStTime; // 初期? 228 229 // ??タか?りが発生したとき?処? 230 if( !dblBooking.isEmpty() ) { 231 for( String bkdt : dblBooking ) { 232 out.append("<tr").append( getBgColorCycleClass( bgClrCnt-1 ) ).append(">").append( HybsSystem.CR ); 233 out.append( bkdt ); 234 out.append("</tr>").append( HybsSystem.CR ); 235 } 236 dblBooking.clear(); 237 } 238 239 // 日付ブレイク処? 240 if( isDyBreak && row > startNo && !bk_dyVal.equals( dyVal ) ) { 241 bk_dyVal = dyVal; 242 out.append("<tr class=\"dummy\">"); 243 for(int column = 0; column < clmCnt; column++) { 244 if( isColumnDisplay( column ) ) { 245 out.append("<td/>"); 246 } 247 } 248 // for( int i=0; i<(maxEdTime-minStTime)/intval ; i++ ) { 249 for( int i=0; i<maxColspan ; i++ ) { // 5.5.0.3(2012/03/12) 空td の出力?TD の colspan の基準になる? 250 out.append("<td/>"); 251 } 252 out.append("</tr>").append( HybsSystem.CR ); 253 out.append("</tbody>").append( HybsSystem.CR ); 254 out.append("</table>").append( HybsSystem.CR ); 255 256 out.append( getRendererValue( row,dyClmNo ) ).append( HybsSystem.CR ); 257 258 out.append( getHeader() ); 259 out.append("<tbody>").append( HybsSystem.CR ); 260 hscCnt = 1; 261 } 262 263 // ヘッ??繰り返し属?( headerSkipCount )を採用 264 if( hsc > 0 && hscCnt % hsc == 0 ) { 265 out.append( getHeadLine() ); 266 hscCnt = 1; 267 } 268 else { 269 // 特殊??ここ?処?は、???も?実行されるので?+しな???しておく? 270 if( row > startNo ) { hscCnt ++ ; } 271 } 272 273 // ここから、新しい行が始まる? 274 out.append("<tr").append( getBgColorCycleClass( bgClrCnt++ ) ).append(">").append( HybsSystem.CR ); 275 rowColspan = 0 ; // 5.5.0.3(2012/03/12) 初期? 276 277 for(int column = 0; column < clmCnt; column++) { 278 if( isColumnDisplay( column ) ) { 279 // ヘッ??部??しやすいように、class 属?を与えておく? 280 out.append(" <td class=\"" ).append( getColumnName( column ) ).append( "\">" ); 281 out.append( getValueLabel(row,column) ); 282 out.append("</td>").append( HybsSystem.CR ); 283 } 284 } 285 } 286 287 // ??型?時???を数字に変換する? 288 // int clStTime = getStr2Time( getValue( row,tmstClmNo ) , minStTime ); 289 int clStTime = getStr2Time( getValue( row,tmstClmNo ) , -1 ); 290 boolean nullData = (clStTime < 0) ; // 開始時刻?null の場合?-1 が返されるのでフラグをセ?する? 291 if( clStTime < minStTime ) { clStTime = minStTime; } // ??以下?場合?、最小?に合せる? 292 293 int clEdTime = getStr2Time( getValue( row,tmedClmNo ) , maxEdTime ); 294 if( clEdTime > maxEdTime ) { clEdTime = maxEdTime; } // ?値以上?場合?、最大値に合せる? 295 296 if( clStTime == clEdTime ) { clEdTime = clEdTime + intval ; } // ??と?が同じ場合?、intval?進めておく? 297 298 // ??と?が異なる?合??に空?入る?同じ場合???続なので、空??入らな?? 299 if( stTime < clStTime ) { 300 out.append(" "); // td タグの出力前の段落 301 302 // 5.5.0.3(2012/03/12) 間に空?入る?合?そ?大きさが最小TD単位より大きけれ?、?割する? 303 // ただし?直前? TD 個数が??でな??合?み? 304 int td = (clStTime-stTime)/intval; // 5.5.0.3(2012/03/12) 305 rowColspan += td; 306 // appendTag( out , "td" , (clStTime-stTime)/intval , 307 // appendTDTag( out , null , (clStTime-stTime)/intval , // 5.4.3.7 (2012/01/20) 308 appendTDTag( out , null , td , // 5.5.0.3(2012/03/12) 309 makeLinkValue( nlVal , stTime , clStTime ) ).append( HybsSystem.CR ); 310 // makeLinkValue( nlVal , dyVal , keyVal , stTime , clStTime ) ).append( HybsSystem.CR ); 311 } 312 // 前???タとか?って?。つまり?ブッキング??タがある? 313 else if( stTime > clStTime ) { 314 // 5.4.4.2 (2012/02/03) ブッキング??タを?ージする機?を追? 315 if( isBookingMerge ) { 316 if( stTime < clEdTime ) { 317 int td = (clEdTime-stTime)/intval; // 5.5.0.3(2012/03/12) 318 rowColspan += td ; 319 // appendTDTag( out , tdCls , (clEdTime-stTime)/intval , linkVal ).append( HybsSystem.CR ); 320 appendTDTag( out , tdCls , td , linkVal ).append( HybsSystem.CR ); 321 stTime = clEdTime; 322 } 323 continue; 324 } 325 326 StringBuilder buf2 = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 327 328 buf2.append(" "); // td タグの出力前の段落 329 // appendTag( buf2 , "td" , clmCnt ); // ヘッ??部? 330 for(int column = 0; column < clmCnt; column++) { 331 if( isColumnDisplay( column ) ) { 332 // ヘッ??部??しやすいように、class 属?を与えておく? 333 buf2.append("<td class=\"" ).append( getColumnName( column ) ).append( "\"/>" ); 334 } 335 } 336 337 // appendTag( buf2 , "td" , (clStTime-minStTime)/intval ); // ??から??タまで 338 // appendTag( buf2 , "td" , (clEdTime-clStTime)/intval , linkVal ); // ??タ部 339 // appendTag( buf2 , "td" , (maxEdTime-clEdTime)/intval ); // ??タから?まで 340 341 // 5.4.3.7 (2012/01/20) 342 appendTDTag( buf2 , null , (clStTime-minStTime)/intval ); // ??から??タまで 343 appendTDTag( buf2 , tdCls , (clEdTime-clStTime)/intval , linkVal ); // ??タ部: 5.4.3.7 (2012/01/20) td に class属?追? 344 appendTDTag( buf2 , null , (maxEdTime-clEdTime)/intval ); // ??タから?まで 345 346 dblBooking.add( buf2.toString() ); 347 continue; 348 } 349 // 前も後ろも最小と?になって?のは、予?コードが無?め? 350 // else if( clStTime == minStTime && clEdTime == maxEdTime ) { 351 // stTime == clStTime のケース。nullData = true で、予?コードが無?め? 352 else if( nullData ) { 353 // linkVal = makeLinkValue( nlVal , dyVal , keyVal , minStTime , maxEdTime ); 354 linkVal = makeLinkValue( nlVal , minStTime , maxEdTime ); 355 } 356 // 5.4.3.7 (2012/01/20) linkVal を?通に使用して??を修正 357 358 out.append(" "); // td タグの出力前の段落 359 // appendTag( out , "td" , (clEdTime-clStTime)/intval , linkVal ).append( HybsSystem.CR ); 360 int td = (clEdTime-clStTime)/intval; // 5.5.0.3(2012/03/12) 361 rowColspan += td ; 362 // appendTDTag( out , tdCls , (clEdTime-clStTime)/intval , linkVal ).append( HybsSystem.CR ); // 5.4.3.7 (2012/01/20) td に class属?追? 363 appendTDTag( out , tdCls , td , linkVal ).append( HybsSystem.CR ); // 5.5.0.3(2012/03/12) 364 365 stTime = clEdTime ; 366 } 367 368 // 残??データが残って?場合?、書き?す?がある? 369 if( ( minStTime < stTime && stTime < maxEdTime ) ) { 370 out.append(" "); // td タグの出力前の段落 371 // appendTag( out , "td" , (maxEdTime-stTime)/intval , 372 // 残データの書き?し?、最大TD数-それまでにセ?した数? 373 int td = maxColspan - rowColspan; // 5.5.0.3(2012/03/12) 374 // appendTDTag( out , null , (maxEdTime-stTime)/intval , // 5.4.3.7 (2012/01/20) 375 appendTDTag( out , null , td , // 5.5.0.3(2012/03/12) 376 makeLinkValue( nlVal , stTime , maxEdTime ) ); 377 // makeLinkValue( nlVal , dyVal , keyVal , stTime , maxEdTime ) ); 378 // out.append("</tr>").append( HybsSystem.CR ); 379 380 // ??タか?りが発生したとき?処? 381 // if( !dblBooking.isEmpty() ) { 382 // for( String bkdt : dblBooking ) { 383 // out.append("<tr").append( getBgColorCycleClass( bgClrCnt-1 ) ).append(">").append( HybsSystem.CR ); 384 // out.append( bkdt ); 385 // out.append("</tr>").append( HybsSystem.CR ); 386 // } 387 // } 388 // } 389 // else { 390 // out.append("</tr>").append( HybsSystem.CR ); 391 } 392 out.append("</tr>").append( HybsSystem.CR ); 393 394 // ??タか?りが発生したとき?処? 395 if( !dblBooking.isEmpty() ) { 396 for( String bkdt : dblBooking ) { 397 out.append("<tr").append( getBgColorCycleClass( bgClrCnt-1 ) ).append(">").append( HybsSystem.CR ); 398 out.append( bkdt ); 399 out.append("</tr>").append( HybsSystem.CR ); 400 } 401 } 402 403 // カラ??結合があるため?td タグを?別に出力しておかな?、レイアウトがずれる? 404 out.append("<tr class=\"dummy\">"); 405 for(int column = 0; column < clmCnt; column++) { 406 if( isColumnDisplay( column ) ) { 407 out.append("<td/>"); 408 } 409 } 410 // for( int i=0; i<(maxEdTime-minStTime)/intval ; i++ ) { 411 for( int i=0; i<maxColspan ; i++ ) { // 5.5.0.3(2012/03/12) 空td の出力?TD の colspan の基準になる? 412 out.append("<td/>"); 413 } 414 out.append("</tr>").append( HybsSystem.CR ); 415 416 out.append("</tbody>").append( HybsSystem.CR ); 417 out.append("</table>").append( HybsSystem.CR ); 418 419 out.append( getScrollBarEndDiv() ); // 3.8.0.3 (2005/07/15) 420 return out.toString(); 421 } 422 423 /** 424 * パラメータ?を?期化します? 425 * 426 * @og.rev 5.4.3.7 (2012/01/20) tdClassColumnNo 追??intval の実?? 427 * @og.rev 5.4.4.2 (2012/02/03) isBookingMerge 追? 428 * 429 */ 430 private void paramInit() { 431 String s_intval = getParam( ViewTimeTableParam.TIME_INTERVAL , null ); 432 String s_minStTime = getParam( ViewTimeTableParam.MIN_START_TIME , null ); 433 String s_maxEdTime = getParam( ViewTimeTableParam.MAX_END_TIME , null ); 434 435 // String[] s_brkClms = StringUtil.csv2Array( getParam( ViewTimeTableParam.BREAK_CLMS , null ) ); 436 437 isDyBreak = Boolean.valueOf( getParam( ViewTimeTableParam.USE_DY_BREAK, "true" ) ); 438 439 // 5.4.4.2 (2012/02/03) ブッキング??タを?ージするかど?を指? 440 isBookingMerge = Boolean.valueOf( getParam( ViewTimeTableParam.USE_BOOKING_MERGE, "false" ) ); 441 442 // nullリンクのカラ???nullClm が優先?位が高い? 443 String s_nullClm = getParam( ViewTimeTableParam.NULL_LINK_CLM_ID , null ); 444 if( s_nullClm != null ) { 445 nullLinkClmNo = getColumnNo( s_nullClm ); 446 } 447 // else { 448 // linkValue = getParam( ViewTimeTableParam.BODY_LINK_VALUE , linkValue ); 449 // } 450 451 // 5.4.3.7 (2012/01/20) ??タを?れるTDタグにclass属?を付与する?合?カラ?o 452 String s_tdClsClm = getParam( ViewTimeTableParam.TD_CLASS_COLUMN_ID , null ); 453 if( s_tdClsClm != null ) { 454 tdClassColumnNo = getColumnNo( s_tdClsClm ); 455 } 456 457 // BREAK_CLMS は、csv2Array して?ので、null は来な?? 458 // if( s_brkClms.length > 0 ) { 459 // breakClmNos = new int[s_brkClms.length]; 460 // for( int i=0; i<s_brkClms.length; i++ ) { 461 // breakClmNos[i] = getColumnNo( s_brkClms[i] ); 462 // } 463 // } 464 465 if( s_intval != null ) { 466 intval = Integer.parseInt( s_intval ) ; // 5.4.3.7 (2012/01/20) 467 } 468 // intval = getStr2Time( s_intval , intval ); // インターバル?030 なら?5? 30?5 換? 469 minStTime = getStr2Time( s_minStTime , minStTime ); // ?開始時刻?800 なら?80?30?5 換? 470 maxEdTime = getStr2Time( s_maxEdTime , maxEdTime ); // ?終?刻?100 なら?210?0?5 換? 471 } 472 473 /** 474 * DBTableModel から ??ブルのタグ??を作?して返します? 475 * 476 * @og.rev 5.4.3.7 (2012/01/20) colgroup は不? 477 * 478 * @return ??ブルのタグ?? 479 */ 480 @Override 481 protected String getTableHead() { 482 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 483 484 // 5.4.3.7 (2012/01/20) colgroup は不? 485 // for(int column = 0; column < clmCnt; column++) { 486 // if( isColumnDisplay( column ) ) { 487 // buf.append("<colgroup class=\"" ); 488 // buf.append( getColumnDbType(column) ); // 4.0.0 (2005/01/31) 489 // buf.append("\"/>"); 490 // buf.append( HybsSystem.CR ); 491 // } 492 // } 493 494 // 3.5.2.0 (2003/10/20) ヘッ??繰り返し部をgetHeadLine()へ移? 495 buf.append("<thead id=\"header\">").append( HybsSystem.CR ); // 3.5.6.5 (2004/08/09) 496 buf.append( getHeadLine() ); 497 buf.append("</thead>").append( HybsSystem.CR ); 498 499 return buf.toString(); 500 } 501 502 /** 503 * ヘッ??繰り返し部を?getTableHead()メソ?から?? 504 * 505 * @param thTag タグの?? 506 * 507 * @return ??ブルのタグ?? 508 */ 509 @Override 510 protected String getHeadLine( final String thTag ) { 511 if( headerLine != null ) { return headerLine; } // キャ?ュを返す? 512 513 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 514 515 buf.append("<tr class=\"row_h\"").append(" >").append( HybsSystem.CR ); 516 517 buf.append( HybsSystem.CR ); 518 for(int column = 0; column < clmCnt; column++) { 519 if( isColumnDisplay( column ) ) { 520 // buf.append( thTag ).append(">"); 521 buf.append( thTag ).append(" class=\"" ).append( getColumnName( column ) ).append( "\">" ); 522 buf.append( getColumnLabel(column) ); 523 buf.append("</th>").append( HybsSystem.CR ); 524 } 525 } 526 527 // for(int tm = minStTime; tm < maxEdTime; tm+=10 ) { // intval づつ進めるべきだが?1時間ごとの箱とする? 528 for(int tm = minStTime; tm < maxEdTime; tm+=60 ) { // ヘッ??は?時間単位とする? 529 // buf.append( thTag ).append(" class=\"timeVar\" colspan=\"2\">"); 530 buf.append( thTag ).append(" class=\"timeVar\" colspan=\"" ).append( 60/intval ).append( "\">"); 531 // buf.append( (tm/10) ); 532 buf.append( (tm/60) ); 533 buf.append("</th>").append( HybsSystem.CR ); 534 } 535 536 buf.append("</tr>").append( HybsSystem.CR ); 537 538 headerLine = buf.toString(); 539 return headerLine; 540 } 541 542 /** 543 * TDタグ??を簡易的に合?します? 544 * 545 * ここでは、主に、class 属?、colspan 属?を設定することを目?して?す? 546 * colspan の値によって、動作を変化させて?す? 547 * 0: タグそ?も?を生成しません。これ?、第?数をそのまま返します? 548 * 1: colspan 属?を?力しません?Default値なので) 549 * それ以外?、colspan に引数を設定します? 550 * BODY 部も?無??場合??> 止め?タグを?力します? 551 * 552 * 返り値の StringBuilder は、第?数そ?も?を返します?よって、このメソ?に? 553 * append を?結して?ことも可能です? 554 * (return値を使わなくても?第?数の StringBuilder は変化して?す?副作用と??? 555 * 556 * @og.rev 5.4.3.7 (2012/01/20) tdタグ専用に変更? 557 * 558 * @param buf こ?StringBuilderに append します? 559 * @param cls 追??class 属? 560 * @param colspan td , th タグ属?に追??colspan値? 561 * 0 の場合?、タグ自体を出力しません? 562 * 1 の場合?、colspan を?力しません? 563 * @param body タグの BODY 部に出力する?容(String可変長引数)?件の場合?、BODYな? 564 * 565 * @return appendされたStringBuilder(第?数と同じオブジェク? 566 */ 567 // private StringBuilder appendTag( final StringBuilder buf , final String tag , final int colspan , final String... body ) { 568 private StringBuilder appendTDTag( final StringBuilder buf , final String cls , final int colspan , final String... body ) { 569 if( colspan == 0 ) { return buf; } 570 571 // buf.append( "<" ).append( tag ); 572 // if( colspan > 1 ) { 573 // buf.append( " colspan=\"" ).append( colspan ).append( "\"" ); 574 // } 575 // 576 // int cnt = body.length; 577 // if( cnt == 0 ) { buf.append( " />" ); } 578 // else { 579 // buf.append( ">" ); 580 // for( int i=0; i<cnt; i++ ) { 581 // buf.append( body[i] ); 582 // } 583 // buf.append( "</" ).append( tag ).append( ">" ); 584 // } 585 586 buf.append( "<td" ); 587 // class 属?の追? 588 if( cls != null && !cls.isEmpty() ) { 589 buf.append( " class=\"" ).append( cls ).append( "\"" ); 590 } 591 592 // colspan 属?の追? 593 if( colspan > 1 ) { 594 buf.append( " colspan=\"" ).append( colspan ).append( "\"" ); 595 } 596 597 int cnt = body.length; 598 if( cnt == 0 ) { buf.append( " />" ); } 599 else { 600 buf.append( ">" ); 601 for( int i=0; i<cnt; i++ ) { 602 buf.append( body[i] ); 603 } 604 buf.append( "</td>" ); 605 } 606 607 return buf; 608 } 609 610 /** 611 * 時間??を数字に変換します? 612 * 613 * "0800" は?80に?2100" は?260 に変換します? 614 * 615 * @og.rev 5.4.3.7 (2012/01/20) 計算方法?変更 616 * 617 * @param val 時間??の値(0800 など) 618 * @param defTm 引数の時間???null の場合?初期値 619 * 620 * @return 時間??を数字に変換した結果( 80 など) 621 */ 622 private int getStr2Time( final String val , final int defTm ) { 623 if( val == null || val.isEmpty() ) { return defTm; } 624 else if( val.length() != 4 ) { 625 String errMsg = "時間引数は?桁?です?" + 626 " val=[" + val + "]"; 627 throw new HybsSystemException( errMsg ); 628 } 629 630 // return Integer.parseInt( val.substring( 0,2 ) )*10 + 631 // Integer.parseInt( val.substring( 2 ) )/6 ; // 30?5 になるよ? 632 return Integer.parseInt( val.substring( 0,2 ) )*60 + 633 Integer.parseInt( val.substring( 2 ) ) ; // 5.4.3.7 (2012/01/20) 634 635 } 636 637 /** 638 * 数字を時間??に変換します? 639 * 640 * 480は?0800" に?1260"は?100 に変換します? 641 * 642 * @og.rev 5.4.3.7 (2012/01/20) 計算方法?変更 643 * 644 * @param timeVal 引数の時間???null の場合?初期値 645 * 646 * @return 数字を時間??に変換した結果( "0800" など) 647 */ 648 private String getInt2StrTime( final int timeVal ) { 649 int tmpVal = timeVal; 650 if( tmpVal < minStTime ) { tmpVal = minStTime; } // ??以下?場合?、最小?に合せ? 651 else if( tmpVal > maxEdTime ) { tmpVal = maxEdTime; } // ?値以上?場合?、最大値に合せる? 652 653 // 桁合? 85??00 の変換 85??0 の変換 足して?0830 になる? 654 // int rtn = 10000 + ( tmpVal / 10 ) * 100 + ( ( tmpVal % 10 ) * 6 ) ; 655 656 // return String.valueOf( rtn ).substring(1); // "0830" 部?返す? 657 return String.valueOf(100+ tmpVal/60).substring(1) + String.valueOf(100+tmpVal%60).substring(1); 658 } 659 660 // 引数に?を追?る? 661 662 /** 663 * リンク??をパースします? 664 * 665 * ??タの空?リンクを作?するときに、?となるリンク??の引数を設定します? 666 * 引数は?TMSTART=(stTime)&TMEND=(edTime) を追?るイメージです? 667 * stTime、edTime は、それぞれ?($1)?$2) の変数が割り当てられます? 668 * stTime、edTime は?getInt2StrTime( int ) メソ?で変換した??を利用します? 669 * 670 * @param lnkVal リンクのベ?スとなる? 671 * @param stTime 開始時刻の数字表? 672 * @param edTime 終?刻の数字表? 673 * 674 * @return リンク??をパースした結果 675 */ 676 private String makeLinkValue( final String lnkVal,final int stTime,final int edTime ) { 677 // private String makeLinkValue( final String lnkVal,final String dyClm,final String keyClm,final int stTime,final int edTime ) { 678 String rtn = ""; 679 if( lnkVal != null ) { 680 // rtn = lnkVal.replace( "($1)",getInt2StrTime( stTime ) ) 681 // .replace( "($2)",getInt2StrTime( edTime ) ) ; 682 // .replace( "($3)",dyClm ) 683 // .replace( "($4)",keyClm ) ; 684 685 // URLエンコードがかかって?場合?なお??して処?な??は、他にURLエンコードされて??を?慮して? 686 rtn = lnkVal.replace( "%28%241%29",getInt2StrTime( stTime ) ) 687 .replace( "%28%242%29",getInt2StrTime( edTime ) ) ; 688 // .replace( "%28%243%29",dyClm ) 689 // .replace( "%28%244%29",keyClm ) ; 690 } 691 692 return rtn; 693 } 694 695 /** 696 * 表示?の編?並び替?が可能かど?を返しま? 697 * 698 * @return 表示?の編?並び替?が可能かど?(false:不可能) 699 */ 700 @Override 701 public boolean isEditable() { 702 return false; 703 } 704 }