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