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 *       startDateInput【TAG】6.9.9.0 (2018/08/20) 開始日付の入力欄のカラム名を指定します。
047 *       startTimeInput【TAG】6.9.9.0 (2018/08/20) 開始時刻の入力欄のカラム名を指定します。
048 *       endDateInput  【TAG】6.9.9.0 (2018/08/20) 終了日付の入力欄のカラム名を指定します。
049 *       endTimeInput  【TAG】6.9.9.0 (2018/08/20) 終了時刻の入力欄のカラム名を指定します。
050 *       moveStep      【TAG】6.9.9.2 (2018/09/18) ガントバーの移動歩幅単位(moveStep 1:日、2:時間、3:分)
051 *       fixed         【TAG】6.9.9.2 (2018/09/18) 固定2分割するカラムを指定します。
052 *       mStone        【TAG】6.9.9.2 (2018/09/18) マイルストーンカラムを指定します。
053 *       balloon       【TAG】6.9.9.2 (2018/09/18) バルーンとして表示するカラムを指定します。
054 *       keyInfo       【TAG】6.9.9.2 (2018/09/18) キー情報のカラムを、指定します。
055 *       writable      【TAG】6.9.9.2 (2018/09/18) writable属性のカラムを指定します。
056 *       report        【TAG】6.9.9.2 (2018/09/18) レポートカラムを指定します。
057 *       zindex        【TAG】6.9.9.2 (2018/09/18) 表示の重なり順のカラムを指定します。
058 *       id            【TAG】要素を一意に指定する値を指定します。(ガント要素を動かす際に指定)
059 *       cost          【TAG】開始日、終了日を利用して積上げられる工数を指定します。
060 *       capacity      【TAG】積上げの最大値(キャパシティ)を指定します。
061 *       debug         【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
062 *   />
063 *
064 * 【廃止】6.9.9.0 (2018/08/20) 物理削除
065 *   //  startInput    【廃止】(startDateInputと同じ)ガント要素の開始日に紐付く入力欄(開始日または終了日に紐付く入力欄が設定しなければガント要素は動かせない)
066 *   //  endInput      【廃止】(endDateInputと同じ)ガント要素の終了日に紐付く入力欄(開始日または終了日に紐付く入力欄が設定しなければガント要素は動かせない)
067 *   //  chbox         【廃止】6.9.9.2 (2018/09/18) 行選択のチェックボックス 設定値:[ROW.ID]
068 *
069 * ●使用例
070 *   (通常ガント)
071 *  <og:view
072 *      viewFormType = "HTMLCustomTable"
073 *      command      = "{@command}"
074 *      writable     = "false"
075 *      useScrollBar = "false"
076 *  >
077 *    <og:thead rowspan="2">
078 *      <tr>
079 *          <td>[NOORDER]</td>
080 *          <td rowspan="2" class="gantt zoom{@VZOOM}" style="line-height:normal;text-align:left;background-image: url('../image/ganttBG{@VZOOM}.gif');" >
081 *              <div style="position:relative;left:0px;z-index:101; " height="100%" width="100%" >
082 *                  <og:ganttHeader
083 *                      startDate       = "{@startDate}"
084 *                      endDate         = "{@endDate}"
085 *                      zoom            = "{@VZOOM}"
086 *                      daySpan         = "{@daySpan}"
087 *                  />
088 *              </div>
089 *          </td>
090 *      </tr>
091 *    </og:thead>
092 *    <og:tbody rowspan="2">
093 *      <tr>
094 *          <td>[NOORDER]</td>
095 *          <td rowspan="2" class="gantt zoom{@VZOOM}" style="text-align:left;background-image: url('../image/ganttBG{@VZOOM}.gif');" >
096 *              <og:iGanttBar type="1" colorNo="[COLOR]" start="[DYORDER]" end="[DYNOKI]" text="[PN]" />
097 *              <og:iGanttBar type="0" src="../image/dia_blue.gif" start="[DYORDER]"      text="開始" />
098 *              <og:iGanttBar type="0" src="../image/dia_red.gif"  end="[DYNOKI]"         text="終了" />
099 *          </td>
100 *      </tr>
101 *    </og:tbody>
102 *  </og:view>
103 *
104 *   <og:iGantt
105 *       margeRows      = "true"
106 *       fixedCols      = "1"
107 *   />
108 *
109 *   (積み上げガント)
110 *  <og:view
111 *      viewFormType = "HTMLStackedGanttTable"
112 *      command      = "{@command}"
113 *      writable     = "false"
114 *      useScrollBar = "false"
115 *      useParam     = "true"
116 *      numberType   = "none"
117 *  >
118 *  <og:stackParam
119 *      stackColumns = "NOORDER"
120 *  />
121 *
122 *    <og:thead rowspan="2">
123 *      <tr>
124 *          <td>[NOORDER]</td>
125 *          <td>[PN]</td>
126 *          <td rowspan="2" class="gantt zoom{@SZOOM}" style="text-align:left;background-image: url('../image/ganttBG{@SZOOM}.gif');" >
127 *              <div style="position:relative;left:0px;z-index:101; " height="100%" width="100%" >
128 *                  <og:ganttHeader
129 *                      startDate   = "{@startDate}"
130 *                      endDate     = "{@endDate}"
131 *                      zoom        = "{@SZOOM}"
132 *                      calDB       = "GE13"
133 *                      arg1        = "A"
134 *                  />
135 *              </div>
136 *          </td>
137 *      </tr>
138 *    </og:thead>
139 *    <og:tbody rowspan="2">
140 *      <tr>
141 *          <td>[NOORDER]</td>
142 *          <td>[PN]</td>
143 *          <td rowspan="2" class="gantt zoom{@VZOOM}" style="text-align:left;background-image: url('../image/ganttBG{@VZOOM}.gif');" >
144 *              <iGanttBar type="1" colorNo="[COLOR]" start="[DYORDER]" end="[DYNOKI]"  text="[COSTCLM]"
145 *                    cost="[COSTCLM]" capacity="[CAPACITY]" />
146 *              <og:iGanttBar type="0" src="../image/dia_blue.gif" start="[DYORDER]"      text="開始" />
147 *          </td>
148 *      </tr>
149 *    </og:tbody>
150 *  </og:view>
151 *
152 *   <og:iGantt
153 *       margeRows      = "true"
154 *       fixedCols      = "1"
155 *       verticalShift  = "false"
156 *       viewGantt      = "{@viewGantt}"
157 *       stackHoliday   = "{@stackHoliday}"
158 *       useBgColor     = "true"
159 *       viewMode       = "2"
160 *   />
161 *
162 * @og.rev 5.6.3.2 (2013/04/12) 新規作成
163 * @og.group 画面部品
164 *
165 * @version  5.0
166 * @author       Kazuhiko Hasegawa
167 * @since    JDK6.0,
168 */
169public class ViewIGanttBarTag extends CommonTagSupport {
170        /** このプログラムのVERSION文字列を設定します。   {@value} */
171        private static final String VERSION = "6.9.9.2 (2018/09/18)" ;
172        private static final long serialVersionUID = 699220180918L ;
173
174        private transient TagBuffer tag = new TagBuffer( "iGanttBar" ).addBody( "<!-- -->" );           // 6.1.1.0 (2015/01/17) TagBufferの連結記述
175
176        /**
177         * デフォルトコンストラクター
178         *
179         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
180         */
181        public ViewIGanttBarTag() { super(); }          // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
182
183        /**
184         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
185         *
186         * @og.rev 6.0.2.5 (2014/10/31) HTML5対応。javaScriptで、BODYがないと入れ子になってしまう。
187         *
188         * @return      後続処理の指示
189         */
190        @Override
191        public int doEndTag() {
192                debugPrint();           // 4.0.0 (2005/02/28)
193
194                // 6.1.1.0 (2015/01/17) TagBufferの連結記述
195                jspPrint( tag.makeTag() );
196
197                return EVAL_PAGE ;              // ページの残りを評価する。
198        }
199
200        /**
201         * タグリブオブジェクトをリリースします。
202         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
203         *
204         */
205        @Override
206        protected void release2() {
207                super.release2();
208                tag = new TagBuffer( "iGanttBar" ).addBody( "<!-- -->" );               // 6.1.1.0 (2015/01/17) TagBufferの連結記述
209        }
210
211        /**
212         * 【TAG】ガント要素のタイプ[0:マイルストーン/1:バー]を指定します。
213         *
214         * @og.tag
215         * 0:マイルストーン を指定すると、その日(時間)に、マーカーがされます。
216         * ガントのような期間ではなく、そのポイントを表すのに使用します。
217         * 例えば、受注日、納期 などの設定値です。
218         * start か end どちらかの指定で構いません。
219         * start を使用した場合は、指定日(時間)の前方に、endを使用した場合は、
220         * 指定日(時間)の後方にマーカーが置かれます。
221         *
222         * @param   type ガント要素のタイプ [0:マイルストーン/1:バー]
223         */
224        public void setType( final String type ) {
225                tag.add( "type",nval( getRequestParameter( type ),null ) );
226        }
227
228        /**
229         * 【TAG】ガント要素(バー)の色コードを設定します。
230         *
231         * @og.tag
232         * color は、ガント要素の色コードを設定します。
233         * type="0:マイルストーン" の場合は不要です。
234         * このコードは、予め決められた色画像を呼び出しますので、任意の色が使えるという事ではありません。
235         * 色指定は、横棒の場合は、image/W_色コード.png の画像を使います。
236         * 色コード と 色番号が同時に指定された場合は、色コード が優先されます。
237         *
238         * type=2:差分枠 は、value > baseVal の場合は、超過を、value < baseValの場合は、不足を表します。
239         * <table class="plain">
240         *   <caption>色番号 対応表</caption>
241     *   <tr><th>色番号</th><th>設定値    </th><th>棒色   </th><th> </th><th>横棒サンプル</th></tr>
242     *   <tr><td> 0    </td><td>blue      </td><td>青     </td><td> </td><td style="background-image:url(../image/W_blue.png);">    </td></tr>
243     *   <tr><td> 1    </td><td>black     </td><td>黒     </td><td> </td><td style="background-image:url(../image/W_black.png);">   </td></tr>
244     *   <tr><td> 2    </td><td>brown     </td><td>茶     </td><td> </td><td style="background-image:url(../image/W_brown.png);">   </td></tr>
245     *   <tr><td> 3    </td><td>green     </td><td>緑     </td><td> </td><td style="background-image:url(../image/W_green.png);">   </td></tr>
246     *   <tr><td> 4    </td><td>lightblue </td><td>薄青   </td><td> </td><td style="background-image:url(../image/W_lightblue.png);">  </td></tr>
247     *   <tr><td> 5    </td><td>lightgreen</td><td>薄緑   </td><td> </td><td style="background-image:url(../image/W_lightgreen.png);">  </td></tr>
248     *   <tr><td> 6    </td><td>orange    </td><td>オレンジ</td><td> </td><td style="background-image:url(../image/W_orange.png);">  </td></tr>
249     *   <tr><td> 7    </td><td>pink      </td><td>ピンク </td><td> </td><td style="background-image:url(../image/W_pink.png);">   </td></tr>
250     *   <tr><td> 8    </td><td>purple    </td><td>紫     </td><td> </td><td style="background-image:url(../image/W_purple.png);">   </td></tr>
251     *   <tr><td> 9    </td><td>red       </td><td>赤     </td><td> </td><td style="background-image:url(../image/W_red.png);">        </td></tr>
252     *   <tr><td> 10   </td><td>yellow    </td><td>黄     </td><td> </td><td style="background-image:url(../image/W_yellow.png);">  </td></tr>
253     *   <tr><td> 11   </td><td>navy      </td><td>濃紺   </td><td> </td><td style="background-image:url(../image/W_navy.png);">   </td></tr>
254     *   <tr><td> 12   </td><td>teal      </td><td>青緑   </td><td> </td><td style="background-image:url(../image/W_teal.png);">   </td></tr>
255     *   <tr><td> 13   </td><td>gray      </td><td>灰     </td><td> </td><td style="background-image:url(../image/W_gray.png);">     </td></tr>
256     *   <tr><td> 14   </td><td>indigo    </td><td>藍     </td><td> </td><td style="background-image:url(../image/W_indigo.png);">  </td></tr>
257     *   <tr><td> 15   </td><td>slategray </td><td>鉄色   </td><td> </td><td style="background-image:url(../image/W_slategray.png);">  </td></tr>
258     *   <tr><td> 16   </td><td>chocorlate</td><td>チョコレート</td><td> </td><td style="background-image:url(../image/W_chocorlate.png);">  </td></tr>
259     *   <tr><td> 17   </td><td>darkgreen </td><td>深緑   </td><td> </td><td style="background-image:url(../image/W_darkgreen.png);">  </td></tr>
260     *   <tr><td> 18   </td><td>violet    </td><td>すみれ </td><td> </td><td style="background-image:url(../image/W_violet.png);">  </td></tr>
261     *   <tr><td> 19   </td><td>darkslategray</td><td>深鉄色</td><td> </td><td style="background-image:url(../image/W_darkslategray.png);">  </td></tr>
262     *   <tr><td> 20   </td><td>lime      </td><td>緑     </td><td> </td><td style="background-image:url(../image/W_lime.png);">     </td></tr>
263     *   <tr><td> 21   </td><td>aqua      </td><td>水色   </td><td> </td><td style="background-image:url(../image/W_aqua.png);">   </td></tr>
264     *   <tr><td> 22   </td><td>maroon    </td><td>ひわだいろ</td><td> </td><td style="background-image:url(../image/W_maroon.png);">  </td></tr>
265     *   <tr><td> 23   </td><td>olive     </td><td>オリーブ</td><td> </td><td style="background-image:url(../image/W_olive.png);">   </td></tr>
266     *   <tr><td> 24   </td><td>silver    </td><td>銀     </td><td> </td><td style="background-image:url(../image/W_silver.png);">  </td></tr>
267     *   <tr><td> 25   </td><td>fuchsia   </td><td>赤紫   </td><td> </td><td style="background-image:url(../image/W_fuchsia.png);">  </td></tr>
268     *   <tr><td colspan="6"> </td></tr>
269     *   <tr><td> BK   </td><td>black2    </td><td>黒     </td><td> </td><td style="background-image:url(../image/W_black2.png);">  </td></tr>
270     *   <tr><td> WT   </td><td>white2    </td><td>白     </td><td> </td><td style="background-image:url(../image/W_white2.png);">  </td></tr>
271     *   <tr><td> BL   </td><td>blue2     </td><td>青     </td><td> </td><td style="background-image:url(../image/W_blue2.png);">    </td></tr>
272     *   <tr><td> RD   </td><td>red2      </td><td>赤     </td><td> </td><td style="background-image:url(../image/W_red2.png);">    </td></tr>
273     *   <tr><td> YL   </td><td>yellow2   </td><td>黄     </td><td> </td><td style="background-image:url(../image/W_yellow2.png);">  </td></tr>
274         * </table>
275         *
276         * @param   color バー色
277         */
278        public void setColor( final String color ) {
279                tag.add( "color",nval( getRequestParameter( color ),null ) );
280        }
281
282        /**
283         * 【TAG】グラフ要素の色番号を設定します。
284         *
285         * @og.tag
286         * 色番号は、色コードを直接指定するのではなく、番号で指定する場合に使用します。
287         * 棒グラフ要素(type="1"(横棒),"6"(縦棒))の色を設定します。
288         * "1~25 , BK,WT,BL,RD,YL" の色番号で指定します。
289         * 色番号は、与えた数字を内部色数で割り算した余を使用しますので、連番の場合でも
290         * 繰返し使われます。特殊な色として、BK,WT,BL,RD,YLは、番号ではなく記号で指定できます。
291         * 色コード と 色番号が同時に指定された場合は、色コード が優先されます。
292         *
293         * @param   clrNo 色番号 [1~25/BK/WT/BL/RD/YL]
294         * @see         #setColor( String )
295         */
296        public void setColorNo( final String clrNo ) {
297                tag.add( "colorNo",nval( getRequestParameter( clrNo ),null ) );
298        }
299
300        /**
301         * 【TAG】マイルストーンのアイコン画像(URIより設定)を設定します。
302         *
303         * @og.tag
304         * type="0:マイルストーン" の場合、表示するアイコンイメージの所在を指定します。
305         * 例:"../image/xxx.png"
306         *
307         * @param   src アイコン画像
308         */
309        public void setSrc( final String src ) {
310                tag.add( "src",nval( getRequestParameter( src ),null ) );
311        }
312
313        /**
314         * 【TAG】開始日(YYYYMMDD)、または開始時間(YYYYMMDDHH24MM)を設定します。
315         *
316         * @og.tag
317         * type="1:バー" の場合は、バー表示の場合の書き始め(開始)を指定します。
318         * この値は、バーでは、「含む」になります。
319         * type="0:マイルストーン" の場合は、マイルストンを左端に表示します。
320         *
321         * @param   start 開始日or開始時間 (YYYYMMDD or YYYYMMDDHH24MM)
322         * @see         #setType( String )
323         * @see         #setEnd( String )
324         */
325        public void setStart( final String start ) {
326                tag.add( "start",nval( getRequestParameter( start ),null ) );
327        }
328
329        /**
330         * 【TAG】終了日(YYYYMMDD)、または終了時間(YYYYMMDDHH24MM)を設定します。
331         *
332         * @og.tag
333         * type="1:バー" の場合は、バー表示の場合の書き終わり(終了)を指定します。
334         * この値は、日付か時刻かで「含む」/「含まない」が異なります。
335         * 日付の場合は、この値を「含む」です。例えば、4/12 を指定した場合、4/12は含みます。
336         * 時刻の場合は、「含まない」です。4/12 070000 を指定した場合は、午前7時は含まないので、
337         * 6時59分59秒までのバーが引かれます。
338         * type="0:マイルストーン" の場合は、マイルストンを右端に表示します。
339         *
340         * @param   end 終了日or終了時間 (YYYYMMDD or YYYYMMDDHH24MM)
341         * @see         #setType( String )
342         * @see         #setStart( String )
343         */
344        public void setEnd( final String end ) {
345                tag.add( "end",nval( getRequestParameter( end ),null ) );
346        }
347
348        /**
349         * 【TAG】バー上に表示するテキストを指定します。
350         *
351         * @og.tag
352         * バーの上に、値などの文字を重ねて表示できます。
353         *
354         * @param   text 表示テキスト
355         */
356        public void setText( final String text ) {
357                tag.add( "text",nval( getRequestParameter( text ),null ) );
358        }
359
360        /**
361         * 【TAG】リンク作成時の値を設定します。
362         *
363         * 7.1.0.1 (2020/02/07)
364         * 通常の iGanttBar タグを使う場合、viewタグの HTMLCustomTable で一覧表示します。
365         * その際、hrefも繰り返しリンクを使用しますが、viewLinkタグのlinkタグを使用し、
366         * hrefOnly="true" を設定することでurlEncode されたリンクを使用できます。
367         * linkタグを使わず、hrefに直接URLを記述した場合、リンクはurlEncodeされません。
368         *
369         * @og.tag
370         * バーの上の文字に対して、リンクを作成できます。
371         *
372         * @param   href リンク
373         * @see         #setTarget( String )
374         */
375        public void setHref( final String href ) {
376                tag.add( "href",nval( getRequestParameter( href ),null ) );
377        }
378
379        /**
380         * 【TAG】リンク作成時のターゲット名を指定します。
381         *
382         * @og.tag
383         * バーの上の文字に対して、リンクを作成するときの、ターゲット名を指定できます。
384         *
385         * @param   target ターゲット
386         * @see         #setHref( String )
387         */
388        public void setTarget( final String target ) {
389                tag.add( "target",nval( getRequestParameter( target ),null ) );
390        }
391
392        /**
393         * 【TAG】hrefで付加されるリンクの範囲にバー本体を含めるかどうか[true/false]を指定します(初期値:false)。
394         *
395         * @og.tag
396         * true を指定すると、hrefで付加されるリンクの範囲にバー本体を含めます。
397         *
398         * @param   barLink バー可否 [true:する/false:しない]
399         * @see         #setHref( String )
400         */
401        public void setBarLink( final String barLink ) {
402                tag.add( "barLink",nval( getRequestParameter( barLink ),null ) );
403        }
404
405//      /**
406//       * 【廃止】(startDateInputと同じ)ガント要素の開始日に紐付く入力欄を指定します。
407//       *
408//       * @og.tag
409//       * この入力欄がないと、ガント要素は動かせません。
410//       *
411//       * @og.rev 5.9.14.1 (2016/11/11) startInputではなくstartDateInut
412//       * @og.rev 6.9.9.0 (2018/08/20) startDateInput として、用意します。
413//       *
414//       * @param   startInput 開始日入力欄
415//       * @see         #setStart( String )
416//       */
417//      public void setStartInput( final String startInput ) {
418//              tag.add( "startDateInput",nval( getRequestParameter( startInput ),null ) );
419//      }
420
421        /**
422         * 【TAG】ガント要素の開始日に紐付く入力欄を指定します。
423         *
424         * @og.tag
425         * この入力欄がないと、ガント要素は動かせません。
426         *
427         * @og.rev 5.9.14.1 (2016/11/11) startInputではなくstartDateInut
428         * @og.rev 6.9.9.0 (2018/08/20) startDateInput として、用意します。
429         *
430         * @param   startDateInput 開始日入力欄
431         * @see         #setStart( String )
432         */
433        public void setStartDateInput( final String startDateInput ) {
434                tag.add( "startDateInput",nval( getRequestParameter( startDateInput ),null ) );
435        }
436
437        /**
438         * 【TAG】ガント要素の開始時刻に紐付く入力欄を指定します。
439         *
440         * @og.tag
441         * ガント要素の開始時刻に紐付く入力欄を指定します。
442         *
443         * @og.rev 6.9.9.0 (2018/08/20) startTimeInput として、用意します。
444         *
445         * @param   startTimeInput 開始日入力欄
446         * @see         #setStart( String )
447         */
448        public void setStartTimeInput( final String startTimeInput ) {
449                tag.add( "startTimeInput",nval( getRequestParameter( startTimeInput ),null ) );
450        }
451
452//      /**
453//       * 【廃止】(endDateInputと同じ)ガント要素の終了日に紐付く入力欄を指定します。
454//       *
455//       * @og.tag
456//       * この入力欄がないと、ガント要素は動かせません。
457//       *
458//       * @og.rev 5.9.14.1 (2016/11/11) endInputではなくendDateInut
459//       * @og.rev 6.9.9.0 (2018/08/20) endDateInput として、用意します。
460//       *
461//       * @param   endInput 終了日入力欄
462//       * @see         #setEnd( String )
463//       */
464//      public void setEndInput( final String endInput ) {
465//              tag.add( "endDateInput",nval( getRequestParameter( endInput ),null ) );
466//      }
467
468        /**
469         * 【TAG】ガント要素の終了日に紐付く入力欄を指定します。
470         *
471         * @og.tag
472         * この入力欄がないと、ガント要素は動かせません。
473         *
474         * @og.rev 5.9.14.1 (2016/11/11) endInputではなくendDateInut
475         * @og.rev 6.9.9.0 (2018/08/20) endDateInput として、用意します。
476         *
477         * @param   endDateInput 終了日入力欄
478         * @see         #setEnd( String )
479         */
480        public void setEndDateInput( final String endDateInput ) {
481                tag.add( "endDateInput",nval( getRequestParameter( endDateInput ),null ) );
482        }
483
484        /**
485         * 【TAG】ガント要素の終了時刻に紐付く入力欄を指定します。
486         *
487         * @og.tag
488         * ガント要素の終了時刻に紐付く入力欄を指定します。
489         *
490         * @og.rev 6.9.9.0 (2018/08/20) endTimeInput として、用意します。
491         *
492         * @param   endTimeInput 終了日入力欄
493         * @see         #setEnd( String )
494         */
495        public void setEndTimeInput( final String endTimeInput ) {
496                tag.add( "endTimeInput",nval( getRequestParameter( endTimeInput ),null ) );
497        }
498
499        /**
500         * 【TAG】ガントバーの移動歩幅単位(1:日、2:時間、3:分)を指定します。
501         *
502         * @og.tag
503         * ガントバーの移動歩幅単位(1:日、2:時間、3:分)を指定します。
504         *
505         * @og.rev 6.9.9.2 (2018/09/18) 新規追加。
506         *
507         * @param   moveStep ガントバーの移動歩幅単位(moveStep 1:日、2:時間、3:分)
508         */
509        public void setMoveStep( final String moveStep ) {
510                tag.add( "moveStep",nval( getRequestParameter( moveStep ),null ) );
511        }
512
513        /**
514         * 【TAG】固定2分割するカラムを指定します。
515         *
516         * @og.tag
517         * 固定2分割するカラムを指定します。
518         *
519         * @og.rev 6.9.9.2 (2018/09/18) 新規追加。
520         *
521         * @param   fixed 固定2分割するカラム
522         */
523        public void setFixed( final String fixed ) {
524                tag.add( "fixed",nval( getRequestParameter( fixed ),null ) );
525        }
526
527        /**
528         * 【TAG】マイルストーンカラムを指定します。
529         *
530         * @og.tag
531         * マイルストーンカラムを指定します。
532         *
533         * @og.rev 6.9.9.2 (2018/09/18) 新規追加。
534         *
535         * @param   mStone マイルストーンカラム
536         */
537        public void setMStone( final String mStone ) {
538                tag.add( "mStone",nval( getRequestParameter( mStone ),null ) );
539        }
540
541        /**
542         * 【TAG】バルーンとして表示するカラムを指定します。
543         *
544         * @og.tag
545         * バルーンとして表示するカラムを指定します。
546         *
547         * @og.rev 6.9.9.2 (2018/09/18) 新規追加。
548         *
549         * @param   balloon バルーンとして表示するカラム
550         */
551        public void setBalloon( final String balloon ) {
552                tag.add( "balloon",nval( getRequestParameter( balloon ),null ) );
553        }
554
555        /**
556         * 【TAG】キー情報のカラムを、指定します。
557         *
558         * @og.tag
559         * キー情報のカラムを、指定します。
560         *
561         * @og.rev 6.9.9.2 (2018/09/18) 新規追加。
562         *
563         * @param   keyInfo キー情報のカラム
564         */
565        public void setKeyInfo( final String keyInfo ) {
566                tag.add( "keyInfo",nval( getRequestParameter( keyInfo ),null ) );
567        }
568
569        /**
570         * 【TAG】writable属性のカラムを指定します。
571         *
572         * @og.tag
573         * writable属性のカラムを指定します。
574         *
575         * @og.rev 6.9.9.2 (2018/09/18) 新規追加。
576         *
577         * @param   writable writable属性のカラム
578         */
579        public void setWritable( final String writable ) {
580                tag.add( "writable",nval( getRequestParameter( writable ),null ) );
581        }
582
583        /**
584         * 【TAG】レポートカラムを指定します。
585         *
586         * @og.tag
587         * レポートカラムを指定します。
588         *
589         * @og.rev 6.9.9.2 (2018/09/18) 新規追加。
590         *
591         * @param   report レポートカラム
592         */
593        public void setReport( final String report ) {
594                tag.add( "report",nval( getRequestParameter( report ),null ) );
595        }
596
597        /**
598         * 【TAG】表示の重なり順のカラムを指定します。
599         *
600         * @og.tag
601         * 表示の重なり順のカラムを指定します。
602         *
603         * @og.rev 6.9.9.2 (2018/09/18) 新規追加。
604         *
605         * @param   zindex 表示の重なり順のカラム
606         */
607        public void setZindex( final String zindex ) {
608                tag.add( "zindex",nval( getRequestParameter( zindex ),null ) );
609        }
610
611//      /**
612//       * 【TAG】行選択のチェックボックスを指定します。
613//       *
614//       * @og.tag
615//       * 例えば、[ROW.ID] を指定する事で、選択行を指定する事ができます。
616//       *
617//       * @og.rev 6.9.9.2 (2018/09/18) 廃止
618//       *
619//       * @param   chboxid チェックボックス指定
620//       */
621//      public void setChbox( final String chbox ) {
622//              tag.add( "chbox",nval( getRequestParameter( chbox ),null ) );
623//      }
624
625        /**
626         * 【TAG】積み上げガントの工数を指定します。
627         *
628         * @og.tag
629         * 積み上げガントの工数を指定します。
630         * 開始日、終了日を利用して積上げ計算されます。
631         *
632         * @param   cost 積み上げガントの工数
633         */
634        public void setCost( final String cost ) {
635                tag.add( "cost",nval( getRequestParameter( cost ),null ) );
636        }
637
638        /**
639         * 【TAG】積上げの最大値(キャパシティ)を指定します。
640         *
641         * @og.tag
642         * 最大値を超えた場合は、マーカーされます。
643         *
644         * @param   capacity 積み上げガントの工数
645         */
646        public void setCapacity( final String capacity ) {
647                tag.add( "capacity",nval( getRequestParameter( capacity ),null ) );
648        }
649
650        /**
651         * 【TAG】要素を一意に指定するためのidを指定します。
652         *
653         * @og.tag
654         * 要素を一意に指定するためのID体系を指定します。
655         * 例えばA__[I]のように設定します。
656         * ガント要素は動かす際には必要です。
657         *
658         * @og.rev 5.9.14.1 (2016/11/11)
659         *
660         * @param   id 一意になる文字列
661         */
662        @Override
663        public void setId( final String id ) {
664                tag.add( "id",nval( getRequestParameter( id ),null ) );
665        }
666
667        /**
668         * タグの名称を、返します。
669         * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。
670         *
671         * @return  タグの名称
672         * @og.rtnNotNull
673         */
674        @Override
675        protected String getTagName() {
676                return "iGanttBar" ;
677        }
678
679        /**
680         * このオブジェクトの文字列表現を返します。
681         * 基本的にデバッグ目的に使用します。
682         *
683         * @return このクラスの文字列表現
684         * @og.rtnNotNull
685         */
686        @Override
687        public String toString() {
688                return ToString.title( this.getClass().getName() )
689                                .println( "VERSION"             ,VERSION        )
690                                .println( "tag"                 ,tag.makeTag()  )
691                                .println( "Other..."    ,getAttributes().getAttribute() )
692                                .fixForm().toString() ;
693        }
694}