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 }