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.HybsSystem; 019 import org.opengion.hayabusa.common.HybsSystemException; 020 import org.opengion.hayabusa.html.ViewStackTableParam; 021 import org.opengion.hayabusa.resource.CalendarData; 022 import org.opengion.hayabusa.resource.CalendarFactory; 023 import static org.opengion.fukurou.util.StringUtil.nval ; 024 025 import java.util.ArrayList; 026 import java.util.Calendar; 027 import java.util.Date; 028 import java.util.Locale ; 029 import java.text.DateFormat; 030 import java.text.SimpleDateFormat; 031 032 /** 033 * スタ?ガントチャート用のヘッ????(日付け?を?力するタグです? 034 * 035 * スライドバー式ガントチャート?表示時に、スライドバーの長さと日付とを関連付けるため? 036 * ヘッ????(日付け?を?力します?スライドバーと日付間隔?、zoom 属?によって? 037 * CSSファイルのフォントサイズと、JavaScript の?配?に依存して?す? 038 * また?こ?ヘッ??では、日付?休日??を?カレン?ーブルを参照することで取得して?す? 039 * calDB 属?への??、CalendarFactory で生?されるテーブル?CalendarDataの実?ラス) 040 * を指定します? 041 * 042 * @og.formSample 043 * ●形式?lt;og:ganttHeader startDate="…" endDate="…" zoom="[…]" /> 044 * ●body?な? 045 * 046 * ●Tag定義?? 047 * <og:stackHeader 048 * startDate 【TAG】表示開始日付けを設定しま?yyyyMMdd また?、yyyyMMddHHmm 形? 049 * endDate 【TAG】表示?日を設定しま?yyyyMMdd また?、yyyyMMddHHmm 形? 050 * zoom 【TAG】ズー?設定しま?初期値:DAY) 051 * calDB 【TAG】DB検索する??を指定しま? 052 * arg1 【TAG】D?検索する場合?第??キーを指定しま? 053 * arg2 【TAG】D?検索する場合?第??キーを指定しま? 054 * arg3 【TAG】D?検索する場合?第??キーを指定しま? 055 * arg4 【TAG】D?検索する場合?第??キーを指定しま? 056 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false) 057 * /> 058 * 059 * ●使用? 060 * 参??jsp/GANTT06 フォル? 061 * 062 * <og:ganttHeader 063 * startDate = "{@VIEW_DATE}" 064 * endDate = "{@DYMAX}" 065 * zoom = "{@VIEW_ZOOM}" 066 * calDB = "GE13" 067 * arg1 = "{@CDJGS}" 068 * arg2 = "" 069 * /og:ganttHeader> 070 * 071 * 072 * ●定義・解説 073 * stackedGanttView用のヘッ??作?タグです? 074 * 075 * 表示のタイ?zoom)は 076 * DAY?日単位)?WEEK??単位)?MONTH(月単位? 077 * です? 078 * 079 * 080 * ヘッ??部のカレン?、事業?レン?使用することが?来ます? 081 * 使用する場合?、事業?ー? arg1 )属?のセ?と、シス?パラメータ の 082 * USE_CALENDAR_DATABASE 属??true に設定しておく?があります? 083 * こ?フラグは、事業?レン?ーブル(GE13)を使用するために?です? 084 * 085 * zoom="WEEK"(週単? を使用の週数の計算?、年初???の?日間が含まれる週を?第??と数えます? 086 * 087 * @og.rev 5.5.7.0 (2012/10/01) 新規作? 088 * @og.rev 5.6.1.2 (2013/02/22) ???anttHeaderTagに統合? 089 * @og.group (?)画面部? 090 * 091 * @version 5.0 092 * @author Takahashi Masakazu 093 * @since JDK5.0, 094 */ 095 @Deprecated public class StackHeaderTag extends CommonTagSupport { 096 //* こ?プログラ??VERSION??を設定します? {@value} */ 097 private static final String VERSION = "5.6.1.2 (2013/02/22)" ; 098 099 private static final long serialVersionUID = 561220130222L ; 100 101 private String startDate = null; 102 private String endDate = null; 103 private String zoom = ViewStackTableParam.STACK_ZOOM_DAY; 104 private String daySpan = "0700-2000"; // ?日の時間?(HHmm-HHmm) 105 private String calDB = null; // DB検索する??のキー 106 private String arg1 = null; // DB検索の第?キー(事業?ードなど) 107 private String arg2 = null; // DB検索の第?キー(??コードなど) 108 private String arg3 = null; // DB検索の第?キー(事業?ードなど) 109 private String arg4 = null; // DB検索の第?キー(??コードなど) 110 private String calStr = null; // 出勤日・休日のフラグ 111 112 private ArrayList<String[]> calList = null; // 5.5.8.3 (2012/11/17) 開始?休日判定?次?? 113 114 //private static final boolean USE_MONTH_DATE = HybsSystem.sysBool( "USE_GANTTHEADER_MONTH_DATE" ); 115 116 117 private static final String BLUE_COLOR = "<span style=\"color:Blue;\">" ; 118 private static final String RED_COLOR = "<span style=\"color:Red;\">" ; 119 private static final String END_SPAN = "</span>" ; 120 private static final String BR = "<br/>" ; 121 122 /** 123 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします? 124 * 125 * @og.rev 5.5.8.3 (2012/11/17) ??ListをObjectとしてviewformに渡す? 126 * @og.rev 5.5.9.0 (2012/12/03) ObjectではなくArrayList渡? 127 * 128 * @return 後続???? 129 */ 130 @Override 131 public int doEndTag() { 132 debugPrint(); // 4.0.0 (2005/02/28) 133 if( startDate == null || endDate == null || 134 startDate.length() < 8 || endDate.length() < 8 ) { 135 String errMsg = "開始日と終?は、どちらも yyyyMMdd 形式で、??です?" 136 + " startDate=[" + startDate + "] endDate=[" + endDate + "]" ; 137 throw new HybsSystemException( errMsg ); 138 } 139 140 ViewFormTag viewform = (ViewFormTag)findAncestorWithClass( this,ViewFormTag.class ); 141 142 String header = ""; 143 if( ViewStackTableParam.STACK_ZOOM_MONTH.equals(zoom) ) { 144 header = makeZoom( "yy/ " ,"MM " , 1 ,true ) ; 145 } 146 else if( ViewStackTableParam.STACK_ZOOM_WEEK.equals(zoom) ) { // 月曜開始にはして?? 147 header = makeZoom( "ww'W' " ,"MM/dd " ,7 ,false ) ; 148 } 149 else{ 150 header = makeZoom( "MM/ " ,"dd(EE)" , 1 ,false ) ; 151 } 152 153 // 5.5.9.0 (2012/12/03) objectからArrayList 154 // 5.5.8.3 (2012/11/17) 155 // Map<String,Object> param = new HashMap<String,Object>(); 156 // param.put( ViewStackTableParam.STACK_CAL_KEY, (String[][])calList.toArray(new String[][]{}) ); 157 // viewform.setViewObject( param ); 158 viewform.setViewArrayList( calList ); 159 160 jspPrint( header ); 161 jspPrint(makeHeaderData()); 162 return(EVAL_PAGE); 163 } 164 165 /** 166 * タグリブオブジェクトをリリースします? 167 * 168 * キャ?ュされて再利用される?で、フィールド?初期設定を行います? 169 * 170 */ 171 @Override 172 protected void release2() { 173 super.release2(); 174 startDate = null; 175 endDate = null; 176 zoom = ViewStackTableParam.STACK_ZOOM_DAY; 177 calDB = null; // DB検索する??のキー 178 arg1 = null; // DB検索の第?キー(事業?ードなど) 179 arg2 = null; // DB検索の第?キー(??コードなど) 180 arg3 = null; // DB検索の第?キー 181 arg4 = null; // DB検索の第?キー 182 calStr = null; 183 daySpan = "0700-2000"; // 開始時刻(HHmm-HHmm) 184 calList = null; 185 } 186 187 /** 188 * 上段・下段のフォーマットと、加算日に応じた??ー??を作?します? 189 * 190 * 191 * @param upper 上段の表示フォーマッ? 192 * @param lower 下段の表示フォーマッ? 193 * @param add 表示日付けの?? 194 * @param useMonth 月日表示でなく?月表示のみにする 195 * 196 * @og.rev 5.5.8.3 (2012/11/17) ?積上げ対? 197 * 198 * @return ヘッ???? 199 */ 200 private String makeZoom( final String upper ,final String lower ,final int add, final boolean useMonth ) { 201 DateFormat format1 = new SimpleDateFormat( upper,Locale.JAPAN ); 202 DateFormat format2 = new SimpleDateFormat( lower,Locale.JAPAN ); 203 204 DateFormat formatCal = new SimpleDateFormat( "yyyyMMdd",Locale.JAPAN ); 205 206 // 5.5.8.3 (2012/11/17) スタ?用にカレン??????を保持 207 calList = new ArrayList<String[]>(); 208 String[] calArray = new String[3]; // 開始?休日判定?次?? 209 210 Calendar str = HybsSystem.getCalendar( startDate ); 211 Calendar end = HybsSystem.getCalendar( endDate ); 212 213 // 週単位?場合?特殊??? 214 // 年の第??を完?な??間?(?日?として、設定します? 215 if( ViewStackTableParam.STACK_ZOOM_WEEK.equals( zoom ) ) { 216 str.setMinimalDaysInFirstWeek( 7 ); 217 format1.setCalendar( str ); 218 format2.setCalendar( str ); 219 } 220 221 if( useMonth ){ 222 str.set(Calendar.DAY_OF_MONTH, 1); 223 startDate = new SimpleDateFormat( "yyyyMMdd",Locale.JAPAN ).format(str.getTime()); 224 } 225 226 227 StringBuilder buf1 = new StringBuilder( HybsSystem.BUFFER_SMALL ); 228 StringBuilder buf2 = new StringBuilder( HybsSystem.BUFFER_SMALL ); 229 StringBuilder bufcal = new StringBuilder( HybsSystem.BUFFER_SMALL ); 230 231 // カレン?B検索機? 232 CalendarData calData = CalendarFactory.getCalendarData( calDB,arg1,arg2,arg3,arg4 ); 233 234 boolean modifyFlag = false; 235 while( str.before( end ) ) { 236 Date dt = str.getTime(); 237 calArray[0] = formatCal.format( dt ); // 5.5.8.3 (2012/11/17) 238 239 // 本日は?色で示します? 240 if( calData.isContainedToday( str,add ) ) { 241 buf1.append( BLUE_COLOR ); 242 buf2.append( BLUE_COLOR ); 243 bufcal.append( "0" ); 244 calArray[1] = "0"; // 5.5.8.3 (2012/11/17) 245 modifyFlag = true; 246 } 247 248 // 休日判断を?事業?レン?使用 249 // modifyFlag が立って????を条件に追?ます? 250 if( !modifyFlag && add == 1 && calData.isHoliday( str ) && !useMonth) { 251 buf1.append( RED_COLOR ); 252 buf2.append( RED_COLOR ); 253 bufcal.append( "1" ); // 休日 254 calArray[1] = "1"; // 5.5.8.3 (2012/11/17) 255 modifyFlag = true; 256 } 257 258 buf1.append( format1.format( dt ) ); 259 buf2.append( format2.format( dt ) ); 260 261 if( modifyFlag ) { 262 buf1.append( END_SPAN ); 263 buf2.append( END_SPAN ); 264 modifyFlag = false; 265 } 266 else{ 267 bufcal.append( "0" ); 268 calArray[1] = "0"; // 5.5.8.3 (2012/11/17) 269 } 270 271 // カレン??を?める 272 if( useMonth ){ 273 str.add(Calendar.MONTH, add); 274 } 275 else{ 276 str.add(Calendar.DATE, add); 277 } 278 279 dt = str.getTime(); 280 calArray[2] = formatCal.format( dt ); // 5.5.8.3 (2012/11/17) 281 calList.add( calArray.clone() ); 282 } 283 calStr = bufcal.toString(); 284 285 return "<pre>" + buf1.toString() + BR + buf2.toString() + "</pre>"; 286 } 287 288 /** 289 * Headerの属???をdisplay:noneで作?します? 290 * ganttHeaderと?タグで、id,class共にganttHeaderDataと?名称で出力します? 291 * ??anttHeaderと同じ形式での出力? 292 * 293 * @og.rev 5.5.4.0 (2012/07/02) 新規作? 294 * 295 * @return ヘッ????の?? 296 */ 297 private String makeHeaderData() { 298 299 StringBuilder buf1 = new StringBuilder( HybsSystem.BUFFER_SMALL ); 300 301 buf1.append( "\n" ) 302 .append( "<ganttHeader style='display:none' id='ganttHeaderData' class='ganttHeaderData' " ) 303 .append( "startDate='" ).append( startDate ).append( "' " ) 304 .append( "endDate='" ).append( endDate ).append( "' " ) 305 .append( "zoom='" ).append( zoom ).append( "' " ) 306 .append( "calDB='" ).append( calStr ).append( "' " ) 307 .append( "daySpan='" ).append( daySpan ).append( "' " ) 308 .append( " />" ); 309 310 return buf1.toString(); 311 } 312 313 /** 314 * 【TAG】表示開始日付けを設定しま?yyyyMMdd また?、yyyyMMddHHmm 形?? 315 * 316 * @og.tag 317 * こ?値は、??ーの先?に表示する日付けを指定します? 318 * 通常の日付??ーの場合??yyyyMMdd 形式ですが、時間??ーの場合?? 319 * yyyyMMddHHmm 形式で?します? 320 * 321 * @param val 表示開始日?yyyyMMdd また?、yyyyMMddHHmm 形? 322 */ 323 public void setStartDate( final String val ) { 324 startDate = nval( getRequestParameter( val ),startDate ); 325 } 326 327 /** 328 * 【TAG】表示?日を設定しま?yyyyMMdd また?、yyyyMMddHHmm 形?? 329 * 330 * @og.tag 331 * 表示開始日から終?までを?zoom 変数の値に応じてヘッ??ラベル? 332 * 作?します? 333 * 通常の日付??ーの場合??yyyyMMdd 形式ですが、時間??ーの場合?? 334 * yyyyMMddHHmm 形式で?します? 335 * 336 * @param val 表示?日(yyyyMMdd また?、yyyyMMddHHmm 形? 337 */ 338 public void setEndDate( final String val ) { 339 endDate = nval( getRequestParameter( val ),endDate ); 340 } 341 342 /** 343 * 【TAG】ズー?設定しま?初期値:DAY)? 344 * 345 * @og.tag 346 * CSSファイルでの定義と、背景画像との関係で、作?します? 347 * ズー?数は、CSSファイル??JavaScript、PL/SQLと連動して、日付間? 348 * あたり?ピクセルを計算して、??ーを作?して?す? 349 * また?現在の標準的なクライアントでの換算になる為?解像度の?スプレイ? 350 * 特殊設定された環?は、表示間隔にずれが発生する可能性があります? 351 * DAY,WEEK,MONTHの?つの設定が可能です? 352 * 353 * 354 * @param val ズー?数(MONTH,WEEK,DAY) 355 */ 356 public void setZoom( final String val ) { 357 zoom = nval( getRequestParameter( val ),zoom ); 358 } 359 360 /** 361 * 【TAG】DB検索する??を指定します? 362 * 363 * @og.tag 364 * カレン?ータは、シス?パラメータ の CalendarQuery_**** で 365 * ?する?CalendarQuery クラスの QUERY ?、実際に取得します? 366 * 上記? **** 部?、ここで?するキーワードを設定して置きます? 367 * 通常は、データベ?スID (GE13, ZY01 など)を指定します? 368 * こ?キーワードに対する実?ラスを?先?シス?パラメータ の 369 * キーワード以下に記述しておきます? 370 * {@og.doc03Link calDB CalendarQuery_****} 371 * 372 * @param db DB検索する??を指? 373 */ 374 public void setCalDB( final String db ) { 375 calDB = nval( getRequestParameter( db ),calDB ); 376 } 377 378 /** 379 * 【TAG】D?検索する場合?第??キーを指定します? 380 * 381 * @og.tag 382 * 例えば、GE13, ZY01 では、事業?ー?CDJGS)を設定します? 383 * こ?値は、シス?パラメータ の CalendarQuery_**** で 384 * ?する?CalendarQuery クラスの QUERY ?依存します? 385 * ??タベ?ス定義の統?望?ところです? 386 * 387 * 388 * @param arg DB検索の第?キー(事業?ードなど) 389 */ 390 public void setArg1( final String arg ) { 391 arg1 = nval( getRequestParameter( arg ),arg1 ); 392 } 393 394 /** 395 * 【TAG】D?検索する場合?第??キーを指定します? 396 * 397 * @og.tag 398 * 例えば、TP652 では、事業部コー?CDJGS) と 物件工程コー?CDKTEI)の?つの 399 * キーで、カレン?取得します?(?年月で、行を決? 400 * 引数が??つまで対応して?? 401 * こ?値は、シス?パラメータ の CalendarQuery_**** で 402 * ?する?CalendarQuery クラスの QUERY ?依存します? 403 * ??タベ?ス定義の統?望?ところです? 404 * 405 * 406 * @param arg DB検索の第?キー(??コードなど) 407 */ 408 public void setArg2( final String arg ) { 409 arg2 = nval( getRequestParameter( arg ),arg2 ); 410 } 411 412 /** 413 * 【TAG】D?検索する場合?第??キーを指定します? 414 * 415 * @og.tag 416 * こ?値は、シス?パラメータ の CalendarQuery_**** で 417 * ?する?CalendarQuery クラスの QUERY ?依存します? 418 * ??タベ?ス定義の統?望?ところです? 419 * 420 * 421 * @param arg DB検索の第?キー 422 */ 423 public void setArg3( final String arg ) { 424 arg3 = nval( getRequestParameter( arg ),arg3 ); 425 } 426 427 /** 428 * 【TAG】D?検索する場合?第??キーを指定します? 429 * 430 * @og.tag 431 * こ?値は、シス?パラメータ の CalendarQuery_**** で 432 * ?する?CalendarQuery クラスの QUERY ?依存します? 433 * ??タベ?ス定義の統?望?ところです? 434 * 435 * 436 * @param arg DB検索の第?キー 437 */ 438 public void setArg4( final String arg ) { 439 arg4 = nval( getRequestParameter( arg ),arg4 ); 440 } 441 442 /** 443 * こ?オブジェクト???表現を返します? 444 * 基本???目?使用します? 445 * 446 * @return こ?クラスの??表現 447 */ 448 @Override 449 public String toString() { 450 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 451 .println( "VERSION" ,VERSION ) 452 .println( "startDate" ,startDate ) 453 .println( "endDate" ,endDate ) 454 .println( "zoom" ,zoom ) 455 .println( "calDB" ,calDB ) 456 .println( "arg1" ,arg1 ) 457 .println( "arg2" ,arg2 ) 458 .println( "arg3" ,arg3 ) 459 .println( "arg4" ,arg4 ) 460 .println( "Other..." ,getAttributes().getAttribute() ) 461 .fixForm().toString() ; 462 } 463 }