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 }