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.resource.CalendarData; 021 import org.opengion.hayabusa.resource.CalendarFactory; 022 import org.opengion.fukurou.util.StringUtil; 023 import org.opengion.fukurou.util.HybsDateUtil; 024 025 import static org.opengion.fukurou.util.StringUtil.nval ; 026 027 import java.util.Calendar; 028 import java.util.Date; 029 import java.util.List; 030 import java.util.ArrayList; 031 import java.util.Locale ; 032 import java.text.DateFormat; 033 import java.text.SimpleDateFormat; 034 035 /** 036 * ガントチャート用のヘッ????(日付け?を?力するタグです? 037 * 038 * スライドバー式ガントチャート?表示時に、スライドバーの長さと日付とを関連付けるため? 039 * ヘッ????(日付け?を?力します?スライドバーと日付間隔?、zoom 属?によって? 040 * CSSファイルのフォントサイズと、JavaScript の?配?に依存して?す? 041 * また?こ?ヘッ??では、日付?休日??を?カレン?ーブルを参照することで取得して?す? 042 * calDB 属?への??、CalendarFactory で生?されるテーブル?CalendarDataの実?ラス) 043 * を指定します? 044 * 045 * @og.formSample 046 * ●形式?lt;og:ganttHeader startDate="…" endDate="…" zoom="[…]" /> 047 * ●body?な? 048 * 049 * ●Tag定義?? 050 * <og:ganttHeader 051 * startDate 【TAG】表示開始日付けを設定しま?yyyyMMdd また?、yyyyMMddHHmm 形? 052 * endDate 【TAG】表示?日を設定しま?yyyyMMdd また?、yyyyMMddHHmm 形? 053 * zoom 【TAG】ズー?数(0??3,20??1,40??9)を設定しま?初期値:2) 054 * calDB 【TAG】DB検索する??を指定しま? 055 * arg1 【TAG】D?検索する場合?第??キーを指定しま? 056 * arg2 【TAG】D?検索する場合?第??キーを指定しま? 057 * arg3 【TAG】D?検索する場合?第??キーを指定しま? 058 * arg4 【TAG】D?検索する場合?第??キーを指定しま? 059 * daySpan 【TAG】1日の開始終?間を24時間形?HHmm-HHmm)で設定しま?初期値:0700-2000) 060 * breakTimes 【TAG】時間軸での休?時間の開?終?刻をカンマ区?で??しま?HHmm-HHmm形式?また?、yyyyMMddHHmm-HHmm形式?また?、yyyyMMddHHmm-yyyyMMddHHmm形? 061 * breakTimeStyle 【TAG】時間軸での休?時間の表示スタイルを設定しま?初期値:top:20px;background-color:yellow;filter:alpha(opacity=60);opacity:0.60;) 062 * baseTimes 【TAG】時間軸でのベ?ス時刻の開始時刻をカンマ区?で??しま?HHmm形式?また?、yyyyMMddHHmm形? 063 * baseTimeStyle 【TAG】時間軸でのベ?ス時刻の表示スタイルを設定しま?初期値:top:20px;background-color:transparent;border-left:2px dashed red;) 064 * skipHoliday 【TAG】時間ガントで休日を表示する/しな?設定しま?(初期値:USE_GANTTHEADER_SKIP_HOLIDAY[=true]) 065 * useMultiClm 【TAG】時間??ーの上段に日付を、下段の時間を表示しま?(初期値:USE_GANTTHEADER_MULTIPLE_COLUMN[=false]) 066 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false) 067 * /> 068 * 069 * ●使用? 070 * 参??jsp/GANTT06 フォル? 071 * 072 * <og:ganttHeader 073 * startDate = "{@VIEW_DATE}" 074 * endDate = "{@DYMAX}" 075 * zoom = "{@VIEW_ZOOM}" 076 * calDB = "GE13" 077 * arg1 = "{@CDJGS}" 078 * arg2 = "" 079 * /og:ganttHeader> 080 * 081 * <og:ganttHeader 082 * startDate = "{@VIEW_DATE}" 083 * endDate = "{@DYMAX}" 084 * daySpan = "0700-2000" HHmm-HHmm 形式で?日の時間?を指? 085 * breakTimes = "1200-1245,1645-1650,200508200700-1200;" 休?時間は、HHmm-HHmm形式?また?、yyyyMMddHHmm-HHmm形式?また?、yyyyMMddHHmm-yyyyMMddHHmm形式です? 086 * breakTimeStyle = "top:20px;background-color:yellow;" 休?時間のスタイルに追?ます? 087 * zoom = "20" 088 * /og:ganttHeader> 089 * 090 * ●定義・解説 091 * PL/SQL の VIEW_ZOOM メソ?を用?、実際の日付けから画面表示ピクセルへ 092 * 変換する割合を求めます?これと、jsp\GANTT\image の ganttBGx.gif(x は ZOOM変数) 093 * を対応付けて、日付けのヘッ??を求めます? 094 * jsp\custom\custom.css の th.zoomx(x は ZOOM変数) により、日付けヘッ???? 095 * 表示間隔を制御して?す?で、これらの関係を正確に把握しておいて下さ?? 096 * 日付けヘッ??は、イメージ変数を用??関係上?固定?日数を加算して? 097 * 求めます?(週:7日, 半月:15日, ?30日, 4半期:90日, 年:360日) 098 * 099 * <del>ヘッ??部のカレン?、事業?レン?使用することが?来ます? 100 * 使用する場合?、事業?ー? arg1 )属?のセ?と、シス?パラメータ の 101 * USE_CALENDAR_DATABASE 属??true に設定しておく?があります? 102 * こ?フラグは、事業?レン?ーブル(GE13)を使用するために?です?</del> 103 * ヘッ??部のカレン?、calDB で?された カレン?ーブルを使用出来ます? 104 * 使用する場合?、arg1(事業??????arg4(WC????? の属?を指定する事ができます? 105 * zoom="10"(週単? を使用の週数の計算?、年初???の?日間が含まれる週を?第??と数えます? 106 * 107 * zoom="20"(??では?日の時間?をdaySpanでHHmm-HHmm形式で?します? 108 * 開始時刻は、?部で?時間単位に変換されます??時?0????時?になります? 109 * 終?間?、その時間を?含みません? 110 * 開始終??、startDate、endDateで?しますが、yyyyMMdd また?、yyyyMMddHHmm 形式とします? 111 * calDB で?された カレン?ーブルを見て、休日の場合?、表示をスキ??します? 112 * 休?時間は、breakTimes で?します?(HHmm-HHmm形式?また?、yyyyMMddHHmm-HHmm? 113 * また?、yyyyMMddHHmm-yyyyMMddHHmm形? 114 * カンマ区?で??できます?日付指定がな??合?、毎日、日付指定がある場合?? 115 * そ?日のみ有効です?休?時間は、日をまたぐ事?可能です? 116 * breakTimeStyle として、休?時間の?に追?るスタイル属?を追?ます? 117 * 通常は、バ?カラーと上から?位置です?ヘッ??表示は?時間単位です? 118 * 初期値は?top:20px;background-color:yellow;filter:alpha(opacity=60);opacity:0.60;" です? 119 * 120 * ベ?ス時刻(baseTimes)は、HHmm形式?また?、yyyyMMddHHmm形式で?した?に、線を引きます? 121 * 例えば、検索した時刻を指定すると、現在時刻の?を示す線になります? 122 * また?業務?体?開始時刻??刻の?を表すことも可能です? 123 * baseTimeStyle は、このベ?ス時刻のスタイルを決めます?breakTimeStyle との違いは? 124 * 帯の?、このスタイルシートで?して?ことです? 125 * 初期値は、top:20px;background-color:transparent;border-left:2px dashed red; です? 126 * 127 * zoom="21"(??では、?間?ピクセル?20"(?の半?に変更します? 128 * 129 * useMultiClm パラメータを設定すると、ガント??ーにおいて?段?使用するかど?を? 130 * ?できます?時間ヘッ??の上段に日付を、下段の時間軸の(h)の削除を行います? 131 * 日付?、表示開始時刻の上と、それ??時間ごとに表示します? 132 * 初期値は、シス?リソースの USE_GANTTHEADER_MULTIPLE_COLUMN で?します? 133 * 134 * シス?リソースに USE_GANTTHEADER_MONTH_DATE パラメータを設定すると? 135 * ガント??ーにおいて?0日?0日?80日のヘッ??表示で、日付まで 136 * 表示するか?月?み表示するかを?します? 137 * ガント??ーの繰返し表示でバックグラウンドイメージは固定日なので、?表示? 138 * 30日単位で表示して?すが、?頭日付が 1日でな?め?判りにくいと苦?ありました? 139 * そこで?0日?0日?80日のヘッ??表示時に、日付を表示しな??するフラグです? 140 * 月表示は、その月が 20日以降?場合?翌月を表示します? 141 * 初期値は、互換性の為、false です? 142 * 143 * zoom 40(DAY),41(WEEK),42(MONTH) は、積み上げガント用のヘッ??処?行います? 144 * 積み上げガント?、固定日処?はなく?月単位に?します? 145 * 146 * @og.rev 3.5.4.8 (2004/02/23) 新規作? 147 * @og.group 画面部? 148 * 149 * @version 4.0 150 * @author Kazuhiko Hasegawa 151 * @since JDK5.0, 152 */ 153 public class GanttHeaderTag extends CommonTagSupport { 154 //* こ?プログラ??VERSION??を設定します? {@value} */ 155 private static final String VERSION = "4.0.0.0 (2005/08/31)" ; 156 157 private static final long serialVersionUID = 4000 ; // 4.0.0 (2005/01/31) 158 159 // 5.6.2.3 (2013/03/22) 日付をセンターに表示させる?合?両端スペ?スの?タ 160 private static final String SPACE = " " ; // 日?31日?より多いスペ?ス 161 162 // 5.6.5.0 (2013/06/07) 曜日??タを?列で持っておきます? 163 private static final String[] DAY_OF_WEEK_ja = new String[] { " ","日 ","?","火 ","水 ","木 ","?","?" }; 164 private static final String[] DAY_OF_WEEK_en = new String[] { " ","Su" ,"Mo" ,"Tu" ,"We" ,"Th" ,"Fr" ,"Sa" }; 165 166 private String startDate = null; 167 private String endDate = null; 168 private String daySpan = "0700-2000"; // ?日の時間?(HHmm-HHmm) 3.8.0.5 (2005/08/26) 169 private int zoom = 2; 170 private String breakTimes = null; // 休?時間は、HHmm-HHmm形式?また?、yyyyMMddHHmm-HHmm、また?、yyyyMMddHHmm-HHmmyyyyMMdd形式です? 171 private String breakTimeStyle = "top:20px;background-color:yellow;filter:alpha(opacity=60);opacity:0.60;" ; // 5.6.4.3 (2013/05/24) 初期値変更 172 private String calDB = null; // 3.6.0.0 (2004/09/17) DB検索する??のキー 173 private String arg1 = null; // 3.6.0.0 (2004/09/17) DB検索の第?キー(事業?ードなど) 174 private String arg2 = null; // 3.6.0.0 (2004/09/17) DB検索の第?キー(??コードなど) 175 private String arg3 = null; // 3.6.0.0 (2004/09/17) DB検索の第?キー(事業?ードなど) 176 private String arg4 = null; // 3.6.0.0 (2004/09/17) DB検索の第?キー(??コードなど) 177 private boolean skipHoliday = HybsSystem.sysBool( "USE_GANTTHEADER_SKIP_HOLIDAY" ); // 4.0.0.0 (2007/09/07) 休日をスキ??するかど? 178 private String calStr = null; // 5.5.4.0 (2012/07/02) 出勤日・休日のフラグ 179 180 private static final int TIME_PIXEL = 48; // 3.8.1.1 (2005/11/21) 時間ヘッ??時??時間?ピクセル数 181 // private static final boolean USE_MULTI_CLM = HybsSystem.sysBool( "USE_GANTTHEADER_MULTIPLE_COLUMN" ); // 3.8.1.4 (2006/03/13) 182 private boolean useMultiClm = HybsSystem.sysBool( "USE_GANTTHEADER_MULTIPLE_COLUMN" ); // 5.6.1.2 (2013/02/22) 183 184 private static final boolean USE_MONTH_DATE = HybsSystem.sysBool( "USE_GANTTHEADER_MONTH_DATE" ); // 3.8.5.2 (2006/06/09) 185 private static final int MONTH_DATE_LIMITER = 20; // 当月 20 日以降?、翌月扱?なる? 186 187 private static final String BLUE_COLOR = "<span style=\"color:Blue;\">" ; // 5.6.2.3 (2013/03/22) ? 188 private static final String RED_COLOR = "<span style=\"color:Red;\">" ; // 5.6.2.3 (2013/03/22) ? 189 private static final String TODAY_CLASS = "gntToday" ; // 5.6.2.3 (2013/03/22) 当日を示すクラス? 190 private static final String HOLIDAY_CLASS = "gntHoliday" ; // 5.6.2.3 (2013/03/22) 休日を示すクラス? 191 private static final String END_SPAN = "</span>" ; 192 private static final String BR = "<br/>" ; 193 194 private static final String ODD_CLASS = "<span class=\"oddColor\">" ; // 5.6.2.3 (2013/03/22) ?月?色設? 195 private static final String EVEN_CLASS = "<span class=\"evenColor\">" ; // 5.6.2.3 (2013/03/22) 偶数月?色設? 196 197 private String baseTimes = null; // 5.6.1.2 (2013/02/22) ベ?ス時刻は、HHmm形式?また?、yyyyMMddHHmm形式です? 198 private String baseTimeStyle = "top:20px;background-color:transparent;border-left:2px dashed red;" ; // 5.6.1.2 (2013/02/22) ベ?ス時刻を赤線表示します? 199 200 private static final boolean useMdheader = HybsSystem.sysBool( "USE_MDHEADER_ONTIME" ); // 5.7.0.0 (2013/11/07) 201 202 /** 203 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします? 204 * 205 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ? 206 * @og.rev 3.6.0.0 (2004/09/17) zoom 3 の時?計算?を変更 207 * @og.rev 3.7.1.0 (2005/04/15) zoom 10 の追? 208 * @og.rev 3.8.1.6 (2006/04/25) zoom 21 の追? 209 * @og.rev 3.8.5.2 (2006/06/09) makeZoom メソ?の USE_MONTH_DATE パラメータ追? 210 * @og.rev 3.8.9.2 (2007/07/28) makeZoomTime メソ?の 時間間隔パラメータ追? 211 * @og.rev 5.5.4.0 (2012/07/02) ヘッ??属???の出力追? 212 * @og.rev 5.6.3.2 (2013/04/12) 曜日を?力する?合?段?では、?角スペ?スを使?firefox対? 213 * 214 * @return 後続???? 215 */ 216 @Override 217 public int doEndTag() { 218 debugPrint(); // 4.0.0 (2005/02/28) 219 if( startDate == null || endDate == null || 220 startDate.length() < 8 || endDate.length() < 8 ) { 221 String errMsg = "開始日と終?は、どちらも yyyyMMdd 形式で、??です?" 222 + " startDate=[" + startDate + "] endDate=[" + endDate + "]" ; 223 throw new HybsSystemException( errMsg ); 224 } 225 226 // 月単位?処?30,60,90などの固定日を使用して?のは、ガントバーの長さが 227 // 日単位?固定長なので?期間のガントを使用すると後ろの方でずれてくるため? 228 String header = ""; 229 String md = (USE_MONTH_DATE) ? "MM " : "MM/dd"; 230 switch( zoom ) { 231 case 0: header = makeZoom( "MM/ " ,"dd(EE)" , 1 ,false ) ; break; 232 case 1: header = makeZoom( "MM/" ,"dd " , 1 ,false ) ; break; 233 case 2: header = makeZoom2( 1 ) ; break; 234 case 3: header = makeZoom( "yyyy/ " ,"MM/dd " , 7 ,false ) ; break; 235 case 4: header = makeZoom( "yyyy/ " ,"MM/dd " , 14 ,false ) ; break; 236 case 5: header = makeZoom( "yyyy/ " ,md + " " , 30 ,USE_MONTH_DATE ) ; break; 237 case 6: header = makeZoom( "yyyy/ " ,md + " " , 30 ,USE_MONTH_DATE ) ; break; 238 case 7: header = makeZoom( "yyyy/ " ,md + " " , 90 ,USE_MONTH_DATE ) ; break; 239 case 8: header = makeZoom( "yyyy/ " ,md + " " ,180 ,USE_MONTH_DATE ) ; break; 240 case 9: header = makeZoom( "yyyy/ " ,md + " " ,180 ,USE_MONTH_DATE ) ; break; 241 case 10: header = makeZoom( "ww'W'" ,"'<span title=\"'MM/dd'\">'dd '</span>'" ,7 ,false ) ; break; 242 // case 11: break; // 他物件予?み 243 // case 12: break; // 他物件予?み 244 case 13: header = makeZoom3( "yyyy/MM" , "dd" ,"EE" , 1 ) ; break; // 5.6.2.3 (2013/03/22) 月?曜日表示 245 case 20: header = makeZoomTime( TIME_PIXEL , 1,true ) ; break; // 3.8.1.1 (2005/11/21) 246 case 21: header = makeZoomTime( TIME_PIXEL/2, 1,false ) ; break; // 3.8.1.6 (2006/04/25) 247 case 22: header = makeZoomTime( TIME_PIXEL , 2,true ) ; break; // 3.8.9.2 (2007/07/28) 248 case 23: header = makeZoomTime( TIME_PIXEL/2, 2,false ) ; break; // 3.8.9.2 (2007/07/28) 249 case 24: header = makeZoomTime( TIME_PIXEL , 4,true ) ; break; // 3.8.9.2 (2007/07/28) 250 case 25: header = makeZoomTime( TIME_PIXEL/2, 4,false ) ; break; // 3.8.9.2 (2007/07/28) 251 case 26: header = makeZoomTime( TIME_PIXEL , 6,true ) ; break; // 3.8.9.2 (2007/07/28) 252 case 27: header = makeZoomTime( TIME_PIXEL/2, 6,false ) ; break; // 3.8.9.2 (2007/07/28) 253 case 28: header = makeZoomTime( TIME_PIXEL , 8,true ) ; break; // 3.8.9.2 (2007/07/28) 254 case 29: header = makeZoomTime( TIME_PIXEL/2, 8,false ) ; break; // 3.8.9.2 (2007/07/28) 255 case 30: header = makeZoomTime( TIME_PIXEL , 12,true ) ; break; // 3.8.9.2 (2007/07/28) 256 case 31: header = makeZoomTime( TIME_PIXEL/2, 12,false ) ; break; // 3.8.9.2 (2007/07/28) 257 // 5.6.1.2 (2013/02/22) 積み上げガン? 258 case 40: header = makeZoomStack( "MM/ " ,"dd(EE)" , 1,false ) ; break; // 5.6.1.2 (2013/02/22) 259 case 41: header = makeZoomStack( "ww'W' " ,"MM/dd " , 7,false ) ; break; // 5.6.1.2 (2013/02/22) 260 case 42: header = makeZoomStack( "yyyy/ " ,"MM " , 1,true ) ; break; // 5.6.1.2 (2013/02/22) 261 // case 43: break; // 日単位??ー予?み 262 // ?? 263 // case 49: break; // 日単位??ー予?み 264 default: break; 265 } 266 267 jspPrint( header ); 268 jspPrint(makeHeaderData()); // 5.5.4.0 (2012/07/02) 269 return(EVAL_PAGE); 270 } 271 272 /** 273 * タグリブオブジェクトをリリースします? 274 * 275 * キャ?ュされて再利用される?で、フィールド?初期設定を行います? 276 * 277 * @og.rev 3.6.0.0 (2004/09/17) 事業?ー?cdjgs 属?を追? 278 * @og.rev 3.8.0.2 (2005/07/11) startTime,timePeriod,breakTimes 属?を追? 279 * @og.rev 3.8.0.5 (2005/08/26) daySpan,breakTimes,breakTimeStyle 属?を追? 280 * @og.rev 5.5.4.0 (2012/07/02) calStr追? 281 * @og.rev 5.6.1.2 (2013/02/22) baseTimes、baseTimeStyle追?useMultiClm追? 282 */ 283 @Override 284 protected void release2() { 285 super.release2(); 286 startDate = null; 287 endDate = null; 288 daySpan = "0700-2000"; // 開始時刻(HHmm-HHmm) 3.8.0.5 (2005/08/26) 289 zoom = 2; 290 calDB = null; // 3.6.0.0 (2004/09/17) DB検索する??のキー 291 arg1 = null; // 3.6.0.0 (2004/09/17) DB検索の第?キー(事業?ードなど) 292 arg2 = null; // 3.6.0.0 (2004/09/17) DB検索の第?キー(??コードなど) 293 arg3 = null; // 3.6.0.0 (2004/09/17) DB検索の第?キー 294 arg4 = null; // 3.6.0.0 (2004/09/17) DB検索の第?キー 295 breakTimes = null; // 休?時間は、HHmm-HHmm形式?また?、yyyyMMddHHmm-HHmm、また?、yyyyMMddHHmm-HHmmyyyyMMdd形式です? 296 breakTimeStyle = "top:20px;background-color:yellow;filter:alpha(opacity=60);opacity:0.60;" ; 297 skipHoliday = HybsSystem.sysBool( "USE_GANTTHEADER_SKIP_HOLIDAY" ); // 4.0.0.0 (2007/09/10) 298 calStr = null; // 5.5.4.0 (2012/07/02) 299 baseTimes = null; // 5.6.1.2 (2013/02/22) ベ?ス時刻は、HHmm形式?また?、yyyyMMddHHmm形式です? 300 baseTimeStyle = "top:20px;background-color:transparent;border-left:2px dashed red;" ; // 5.6.1.2 (2013/02/22) ベ?ス時刻を赤線表示します? 301 useMultiClm = HybsSystem.sysBool( "USE_GANTTHEADER_MULTIPLE_COLUMN" ); // 5.6.1.2 (2013/02/22) 302 } 303 304 /** 305 * 上段・下段のフォーマットと、加算日に応じた??ー??を作?します? 306 * 307 * @og.rev 3.6.0.0 (2004/09/17) 休日判断を?事業?レン?使用 308 * @og.rev 3.7.1.0 (2005/04/15) zoom == 10 週単位?場合?特殊??追? 309 * @og.rev 3.7.1.1 (2005/05/23) 本日は?色で示します? 310 * @og.rev 3.8.5.2 (2006/06/09) makeZoom メソ?の USE_MONTH_DATE パラメータ追? 311 * @og.rev 5.5.4.0 (2012/07/02) カレン??フラグ対? 312 * @og.rev 5.6.2.3 (2013/03/22) 日付?終?は、?含??に変更 313 * @og.rev 5.6.5.0 (2013/06/07) 上段ヘッ???MM の場合?週単位で月を表示し?色バ?を使用します? 314 * 315 * @param upper 上段の表示フォーマッ? 316 * @param lower 下段の表示フォーマッ? 317 * @param add 表示日付けの?? 318 * @param useMonth 月日表示でなく?月表示のみにする?20日以降を翌月表示する? 319 * 320 * @return ヘッ???? 321 */ 322 private String makeZoom( final String upper ,final String lower ,final int add, final boolean useMonth ) { 323 boolean colBar = upper.startsWith( "MM" ); // 5.6.5.0 (2013/06/07) 色バ?使用 true 324 325 DateFormat format1 = new SimpleDateFormat( upper,Locale.JAPAN ); 326 DateFormat format2 = new SimpleDateFormat( lower,Locale.JAPAN ); 327 328 Calendar str = HybsSystem.getCalendar( startDate ); 329 Calendar end = HybsSystem.getCalendar( endDate ); 330 331 // zoom == 10 週単位?場合?特殊??? 332 // 年の第??を完?な??間?(?日?として、設定します? 333 if( zoom == 10 ) { 334 str.setMinimalDaysInFirstWeek( 7 ); 335 format1.setCalendar( str ); 336 format2.setCalendar( str ); 337 } 338 339 StringBuilder buf1 = new StringBuilder( HybsSystem.BUFFER_SMALL ); 340 StringBuilder buf2 = new StringBuilder( HybsSystem.BUFFER_SMALL ); 341 StringBuilder bufcal = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 5.5.4.0 (2012/07/02) 休日判定用 342 343 // 5.6.5.0 (2013/06/07) ??の作?方法?統??pre タグを最初に設定しておく? 344 buf1.append( "<pre>" ); 345 346 // 3.6.0.0 (2004/09/17) カレン?B検索機?を追? 347 CalendarData calData = CalendarFactory.getCalendarData( calDB,arg1,arg2,arg3,arg4 ); 348 349 boolean modifyFlag = false; 350 // 5.6.2.3 (2013/03/22) 日付?終?は、?含??に変更 351 // while( str.before( end ) ) { 352 int cnt = 0; // 5.6.5.0 (2013/06/07) 色バ?対? 353 if( colBar ) { buf1.append( EVEN_CLASS ); } // 5.6.5.0 (2013/06/07) 色バ?対? 354 boolean isFirst = true; // 5.6.5.0 (2013/06/07) 色バ?対応で、最初だけ?月を表示する? 355 356 while( str.compareTo( end ) <= 0 ) { 357 boolean monday = ( Calendar.MONDAY == str.get( Calendar.DAY_OF_WEEK ) ); // 5.6.5.0 (2013/06/07) 色バ?対? 358 if( colBar && monday ) { 359 // 5.6.5.0 (2013/06/07) 色バ?対? 360 buf1.append( END_SPAN ); 361 cnt++; 362 isFirst = true; 363 364 if( cnt % 2 == 0 ) { buf1.append( EVEN_CLASS ); } // 偶数の色 365 else { buf1.append( ODD_CLASS ); } // ?の色 366 } 367 368 Date dt = str.getTime(); 369 // 3.8.5.2 (2006/06/09) useMonth ?ラク?により 月表示のみに変更します? 370 // MONTH_DATE_LIMITER で??日以降?、翌月扱?なる? 371 if( useMonth && str.get( Calendar.DATE ) >= MONTH_DATE_LIMITER ) { 372 Calendar calPlus = (Calendar)str.clone(); 373 calPlus.set( Calendar.DATE , 1 ); // ?日にセ?します? 374 calPlus.add( Calendar.MONTH , 1 ); // 月を?ヶ月?ラスします? 375 dt = calPlus.getTime(); 376 } 377 378 // 3.7.1.1 (2005/05/31) 本日は?色で示します? 379 if( calData.isContainedToday( str,add ) ) { 380 // buf1.append( BLUE_COLOR ); 381 buf2.append( BLUE_COLOR ); 382 bufcal.append( "0" ); // 5.5.4.0 (2012/07/02) 383 modifyFlag = true; 384 } 385 386 // 3.6.0.0 (2004/09/17) 休日判断を?事業?レン?使用 387 // modifyFlag が立って????を条件に追?ます? 388 if( !modifyFlag && add == 1 && calData.isHoliday( str ) ) { 389 // buf1.append( RED_COLOR ); 390 buf2.append( RED_COLOR ); 391 bufcal.append( "1" ); // 5.5.4.0 (2012/07/02) 休日 392 modifyFlag = true; 393 } 394 395 // 5.6.5.0 (2013/06/07) 色バ?対応?色バ?で、かつ、?頭でなければ、スペ?スを?? 396 if( colBar && !isFirst ) { 397 buf1.append( SPACE.substring( 0,upper.length() ) ); 398 } 399 else { 400 buf1.append( format1.format( dt ) ); 401 isFirst = false; 402 } 403 buf2.append( format2.format( dt ) ); 404 405 if( modifyFlag ) { 406 buf1.append( END_SPAN ); 407 buf2.append( END_SPAN ); 408 modifyFlag = false; 409 } 410 else{ 411 bufcal.append( "0" ); // 5.5.4.0 (2012/07/02) 412 } 413 str.add(Calendar.DATE, add); 414 } 415 calStr = bufcal.toString(); // 5.5.4.0 (2012/07/02) 416 417 if( colBar ) { buf1.append( END_SPAN ); } // 5.6.5.0 (2013/06/07) 色バ?対? 418 419 // return "<pre>" + buf1.toString() + BR + buf2.toString() + "</pre>"; 420 return buf1.append( BR ).append( buf2 ).append( "</pre>" ).toString(); // 5.6.5.0 (2013/06/07) ??の作?方法?統? 421 } 422 423 /** 424 * zoom = 2 の場合?ヘッ??を?力します? 425 * こ?ヘッ???特別なので、別メソ?を作?します? 426 * 427 * <del>[0000 ???]<br/>[1234 ???] と?ヘッ??を?力します?</del> 428 * type=1 の場? 429 * [ 0 ???]<br/>[ 2 ???]<br/>[ / ???]<br/>[0000 ???]<br/>[1234 ???] 430 * 431 * と?月情報を毎?月曜日にヘッ??に出力します?(上記??月?日?2月?日まで) 432 * 433 * @og.rev 3.6.0.0 (2004/09/17) 休日判断を?事業?レン?使用 434 * @og.rev 3.6.0.7 (2004/11/06) 月???も?力します? 435 * @og.rev 3.7.1.1 (2005/05/23) 本日は?色で示します? 436 * @og.rev 5.5.4.0 (2012/07/02) カレン??フラグ対? 437 * @og.rev 5.6.2.3 (2013/03/22) 日付?終?は、?含??に変更 438 * @og.rev 5.6.5.0 (2013/06/07) 日付??段?を?し?色バ?に変更します? 439 * 440 * @param add 表示日付けの?? 441 * 442 * @return ヘッ???? 443 */ 444 private String makeZoom2( final int add ) { 445 Calendar str = HybsSystem.getCalendar( startDate ); 446 Calendar end = HybsSystem.getCalendar( endDate ); 447 448 StringBuilder buf1 = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 月??桁目 449 // StringBuilder buf2 = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 月??桁目 5.6.5.0 (2013/06/07) 色バ?に変更 450 // StringBuilder buf3 = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 区?記号 5.6.5.0 (2013/06/07) 色バ?に変更 451 StringBuilder buf4 = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 日の?桁目 452 StringBuilder buf5 = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 日の?桁目 453 StringBuilder bufcal = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 5.5.4.0 (2012/07/02) 休日判定用 454 455 // 5.6.5.0 (2013/06/07) ??の作?方法?統??pre タグを最初に設定しておく? 456 buf1.append( "<pre>" ); 457 458 // 3.6.0.0 (2004/09/17) カレン?B検索機?を追? 459 CalendarData calData = CalendarFactory.getCalendarData( calDB,arg1,arg2,arg3,arg4 ); 460 461 boolean modifyFlag = false; 462 463 // 5.6.2.3 (2013/03/22) 日付?終?は、?含??に変更 464 // while( str.before( end ) ) { 465 int cnt = 0; // 5.6.5.0 (2013/06/07) 色バ?対? 466 int hCnt = 0; // 月???文字? 467 buf1.append( EVEN_CLASS ); // 5.6.5.0 (2013/06/07) 色バ?対? 468 while( str.compareTo( end ) <= 0 ) { 469 int mt = str.get( Calendar.MONTH ) + 1; 470 int dt = str.get( Calendar.DATE ); 471 boolean monday = ( Calendar.MONDAY == str.get( Calendar.DAY_OF_WEEK ) ); 472 473 // 3.7.1.1 (2005/05/31) 本日は?色で示します? 474 if( calData.isContainedToday( str,add ) ) { 475 // buf1.append( BLUE_COLOR ); 476 // buf2.append( BLUE_COLOR ); 477 // buf3.append( BLUE_COLOR ); 478 buf4.append( BLUE_COLOR ); 479 buf5.append( BLUE_COLOR ); 480 bufcal.append("0"); // 5.5.4.0 (2012/07/02) 481 modifyFlag = true; 482 } 483 484 // 3.6.0.0 (2004/09/17) 休日判断を?事業?レン?使用 485 // modifyFlag が立って????を条件に追?ます? 486 if( !modifyFlag && add == 1 && calData.isHoliday( str ) ) { 487 // buf1.append( RED_COLOR ); 488 // buf2.append( RED_COLOR ); 489 // buf3.append( RED_COLOR ); 490 buf4.append( RED_COLOR ); 491 buf5.append( RED_COLOR ); 492 bufcal.append("1"); // 5.5.4.0 (2012/07/02) 493 modifyFlag = true; 494 } 495 496 if( monday ) { 497 // 5.6.5.0 (2013/06/07) 色バ?対? 498 buf1.append( END_SPAN ); 499 cnt++; 500 hCnt = 0; 501 502 if( cnt % 2 == 0 ) { buf1.append( EVEN_CLASS ); } // 偶数の色 503 else { buf1.append( ODD_CLASS ); } // ?の色 504 505 // buf1.append( (mt/10) ); 506 // buf2.append( mt%10 ); 507 // buf3.append( "/" ); 508 } 509 // else { 510 // buf1.append( " " ); 511 // buf2.append( " " ); 512 // buf3.append( " " ); 513 // } 514 515 // 5.6.5.0 (2013/06/07) 色バ?対? 516 switch( hCnt++ ) { 517 case 0 : buf1.append( (mt/10) ); break; // 月?1?目 518 case 1 : buf1.append( mt%10 ); break; // 月?2?目 519 case 2 : buf1.append( "/" ); break; // 月?区??? 520 default : buf1.append( " " ); break; // 空? 521 } 522 523 buf4.append( (dt/10) ); 524 buf5.append( dt%10 ); 525 526 if( modifyFlag ) { 527 // buf1.append( END_SPAN ); 528 // buf2.append( END_SPAN ); 529 // buf3.append( END_SPAN ); 530 buf4.append( END_SPAN ); 531 buf5.append( END_SPAN ); 532 modifyFlag = false; 533 } 534 else{ 535 bufcal.append("0"); // 5.5.4.0 (2012/07/02) 536 } 537 str.add(Calendar.DATE, add); 538 } 539 540 // buf1.append( BR ).append( buf2 ); 541 // buf1.append( BR ).append( buf3 ); 542 buf1.append( END_SPAN ); // 5.6.5.0 (2013/06/07) 色バ?対? 543 // buf1.append( BR ).append( buf4 ); 544 // buf1.append( BR ).append( buf5 ); 545 calStr = bufcal.toString(); // 5.5.4.0 (2012/07/02) 546 547 // return "<pre>" + buf1.toString() + "</pre>"; 548 return buf1.append( BR ).append( buf4 ).append( BR ).append( buf5 ).append( "</pre>" ).toString(); // 5.6.5.0 (2013/06/07) ??の作?方法?統? 549 } 550 551 /** 552 * ヘッ??、上段・下段のフォーマットと、加算日に応じた??ー??を作?します? 553 * これは特殊で、??ーに、年/月?上段は日、下段は、曜日を想定して?す? 554 * ヘッ??部??、月として横持で表示させます? 555 * 556 * @og.rev 5.6.2.3 (2013/03/22) 新規追? 557 * 558 * @param header 年月?ヘッ??部? 559 * @param upper 上段の表示フォーマッ?日) 560 * @param lower 下段の表示フォーマッ?曜日) 561 * @param add 表示日付けの?? 562 * 563 * @return ヘッ???? 564 */ 565 private String makeZoom3( final String header ,final String upper ,final String lower ,final int add ) { 566 DateFormat formatH = new SimpleDateFormat( header,Locale.JAPAN ); 567 DateFormat format1 = new SimpleDateFormat( upper,Locale.JAPAN ); 568 DateFormat format2 = new SimpleDateFormat( lower,Locale.JAPAN ); 569 570 StringBuilder bufH = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 年月?ヘッ??部?11Byte目から) 571 StringBuilder buf1 = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 日(?? 572 StringBuilder buf2 = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 曜日 573 StringBuilder bufcal = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 5.5.4.0 (2012/07/02) 休日判定用 574 575 // 5.6.5.0 (2013/06/07) ??の作?方法?統??pre タグを最初に設定しておく? 576 bufH.append( "<pre>" ); 577 578 Calendar str = HybsSystem.getCalendar( startDate ); 579 Calendar end = HybsSystem.getCalendar( endDate ); 580 581 // 3.6.0.0 (2004/09/17) カレン?B検索機?を追? 582 CalendarData calData = CalendarFactory.getCalendarData( calDB,arg1,arg2,arg3,arg4 ); 583 584 int dtsu = lower.length(); // 日付?下段)の?数 585 int dayCount = 0; // ヘッ??部の?が入るかど?の基? 586 int mtCnt = str.get( Calendar.MONTH ) + 1; // 月をチェ?(色設定用) 初期値は?始時の? 587 String tmpH = null; // ヘッ??部の?ポラリ?? 588 // 5.6.2.3 (2013/03/22) 日付?終?は、?含??に変更 589 // while( str.before( end ) ) { 590 while( str.compareTo( end ) <= 0 ) { 591 Date dt = str.getTime(); 592 593 if( tmpH == null ) { tmpH = formatH.format( dt ); } // 初期値。最初にセ? 594 595 // ここから??の処??、月表示ヘッ??の作? 596 int day = str.get( Calendar.DATE ); // ヘッ??部の制御用に、日付が?? 597 if( day == 1 && dayCount > 0 ) { 598 makeHeaderYM( bufH , dayCount*dtsu , mtCnt++ , tmpH ); // こ?ヘッ??出力?、?と月前の?? 599 dayCount = 0 ; 600 tmpH = formatH.format( dt ); 601 } 602 dayCount ++ ; // 603 604 // 5.6.2.3 (2013/03/22) 休日、本日の処? class属?化で、合成可能とします? 605 String span = null; 606 // 3.6.0.0 (2004/09/17) 休日判断を?事業?レン?使用 607 if( calData.isHoliday( str ) ) { 608 span = HOLIDAY_CLASS ; 609 bufcal.append( "1" ); // 5.5.4.0 (2012/07/02) 休日 610 } 611 else { 612 bufcal.append( "0" ); // 5.5.4.0 (2012/07/02) 613 } 614 615 if( calData.isContainedToday( str,add ) ) { // 本日かど? 616 span = (span == null) ? TODAY_CLASS : span + " " + TODAY_CLASS ; 617 } 618 619 if( span != null ) { 620 buf1.append( "<span class=\"" ).append( span ).append( "\">" ); 621 buf2.append( "<span class=\"" ).append( span ).append( "\">" ); 622 } 623 624 buf1.append( format1.format( dt ) ); 625 buf2.append( format2.format( dt ) ); 626 627 if( span != null ) { 628 buf1.append( END_SPAN ); 629 buf2.append( END_SPAN ); 630 } 631 str.add(Calendar.DATE, add); 632 } 633 634 // 処???に、??ーの出力??? 635 makeHeaderYM( bufH , dayCount*dtsu , mtCnt , tmpH ); 636 637 calStr = bufcal.toString(); // 5.5.4.0 (2012/07/02) 638 639 // return "<pre>" + bufH.toString() + BR + buf1.toString() + BR + buf2.toString() + "</pre>"; 640 return bufH.append( BR ).append( buf1 ).append( BR ).append( buf2 ).append( "</pre>" ).toString(); // 5.6.5.0 (2013/06/07) ??の作?方法?統? 641 } 642 643 /** 644 * 時間軸での月??ー??タを作?します? 645 * 646 * 月??ーは?日?月末までの日付?上段に、年?yyyy/MM)表示のヘッ??を作?します? 647 * ヘッ??は、できる?センター表示になるよ?、前後にスペ?スを?れて調整します? 648 * ヘッ??表示領域が少な??合?スペ?スのみになります? 649 * ヘッ??は月が偶数月か?月かで、背景色を?り替えることで、判りやすくします? 650 * 651 * @og.rev 5.6.2.3 (2013/03/22) 新規追? 652 * 653 * @param bufH ヘッ??を追記して? StringBuilder 654 * @param dayCnt 日付???数カウント?日数?桁数(DTSU)。?常、横持な?2?となる? 655 * @param mtCnt 月数に基づ?色の設定用の数字?月?連番にします? 656 * @param ymStr ヘッ??に表示する??。年?yyyy/MM) 657 * 658 * @return ヘッ??が追記された StringBuilder 659 */ 660 private StringBuilder makeHeaderYM( final StringBuilder bufH , final int dayCnt , final int mtCnt , final String ymStr ) { 661 // ?月と偶数月で色を変える??? % 3 で判定すれ??色で廻せる? 662 if( mtCnt % 2 == 0 ) { bufH.append( EVEN_CLASS ); } // 偶数月?色 663 else { bufH.append( ODD_CLASS ); } // ?月?色 664 665 // 表示すべき文字?が?日付???りも小さ??合?スペ?スのみとする? 666 if( dayCnt < ymStr.length() ) { 667 bufH.append( SPACE.substring( 0,dayCnt ) ); 668 } 669 // 大きい場合?、前後にスペ?スを?れて、センター配置 670 else { 671 int lcnt = (dayCnt-ymStr.length())/2 ; // 左の個数。端数が?り捨てられる? 672 int rcnt = dayCnt-lcnt-ymStr.length(); // 右の個数。端数を?慮し?引き算?みで求める? 673 674 bufH.append( SPACE.substring( 0,lcnt ) ); 675 bufH.append( ymStr ); 676 bufH.append( SPACE.substring( 0,rcnt ) ); 677 } 678 679 bufH.append( END_SPAN ); 680 681 return bufH; 682 } 683 684 /** 685 * 時間軸でのヘッ??表示を行います? 686 * 687 * 時間軸の為、??ーの上下段??行いません? 688 * ヘッ??は?時間単位に表示します?また?休?時刻も求めて?す? 689 * 690 * @og.rev 3.8.0.5 (2005/08/26) 新規追? 691 * @og.rev 3.8.1.1 (2005/11/21) 日?itle,?class, 692 * @og.rev 3.8.1.4 (2006/03/13) 日付表示、時刻単?h)削除?段?USE_MULTI_CLM) 693 * @og.rev 3.8.1.6 (2006/04/25) 日?間?単位表示を止め??文字?(24ピクセル)化する? 694 * @og.rev 3.8.9.2 (2007/07/28) 時間間隔パラメータ追? 695 * @og.rev 4.0.0.0 (2007/09/03) 休日の場合でも表示されるよ?対?シス?リソースで?替? 696 * @og.rev 5.5.4.0 (2012/07/02) ガント??表示??計算を?上げするようにする。カレン??フラグ対応? 697 * @og.rev 5.6.1.2 (2013/02/22) ベ?ス時刻を管?? ym2int ? ?hm2int に変更?USE_MULTI_CLM ?useMultiClm 変更? 698 * @og.rev 5.6.4.3 (2013/05/24) ヘッ??ずれ対応?"日" を2文字??日 " に修正? 699 * @og.rev 5.6.5.0 (2013/06/07) 色バ?に変更します? 700 * @og.rev 5.6.7.0 (2013/11/03) 時間軸の上段ヘッ??に月日を表示 701 * 702 * @param hourOfPixcel ?時間あたりのピクセル数? 703 * @param step 時間間隔の??1:?時間間隔?2:?時間間隔・???) 704 * @param useTani 日?間?単位表示を行う(true)か?行わな?false)? 705 * 706 * @return ヘッ???? 707 */ 708 // private String makeZoomTime( final int hourOfPixcel,final boolean useTani ) { 709 private String makeZoomTime( final int hourOfPixcel,final int step,final boolean useTani ) { 710 // DateFormat format1 = new SimpleDateFormat( "yyyy/MM/dd",Locale.JAPAN ); 711 DateFormat format1 = new SimpleDateFormat( "yyyy/MM/dd(EE)",Locale.JAPAN ); // 5.6.5.0 (2013/06/07) 曜日を?tipsに出す? 712 DateFormat format2 = new SimpleDateFormat( "MM/dd",Locale.JAPAN ); // 5.7.0.0 (2013/11/03) 上段 713 714 StringBuilder bufBT = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 5.6.5.0 (2013/06/07) 休?の管?buf2 ?bufBT 名称変更) 715 StringBuilder buf1 = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 下段の時刻??タ 716 // StringBuilder buf2 = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 休?の管? 717 StringBuilder bufH = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 3.8.1.4 (2006/03/13) 段?ヘッ?? 718 StringBuilder bufcal = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 5.5.4.0 (2012/07/02) 休日判定用 719 StringBuilder bufDY = new StringBuilder( HybsSystem.BUFFER_SMALL ); // 5.7.0.0 (2013/11/03) 上段用 720 721 String last_title = null; // 5.7.0.0 (2013/11/03) 722 int day_length = 0; // 5.7.0.0 (2013/11/03) 723 int base = 2; // 5.7.0.0 (2013/11/03) 時間単位?標準桁数 724 if( useTani ){ base = 4;} 725 726 // daySpan = "0700-2000"; // 開始時刻(HHmm-HHmm) 3.8.0.5 (2005/08/26) 727 // ??少数計算を行います????時?0100)単位です? 728 // int startTime = ym2int( daySpan.substring( 0,2 ),daySpan.substring( 2,4 ) ) ; 729 // int endTime = ym2int( daySpan.substring( 5,7 ),daySpan.substring( 7 ) ) ; 730 // 5.6.1.2 (2013/02/22) 731 int ad = daySpan.indexOf( '-' ); 732 int startTime = hm2int( daySpan.substring( 0,ad ) ) ; 733 int endTime = hm2int( daySpan.substring( ad+1 ) ) ; 734 735 // 開始時刻より終?刻が同じか小さ??合?、翌日なので2400?します? 736 if( endTime <= startTime ) { endTime += 2400; } 737 738 // 休?時間を管??BreakTimes オブジェクトを作?します? 739 // BreakTimes breakTimeObj = new BreakTimes( hourOfPixcel,breakTimes,breakTimeStyle,startTime,endTime ); 740 BreakTimes breakTimeObj = new BreakTimes( hourOfPixcel/step,breakTimes,breakTimeStyle,startTime,endTime ); 741 742 // 5.6.1.2 (2013/02/22) ベ?ス時刻を管??BreakTimes オブジェクトを作?します?(利用するクラスは同じ) 743 BreakTimes baseTimeObj = new BreakTimes( hourOfPixcel/step,baseTimes,baseTimeStyle,startTime,endTime ); 744 745 // 現在時刻を求めておきます? 現在時刻に???しておきます?(余計なお世話?) 746 Calendar rightNow = Calendar.getInstance(); 747 rightNow.add( Calendar.MINUTE,5 ); // ?? ?? 748 int now = rightNow.get( Calendar.HOUR_OF_DAY ) ; 749 750 // 3.8.5.0 (2006/02/06) 751 boolean isDebug = isDebug(); 752 if( isDebug ) { 753 System.out.println( "startDate=" + startDate ); 754 System.out.println( "endDate =" + endDate ); 755 } 756 757 Calendar str = HybsSystem.getCalendar( startDate ); 758 Calendar end = HybsSystem.getCalendar( endDate ); 759 760 // 3.6.0.0 (2004/09/17) カレン?B検索機?を追? 761 CalendarData calData = CalendarFactory.getCalendarData( calDB,arg1,arg2,arg3,arg4 ); 762 763 // ?時?hourOfPixcel(px) なので?日??ピクセルを求めておく?休?時刻表示用) 764 // int dayOfPixel = (int)(hourOfPixcel * (endTime-startTime)/100.0 ); 765 // int dayOfPixel = (int)(hourOfPixcel/step * (endTime-startTime)/100.0 ); 766 int dayOfPixel = (int)(hourOfPixcel * Math.ceil((endTime-startTime)/100.0/step) ); // 5.5.4.0 (2012/07/02) ?上げ 767 768 // 休?表示における画面上?表示日数。これが、左のバイアス値として?日?乗算される? 769 int totalDay = 0; 770 771 // ?日??表示?の開始時刻と??タの表示開始時刻との差(オフセ?)ピクセル 772 // int offsetPixel = (int)(hourOfPixcel * (startTime - (int)(str.get( Calendar.HOUR_OF_DAY )*100 + str.get( Calendar.MINUTE )*10.0/6.0))/100.0 ); 773 int offsetPixel = (int)(hourOfPixcel/step * (startTime - (int)(str.get( Calendar.HOUR_OF_DAY )*100 + str.get( Calendar.MINUTE )*10.0/6.0))/100.0 ); 774 775 // 3.8.1.4 (2006/03/13) 時間単?h)の表示有無?USE_MULTI_CLM と関係させます? 776 // 3.8.1.6 (2006/04/25) 日?間?単位表示を止め??文字?(24ピクセル)化する? 777 final String tani ; 778 // if( useTani ) { tani = ( USE_MULTI_CLM ) ? " " : "h " ; } 779 // if( useTani ) { tani = ( useMultiClm ) ? " " : "h " ; } // 5.6.1.2 (2013/02/22) useMultiClm 追? 780 if( useTani ) { tani = "h " ; } // 5.6.5.0 (2013/06/07) useMultiClm を無視します? 781 else { tani = ""; } 782 783 boolean modifyFlag = false; 784 int cnt = 0; // 3.8.1.1 (2005/11/21) 785 while( str.before( end ) ) { // 終?間?、?含まな??仕? 786 if( isDebug ) { System.out.println( "Calendar str =" + str.getTime() ); } // 3.8.5.0 (2006/02/06) 787 788 // 5.6.5.0 (2013/06/07) 日付と曜日の対? 789 int day = str.get( Calendar.DATE ); 790 String dayStr = ((day >= 10) ? day : ("0" + day) ) + ((useTani) ? DAY_OF_WEEK_ja[str.get( Calendar.DAY_OF_WEEK )] : "") ; 791 792 // 5.5.4.0 (2012/07/02) こ?場合??位ではなく?日単位で出力す? 793 // skipHolidayは無視して、???全てのカレン??を?? 794 if(calData.isHoliday( str )){ 795 bufcal.append("1"); 796 } 797 else{ 798 bufcal.append("0"); 799 } 800 801 // 休日判断を?事業?レン?使用:休日なら?日付を進める? 802 if( calData.isHoliday( str ) && skipHoliday ) { 803 if( isDebug ) { System.out.println( "Holiday =" + str.getTime() ); } // 3.8.5.0 (2006/02/06) 804 str.add(Calendar.DATE, 1); 805 continue; 806 } 807 808 // 3.8.1.1 (2005/11/21) 日付???ルチップ表示 809 String ganttClass = "class=\"GNT_" + (cnt % 2) + "\"" ; 810 811 Date dt = str.getTime(); 812 String title = format1.format( dt ); 813 buf1.append( "<span " ).append( ganttClass ); 814 buf1.append( " title=\"" ).append( title ).append( "\">" ); 815 816 // 5.7.0.0 (2013/11/03) 上段 817 if( last_title != null & day_length > 0 ){ 818 makeHeaderMD(bufDY , day_length*base , 0 , last_title); 819 day_length = 0; 820 } 821 last_title = format2.format( dt ); 822 823 if( isDebug ) { System.out.println( "title =" + title ); } // 3.8.5.0 (2006/02/06) 824 825 // 5.6.5.0 (2013/06/07) 色バ?対? 826 if( useMultiClm ) { 827 if( cnt % 2 == 0 ) { bufH.append( EVEN_CLASS ); } // 偶数の色 828 else { bufH.append( ODD_CLASS ); } // ?の色 829 } 830 cnt++; // 5.6.5.0 (2013/06/07) 他?処??、cnt++ を?にして?が?ここでは初期設定指定な?、cnt++ を?処??後で行う? 831 832 // 本日かど?を判断する? 833 boolean isToday = calData.isContainedToday( str,1 ); 834 835 int tmHd = startTime/100 ; 836 int dayOut = tmHd; // 3.8.1.4 (2006/03/13) 837 boolean isTodayNow = false; // 3.8.9.2 (2007/07/28) 時間ス?プ対? 838 839 for( int h=startTime; h<endTime; h+=100 ) { // ???時間単? 840 if( isDebug ) { // 3.8.5.0 (2006/02/06) 841 System.out.println( "hour =" + h ); 842 System.out.println( "tmHd =" + tmHd ); 843 } 844 845 // 3.8.9.2 (2007/07/28) 時間ス?プ対? 846 isTodayNow = isTodayNow || ( isToday && tmHd == now ); 847 if( ( dayOut - tmHd ) % step != 0 ) { tmHd++; continue; } 848 849 day_length++; // 5.7.0.0 (2013/11/03) 850 851 if( tmHd >= 24 ) { 852 tmHd = 0; 853 // 3.8.1.1 (2005/11/21) 日付???ルチップを次の日に設定します? 854 Date dt2 = new Date( str.getTimeInMillis() + 24*3600*1000L ); 855 title = format1.format( dt2 ); 856 buf1.append( "</span><span " ).append( ganttClass ); 857 buf1.append( " title=\"" ).append( title ).append( "\">" ); 858 } 859 860 // 本日の現在時刻は?色で示します? 861 // if( isToday && tmHd == now ) { 862 if( isTodayNow ) { 863 buf1.append( BLUE_COLOR ); 864 bufH.append( BLUE_COLOR ); 865 modifyFlag = true; 866 isTodayNow = false; // 初期? 867 } 868 // 4.0.0.0 休日の場合?赤色で表示 869 else if( calData.isHoliday( str ) && !skipHoliday ) { 870 buf1.append( RED_COLOR ); 871 bufH.append( RED_COLOR ); 872 modifyFlag = true; 873 } 874 875 // 実質表示日数(totalDay) * ?日??ピクセル(dayOfPixel) - オフセ?(offsetPixel) 876 // String bt = breakTimeObj.makeSpan( totalDay*dayOfPixel-offsetPixel,str,h ); 877 String bt = breakTimeObj.makeSpan( totalDay*dayOfPixel-offsetPixel,str,h,step ); 878 // if( bt != null ) { buf2.append( bt ); } 879 if( bt != null ) { bufBT.append( bt ); } // 5.6.5.0 (2013/06/07) 休?の管?buf2 ?bufBT 名称変更) 880 881 // 5.6.1.2 (2013/02/22) ベ?ス時刻のタグを?力します? 882 bt = baseTimeObj.makeSpan( totalDay*dayOfPixel-offsetPixel,str,h,step ); 883 // if( bt != null ) { buf2.append( bt ); } 884 if( bt != null ) { bufBT.append( bt ); } // 5.6.5.0 (2013/06/07) 休?の管?buf2 ?bufBT 名称変更) 885 886 // 時間当たり??数は?文字???を詰める? 887 if( tmHd < 10 ) { buf1.append( '0' ); } // 桁数あわ? 888 buf1.append( tmHd ).append( tani ); // 3.8.1.4 (2006/03/13) 889 890 // 3.8.1.4 (2006/03/13) 日付表示、時刻単?h)削除?段?USE_MULTI_CLM) 891 // 3.8.1.6 (2006/04/25) 日?間?単位表示を止め??文字?(24ピクセル)化する? 892 // if( USE_MULTI_CLM ) { 893 if( useMultiClm ) { // 5.6.1.2 (2013/02/22) useMultiClm 追? 894 // if( ( dayOut - tmHd ) % 6 == 0 ) { 895 if( ( dayOut - tmHd ) == 0 ) { // 5.6.5.0 (2013/06/07) 色バ?対? 896 // if( useTani ) { bufH.append( title.substring( 8 ) ).append( "日" ); } 897 // if( useTani ) { bufH.append( title.substring( 8 ) ).append( "日 " ); } // 5.6.4.3 (2013/05/24) ヘッ??ずれ対応?"日" を2文字??日 " に修正? 898 // else { bufH.append( title.substring( 8 ) ); } 899 bufH.append( dayStr ); // 5.6.5.0 (2013/06/07) 先に日付+曜日の??を作?する?日" を2文字??日 " に修正済み? 900 } 901 else { 902 if( useTani ) { bufH.append( " " ); } 903 else { bufH.append( " " ); } 904 } 905 } 906 907 if( modifyFlag ) { 908 buf1.append( END_SPAN ); 909 bufH.append( END_SPAN ); 910 modifyFlag = false; 911 } 912 tmHd++; // ヘッ??に記述する時刻 913 } 914 str.add(Calendar.DATE, 1); 915 totalDay++ ; 916 buf1.append( END_SPAN ); 917 if( useMultiClm ) { bufH.append( END_SPAN ); } // 5.6.5.0 (2013/06/07) 色バ?対? 918 } 919 920 // 3.8.1.4 (2006/03/13) 日付表示、時刻単?h)削除?段?USE_MULTI_CLM) 921 // buf2.append( "<pre>" ); 922 // buf1.append( "</pre>" ); 923 924 // if( USE_MULTI_CLM ) { 925 // if( useMultiClm ) { // 5.6.1.2 (2013/02/22) useMultiClm 追? 926 // buf2.append( bufH.toString() ).append( "<br />" ); 927 // } 928 if( useMultiClm ) { // 5.6.1.2 (2013/02/22) useMultiClm 追? 929 bufH.append( BR ); 930 } 931 calStr = bufcal.toString(); // 5.5.4.0 (2012/07/02) 932 933 // 5.7.0.0 (2013/11/03) ??上段 934 if( last_title != null & day_length > 0 ){ 935 makeHeaderMD(bufDY , day_length*base , 0 , last_title); 936 day_length = 0; 937 } 938 939 // return buf2.append( buf1.toString() ).toString() ; 940 if( useMdheader ){ // 5.7.0.0 (2013/11/03) 月日を上段に表示する 941 bufH = bufDY.append( BR ).append(bufH); 942 } 943 return bufBT.append( "<pre>" ).append( bufH ).append( buf1 ).append( "</pre>" ).toString() ; 944 } 945 946 /** 947 * 時間軸での日ヘッ????タを作?します? 948 * 949 * ヘッ??は、時間表示の場合に上段にMM/ddを表示します? 950 * 951 * @og.rev 5.7.0.0 (2013/11/07) 新規追? 952 * 953 * @param bufH ヘッ??を追記して? StringBuilder 954 * @param fillCnt 日付???数カウント?通常は2*時間数か?4*時間数のどちらか? 955 * @param mtCnt 月数に基づ?色の設定用の数字?(??拡張用?? 956 * @param mdStr ヘッ??に表示する??。月日(MM/dd) 957 * 958 * @return ヘッ??が追記された StringBuilder 959 */ 960 private StringBuilder makeHeaderMD( final StringBuilder bufH , final int fillCnt , final int mtCnt , final String mdStr ) { 961 if( mtCnt % 2 == 0 ) { bufH.append( EVEN_CLASS ); } // 偶数色 962 else { bufH.append( ODD_CLASS ); } // ?色 963 964 // 表示すべき文字?が?表示すべき?りも小さ??合?スペ?スのみとする? 965 if( fillCnt < mdStr.length() ) { 966 bufH.append( StringUtil.stringXFill(" ",fillCnt) ); 967 } 968 // 大きい場合?、前後にスペ?スを?れて、センター配置 969 else { 970 bufH.append( StringUtil.stringXFill(mdStr,fillCnt) ); 971 } 972 973 bufH.append( END_SPAN ); 974 975 return bufH; 976 } 977 978 /** 979 * 上段・下段のフォーマットと、加算日に応じた??ー??を作?します? 980 * 981 * @param upper 上段の表示フォーマッ? 982 * @param lower 下段の表示フォーマッ? 983 * @param add 表示日付けの?? 984 * @param useMonth 月日表示でなく?月表示のみにする 985 * 986 * @og.rev 5.6.1.2 (2013/02/22) 新規作? 987 * @og.rev 5.6.2.3 (2013/03/22) 日付?終?は、?含??に変更 988 * 989 * @return ヘッ???? 990 */ 991 private String makeZoomStack( final String upper ,final String lower ,final int add, final boolean useMonth ) { 992 DateFormat format1 = new SimpleDateFormat( upper,Locale.JAPAN ); 993 DateFormat format2 = new SimpleDateFormat( lower,Locale.JAPAN ); 994 995 DateFormat formatCal = new SimpleDateFormat( "yyyyMMdd",Locale.JAPAN ); 996 997 // 5.5.8.3 (2012/11/17) スタ?用にカレン??????を保持(開始?休日判定?次?? 998 ArrayList<String[]> calList = new ArrayList<String[]>(); // 個人?は Listを渡す方が好? 999 String[] calArray = new String[3]; // 開始?休日判定?次?? 1000 1001 Calendar str = HybsSystem.getCalendar( startDate ); 1002 Calendar end = HybsSystem.getCalendar( endDate ); 1003 1004 // 週単位?場合?特殊??? 1005 // 年の第??を完?な??間?(?日?として、設定します? 1006 if( zoom == 41 ) { // ViewStackTableParam.STACK_ZOOM_WEEK 1007 str.setMinimalDaysInFirstWeek( 7 ); 1008 format1.setCalendar( str ); 1009 format2.setCalendar( str ); 1010 } 1011 1012 if( useMonth ){ 1013 str.set(Calendar.DAY_OF_MONTH, 1); 1014 startDate = new SimpleDateFormat( "yyyyMMdd",Locale.JAPAN ).format(str.getTime()); 1015 } 1016 1017 StringBuilder buf1 = new StringBuilder( HybsSystem.BUFFER_SMALL ); 1018 StringBuilder buf2 = new StringBuilder( HybsSystem.BUFFER_SMALL ); 1019 StringBuilder bufcal = new StringBuilder( HybsSystem.BUFFER_SMALL ); 1020 1021 // カレン?B検索機? 1022 CalendarData calData = CalendarFactory.getCalendarData( calDB,arg1,arg2,arg3,arg4 ); 1023 1024 boolean modifyFlag = false; 1025 // 5.6.2.3 (2013/03/22) 日付?終?は、?含??に変更 1026 // while( str.before( end ) ) { 1027 while( str.compareTo( end ) <= 0 ) { 1028 Date dt = str.getTime(); 1029 calArray[0] = formatCal.format( dt ); // 5.5.8.3 (2012/11/17) 1030 1031 // 本日は?色で示します? 1032 if( calData.isContainedToday( str,add ) ) { 1033 buf1.append( BLUE_COLOR ); 1034 buf2.append( BLUE_COLOR ); 1035 bufcal.append( "0" ); 1036 calArray[1] = "0"; // 5.5.8.3 (2012/11/17) 1037 modifyFlag = true; 1038 } 1039 1040 // 休日判断を?事業?レン?使用 1041 // modifyFlag が立って????を条件に追?ます? 1042 if( !modifyFlag && add == 1 && calData.isHoliday( str ) && !useMonth) { 1043 buf1.append( RED_COLOR ); 1044 buf2.append( RED_COLOR ); 1045 bufcal.append( "1" ); // 休日 1046 calArray[1] = "1"; // 5.5.8.3 (2012/11/17) 1047 modifyFlag = true; 1048 } 1049 1050 buf1.append( format1.format( dt ) ); 1051 buf2.append( format2.format( dt ) ); 1052 1053 if( modifyFlag ) { 1054 buf1.append( END_SPAN ); 1055 buf2.append( END_SPAN ); 1056 modifyFlag = false; 1057 } 1058 else{ 1059 bufcal.append( "0" ); 1060 calArray[1] = "0"; // 5.5.8.3 (2012/11/17) 1061 } 1062 1063 // カレン??を?める 1064 if( useMonth ){ 1065 str.add(Calendar.MONTH, add); 1066 } 1067 else{ 1068 str.add(Calendar.DATE, add); 1069 } 1070 1071 dt = str.getTime(); 1072 calArray[2] = formatCal.format( dt ); // 5.5.8.3 (2012/11/17) 1073 calList.add( calArray.clone() ); 1074 } 1075 1076 // スタ?ガント用の特別な処?? 1077 // 上位? ViewForm_HTMLStackedGanttTable クラスに対して、?開始?休日判定?次?始?リストを渡します? 1078 ViewFormTag viewform = (ViewFormTag)findAncestorWithClass( this,ViewFormTag.class ); 1079 viewform.setViewArrayList( calList ); 1080 1081 calStr = bufcal.toString(); 1082 1083 return "<pre>" + buf1.toString() + BR + buf2.toString() + "</pre>"; 1084 } 1085 1086 /** 1087 * ganttHeaderの属???をdisplay:noneで作?します? 1088 * ganttHeaderと?タグで、id,class共にganttHeaderDataと?名称で出力します? 1089 * 1090 * @og.rev 5.5.4.0 (2012/07/02) 新規作? 1091 * @og.rev 5.6.1.2 (2013/02/22) baseTimes 追? 1092 * 1093 * @return ヘッ????の?? 1094 */ 1095 private String makeHeaderData() { 1096 1097 StringBuilder buf1 = new StringBuilder( HybsSystem.BUFFER_SMALL ); 1098 1099 buf1.append( "\n" ) 1100 .append( "<ganttHeader style='display:none' id='ganttHeaderData' class='ganttHeaderData' " ) 1101 .append( "startDate='" ).append( startDate ).append( "' " ) 1102 .append( "endDate='" ).append( endDate ).append( "' " ) 1103 .append( "zoom='" ).append( zoom ).append( "' " ) 1104 .append( "daySpan='" ).append( daySpan ).append( "' " ) 1105 .append( "calDB='" ).append( calStr ).append( "' " ) 1106 .append( "breakTimes='" ).append( breakTimes ).append( "' " ) 1107 .append( "baseTimes='" ).append( baseTimes ).append( "' " ) // 5.6.1.2 (2013/02/22) baseTimes 追? 1108 .append( "skipHoliday='" ).append( skipHoliday ).append( "' " ) 1109 .append( "useMultiClm='" ).append( useMultiClm ).append( "' " ) // 5.6.1.2 (2013/02/22) useMultiClm 追? 1110 .append( " />" ); 1111 1112 return buf1.toString(); 1113 } 1114 1115 /** 1116 * 【TAG】表示開始日付けを設定しま?yyyyMMdd また?、yyyyMMddHHmm 形?? 1117 * 1118 * @og.tag 1119 * こ?値は、??ーの先?に表示する日付けを指定します? 1120 * 通常の日付??ーの場合??yyyyMMdd 形式ですが、時間??ーの場合?? 1121 * yyyyMMddHHmm 形式で?します? 1122 * 1123 * @param val 表示開始日?yyyyMMdd また?、yyyyMMddHHmm 形? 1124 */ 1125 public void setStartDate( final String val ) { 1126 startDate = nval( getRequestParameter( val ),startDate ); 1127 } 1128 1129 /** 1130 * 【TAG】表示?日を設定しま?yyyyMMdd また?、yyyyMMddHHmm 形?? 1131 * 1132 * @og.tag 1133 * 表示開始日から終?までを?zoom 変数の値に応じてヘッ??ラベル? 1134 * 作?します? 1135 * 通常の日付??ーの場合??yyyyMMdd 形式ですが、時間??ーの場合?? 1136 * yyyyMMddHHmm 形式で?します? 1137 * 1138 * @param val 表示?日(yyyyMMdd また?、yyyyMMddHHmm 形? 1139 */ 1140 public void setEndDate( final String val ) { 1141 endDate = nval( getRequestParameter( val ),endDate ); 1142 } 1143 1144 /** 1145 * 【TAG】1日の開始終?間を24時間形?HHmm-HHmm また? HH-HH)で設定しま?初期値:0700-2000)? 1146 * 1147 * @og.tag 1148 * こ?値は?日の開始終?間を?します? 1149 * 開始時刻は、?部で?時間単位に変換されます??時?0????時?になります? 1150 * 終?間?、その時間を?含みません? 1151 * 開始時刻より終?刻が小さ??合?、翌日への日またぎとして計算します? 1152 * たとえ?、夜勤等で?7:00-07:00 と??が可能です? 1153 * 初期値は、朝の7:00から夜?20:00までです?(0700-2000)です? 1154 * 1155 * @og.rev 3.8.0.5 (2005/08/26) 本日は?色で示します? 1156 * @og.rev 5.6.1.2 (2013/02/22) daySpan?時刻表示???、?部では?時間単? 1157 * 1158 * @param val 開始終??HHmm-HHmm)形? 1159 */ 1160 public void setDaySpan( final String val ) { 1161 daySpan = nval( getRequestParameter( val ),daySpan ); 1162 1163 // 5.6.1.2 (2013/02/22) daySpan?時刻表示???、?部では?時間単? 1164 if( daySpan.length() == 5 && daySpan.charAt(2) == '-' ) { 1165 daySpan = daySpan.substring( 0,2 ) + "00-" + daySpan.substring( 3 ) + "00" ; // HH-HH ?HH00-HH00 1166 } 1167 else if( daySpan.length() == 9 && daySpan.charAt(4) == '-' ) { 1168 daySpan = daySpan.substring( 0,2 ) + "00-" + daySpan.substring( 5 ) ; // HHmm-HHmm ?HH00-HHmm 1169 } 1170 else { 1171 // if( daySpan.length() != 9 || daySpan.charAt(4) != '-' ) { // 5.6.1.2 (2013/02/22) 1172 // String errMsg = "?日の開始終?間?24時間制で(HHmm-HHmm)形式で?してください? 1173 String errMsg = "?日の開始終?間?24時間制で(HHmm-HHmm また? HH-HH)形式で?してください? 1174 + " value=[" + val + "]" 1175 + " daySpan=[" + daySpan + "]" ; // 5.1.8.0 (2010/07/01) errMsg 修正 1176 throw new HybsSystemException( errMsg ); 1177 } 1178 } 1179 1180 /** 1181 * 【TAG】ズー?数(0??,10,11,12,20??1,40??2)を設定しま?初期値:2)? 1182 * 1183 * @og.tag 1184 * CSSファイルでの定義と、背景画像との関係で、作?します? 1185 * ズー?数は、CSSファイル??JavaScript、PL/SQLと連動して、日付間? 1186 * あたり?ピクセルを計算して、??ーを作?して?す? 1187 * また?現在の標準的なクライアントでの換算になる為?解像度の?スプレイ? 1188 * 特殊設定された環?は、表示間隔にずれが発生する可能性があります? 1189 * 1190 * ZOOM ラベル 日数ピクセル変換? ヘッ?? ヘッ?? 1??CSS) 1191 * ======================================================================================== 1192 * 0 : ???日数 * 8 * 6 48 48px = 1日 [02/ ] [23(EE)] 8px 1193 * 1 : ???日数 * 8 * 3 24 24px = 1日 [02/] [23 ] 8px 1194 * 2 : ?ヶ?日数 * 12* 1 12 12px = 1日 [2] [3] 12px 1195 * 3 : ?ヶ?日数 * 8 * 7 / 7 8 56px = 7日 [2004/ ] [02/03 ] 8px 1196 * 4 : ?ヶ?日数 * 8 * 7 / 14 4 56px = 14日 [2004/ ] [02/03 ] 8px 1197 * 5 : ?ヶ?日数 * 9 * 10 / 30 3 90px = 30日 [2004/ ] [02/03 ] 9px 1198 * 6 : ?ヶ?日数 * 10 / 6 / 30 2 60px = 30日 [2004/ ] [02/03 ] 10px 1199 * 7 : ?年 日数 * 9 / 10 / 90 1 90px = 90日 [2004/ ] [02/03 ] 9px 1200 * 8 : ?年 日数 * 9 / 10 /180 0.5 90px =180日 [2004/ ] [02/03 ] 9px 1201 * 9 : ?年 日数 * 10 / 6 /180 0.33 60px =180日 [2004/ ] [02/03 ] 10px 1202 * 10 : 週単?日数 * 8 / 3 / 7 3.43 24px = 7日 [19W] [12 ] 8px 1203 * 11 : 予?み(他物10件使用済み) 1204 * 12 : 予?み(他物 8件使用済み) 1205 * 13 : 日(週) 日数 * 8 * 2 16 16px = 1日 [23] [EE] 8px 1206 * ======================================================================================== 1207 * 20 : 1時間 時間 * 12 * 4 48 48px = 1時間 [02EE] [07h ] 12px 1208 * 21 : 1時間2 時間 * 12 * 2 24 24px = 1時間 [02] [07] 12px 1209 * 22 : 2時間 時間 * 12 * 4 / 2 24 48px = 2時間 [02EE] [07h ] 12px 1210 * 23 : 2時間2 時間 * 12 * 2 / 2 12 24px = 2時間 [02] [07] 12px 1211 * 24 : 4時間 時間 * 12 * 4 / 4 12 48px = 4時間 [02EE] [07h ] 12px 1212 * 25 : 4時間2 時間 * 12 * 2 / 4 6 24px = 4時間 [02] [07] 12px 1213 * 26 : 6時間 時間 * 12 * 4 / 6 8 48px = 6時間 [02EE] [07h ] 12px 1214 * 27 : 6時間2 時間 * 12 * 2 / 6 4 24px = 6時間 [02] [07] 12px 1215 * 28 : 8時間 時間 * 12 * 4 / 8 6 48px = 8時間 [02EE] [07h ] 12px 1216 * 29 : 8時間2 時間 * 12 * 2 / 8 3 24px = 8時間 [02] [07] 12px 1217 * 30 : 12時間 時間 * 12 * 4 / 12 4 48px =12時間 [02EE] [07h ] 12px 1218 * 31 : 12時間2 時間 * 12 * 2 / 12 2 24px =12時間 [02] [07] 12px 1219 * ======================================================================================== 1220 * 40 : 積?日) 48 48px = 1日 [02/ ] [23(EE)] 8px 1221 * 41 : 積?週) 3.43 48px = 7日 [19W] [12 ] 8px 1222 * 42 : 積?? 月数 * 1 1 90px = 30日 [2004/ ] [02/03 ] 9px 1223 * 43 : 日単位??ー予?み 1224 * ?? 1225 * 49 : 日単位??ー予?み 1226 * 1227 * @param val ズー?数(0??,10,11,12,20??1,40??2) 1228 */ 1229 public void setZoom( final String val ) { 1230 zoom = nval( getRequestParameter( val ),zoom ); 1231 1232 if( zoom < 0 || (13 < zoom && zoom < 20) || (31 < zoom && zoom < 40) || 42 < zoom ) { 1233 String errMsg = "ズー?数は?0??,10,11,12,20??1,40??2)の?で?してください? 1234 + " zoom=[" + val + "]" ; 1235 throw new HybsSystemException( errMsg ); 1236 } 1237 } 1238 1239 /** 1240 * 【TAG】DB検索する??を指定します? 1241 * 1242 * @og.tag 1243 * カレン?ータは、シス?パラメータ の CalendarQuery_**** で 1244 * ?する?CalendarQuery クラスの QUERY ?、実際に取得します? 1245 * 上記? **** 部?、ここで?するキーワードを設定して置きます? 1246 * 通常は、データベ?スID (GE13, ZY01 など)を指定します? 1247 * こ?キーワードに対する実?ラスを?先?シス?パラメータ の 1248 * キーワード以下に記述しておきます? 1249 * {@og.doc03Link calDB CalendarQuery_****} 1250 * 1251 * @og.rev 3.6.0.0 (2004/09/17) DB検索する??のキー 1252 * 1253 * @param db DB検索する??を指? 1254 */ 1255 public void setCalDB( final String db ) { 1256 calDB = nval( getRequestParameter( db ),calDB ); 1257 } 1258 1259 /** 1260 * 【TAG】時間軸での休?時間の開?終?刻をカンマ区?で??します? 1261 * 1262 * @og.tag 1263 * 休?時間は、HHmm-HHmm形式?また?、yyyyMMddHHmm-HHmm、また?? 1264 * yyyyMMddHHmm-yyyyMMddHHmm形式で??できます? 1265 * これは??終??ハイフン形式でつなげます? 1266 * こ?セ?を?カンマで??できます? 1267 * 例えば?00508201200-1245,200508201300-1315 と?感じです? 1268 * - の前後が?桁?場合?、HHmm-HHmm 形式として、日付に関係なく?常にこ?時? 1269 * で休?が?ると?認識をします?つまり?開始??2桁か?桁?日付形式? 1270 * 終??2桁か?桁?日付形式になります? 1271 * 1272 * @og.rev 3.8.0.5 (2005/08/26) 新規追? 1273 * @og.rev 3.8.0.7 (2005/09/20) 日付またがり追?? 1274 * 1275 * @param times 休?時間の開?終?刻(CSV区?) 1276 */ 1277 public void setBreakTimes( final String times ) { 1278 breakTimes = nval( getRequestParameter( times ),null ); 1279 } 1280 1281 /** 1282 * 【TAG】時間軸での休?時間の表示スタイルを設定します? 1283 * 1284 * @og.tag 1285 * 通常は、??ーのトップから?位置と、色です? 1286 * それ以外にも?スタイルシート属?(キー:値;) と?セ?を指定できます? 1287 * class="breakTime" を?力して?す?で、そちらを使用した??合?、breakTimeStyleを無効化してください? 1288 * そうしな?、こちら?、直接 style属?で設定して?ので、強?す? 1289 * 初期値は、top:20px;background-color:yellow;filter:alpha(opacity=60);opacity:0.60; です? 1290 * IE8以下?ために、filter:alpha(opacity=60); して?す? 1291 * 設定?後ろに? を付ける様にしてください? 1292 * 1293 * @og.rev 3.8.0.5 (2005/08/26) 新規追? 1294 * 1295 * @param style 休?時間の表示スタイル 1296 */ 1297 public void setBreakTimeStyle( final String style ) { 1298 breakTimeStyle = nval( getRequestParameter( style ),breakTimeStyle ); 1299 } 1300 1301 /** 1302 * 【TAG】時間軸でのベ?ス時刻の開始時刻をカンマ区?で??します? 1303 * 1304 * @og.tag 1305 * ベ?ス時刻は、HHmm形式?また?、yyyyMMddHHmm形式で??できます? 1306 * こ?セ?を?カンマで??できます? 1307 * 例えば?700,200508201300 と?感じです? 1308 * 1309 * @og.rev 5.6.1.2 (2013/02/22) 新規追? 1310 * 1311 * @param times ベ?ス時刻の開始時刻(CSV区?) 1312 */ 1313 public void setBaseTimes( final String times ) { 1314 baseTimes = nval( getRequestParameter( times ),null ); 1315 } 1316 1317 /** 1318 * 【TAG】時間軸でのベ?ス時刻の表示スタイルを設定します? 1319 * 1320 * @og.tag 1321 * 通常は、?ース時刻の?、??ーのトップから?位置と、色です? 1322 * それ以外にも?スタイルシート属?(キー:値;) と?セ?を指定できます? 1323 * 初期値は、top:20px;background-color:transparent;border-left:2px dashed red; です? 1324 * 設定?後ろに? を付ける様にしてください? 1325 * 1326 * @og.rev 5.6.1.2 (2013/02/22) 新規追? 1327 * 1328 * @param style ベ?ス時刻の表示スタイル 1329 */ 1330 public void setBaseTimeStyle( final String style ) { 1331 baseTimeStyle = nval( getRequestParameter( style ),baseTimeStyle ); 1332 } 1333 1334 /** 1335 * 【TAG】D?検索する場合?第??キーを指定します? 1336 * 1337 * @og.tag 1338 * 例えば、GE13, ZY01 では、事業?ー?CDJGS)を設定します? 1339 * こ?値は、シス?パラメータ の CalendarQuery_**** で 1340 * ?する?CalendarQuery クラスの QUERY ?依存します? 1341 * ??タベ?ス定義の統?望?ところです? 1342 * 1343 * @og.rev 3.6.0.0 (2004/09/17) DB検索の第?キー(事業?ードなど)を追? 1344 * 1345 * @param arg DB検索の第?キー(事業?ードなど) 1346 */ 1347 public void setArg1( final String arg ) { 1348 arg1 = nval( getRequestParameter( arg ),arg1 ); 1349 } 1350 1351 /** 1352 * 【TAG】D?検索する場合?第??キーを指定します? 1353 * 1354 * @og.tag 1355 * 例えば、TP652 では、事業部コー?CDJGS) と 物件工程コー?CDKTEI)の?つの 1356 * キーで、カレン?取得します?(?年月で、行を決? 1357 * 引数が??つまで対応して?? 1358 * こ?値は、シス?パラメータ の CalendarQuery_**** で 1359 * ?する?CalendarQuery クラスの QUERY ?依存します? 1360 * ??タベ?ス定義の統?望?ところです? 1361 * 1362 * @og.rev 3.6.0.0 (2004/09/17) DB検索の第?キー(??コードなど)を追? 1363 * 1364 * @param arg DB検索の第?キー(??コードなど) 1365 */ 1366 public void setArg2( final String arg ) { 1367 arg2 = nval( getRequestParameter( arg ),arg2 ); 1368 } 1369 1370 /** 1371 * 【TAG】D?検索する場合?第??キーを指定します? 1372 * 1373 * @og.tag 1374 * こ?値は、シス?パラメータ の CalendarQuery_**** で 1375 * ?する?CalendarQuery クラスの QUERY ?依存します? 1376 * ??タベ?ス定義の統?望?ところです? 1377 * 1378 * @og.rev 3.6.0.0 (2004/09/17) DB検索の第?キーを追? 1379 * 1380 * @param arg DB検索の第?キー 1381 */ 1382 public void setArg3( final String arg ) { 1383 arg3 = nval( getRequestParameter( arg ),arg3 ); 1384 } 1385 1386 /** 1387 * 【TAG】D?検索する場合?第??キーを指定します? 1388 * 1389 * @og.tag 1390 * こ?値は、シス?パラメータ の CalendarQuery_**** で 1391 * ?する?CalendarQuery クラスの QUERY ?依存します? 1392 * ??タベ?ス定義の統?望?ところです? 1393 * 1394 * @og.rev 3.6.0.0 (2004/09/17) DB検索の第?キーを追? 1395 * 1396 * @param arg DB検索の第?キー 1397 */ 1398 public void setArg4( final String arg ) { 1399 arg4 = nval( getRequestParameter( arg ),arg4 ); 1400 } 1401 1402 /** 1403 * 【TAG】時間ガントで休日を表示する/しな?設定しま? 1404 * (初期値:USE_GANTTHEADER_SKIP_HOLIDAY[={@og.value org.opengion.hayabusa.common.SystemData#USE_GANTTHEADER_SKIP_HOLIDAY}])? 1405 * 1406 * @og.tag 1407 * こ?値をfalseにすると、時間ガントでも休日が赤色で表示 1408 * されるよ?なります?trueにした場合?、休日は表示されません? 1409 * (初期値:シス?定数のUSE_GANTTHEADER_SKIP_HOLIDAY[={@og.value org.opengion.hayabusa.common.SystemData#USE_GANTTHEADER_SKIP_HOLIDAY}])? 1410 * 1411 * @og.rev 4.0.0.0 (2007/09/07) 新規作? 1412 * 1413 * @param skipHol 休日をスキ??するかど?? 1414 * @see org.opengion.hayabusa.common.SystemData#USE_GANTTHEADER_SKIP_HOLIDAY 1415 */ 1416 public void setSkipHoliday( final String skipHol) { 1417 skipHoliday = nval( getRequestParameter( skipHol ),skipHoliday ); 1418 } 1419 1420 /** 1421 * 【TAG】時間ガントで?段?使用する/しな?設定しま? 1422 * (初期値:USE_GANTTHEADER_MULTIPLE_COLUMN[={@og.value org.opengion.hayabusa.common.SystemData#USE_GANTTHEADER_MULTIPLE_COLUMN}])? 1423 * 1424 * @og.tag 1425 * ガント??ーにおいて、時間??ーの上段に日付を、下段の時間軸の(h)の削除を行います? 1426 * 日付?、表示開始時刻の上と、それ??時間ごとに表示します? 1427 * (初期値:シス?定数のUSE_GANTTHEADER_MULTIPLE_COLUMN[={@og.value org.opengion.hayabusa.common.SystemData#USE_GANTTHEADER_MULTIPLE_COLUMN}])? 1428 * 1429 * @og.rev 5.6.1.2 (2013/02/22) 新規作? 1430 * 1431 * @param multiClm 時間ガントで?段?使用するかど?(true:する/false:しな?? 1432 * @see org.opengion.hayabusa.common.SystemData#USE_GANTTHEADER_MULTIPLE_COLUMN 1433 */ 1434 public void setUseMultiClm( final String multiClm ) { 1435 useMultiClm = nval( getRequestParameter( multiClm ),useMultiClm ); 1436 } 1437 1438 /** 1439 * 日付?時刻の??を時間整数に変換します? 1440 * 1441 * 時間を扱??合?、厄介なのは、時間と??単位?違いです? 1442 * ?換算してしま?、時間?取得に?0?数で扱??が出てきます? 1443 * そこで、単純に時間に換算する?ではなく??時間を100として? 1444 * ??から99までの整数に換算して計算して?す? 1445 * これにより時間の足し算や引き算が可能になり?かつ、時間を求める?に 1446 * 100で割るだけで求めることが可能になります? 1447 * 1448 * @og.rev 5.6.1.2 (2013/02/22) ? 1449 * 1450 * @param yy 時間の?? 1451 * @param mm ???? 1452 * 1453 * @return ?時間を100として、?を0から99までの整数に換算した? 1454 */ 1455 // private static int ym2int( final String yy,final String mm ) { 1456 // return (int)(Integer.parseInt( yy ) * 100 + Integer.parseInt( mm )*10.0/6.0 ) ; 1457 // } 1458 1459 /** 1460 * 日付?時刻の??を時間整数に変換します? 1461 * 1462 * 時間を扱??合?、厄介なのは、時間と??単位?違いです? 1463 * ?換算してしま?、時間?取得に?0?数で扱??が出てきます? 1464 * そこで、単純に時間に換算する?ではなく??時間を100として? 1465 * ??から99までの整数に換算して計算して?す? 1466 * これにより時間の足し算や引き算が可能になり?かつ、時間を求める?に 1467 * 100で割るだけで求めることが可能になります? 1468 * 1469 * ここでは、引数に、HHmm ?HHmmss 、yyyyMMddHHmm 、yyyyMMddHHmmss 、null が扱えます? 1470 * null の場合??1 を返します? 1471 * yyyyMMdd 部??、無視されます? 1472 * 1473 * @og.rev 5.6.1.2 (2013/02/22) 日付?秒?null 対? 1474 * 1475 * @param hhmm 時?の?? 1476 * 1477 * @return ?時間を100として、?を0から99までの整数に換算した? 1478 */ 1479 private static int hm2int( final String hhmm ) { 1480 int rtn = -1; 1481 1482 if( hhmm != null ) { 1483 int len = hhmm.length(); 1484 String hh = null; 1485 String mm = null; 1486 if( len == 4 || len == 6 ) { // HHmm 、HHmmss 1487 hh = hhmm.substring( 0,2 ); 1488 mm = hhmm.substring( 2,4 ); 1489 } 1490 else if( len == 12 || len == 14 ) { // yyyyMMddHHmm 、yyyyMMddHHmmss 1491 hh = hhmm.substring( 8,10 ); 1492 mm = hhmm.substring( 10,12 ); 1493 } 1494 else { 1495 String errMsg = "?できる時間形式?、HHmm 、HHmmss 、yyyyMMddHHmm 、yyyyMMddHHmmss です?" 1496 + HybsSystem.CR 1497 + "hm2int=[" + hhmm + "]" ; 1498 throw new HybsSystemException( errMsg ); 1499 } 1500 rtn = (int)(Integer.parseInt( hh ) * 100 + Integer.parseInt( mm )*10.0/6.0 ) ; 1501 } 1502 1503 return rtn; 1504 } 1505 1506 /** 1507 * 休?時間の??タを管?る?部クラスです? 1508 * 1509 * @og.rev 3.8.0.7 (2005/09/20) ?クラス新規作? 1510 * @og.group 画面部? 1511 * 1512 * @version 4.0 1513 * @author Kazuhiko Hasegawa 1514 * @since JDK5.0, 1515 */ 1516 private static class BreakTimeData { 1517 private final String startDay ; // 開始日付?null の場合?、毎日 1518 private final int startTime ; // 開始時刻のhm2int変換済み値 1519 private final int timeSpan ; // 開始時刻と終?刻の時間差(hm2int変換済み) 1520 private final String viewTime ; // ??ルチップ表示用の??(HHmm-HHmm) 1521 1522 /** 1523 * コンストラクター 1524 * 1525 * 開始日?startDay)?始時刻(startTime)、時間差(timeSpan)、表示ラベル(viewTime) 1526 * を指定して、休?時間の??タオブジェクトを構築します? 1527 * 開始日?startDay)は、null の場合?、毎日、つまり?定常?休?時刻として 1528 * 認識します?日付が?された場合?、その日のみの特別な休?時間と認識します? 1529 * 開始時刻は、hm2int変換済み値で?時間が100となり????0進数に変換されて? 1530 * 値として認識します?7??0 の場合??50 と?値になります? 1531 * 開始時刻と終?刻の時間差(timeSpan)?hm2int変換済み値です? 1532 * 表示用の??(viewTime)は、休?時間の HTML表記時の title 属?として 1533 * 設定される為、?ウスオーバ?時???ルチップに現れます? 1534 * 1535 * @param startDay yyyyMMdd 形式?開始日付?null の場合?、毎日 1536 * @param startTime 開始時刻のhm2int変換済み値 1537 * @param timeSpan 開始時刻と終?刻の時間差(hm2int変換済み) 1538 * @param viewTime ??ルチップ表示用の??(HHmm-HHmm) 1539 * @return 含まれる(対象)場合?、true そうでな??合?、false 1540 */ 1541 BreakTimeData( final String startDay,final int startTime,final int timeSpan,final String viewTime ) { 1542 this.startDay = startDay; 1543 this.startTime = startTime; 1544 this.timeSpan = timeSpan; 1545 this.viewTime = viewTime; 1546 } 1547 1548 /** 1549 * ??日付と時刻が?こ? BreakTimeData の開始日時とマッチするかど?をチェ?します? 1550 * 1551 * 開始日時とマッチするとは、?部日付がマッチし?始時刻が??? time の 1552 * ?時?+100)*stepの?に含まれて?場合を?ます?(true を返します?) 1553 * ?の日?startDay)?null の場合?、毎日が対象となります? 1554 * 開始時刻が??した場合?、timeSpan ?け??持った休?時間を認識します? 1555 * ?条件の都合で、timeSpan == 0 の状態も存在しますが、これ?マッチしな?判断します? 1556 * 1557 * @og.rev 3.8.1.1 (2005/11/21) timeSpan ?0 より大きい場?条件追? 1558 * @og.rev 3.8.9.2 (2007/07/28) 時間間隔パラメータ追? 1559 * 1560 * @param inDay yyyyMMdd 形式?日付? 1561 * @param time 休?時間の開始時刻のhm2int変換済み値 1562 * @param step 時間間隔 1563 * @return 含まれる(対象)場合?、true そうでな??合?、false 1564 */ 1565 // boolean startsWith( final String inDay,final int time ) { 1566 boolean startsWith( final String inDay,final int time,final int step ) { 1567 return ( timeSpan > 0 && 1568 time <= startTime && 1569 startTime < time+100*step && 1570 ( startDay == null || inDay.equals( startDay ) ) ); 1571 } 1572 1573 /** 1574 * 休?時間を表?SPANタグを作?します? 1575 * 1576 * ?時?hourOfPixcel(px) で換算します???、すでに?計?hm2int)済み 1577 * 1578 * @og.rev 3.8.8.4 (2007/02/17) class="breaktime" 追? 1579 * @og.rev 5.6.1.2 (2013/02/22) ベ?ス時刻対応?width ?0 の場合?? をセ? 1580 * 1581 * @param offset 表示開始ピクセル数(実質表示日数 * ?日??ピクセル - オフセ?) 1582 * @param hourOfPixcel ?時間あたりのピクセル数 1583 * @param breakTimeStyle 休?時間の?に追?るスタイル属? 1584 * @return 休?時間を表?SPANタグ 1585 */ 1586 String getBreakTime( final int offset,final int hourOfPixcel,final String breakTimeStyle ) { 1587 int left = offset + (startTime*hourOfPixcel/100) ; 1588 int width = (timeSpan*hourOfPixcel/100) ; 1589 if( width == 0 ) { width = 2; } // 5.6.1.2 (2013/02/22) ベ?ス時刻対応?width ?0 の場合?? をセ? 1590 1591 return "<span class=\"breaktime\" title=\"" + viewTime + "\"" 1592 + " style=\"position:absolute;z-index:100;height:500000px;" 1593 + "left:" + left + "px;" 1594 + "width:" + width + "px;" 1595 + breakTimeStyle + "\" ></span>" 1596 + HybsSystem.CR ; 1597 } 1598 } 1599 1600 /** 1601 * 休?時間を管?る?部クラスです? 1602 * 1603 * ??、休?時間以外に、?ース時刻も??きるようにします? 1604 * これは、終?刻を指定されて???合でも対応できるようにすることを意味します? 1605 * また?時間?方法を、時?けでなく?時?秒指定時でも??きるようにします??秒?無視? 1606 * 1607 * @og.rev 3.8.0.7 (2005/09/20) ?クラスBreakTimeDataを使用するように修正 1608 * @og.rev 3.8.1.6 (2006/04/25) 変数の final ? 1609 * @og.rev 5.6.1.2 (2013/02/22) breakTimesの処?法?見直? 1610 * 1611 * @og.group 画面部? 1612 * 1613 * @version 4.0 1614 * @author Kazuhiko Hasegawa 1615 * @since JDK5.0, 1616 */ 1617 private static class BreakTimes { 1618 private final List<BreakTimeData> timeList = new ArrayList<BreakTimeData>(); 1619 private final int hourOfPixcel ; // ?時間あたりのピクセル数(?TIME_PIXEL) 1620 private final String breakTimeStyle ; // 休?時間の?に追?るスタイル属? 1621 private final int viewStartTime ; // 数値?hm2int)された表示開始時刻(?0700) 1622 private final int viewEndTime ; // 数値?hm2int)された表示終?刻(?2000) 1623 1624 /** 1625 * コンストラクター 1626 * ?な??を設定して、オブジェクトを構築します? 1627 * 表示終?刻は、表示開始時刻 >= 表示終?刻 の場合?2400?されて?? 1628 * 1629 * @og.rev 3.8.0.7 (2005/09/20) breakTimesの日付またがり追? 1630 * @og.rev 3.8.1.1 (2005/11/21) timeSpan の計算方法を見直? 1631 * @og.rev 5.6.1.2 (2013/02/22) breakTimesの処?法?見直? 1632 * 1633 * @param hOfpx ?時間あたりのピクセル数 1634 * @param breakTimes 休?時間を?HHmm-HHmm形式?また?、yyyyMMddHHmm-HHmm、また?、yyyyMMddHHmm-yyyyMMddHHmm形式で?します? 1635 * @param style 休?時間の?に追?るスタイル属? 1636 * @param vStartTime 数値?hm2int)された表示開始時刻 1637 * @param vEndTime 数値?hm2int)された表示終?刻 1638 */ 1639 BreakTimes( final int hOfpx,final String breakTimes,final String style, 1640 final int vStartTime,final int vEndTime ) { 1641 hourOfPixcel = hOfpx; 1642 breakTimeStyle = ( style == null ) ? "" : style ; 1643 viewStartTime = vStartTime; 1644 viewEndTime = vEndTime; 1645 boolean time24 = ( viewEndTime > 2400 ); // 3.8.1.1 (2005/11/21) 開始終??して?場?true 1646 1647 // 3.8.1.1 (2005/11/21) timeSpan の計算方法を見直? 1648 DateFormat format = new SimpleDateFormat( "yyyyMMdd",Locale.JAPAN ); 1649 String[] startEnds = StringUtil.csv2Array( breakTimes ); 1650 int len = startEnds.length; 1651 1652 String startDay ; // null の場合?、毎日 1653 String endDay ; // ?変数 1654 int startTime ; // 開始時刻のhm2int変換済み値 1655 int endTime ; // 終?刻のhm2int変換済み値 1656 int timeSpan ; // 開始時刻と終?刻の時間差(hm2int変換済み値) 1657 String viewTime ; // ??ルチップ表示用の??(HH:mm-HH:mm) 1658 1659 Calendar str ; 1660 Calendar end ; 1661 1662 for( int i=0; i<len; i++ ) { 1663 String startEnd = startEnds[i]; 1664 if( startEnd != null ) { 1665 // startEnd = "0700ss-2000ss"; // 開?終?刻(HHmm-HHmm) 1666 // startEnd = "200508200700ss-2000ss"; // 開?終?刻(yyyyMMddHHmm-HHmm) 1667 // startEnd = "200508200700ss-200508212000ss"; // 開?終?刻(yyyyMMddHHmm-yyyyMMddHHmm) 1668 1669 // 5.6.1.2 (2013/02/22) breakTimesの処?法?見直? 1670 int idx = startEnd.indexOf( '-' ); // ハイフンを見つける? 1671 if( idx > 0 ) { 1672 String st = startEnd.substring( 0,idx ); 1673 String ed = startEnd.substring( idx+1 ); 1674 1675 startDay = (st.length() >= 8) ? st.substring( 0,8 ) : null ; // ?ケタ以上で、yyyyMMdd 取? 1676 endDay = (ed.length() >= 8) ? ed.substring( 0,8 ) : null ; // ?ケタ以上で、yyyyMMdd 取? 1677 startTime = hm2int( st ); 1678 endTime = hm2int( ed ); 1679 } 1680 // startEnd = "0700ss"; // 開始時刻(HHmm) 1681 // startEnd = "200508200700ss"; // 開始時刻(yyyyMMddHHmm) 1682 // startEnd = "200508200700ss"; // 開始時刻(yyyyMMddHHmm) 1683 else { 1684 String st = startEnd; 1685 startDay = (st.length() >= 8) ? st.substring( 0,8 ) : null ; // ?ケタ以上で、yyyyMMdd 取? 1686 endDay = null ; 1687 startTime = hm2int( st ); 1688 endTime = startTime + 1; // 差?出すため?startTime に 1 ??? 1689 } 1690 1691 // 5.6.1.2 (2013/02/22) 処?直? 1692 // // startEnd = "0700-2000"; // 開?終?刻(HHmm-HHmm) 1693 // if( startEnd.length() == 9 && startEnd.charAt(4) == '-' ) { 1694 // startDay = null; 1695 // endDay = null; 1696 // startTime = ym2int( startEnd.substring( 0,2 ),startEnd.substring( 2,4 ) ); 1697 // endTime = ym2int( startEnd.substring( 5,7 ),startEnd.substring( 7 ) ); 1698 // } 1699 // // startEnd = "200508200700-2000"; // 開?終?刻(yyyyMMddHHmm-HHmm) 1700 // else if( startEnd.length() == 17 && startEnd.charAt(12) == '-' ) { 1701 // startDay = startEnd.substring( 0,8 ); 1702 // endDay = null; 1703 // startTime = ym2int( startEnd.substring( 8,10 ),startEnd.substring( 10,12 ) ); 1704 // endTime = ym2int( startEnd.substring( 13,15 ),startEnd.substring( 15 ) ); 1705 // } 1706 // // startEnd = "200508200700-200508212000"; // 開?終?刻(yyyyMMddHHmm-yyyyMMddHHmm) 1707 // else if( startEnd.length() == 25 && startEnd.charAt(12) == '-' ) { 1708 // startDay = startEnd.substring( 0,8 ); 1709 // endDay = startEnd.substring( 13,21 ); 1710 // startTime = ym2int( startEnd.substring( 8,10 ),startEnd.substring( 10,12 ) ); 1711 // endTime = ym2int( startEnd.substring( 21,23 ),startEnd.substring( 23 ) ); 1712 // } 1713 // else { 1714 // String errMsg = "休?時間は、HHmm-HHmm形式?また?、yyyyMMddHHmm-HHmm、また?、yyyyMMddHHmm-yyyyMMddHHmm形式です?" 1715 // + HybsSystem.CR 1716 // + "breakTimes=[" + breakTimes + "] Bad=[" + startEnd + "]" ; 1717 // throw new HybsSystemException( errMsg ); 1718 // } 1719 1720 str = null; 1721 end = null; 1722 if( startDay != null ) { str = HybsSystem.getCalendar( startDay ); } 1723 if( endDay != null ) { end = HybsSystem.getCalendar( endDay ); } 1724 1725 // 表示終?刻 ?2400 より大きい場合?表示開始時刻 >= 表示終?刻 である? 1726 if( time24 ) { 1727 // 開始時刻 < 表示終?刻 => 開始時刻に2400?する? 1728 if( startTime < viewEndTime-2400 ) { 1729 if( str != null ) { 1730 str.add(Calendar.DATE, -1 ); // -1 日しておく 1731 startDay = format.format( str.getTime() ); 1732 } 1733 startTime += 2400; 1734 } 1735 1736 // 終?刻 <= 表示終?刻 => 終?刻に2400?する? 1737 if( endTime <= viewEndTime-2400 ) { 1738 if( end != null ) { 1739 end.add(Calendar.DATE, -1 ); // -1 日しておく 1740 endDay = format.format( end.getTime() ); 1741 } 1742 endTime += 2400; 1743 } 1744 } 1745 1746 // 3.8.1.1 (2005/11/21) 判定条件修正 1747 // 開始時刻 < 表示開始時刻 => 開始時刻に表示開始時刻をセ?? 1748 if( startTime < viewStartTime ) { startTime = viewStartTime; } 1749 1750 // 開始時刻 > 表示終?刻 => 開始時刻に表示終?刻をセ?? 1751 if( startTime > viewEndTime ) { startTime = viewEndTime; } 1752 1753 // 終?刻 < 表示開始時刻 => 終?刻に表示開始時刻をセ?? 1754 if( endTime < viewStartTime ) { endTime = viewStartTime; } 1755 1756 // 終?刻 > 表示終?刻 => 終?刻に表示終?刻をセ?? 1757 if( endTime > viewEndTime ) { endTime = viewEndTime; } 1758 timeSpan = endTime - startTime ; 1759 viewTime = startEnd ; 1760 } 1761 // null の場合?、カンマが連続したり、最後に余?に付いたケースなので、無視する? 1762 else { 1763 continue; 1764 } 1765 1766 // 終?が?って???始日と終?が同じ日の場合? 1767 if( timeSpan >= 0 && ( 1768 endDay == null || ( startDay != null && startDay.equals( endDay ) ) ) ) { 1769 timeSpan = endTime - startTime ; 1770 timeList.add( new BreakTimeData( startDay,startTime,timeSpan,viewTime ) ); 1771 } 1772 else { 1773 // 終?が?って?と?日に?れて?ので、?解する?がある? 1774 1775 // 初日の timeSpan は、startTime から viewEndTime まで 1776 timeSpan = viewEndTime - startTime ; 1777 timeList.add( new BreakTimeData( startDay,startTime,timeSpan,viewTime ) ); 1778 1779 // ?日の timeSpan は、viewStartTime から endTime まで 1780 timeSpan = endTime - viewStartTime ; 1781 timeList.add( new BreakTimeData( endDay,viewStartTime,timeSpan,viewTime ) ); 1782 1783 // 中日の timeSpan は、viewStartTime から viewEndTime まで 1784 timeSpan = viewEndTime - viewStartTime ; 1785 if( str != null && end != null ) { 1786 str.add(Calendar.DATE, 1 ); // +1 日しておく 1787 while( str.before( end ) ) { // 終?間?、?含まな??仕? 1788 Date dt = str.getTime(); 1789 String tempStartDay = format.format( dt ); 1790 timeList.add( new BreakTimeData( tempStartDay,viewStartTime,timeSpan,viewTime ) ); 1791 str.add(Calendar.DATE, 1); 1792 } 1793 } 1794 } 1795 } 1796 } 1797 1798 /** 1799 * そ?日のそ?時間の休?時間を表?SPANタグ群(?あり?)を作?します? 1800 * 1801 * @og.rev 3.8.9.2 (2007/07/28) 時間間隔パラメータ追? 1802 * 1803 * @param offset 表示開始ピクセル数(実質表示日数 * ?日??ピクセル - オフセ?) 1804 * @param day Calendar 処?べき日付?カレン? 1805 * @param time 処?べき時? 1806 * @param step 時間間隔 1807 * @return そ?日のそ?時間の休?時間を表?SPANタグ群(?あり?) 1808 */ 1809 // String makeSpan( final int offset,final Calendar day,final int time ) { 1810 String makeSpan( final int offset,final Calendar day,final int time,final int step ) { 1811 DateFormat format1 = new SimpleDateFormat( "yyyyMMdd",Locale.JAPAN ); 1812 String inDay = format1.format( day.getTime() ); 1813 1814 StringBuilder buf = new StringBuilder(); 1815 int size = timeList.size(); 1816 for( int i=0; i<size; i++ ) { 1817 BreakTimeData timeData = timeList.get(i); 1818 // if( timeData.startsWith( inDay,time ) ) { 1819 if( timeData.startsWith( inDay,time,step ) ) { 1820 buf.append( timeData.getBreakTime( offset,hourOfPixcel,breakTimeStyle ) ); 1821 } 1822 } 1823 1824 String rtn = null; 1825 1826 if( buf.length() > 0 ) { rtn = buf.toString(); } 1827 return rtn; 1828 } 1829 } 1830 1831 /** 1832 * こ?オブジェクト???表現を返します? 1833 * 基本???目?使用します? 1834 * 1835 * @return こ?クラスの??表現 1836 */ 1837 @Override 1838 public String toString() { 1839 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 1840 .println( "VERSION" ,VERSION ) 1841 .println( "startDate" ,startDate ) 1842 .println( "endDate" ,endDate ) 1843 .println( "daySpan" ,daySpan ) 1844 .println( "zoom" ,zoom ) 1845 .println( "breakTimes" ,breakTimes ) 1846 .println( "breakTimeStyle" ,breakTimeStyle ) 1847 .println( "baseTimes" ,baseTimes ) // 5.6.1.2 (2013/02/22) ベ?ス時刻 1848 .println( "baseTimeStyle" ,baseTimeStyle ) // 5.6.1.2 (2013/02/22) ベ?ス時刻スタイル 1849 .println( "calDB" ,calDB ) 1850 .println( "arg1" ,arg1 ) 1851 .println( "arg2" ,arg2 ) 1852 .println( "arg3" ,arg3 ) 1853 .println( "arg4" ,arg4 ) 1854 .println( "skipHoliday" ,skipHoliday ) 1855 .println( "TIME_PIXEL" ,TIME_PIXEL ) 1856 .println( "Other..." ,getAttributes().getAttribute() ) 1857 .fixForm().toString() ; 1858 } 1859 }