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     * iGantt タグは、ガントチャート?体に??する事で、最大行数、固定カラ??
026     * 番号列?出力有無を指定する?に使用されます?
027     * 通常は、単独で使用するのではなく?iGanttBar タグと?合わせて使用します?
028     * 通常の view タグの後に記述します?
029     *
030     * ガントには??常のガントと積上ガント??積上ガントがあります?
031     * 通常ガント???常の view をガント化します?
032     * 積上ガント?、ViewにHTMLstackedGanttTableを指定する?があります?
033     * こ?方式?利点は、積上と通常のガントバーを混在できることです?例えば、物件予定をガントバーで、表示し?
034     * 個人の予定工数を積上るなどの表示が可能です?ただし?件数が多いと、??時間がかかります?
035     * ?積上ガント?、エンジン?で積上計算します?で、???早??ですが、ガントバーとの
036     * 混在ができません。これらは、うまく使??けを行う?があります?
037     *
038     * @og.formSample
039     * ●形式?lt;og:iGantt  ... />
040     * ●body?な?
041     * ●前提:headタグで、adjustEvent="Gantt" を指定してください?
042     *
043     * ●Tag定義??
044     *   <og:iGantt
045     *       margeRows          【TAG】前後?行データが??して?場合?マ?ジするかど?[true/false]?しま?初期値:false)
046     *       fixedCols          【TAG】左の固定?の列数?テーブル??割機??を?しま?
047     *       viewNumberType     【TAG】viewタグの出力に番号列が出力されて?かかど???力されて????deleteを指定?
048     *       verticalShift      【TAG】ガント?上下ずらし表示を行うかど?[true/false]?しま?初期値=true:行う)
049     *       paddingLeft        【TAG】ガントバーの間?左区?スペ?スを指定しま?初期値=null)
050     *       paddingRigth       【TAG】ガントバーの間?右区?スペ?スを指定しま?初期値=null)
051     *       useBgColor         【TAG】?の背景色の縞?模様を再作?するか[true/false]?します?argeRows='true'の場合?使用する??
052     *       viewGantt          【TAG】積上ガン?ガント部??表示を行うかど?[true/false]?しま?初期値=true:表示する)
053     *       stackHoliday       【TAG】積上ガン?休日に積上げるかど?[true/false]?します?oom=DAYの場合?み有効。?期?=true:積上げ?
054     *       viewMode           【TAG】積上ガン?1:行??値を基準に積上げ高さの計算を行う/0:能力設定?を基準に積上げ高さの計算を行う?
055     *       stdUpper           【TAG】積上ガン?正常?の上限となる工数です?これを?ると積上げの色が変化しま?初期値:1)
056     *       stdCost            【TAG】積上ガン?こ?工数が行?2/3の高さとなりま?初期値:1)
057     *       stdLower           【TAG】積上ガン?正常?の下限となる工数です?これを下回ると積上げの色が変化しま?初期値:0)
058     *       debug              【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
059     *   />
060     *
061     * ●使用?
062     *   (通常ガン?
063     *  <og:view
064     *      viewFormType = "HTMLCustomTable"
065     *      command      = "{@command}"
066     *      writable     = "false"
067     *      useScrollBar = "false"
068     *  >
069     *    <og:thead rowspan="2">
070     *      <tr>
071     *          <td>[NOORDER]</td>
072     *          <td rowspan="2" class="gantt zoom{@VZOOM}" style="line-height:normal;text-align:left;background-image: url('../image/ganttBG{@VZOOM}.gif');" >
073     *              <div style="position:relative;left:0px;z-index:101; " height="100%" width="100%" >
074     *                  <og:ganttHeader
075     *                      startDate       = "{@startDate}"
076     *                      endDate         = "{@endDate}"
077     *                      zoom            = "{@VZOOM}"
078     *                      daySpan         = "{@daySpan}"
079     *                  />
080     *              </div>
081     *          </td>
082     *      </tr>
083     *    </og:thead>
084     *    <og:tbody rowspan="2">
085     *      <tr>
086     *          <td>[NOORDER]</td>
087     *          <td rowspan="2" class="gantt zoom{@VZOOM}" style="text-align:left;background-image: url('../image/ganttBG{@VZOOM}.gif');" >
088     *              <og:iGanttBar type="1" colorNo="[COLOR]" start="[DYORDER]" end="[DYNOKI]" text="[PN]" />
089     *              <og:iGanttBar type="0" src="../image/dia_blue.gif" start="[DYORDER]"      text="開? />
090     *              <og:iGanttBar type="0" src="../image/dia_red.gif"  end="[DYNOKI]"         text="終? />
091     *          </td>
092     *      </tr>
093     *    </og:tbody>
094     *  </og:view>
095     *    
096     *   <og:iGantt
097     *       margeRows      = "true"
098     *       fixedCols      = "1"
099     *   />
100     *
101     *   (積上ガン?
102     *  積上ガントを利用する場合?、ViewにHTMLstackedGanttTableを利用する?があります?
103     *  <og:view
104     *      viewFormType = "HTMLStackedGanttTable"
105     *      command      = "{@command}"
106     *      writable     = "false"
107     *      useScrollBar = "false"
108     *      useParam     = "true"
109     *      numberType   = "none"
110     *  >
111     *  <og:stackParam
112     *      stackColumns = "NOORDER"
113     *  />
114     * 
115     *    <og:thead rowspan="2">
116     *      <tr>
117     *          <td>[NOORDER]</td>
118     *          <td>[PN]</td>
119     *          <td rowspan="2" class="gantt zoom{@SZOOM}" style="text-align:left;background-image: url('../image/ganttBG{@SZOOM}.gif');" >
120     *              <div style="position:relative;left:0px;z-index:101; " height="100%" width="100%" >
121     *                  <og:ganttHeader
122     *                      startDate   = "{@startDate}"
123     *                      endDate     = "{@endDate}"
124     *                      zoom        = "{@SZOOM}"
125     *                      calDB       = "GE13"
126     *                      arg1        = "A"
127     *                  />
128     *              </div>
129     *          </td>
130     *      </tr>
131     *    </og:thead>
132     *    <og:tbody rowspan="2">
133     *      <tr>
134     *          <td>[NOORDER]</td>
135     *          <td>[PN]</td>
136     *          <td rowspan="2" class="gantt zoom{@VZOOM}" style="text-align:left;background-image: url('../image/ganttBG{@VZOOM}.gif');" >
137     *              <og:iGanttBar type="1" colorNo="[COLOR]" start="[DYORDER]" end="[DYNOKI]"  text="[COSTCLM]"
138     *                    cost="[COSTCLM]" capacity="[CAPACITY]" />
139     *              <og:iGanttBar type="0" src="../image/dia_blue.gif" start="[DYORDER]"      text="開? />
140     *          </td>
141     *      </tr>
142     *    </og:tbody>
143     *  </og:view>
144     *    
145     *   <og:iGantt
146     *       margeRows      = "true"
147     *       fixedCols      = "1"
148     *       verticalShift  = "false"
149     *       viewGantt      = "{@viewGantt}"
150     *       stackHoliday   = "{@stackHoliday}"
151     *       useBgColor     = "true"
152     *       viewMode       = "2"
153     *   />
154     *
155     * @og.rev 5.6.3.2 (2013/04/12) 新規作?
156     * @og.group 画面部?
157     *
158     * @version  5.0
159     * @author       Kazuhiko Hasegawa
160     * @since    JDK6.0,
161     */
162    public class ViewIGanttTag extends CommonTagSupport {
163            //* こ?プログラ??VERSION??を設定します?       {@value} */
164            private static final String VERSION = "5.6.4.2 (2013/05/17)" ;
165    
166            private static final long serialVersionUID = 564220130517L ;
167    
168            private TagBuffer tag = new TagBuffer( "iGantt" ) ;
169    
170            /**
171             * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします?
172             *
173             * @return      後続????
174             */
175            @Override
176            public int doEndTag() {
177                    debugPrint();           // 4.0.0 (2005/02/28)
178    
179                    jspPrint( tag.makeTag() );
180    
181                    return(EVAL_PAGE);              // ペ?ジの残りを評価する?
182            }
183    
184            /**
185             * タグリブオブジェクトをリリースします?
186             * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
187             *
188             */
189            @Override
190            protected void release2() {
191                    super.release2();
192                    tag = new TagBuffer( "iGantt" );
193            }
194    
195            /**
196             * 【TAG】前後?行データが??して?場合?マ?ジするかど?[true/false]?しま?初期値:false)
197             *
198             * @og.tag
199             * これは、ガントデータが同?ループ?場合に、ガントとして??に表示するようにします?
200             * こ?段階では?段並べのままです?
201             * 前後に付ける?合(??表示??、verticalShift = "true" を指定してください?
202             * (adjustGanttTable.jsの)初期値は、false:行わな?です?
203             *
204             * @param   margeRows ?行?マ?ジを行うかど?[true/false]
205             * @see         #setVerticalShift( String )
206             */
207            public void setMargeRows( final String margeRows ) {
208                    tag.add( "margeRows",StringUtil.nval( getRequestParameter( margeRows ),null ) );
209            }
210    
211            /**
212             * 【TAG】左の固定?の列数?テーブル??割機??を?します?
213             *
214             * @og.tag
215             * ?段?も2段?も?固定したいカラ?を指定します?
216             *
217             * @param   fixedCols 固定したいカラ?
218             */
219            public void setFixedCols( final String fixedCols ) {
220                    tag.add( "fixedCols",StringUtil.nval( getRequestParameter( fixedCols ),null ) );
221            }
222    
223            /**
224             * 【TAG】viewタグの出力に番号列が出力されて?かど???力されて????delete?を?します?
225             *
226             * @og.tag
227             * viewタグで、numberType属?で、行番号を表示しな?定を行った?合?ここでも?viewNumberType="delete" ?
228             * ?する?があります?
229             *
230             * @param   viewNumberType viewタグの番号列が出力されて?かかど?
231             */
232            public void setViewNumberType( final String viewNumberType ) {
233                    tag.add( "viewNumberType",StringUtil.nval( getRequestParameter( viewNumberType ),null ) );
234            }
235    
236            /**
237             * 【TAG】ガント?上下ずらし表示を行うかど?[true/false]?しま?初期値=true:行う)
238             *
239             * @og.tag
240             * 通常のガント表示では、データは階段並べで表示されます?
241             * 同??のガントを横??に表示した??合?、この属?に?true" を指定します?
242             * (adjustGanttTable.jsの)初期値は、true:行う です?
243             *
244             * @param   verticalShift 上下ずらし表示を行うかど?[true/false]
245             */
246            public void setVerticalShift( final String verticalShift ) {
247                    tag.add( "verticalShift",StringUtil.nval( getRequestParameter( verticalShift ), null ) );
248            }
249    
250            /**
251             * 【TAG】ガントバーの間?左区?スペ?スをピクセルで?しま?初期値:null)
252             *
253             * @og.tag
254             * ガント表示で、margeRows="true" (?行?マ?ジを行う)場合?前後?ガントが同?の
255             * 場合?くっつ?表示されます?これを?verticalShift="true" (ガント?上下ずらし表示を行う)
256             * 場合?、???バ?が判別可能ですが、そ?たくな?ースでは、???判別ができません?
257             * そこで、特殊なケースとして、???判別が付く様に、ガントバーの長さを調整した?ース?
258             * あります?
259             *
260             * こ?属?は、バーの左に??空?用意します?
261             * 初期値は、null(属?を?力しな? です?
262             *
263             * @og.rev 5.6.4.2 (2013/05/17) 新規追?
264             *
265             * @param   paddingLeft 左区?スペ?ス
266             * @see         #setPaddingRigth( String )
267             */
268            public void setPaddingLeft( final String paddingLeft ) {
269                    tag.add( "paddingLeft",StringUtil.nval( getRequestParameter( paddingLeft ),null ) );
270            }
271    
272            /**
273             * 【TAG】ガントバーの間?右区?スペ?スをピクセルで?しま?初期値:null)
274             *
275             * @og.tag
276             * ガント表示で、margeRows="true" (?行?マ?ジを行う)場合?前後?ガントが同?の
277             * 場合?くっつ?表示されます?これを?verticalShift="true" (ガント?上下ずらし表示を行う)
278             * 場合?、???バ?が判別可能ですが、そ?たくな?ースでは、???判別ができません?
279             * そこで、特殊なケースとして、???判別が付く様に、ガントバーの長さを調整した?ース?
280             * あります?
281             *
282             * こ?属?は、バーの右に??空?用意します?
283             * 初期値は、null(属?を?力しな? です?
284             *
285             * @og.rev 5.6.4.2 (2013/05/17) 新規追?
286             *
287             * @param   paddingRigth 左区?スペ?ス
288             * @see         #setPaddingLeft( String )
289             */
290            public void setPaddingRigth( final String paddingRigth ) {
291                    tag.add( "paddingRigth",StringUtil.nval( getRequestParameter( paddingRigth ),null ) );
292            }
293    
294            /**
295             * 【TAG】積上ガン?ガント部??表示を行うかど?[true/false]?しま?初期値=true:表示する)
296             *
297             * @og.tag
298             * falseとするとガント部?表示せず、積上げのみ表示します?
299             * (adjustGanttTable.jsの)初期値は、true:表示する?
300             *
301             * @param   viewGantt ガント部??表示を行うかど?[true/false]
302             */
303            public void setViewGantt( final String viewGantt ) {
304                    tag.add( "viewGantt",StringUtil.nval( getRequestParameter( viewGantt ), null ) );
305            }
306    
307            /**
308             * 【TAG】積上ガン?休日に積上げるかど?[true/false]?します(?期?=true:積上げ?
309             *
310             * @og.tag
311             * 休日に積上る場合?平日、休日を合わせた日数で、工数の平準化が行われます?
312             * false:積上な?を指定した?合?平日のみで工数が加算されます?
313             * 積上?、日付関係?場?zoom=DAY)のみ有効で、時間単位?積上機?はありません?
314             * (adjustGanttTable.jsの)初期値は、true:積上げる?
315             *
316             * @param   stackHoliday ガント?表示を行うかど?[true/false]
317             */
318            public void setStackHoliday( final String stackHoliday ) {
319                    tag.add( "stackHoliday",StringUtil.nval( getRequestParameter( stackHoliday ), null ) );
320            }
321    
322            /**
323             * 【TAG】?の背景色の縞?模様を再作?するか[true/false]?しま?初期値:true)
324             *
325             * @og.tag
326             * 背景色の縞?模?ゼブラ模?を作?する場合??true" にセ?します?
327             * margeRows='true'の場合?使用します?
328             * (adjustGanttTable.jsの)初期値は、true:再作?する?
329             *
330             * @param   useBgColor 背景色ゼブラを行うかど?[true/false]
331             * @see         #setMargeRows( String )
332             */
333            public void setUseBgColor( final String useBgColor ) {
334                    tag.add( "useBgColor",StringUtil.nval( getRequestParameter( useBgColor ), null ) );
335            }
336    
337            /**
338             * 【TAG】積上ガン?積上げ高さの計算方法[0:設定?基?1:?値基準]?します(?期?:1:?値基準?
339             *
340             * @og.tag
341             * 積上ガント?大きさを?設定?を基準にするか??値を基準にするか指定します?
342             * 1:?値基準??さ固定と?られます?つまり?積上ガント???.0の場合?
343             * 設定?が?0.1 なら?0.1 ??値としてつみあがります??00??の表示に適して?す?
344             * 0:設定?基準??さ可変です?つまり?積上ガント?設定?の??0.2 の場合?
345             * 0.1 なら?半?の?で積みあがります?値に?値がなく??上結果の相対レベル?
346             * 見た??合に?して?す?
347             * 
348             * 0:能力設定?を基準に積上げ高さの計算を行う?
349             * 1:行??値を基準に積上げ高さの計算を行う?
350             * (adjustGanttTable.jsの)初期値は?:?値基?です?
351             *
352             * @param   viewMode 積上げ高さの計算方法[0:設定?基?1:?値基準]
353             */
354            public void setViewMode( final String viewMode ) {
355                    tag.add( "viewMode",StringUtil.nval( getRequestParameter( viewMode ),null ) );
356            }
357    
358            /**
359             * 【TAG】積上ガン?正常?の上限となる工数を指定しま?初期値:1)?
360             *
361             * @og.tag
362             * 正常?の上限となる工数を?ると積上げの色が変化します?
363             * (adjustGanttTable.jsの)初期値は? です?
364             *
365             * @param   stdUpper 正常?の上限となる工数
366             * @see         #setStdCost( String )
367             */
368            public void setStdUpper( final String stdUpper ) {
369                    tag.add( "stdUpper",StringUtil.nval( getRequestParameter( stdUpper ),null ) );
370            }
371    
372            /**
373             * 【TAG】積上ガン?行?2/3の高さとなる工数を指定しま?初期値:1)?
374             *
375             * @og.tag
376             * 正常?の上限を?期?の "1" に設定し、この値を?期?の "1" を使??
377             * "1" の高さは、行?2/3の高さになるよ?計算されます?つまり?オーバ????
378             * 全体? 1/3 以下?場合に、ち?ど良?じになります?
379             * オーバ?する量との関係で?します?
380             * (adjustGanttTable.jsの)初期値は? です?
381             *
382             * @param   stdCost 行?2/3の高さとなる工数
383             * @see         #setStdUpper( String )
384             */
385            public void setStdCost( final String stdCost ) {
386                    tag.add( "stdCost",StringUtil.nval( getRequestParameter( stdCost ),null ) );
387            }
388    
389            /**
390             * 【TAG】積上ガン?正常?の下限となる工数を指定しま?初期値:0)?
391             *
392             * @og.tag
393             * 正常?の下限となる工数を下回ると積上げの色が変化します?
394             * (adjustGanttTable.jsの)初期値は? です?
395             *
396             * @param   stdLower 背景色ゼブラを行うかど?[true/false]
397             */
398            public void setStdLower( final String stdLower ) {
399                    tag.add( "stdLower",StringUtil.nval( getRequestParameter( stdLower ),null ) );
400            }
401    
402            /**
403             * タグの名称を?返します?
404             * 自??身のクラス名より?自動的に取り出せな?め?こ?メソ?をオーバ?ライドします?
405             *
406             * @return  タグの名称
407             */
408            @Override
409            protected String getTagName() {
410                    return "iGantt" ;
411            }
412    
413            /**
414             * こ?オブジェクト???表現を返します?
415             * 基本???目?使用します?
416             *
417             * @return こ?クラスの??表現
418             */
419            @Override
420            public String toString() {
421                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
422                                    .println( "VERSION"             ,VERSION        )
423                                    .println( "tag"                 ,tag.makeTag()  )
424                                    .println( "Other..."    ,getAttributes().getAttribute() )
425                                    .fixForm().toString() ;
426            }
427    }