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    }