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 * @og.rev 5.8.1.0 (2014/11/07) HTML5対応ã?javaScriptで、BODYがなã�?�¨入れ子になってしまã�??
174 * @return 後続å?ç�??æŒ?¤º
175 */
176 @Override
177 public int doEndTag() {
178 debugPrint(); // 4.0.0 (2005/02/28)
179
180 tag.setBody( "<!-- -->" ); // 5.8.1.0 (2014/11/07) HTML5対応ã?
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( "iGantt" );
195 }
196
197 /**
198 * 【TAG】前後ã?行データがä¸??してã�?‚‹場合ã?マã?ジするかどã�?�‹[true/false]æŒ?®šしまã�?初期値:false)
199 *
200 * @og.tag
201 * これは、ガントデータが同ä¸?‚°ループã?場合に、ガントとしてä¸??に表示するようにしますã?
202 * こã?段階ではã€?šŽ段並べのままですã?
203 * 前後に付けるå?合(ä¸??表示?‰ã?、verticalShift = "true" を指定してくださいã€?
204 * (adjustGanttTable.jsの)初期値は、false:行わなã�?ですã?
205 *
206 * @param margeRows è¤?•°行ã?マã?ジを行うかどã�?�‹[true/false]
207 * @see #setVerticalShift( String )
208 */
209 public void setMargeRows( final String margeRows ) {
210 tag.add( "margeRows",StringUtil.nval( getRequestParameter( margeRows ),null ) );
211 }
212
213 /**
214 * 【TAG】左の固定å?の列数?ˆテーブル?’å?割機è??‰をæŒ?®šしますã?
215 *
216 * @og.tag
217 * ?‘段çµ?�§も2段çµ?�§もã?固定したいカラãƒ?•°を指定しますã?
218 *
219 * @param fixedCols 固定したいカラãƒ?•°
220 */
221 public void setFixedCols( final String fixedCols ) {
222 tag.add( "fixedCols",StringUtil.nval( getRequestParameter( fixedCols ),null ) );
223 }
224
225 /**
226 * 【TAG】viewタグの出力に番号列が出力されてã�?‚‹かどã�?�‹?ˆå?力されてã�?�ªã�??å�?delete?‰をæŒ?®šしますã?
227 *
228 * @og.tag
229 * viewタグで、numberType属æ?で、行番号を表示しなã�?¨定を行ったå?合ã?ここでもã?viewNumberType="delete" ã‚?
230 * æŒ?®šするå¿?¦�がありますã?
231 *
232 * @param viewNumberType viewタグの番号列が出力されてã�?‚‹かかどã�?�‹
233 */
234 public void setViewNumberType( final String viewNumberType ) {
235 tag.add( "viewNumberType",StringUtil.nval( getRequestParameter( viewNumberType ),null ) );
236 }
237
238 /**
239 * 【TAG】ガントã?上下ずらし表示を行うかどã�?�‹[true/false]æŒ?®šしまã�?初期値=true:行う)
240 *
241 * @og.tag
242 * 通常のガント表示では、データは階段並べで表示されますã?
243 * 同ä¸?±žæ?のガントを横ä¸??に表示したã�??合ã?、この属æ?にã€?true" を指定しますã?
244 * (adjustGanttTable.jsの)初期値は、true:行う ですã?
245 *
246 * @param verticalShift 上下ずらし表示を行うかどã�?�‹[true/false]
247 */
248 public void setVerticalShift( final String verticalShift ) {
249 tag.add( "verticalShift",StringUtil.nval( getRequestParameter( verticalShift ), null ) );
250 }
251
252 /**
253 * 【TAG】ガントバーの間ã?左区åˆ?‚Šスペã?スをピクセルでæŒ?®šしまã�?初期値:null)
254 *
255 * @og.tag
256 * ガント表示で、margeRows="true" (è¤?•°行ã?マã?ジを行う)場合ã?前後ã?ガントが同ä¸?‰²の
257 * 場合ã?くっつã�?�¦表示されますã?これをã?verticalShift="true" (ガントã?上下ずらし表示を行う)
258 * 場合ã?、å?ã€??バã?が判別可能ですが、そã�?�—たくなã�?‚±ースでは、å?ã€??判別ができませんã€?
259 * そこで、特殊なケースとして、å?ã€??判別が付く様に、ガントバーの長さを調整したã�?‚±ースã�?
260 * ありますã?
261 *
262 * こã?属æ?は、バーの左にæŒ?®šã?空æ¬?‚’用意しますã?
263 * 初期値は、null(属æ?をå?力しなã�? ですã?
264 *
265 * @og.rev 5.6.4.2 (2013/05/17) 新規追åŠ?
266 *
267 * @param paddingLeft 左区åˆ?‚Šスペã?ス
268 * @see #setPaddingRigth( String )
269 */
270 public void setPaddingLeft( final String paddingLeft ) {
271 tag.add( "paddingLeft",StringUtil.nval( getRequestParameter( paddingLeft ),null ) );
272 }
273
274 /**
275 * 【TAG】ガントバーの間ã?右区åˆ?‚Šスペã?スをピクセルでæŒ?®šしまã�?初期値:null)
276 *
277 * @og.tag
278 * ガント表示で、margeRows="true" (è¤?•°行ã?マã?ジを行う)場合ã?前後ã?ガントが同ä¸?‰²の
279 * 場合ã?くっつã�?�¦表示されますã?これをã?verticalShift="true" (ガントã?上下ずらし表示を行う)
280 * 場合ã?、å?ã€??バã?が判別可能ですが、そã�?�—たくなã�?‚±ースでは、å?ã€??判別ができませんã€?
281 * そこで、特殊なケースとして、å?ã€??判別が付く様に、ガントバーの長さを調整したã�?‚±ースã�?
282 * ありますã?
283 *
284 * こã?属æ?は、バーの右にæŒ?®šã?空æ¬?‚’用意しますã?
285 * 初期値は、null(属æ?をå?力しなã�? ですã?
286 *
287 * @og.rev 5.6.4.2 (2013/05/17) 新規追åŠ?
288 *
289 * @param paddingRigth 左区åˆ?‚Šスペã?ス
290 * @see #setPaddingLeft( String )
291 */
292 public void setPaddingRigth( final String paddingRigth ) {
293 tag.add( "paddingRigth",StringUtil.nval( getRequestParameter( paddingRigth ),null ) );
294 }
295
296 /**
297 * 【TAG】積上ガンãƒ?ガント部åˆ??表示を行うかどã�?�‹[true/false]æŒ?®šしまã�?初期値=true:表示する)
298 *
299 * @og.tag
300 * falseとするとガント部åˆ?‚’表示せず、積上げのみ表示しますã?
301 * (adjustGanttTable.jsの)初期値は、true:表示するã€?
302 *
303 * @param viewGantt ガント部åˆ??表示を行うかどã�?�‹[true/false]
304 */
305 public void setViewGantt( final String viewGantt ) {
306 tag.add( "viewGantt",StringUtil.nval( getRequestParameter( viewGantt ), null ) );
307 }
308
309 /**
310 * 【TAG】積上ガンãƒ?休日に積上げるかどã�?�‹[true/false]æŒ?®šします(å?期å?=true:積上げã‚?
311 *
312 * @og.tag
313 * 休日に積上る場合ã?平日、休日を合わせた日数で、工数の平準化が行われますã?
314 * false:積上なã�?を指定したå?合ã?平日のみで工数が加算されますã?
315 * 積上ã?、日付関係ã?場å�?zoom=DAY)のみ有効で、時間単位ã?積上機è?はありませんã€?
316 * (adjustGanttTable.jsの)初期値は、true:積上げるã?
317 *
318 * @param stackHoliday ガントã?表示を行うかどã�?�‹[true/false]
319 */
320 public void setStackHoliday( final String stackHoliday ) {
321 tag.add( "stackHoliday",StringUtil.nval( getRequestParameter( stackHoliday ), null ) );
322 }
323
324 /**
325 * 【TAG】ä¸?¦§の背景色の縞ã?模様を再作æ?するか[true/false]æŒ?®šしまã�?初期値:true)
326 *
327 * @og.tag
328 * 背景色の縞ã?模æ§?ゼブラ模æ§?を作æ?する場合ã?ã€?true" にセãƒ?ƒˆしますã?
329 * margeRows='true'の場合ã?使用しますã?
330 * (adjustGanttTable.jsの)初期値は、true:再作æ?するã€?
331 *
332 * @param useBgColor 背景色ゼブラを行うかどã�?�‹[true/false]
333 * @see #setMargeRows( String )
334 */
335 public void setUseBgColor( final String useBgColor ) {
336 tag.add( "useBgColor",StringUtil.nval( getRequestParameter( useBgColor ), null ) );
337 }
338
339 /**
340 * 【TAG】積上ガンãƒ?積上げ高さの計算方法[0:設定å?基æº?1:æœ?¤§値基準]æŒ?®šします(å?期å?:1:æœ?¤§値基準ï¼?
341 *
342 * @og.tag
343 * 積上ガントã?大きさをã?設定å?を基準にするかã?æœ?¤§値を基準にするか指定しますã?
344 * 1:æœ?¤§値基準ã?ã€?«˜さ固定とè€?�ˆられますã?つまりã?積上ガントã?æœ?¤§ã�?.0の場合ã?
345 * 設定å?がã?0.1 ならã?0.1 åˆ??値としてつみあがりますã??‘00å?çŽ?�§の表示に適してã�?�¾すã?
346 * 0:設定å?基準ã?ã€?«˜さ可変ですã?つまりã?積上ガントã?設定å?のæœ?¤§ã�?0.2 の場合ã?
347 * 0.1 ならã?半å?のæ‰?�¾で積みあがりますã?値にæœ?¤§値がなくã?å�?©�上結果の相対レベルã�?
348 * 見たã�??合にã€?�©してã�?�¾すã?
349 *
350 * 0:能力設定å?を基準に積上げ高さの計算を行うã€?
351 * 1:行ã?æœ?¤§値を基準に積上げ高さの計算を行うã€?
352 * (adjustGanttTable.jsの)初期値はã€?:æœ?¤§値基æº?ですã?
353 *
354 * @param viewMode 積上げ高さの計算方法[0:設定å?基æº?1:æœ?¤§値基準]
355 */
356 public void setViewMode( final String viewMode ) {
357 tag.add( "viewMode",StringUtil.nval( getRequestParameter( viewMode ),null ) );
358 }
359
360 /**
361 * 【TAG】積上ガンãƒ?正常ç¯?›²の上限となる工数を指定しまã�?初期値:1)ã€?
362 *
363 * @og.tag
364 * 正常ç¯?›²の上限となる工数をè¶?�ˆると積上げの色が変化しますã?
365 * (adjustGanttTable.jsの)初期値はã€? ですã?
366 *
367 * @param stdUpper 正常ç¯?›²の上限となる工数
368 * @see #setStdCost( String )
369 */
370 public void setStdUpper( final String stdUpper ) {
371 tag.add( "stdUpper",StringUtil.nval( getRequestParameter( stdUpper ),null ) );
372 }
373
374 /**
375 * 【TAG】積上ガンãƒ?行ã?2/3の高さとなる工数を指定しまã�?初期値:1)ã€?
376 *
377 * @og.tag
378 * 正常ç¯?›²の上限をå?期å?の "1" に設定し、この値をå?期å?の "1" を使ã�?�¨ã€?
379 * "1" の高さは、行ã?2/3の高さになるよã�?�«計算されますã?つまりã?オーバã?åˆ??ã€?
380 * 全体ã? 1/3 以下ã?場合に、ちã‚?�†ど良ã�?„Ÿじになりますã?
381 * オーバã?する量との関係でæŒ?®šしますã?
382 * (adjustGanttTable.jsの)初期値はã€? ですã?
383 *
384 * @param stdCost 行ã?2/3の高さとなる工数
385 * @see #setStdUpper( String )
386 */
387 public void setStdCost( final String stdCost ) {
388 tag.add( "stdCost",StringUtil.nval( getRequestParameter( stdCost ),null ) );
389 }
390
391 /**
392 * 【TAG】積上ガンãƒ?正常ç¯?›²の下限となる工数を指定しまã�?初期値:0)ã€?
393 *
394 * @og.tag
395 * 正常ç¯?›²の下限となる工数を下回ると積上げの色が変化しますã?
396 * (adjustGanttTable.jsの)初期値はã€? ですã?
397 *
398 * @param stdLower 背景色ゼブラを行うかどã�?�‹[true/false]
399 */
400 public void setStdLower( final String stdLower ) {
401 tag.add( "stdLower",StringUtil.nval( getRequestParameter( stdLower ),null ) );
402 }
403
404 /**
405 * タグの名称をã?返しますã?
406 * 自åˆ??身のクラス名よりã?自動的に取り出せなã�?�Ÿめã?こã?メソãƒ?ƒ‰をオーバã?ライドしますã?
407 *
408 * @return タグの名称
409 */
410 @Override
411 protected String getTagName() {
412 return "iGantt" ;
413 }
414
415 /**
416 * こã?オブジェクトã?æ–?—å?表現を返しますã?
417 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
418 *
419 * @return こã?クラスのæ–?—å?表現
420 */
421 @Override
422 public String toString() {
423 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
424 .println( "VERSION" ,VERSION )
425 .println( "tag" ,tag.makeTag() )
426 .println( "Other..." ,getAttributes().getAttribute() )
427 .fixForm().toString() ;
428 }
429 }