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.taglib; 017 018import org.opengion.fukurou.util.TagBuffer; 019import org.opengion.fukurou.util.ToString; // 6.1.1.0 (2015/01/17) 020 021import static org.opengion.fukurou.util.StringUtil.nval ; // 6.1.0.0 (2014/12/26) 022 023/** 024 * ガントチャートの繰り返しタグのフォーマットに使用します。 025 * 026 * iGanttBar タグは、TDタグの繰返し部に記述することで、個々のガントのタスクを作成します。 027 * これを使用する場合は、iGant タグを全体に一つ指定する必要があります。 028 * 029 * @og.formSample 030 * ●形式:<og:iGanttBar ... /> 031 * ●body:なし 032 * ●前提:headタグで、adjustEvent="Gantt" を指定してください。 033 * 034 * ●Tag定義: 035 * <og:iGanttBar 036 * type ○【TAG】ガント要素のタイプ(0:マイルストーン 1:バー )(必須) 037 * color 【TAG】バーの色(マイルストーンの場合は不要) 038 * colorNo 【TAG】バーの色番号で指定します 039 * src 【TAG】マイルストーンのアイコン画像(URIより設定) 040 * start 【TAG】開始日(YYYYMMDD)、または開始時間(YYYYMMDDHH24MM) 041 * end 【TAG】終了日(YYYYMMDD)、または終了時間(YYYYMMDDHH24MM) 042 * text 【TAG】ガント要素の注釈メッセージ。 043 * href 【TAG】入力した場合はガントにリンクを付加します。 044 * target 【TAG】hrefを指定した場合に付加されるリンクのターゲット 045 * barLink 【TAG】hrefで付加されるリンクの範囲にバー本体を含めるかどうか[true/false]を指定します(初期値:false) 046 * startInput 【保留】ガント要素の開始日に紐付く入力欄(開始日または終了日に紐付く入力欄が設定しなければガント要素は動かせない) 047 * endInput 【保留】ガント要素の終了日に紐付く入力欄(開始日または終了日に紐付く入力欄が設定しなければガント要素は動かせない) 048 * chbox 【保留】行選択のチェックボックス 設定値:[ROW.ID] 049 * id 【TAG】要素を一意に指定する値を指定します。(ガント要素を動かす際に指定) 050 * cost 【TAG】開始日、終了日を利用して積上げられる工数を指定します。 051 * capacity 【TAG】積上げの最大値(キャパシティ)を指定します。 052 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 053 * /> 054 * 055 * ●使用例 056 * (通常ガント) 057 * <og:view 058 * viewFormType = "HTMLCustomTable" 059 * command = "{@command}" 060 * writable = "false" 061 * useScrollBar = "false" 062 * > 063 * <og:thead rowspan="2"> 064 * <tr> 065 * <td>[NOORDER]</td> 066 * <td rowspan="2" class="gantt zoom{@VZOOM}" style="line-height:normal;text-align:left;background-image: url('../image/ganttBG{@VZOOM}.gif');" > 067 * <div style="position:relative;left:0px;z-index:101; " height="100%" width="100%" > 068 * <og:ganttHeader 069 * startDate = "{@startDate}" 070 * endDate = "{@endDate}" 071 * zoom = "{@VZOOM}" 072 * daySpan = "{@daySpan}" 073 * /> 074 * </div> 075 * </td> 076 * </tr> 077 * </og:thead> 078 * <og:tbody rowspan="2"> 079 * <tr> 080 * <td>[NOORDER]</td> 081 * <td rowspan="2" class="gantt zoom{@VZOOM}" style="text-align:left;background-image: url('../image/ganttBG{@VZOOM}.gif');" > 082 * <og:iGanttBar type="1" colorNo="[COLOR]" start="[DYORDER]" end="[DYNOKI]" text="[PN]" /> 083 * <og:iGanttBar type="0" src="../image/dia_blue.gif" start="[DYORDER]" text="開始" /> 084 * <og:iGanttBar type="0" src="../image/dia_red.gif" end="[DYNOKI]" text="終了" /> 085 * </td> 086 * </tr> 087 * </og:tbody> 088 * </og:view> 089 * 090 * <og:iGantt 091 * margeRows = "true" 092 * fixedCols = "1" 093 * /> 094 * 095 * (積み上げガント) 096 * <og:view 097 * viewFormType = "HTMLStackedGanttTable" 098 * command = "{@command}" 099 * writable = "false" 100 * useScrollBar = "false" 101 * useParam = "true" 102 * numberType = "none" 103 * > 104 * <og:stackParam 105 * stackColumns = "NOORDER" 106 * /> 107 * 108 * <og:thead rowspan="2"> 109 * <tr> 110 * <td>[NOORDER]</td> 111 * <td>[PN]</td> 112 * <td rowspan="2" class="gantt zoom{@SZOOM}" style="text-align:left;background-image: url('../image/ganttBG{@SZOOM}.gif');" > 113 * <div style="position:relative;left:0px;z-index:101; " height="100%" width="100%" > 114 * <og:ganttHeader 115 * startDate = "{@startDate}" 116 * endDate = "{@endDate}" 117 * zoom = "{@SZOOM}" 118 * calDB = "GE13" 119 * arg1 = "A" 120 * /> 121 * </div> 122 * </td> 123 * </tr> 124 * </og:thead> 125 * <og:tbody rowspan="2"> 126 * <tr> 127 * <td>[NOORDER]</td> 128 * <td>[PN]</td> 129 * <td rowspan="2" class="gantt zoom{@VZOOM}" style="text-align:left;background-image: url('../image/ganttBG{@VZOOM}.gif');" > 130 * <iGanttBar type="1" colorNo="[COLOR]" start="[DYORDER]" end="[DYNOKI]" text="[COSTCLM]" 131 * cost="[COSTCLM]" capacity="[CAPACITY]" /> 132 * <og:iGanttBar type="0" src="../image/dia_blue.gif" start="[DYORDER]" text="開始" /> 133 * </td> 134 * </tr> 135 * </og:tbody> 136 * </og:view> 137 * 138 * <og:iGantt 139 * margeRows = "true" 140 * fixedCols = "1" 141 * verticalShift = "false" 142 * viewGantt = "{@viewGantt}" 143 * stackHoliday = "{@stackHoliday}" 144 * useBgColor = "true" 145 * viewMode = "2" 146 * /> 147 * 148 * @og.rev 5.6.3.2 (2013/04/12) 新規作成 149 * @og.group 画面部品 150 * 151 * @version 5.0 152 * @author Kazuhiko Hasegawa 153 * @since JDK6.0, 154 */ 155public class ViewIGanttBarTag extends CommonTagSupport { 156 /** このプログラムのVERSION文字列を設定します。 {@value} */ 157 private static final String VERSION = "6.4.2.0 (2016/01/29)" ; 158 private static final long serialVersionUID = 642020160129L ; 159 160 private transient TagBuffer tag = new TagBuffer( "iGanttBar" ).addBody( "<!-- -->" ); // 6.1.1.0 (2015/01/17) TagBufferの連結記述 161 162 /** 163 * デフォルトコンストラクター 164 * 165 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 166 */ 167 public ViewIGanttBarTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 168 169 /** 170 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 171 * 172 * @og.rev 6.0.2.5 (2014/10/31) HTML5対応。javaScriptで、BODYがないと入れ子になってしまう。 173 * 174 * @return 後続処理の指示 175 */ 176 @Override 177 public int doEndTag() { 178 debugPrint(); // 4.0.0 (2005/02/28) 179 180 // 6.1.1.0 (2015/01/17) TagBufferの連結記述 181 jspPrint( tag.makeTag() ); 182 183 return EVAL_PAGE ; // ページの残りを評価する。 184 } 185 186 /** 187 * タグリブオブジェクトをリリースします。 188 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 189 * 190 */ 191 @Override 192 protected void release2() { 193 super.release2(); 194 tag = new TagBuffer( "iGanttBar" ).addBody( "<!-- -->" ); // 6.1.1.0 (2015/01/17) TagBufferの連結記述 195 } 196 197 /** 198 * 【TAG】ガント要素のタイプ[0:マイルストーン/1:バー]を指定します。 199 * 200 * @og.tag 201 * 0:マイルストーン を指定すると、その日(時間)に、マーカーがされます。 202 * ガントのような期間ではなく、そのポイントを表すのに使用します。 203 * 例えば、受注日、納期 などの設定値です。 204 * start か end どちらかの指定で構いません。 205 * start を使用した場合は、指定日(時間)の前方に、endを使用した場合は、 206 * 指定日(時間)の後方にマーカーが置かれます。 207 * 208 * @param type ガント要素のタイプ [0:マイルストーン/1:バー] 209 */ 210 public void setType( final String type ) { 211 tag.add( "type",nval( getRequestParameter( type ),null ) ); 212 } 213 214 /** 215 * 【TAG】ガント要素(バー)の色コードを設定します。 216 * 217 * @og.tag 218 * color は、ガント要素の色コードを設定します。 219 * type="0:マイルストーン" の場合は不要です。 220 * このコードは、予め決められた色画像を呼び出しますので、任意の色が使えるという事ではありません。 221 * 色指定は、横棒の場合は、image/W_色コード.png の画像を使います。 222 * 色コード と 色番号が同時に指定された場合は、色コード が優先されます。 223 * 224 * type=2:差分枠 は、value > baseVal の場合は、超過を、value < baseValの場合は、不足を表します。 225 * <table border="1" frame="box" rules="all"> 226 * <caption>色番号 対応表</caption> 227 * <tr><th>色番号</th><th>設定値 </th><th>棒色 </th><th> </th><th>横棒サンプル</th></tr> 228 * <tr><td> 0 </td><td>blue </td><td>青 </td><td> </td><td style="background-image:url(../image/W_blue.png);"> </td></tr> 229 * <tr><td> 1 </td><td>black </td><td>黒 </td><td> </td><td style="background-image:url(../image/W_black.png);"> </td></tr> 230 * <tr><td> 2 </td><td>brown </td><td>茶 </td><td> </td><td style="background-image:url(../image/W_brown.png);"> </td></tr> 231 * <tr><td> 3 </td><td>green </td><td>緑 </td><td> </td><td style="background-image:url(../image/W_green.png);"> </td></tr> 232 * <tr><td> 4 </td><td>lightblue </td><td>薄青 </td><td> </td><td style="background-image:url(../image/W_lightblue.png);"> </td></tr> 233 * <tr><td> 5 </td><td>lightgreen</td><td>薄緑 </td><td> </td><td style="background-image:url(../image/W_lightgreen.png);"> </td></tr> 234 * <tr><td> 6 </td><td>orange </td><td>オレンジ</td><td> </td><td style="background-image:url(../image/W_orange.png);"> </td></tr> 235 * <tr><td> 7 </td><td>pink </td><td>ピンク </td><td> </td><td style="background-image:url(../image/W_pink.png);"> </td></tr> 236 * <tr><td> 8 </td><td>purple </td><td>紫 </td><td> </td><td style="background-image:url(../image/W_purple.png);"> </td></tr> 237 * <tr><td> 9 </td><td>red </td><td>赤 </td><td> </td><td style="background-image:url(../image/W_red.png);"> </td></tr> 238 * <tr><td> 10 </td><td>yellow </td><td>黄 </td><td> </td><td style="background-image:url(../image/W_yellow.png);"> </td></tr> 239 * <tr><td> 11 </td><td>navy </td><td>濃紺 </td><td> </td><td style="background-image:url(../image/W_navy.png);"> </td></tr> 240 * <tr><td> 12 </td><td>teal </td><td>青緑 </td><td> </td><td style="background-image:url(../image/W_teal.png);"> </td></tr> 241 * <tr><td> 13 </td><td>gray </td><td>灰 </td><td> </td><td style="background-image:url(../image/W_gray.png);"> </td></tr> 242 * <tr><td> 14 </td><td>indigo </td><td>藍 </td><td> </td><td style="background-image:url(../image/W_indigo.png);"> </td></tr> 243 * <tr><td> 15 </td><td>slategray </td><td>鉄色 </td><td> </td><td style="background-image:url(../image/W_slategray.png);"> </td></tr> 244 * <tr><td> 16 </td><td>chocorlate</td><td>チョコレート</td><td> </td><td style="background-image:url(../image/W_chocorlate.png);"> </td></tr> 245 * <tr><td> 17 </td><td>darkgreen </td><td>深緑 </td><td> </td><td style="background-image:url(../image/W_darkgreen.png);"> </td></tr> 246 * <tr><td> 18 </td><td>violet </td><td>すみれ </td><td> </td><td style="background-image:url(../image/W_violet.png);"> </td></tr> 247 * <tr><td> 19 </td><td>darkslategray</td><td>深鉄色</td><td> </td><td style="background-image:url(../image/W_darkslategray.png);"> </td></tr> 248 * <tr><td> 20 </td><td>lime </td><td>緑 </td><td> </td><td style="background-image:url(../image/W_lime.png);"> </td></tr> 249 * <tr><td> 21 </td><td>aqua </td><td>水色 </td><td> </td><td style="background-image:url(../image/W_aqua.png);"> </td></tr> 250 * <tr><td> 22 </td><td>maroon </td><td>ひわだいろ</td><td> </td><td style="background-image:url(../image/W_maroon.png);"> </td></tr> 251 * <tr><td> 23 </td><td>olive </td><td>オリーブ</td><td> </td><td style="background-image:url(../image/W_olive.png);"> </td></tr> 252 * <tr><td> 24 </td><td>silver </td><td>銀 </td><td> </td><td style="background-image:url(../image/W_silver.png);"> </td></tr> 253 * <tr><td> 25 </td><td>fuchsia </td><td>赤紫 </td><td> </td><td style="background-image:url(../image/W_fuchsia.png);"> </td></tr> 254 * <tr><td colspan="6"> </td></tr> 255 * <tr><td> BK </td><td>black2 </td><td>黒 </td><td> </td><td style="background-image:url(../image/W_black2.png);"> </td></tr> 256 * <tr><td> WT </td><td>white2 </td><td>白 </td><td> </td><td style="background-image:url(../image/W_white2.png);"> </td></tr> 257 * <tr><td> BL </td><td>blue2 </td><td>青 </td><td> </td><td style="background-image:url(../image/W_blue2.png);"> </td></tr> 258 * <tr><td> RD </td><td>red2 </td><td>赤 </td><td> </td><td style="background-image:url(../image/W_red2.png);"> </td></tr> 259 * <tr><td> YL </td><td>yellow2 </td><td>黄 </td><td> </td><td style="background-image:url(../image/W_yellow2.png);"> </td></tr> 260 * </table> 261 * 262 * @param color バー色 263 */ 264 public void setColor( final String color ) { 265 tag.add( "color",nval( getRequestParameter( color ),null ) ); 266 } 267 268 /** 269 * 【TAG】グラフ要素の色番号を設定します。 270 * 271 * @og.tag 272 * 色番号は、色コードを直接指定するのではなく、番号で指定する場合に使用します。 273 * 棒グラフ要素(type="1"(横棒),"6"(縦棒))の色を設定します。 274 * "1~25 , BK,WT,BL,RD,YL" の色番号で指定します。 275 * 色番号は、与えた数字を内部色数で割り算した余を使用しますので、連番の場合でも 276 * 繰返し使われます。特殊な色として、BK,WT,BL,RD,YLは、番号ではなく記号で指定できます。 277 * 色コード と 色番号が同時に指定された場合は、色コード が優先されます。 278 * 279 * @param clrNo 色番号 [1~25/BK/WT/BL/RD/YL] 280 * @see #setColor( String ) 281 */ 282 public void setColorNo( final String clrNo ) { 283 tag.add( "colorNo",nval( getRequestParameter( clrNo ),null ) ); 284 } 285 286 /** 287 * 【TAG】マイルストーンのアイコン画像(URIより設定)を設定します。 288 * 289 * @og.tag 290 * type="0:マイルストーン" の場合、表示するアイコンイメージの所在を指定します。 291 * 例:"../image/xxx.png" 292 * 293 * @param src アイコン画像 294 */ 295 public void setSrc( final String src ) { 296 tag.add( "src",nval( getRequestParameter( src ),null ) ); 297 } 298 299 /** 300 * 【TAG】開始日(YYYYMMDD)、または開始時間(YYYYMMDDHH24MM)を設定します。 301 * 302 * @og.tag 303 * type="1:バー" の場合は、バー表示の場合の書き始め(開始)を指定します。 304 * この値は、バーでは、「含む」になります。 305 * type="0:マイルストーン" の場合は、マイルストンを左端に表示します。 306 * 307 * @param start 開始日or開始時間 (YYYYMMDD or YYYYMMDDHH24MM) 308 * @see #setType( String ) 309 * @see #setEnd( String ) 310 */ 311 public void setStart( final String start ) { 312 tag.add( "start",nval( getRequestParameter( start ),null ) ); 313 } 314 315 /** 316 * 【TAG】終了日(YYYYMMDD)、または終了時間(YYYYMMDDHH24MM)を設定します。 317 * 318 * @og.tag 319 * type="1:バー" の場合は、バー表示の場合の書き終わり(終了)を指定します。 320 * この値は、日付か時刻かで「含む」/「含まない」が異なります。 321 * 日付の場合は、この値を「含む」です。例えば、4/12 を指定した場合、4/12は含みます。 322 * 時刻の場合は、「含まない」です。4/12 070000 を指定した場合は、午前7時は含まないので、 323 * 6時59分59秒までのバーが引かれます。 324 * type="0:マイルストーン" の場合は、マイルストンを右端に表示します。 325 * 326 * @param end 終了日or終了時間 (YYYYMMDD or YYYYMMDDHH24MM) 327 * @see #setType( String ) 328 * @see #setStart( String ) 329 */ 330 public void setEnd( final String end ) { 331 tag.add( "end",nval( getRequestParameter( end ),null ) ); 332 } 333 334 /** 335 * 【TAG】バー上に表示するテキストを指定します。 336 * 337 * @og.tag 338 * バーの上に、値などの文字を重ねて表示できます。 339 * 340 * @param text 表示テキスト 341 */ 342 public void setText( final String text ) { 343 tag.add( "text",nval( getRequestParameter( text ),null ) ); 344 } 345 346 /** 347 * 【TAG】リンク作成時の値を設定します。 348 * 349 * @og.tag 350 * バーの上の文字に対して、リンクを作成できます。 351 * 352 * @param href リンク 353 * @see #setTarget( String ) 354 */ 355 public void setHref( final String href ) { 356 tag.add( "href",nval( getRequestParameter( href ),null ) ); 357 } 358 359 /** 360 * 【TAG】リンク作成時のターゲット名を指定します。 361 * 362 * @og.tag 363 * バーの上の文字に対して、リンクを作成するときの、ターゲット名を指定できます。 364 * 365 * @param target ターゲット 366 * @see #setHref( String ) 367 */ 368 public void setTarget( final String target ) { 369 tag.add( "target",nval( getRequestParameter( target ),null ) ); 370 } 371 372 /** 373 * 【TAG】hrefで付加されるリンクの範囲にバー本体を含めるかどうか[true/false]を指定します(初期値:false)。 374 * 375 * @og.tag 376 * true を指定すると、hrefで付加されるリンクの範囲にバー本体を含めます。 377 * 378 * @param barLink バー可否 [true:する/false:しない] 379 * @see #setHref( String ) 380 */ 381 public void setBarLink( final String barLink ) { 382 tag.add( "barLink",nval( getRequestParameter( barLink ),null ) ); 383 } 384 385 /** 386 * 【保留】ガント要素の開始日に紐付く入力欄を指定します。 387 * 388 * @og.tag 389 * この入力欄がないと、ガント要素は動かせません。 390 * 391 * @og.rev 5.9.14.1 (2016/11/11) startInputではなくstartDateInut 392 * 393 * @param startInput 開始日入力欄 394 * @see #setStart( String ) 395 */ 396 public void setStartInput( final String startInput ) { 397 tag.add( "startDateInput",nval( getRequestParameter( startInput ),null ) ); 398 } 399 400 /** 401 * 【保留】ガント要素の終了日に紐付く入力欄を指定します。 402 * 403 * @og.tag 404 * この入力欄がないと、ガント要素は動かせません。 405 * 406 * @og.rev 5.9.14.1 (2016/11/11) endInputではなくendDateInut 407 * 408 * @param endInput 終了日入力欄 409 * @see #setEnd( String ) 410 */ 411 public void setEndInput( final String endInput ) { 412 tag.add( "endDateInput",nval( getRequestParameter( endInput ),null ) ); 413 } 414 415 /** 416 * 【TAG】行選択のチェックボックスを指定します。 417 * 418 * @og.tag 419 * 例えば、[ROW.ID] を指定する事で、選択行を指定する事ができます。 420 * 421 * @param chbox チェックボックス指定 422 */ 423 public void setChbox( final String chbox ) { 424 tag.add( "chbox",nval( getRequestParameter( chbox ),null ) ); 425 } 426 427 /** 428 * 【TAG】積み上げガントの工数を指定します。 429 * 430 * @og.tag 431 * 積み上げガントの工数を指定します。 432 * 開始日、終了日を利用して積上げ計算されます。 433 * 434 * @param cost 積み上げガントの工数 435 */ 436 public void setCost( final String cost ) { 437 tag.add( "cost",nval( getRequestParameter( cost ),null ) ); 438 } 439 440 /** 441 * 【TAG】積上げの最大値(キャパシティ)を指定します。 442 * 443 * @og.tag 444 * 最大値を超えた場合は、マーカーされます。 445 * 446 * @param capacity 積み上げガントの工数 447 */ 448 public void setCapacity( final String capacity ) { 449 tag.add( "capacity",nval( getRequestParameter( capacity ),null ) ); 450 } 451 452 /** 453 * 【TAG】要素を一意に指定するためのidを指定します。 454 * 455 * @og.tag 456 * 要素を一意に指定するためのID体系を指定します。 457 * 例えばA__[I]のように設定します。 458 * ガント要素は動かす際には必要です。 459 * 460 * @og.rev 5.9.14.1 (2016/11/11) 461 * 462 * @param id 一意になる文字列 463 */ 464 @Override 465 public void setId( final String id ) { 466 tag.add( "id",nval( getRequestParameter( id ),null ) ); 467 } 468 469 /** 470 * タグの名称を、返します。 471 * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。 472 * 473 * @return タグの名称 474 * @og.rtnNotNull 475 */ 476 @Override 477 protected String getTagName() { 478 return "iGanttBar" ; 479 } 480 481 /** 482 * このオブジェクトの文字列表現を返します。 483 * 基本的にデバッグ目的に使用します。 484 * 485 * @return このクラスの文字列表現 486 * @og.rtnNotNull 487 */ 488 @Override 489 public String toString() { 490 return ToString.title( this.getClass().getName() ) 491 .println( "VERSION" ,VERSION ) 492 .println( "tag" ,tag.makeTag() ) 493 .println( "Other..." ,getAttributes().getAttribute() ) 494 .fixForm().toString() ; 495 } 496}