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