/*
 * Copyright (c) 2009 The openGion Project.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */
package org.opengion.hayabusa.resource;

import java.util.Calendar;

/**
 * カレンダデータインターフェースです。
 *
 * カレンダデータは、ＤＢまたは標準のカレンダより休日を求めることができます。
 *
 * @og.rev 3.6.0.0 (2004/09/17) 新規作成
 * @og.group リソース管理
 *
 * @version  4.0
 * @author   Kazuhiko Hasegawa
 * @since    JDK5.0,
 */
public interface CalendarData {

	/**
	 * 指定の日付けが、休日かどうかを返します。
	 * 指定の日付けが、キャッシュしているデータの最大と最小の間に
	 * 存在しない場合は、エラーとします。
	 *
	 * @param  day Calendar 指定の日付け
	 * @return boolean 休日：true それ以外：false
	 *
	 */
	boolean isHoliday( Calendar day ) ;

	/**
	 * 指定の日付けから、範囲の間に、本日を含むかどうかを返します。
	 * 指定の日付けが、キャッシュしているデータの最大と最小の間に
	 * 存在しない場合は、常に false になります。
	 * 判定は、年月日の項目のみで比較し、時分秒は無視します。
	 *
	 * @og.rev 3.7.1.1 (2005/05/31) 新規追加
	 *
	 * @param  day Calendar 指定の開始日付け
	 * @param  scope int 範囲の日数
	 * @return boolean 本日：true それ以外：false
	 */
	boolean isContainedToday( Calendar day,int scope ) ;

	/**
	 * 指定の開始、終了日の期間に、平日（稼働日）が何日あるか求めます。
	 * start と end が、リスト範囲外の場合は、エラーとします。
	 * 開始と終了が同じ日の場合は、１を返します。
	 *
	 * @param  start Calendar 開始日付け(稼働日に含めます)
	 * @param  end   Calendar 終了日付け(稼働日に含めます)
	 * @return int   稼働日数
	 *
	 */
	int getKadoubisu( Calendar start,Calendar end ) ;

	/**
	 * 指定の開始日に平日のみ期間を加算して求められる日付けを返します。
	 * これは、実稼働日計算に使用します。
	 * 例えば、start=20040810 , span=5 で、休日がなければ、10,11,12,13,14 となり、
	 * 20040815 を返します。
	 * 指定の日付けや、期間加算後の日付けが、キャッシュしているデータの
	 * 最大と最小の間に存在しない場合は、エラーとします。
	 *
	 * @param  start Calendar   開始日付け(YYYYMMDD 形式)
	 * @param  span  int      稼動期間
	 * @return Calendar 開始日から稼動期間を加算した日付け（当日を含む）
	 *
	 */
	Calendar getAfterDay( Calendar start,int span ) ;
}
