package kr.debop4j.timeperiod;
import org.joda.time.DateTime;
import org.joda.time.Duration;
/**
* 시간 간격을 표현합니다.
*
* @author 배성혁 sunghyouk.bae@gmail.com
* @since 13. 5. 11. 오후 2:58
*/
public interface ITimeInterval extends ITimePeriod {
/** 시작시작이 열린 구간인가? 즉 start time 에 값이 없다 */
boolean isStartOpen();
/** 완료시작이 열린 구간인가? 즉 end time 에 값이 없다 */
boolean isEndOpen();
/** 개구간인가? */
boolean isOpen();
/** 시작시각이 닫힌 구간인가? 즉 시작시각에 값이 있는가? */
boolean isStartClosed();
/** 완료시각이 닫힌 구간인가? 즉 완료시각에 값이 있는가? */
boolean isEndClosed();
/** 폐구간인가? */
boolean isClosed();
/** 빈 간격인가? */
boolean isEmpty();
/** Interval로 쓸 수 없는 경우 (isMoment 이면서, isClosed 인 경우) */
boolean isDegenerate();
/** 사용가능한 시간간격인가? */
boolean isIntervalEnabled();
DateTime getStartInterval();
void setStartInterval(DateTime start);
DateTime getEndInterval();
void setEndInterval(DateTime end);
IntervalEdge getStartEdge();
void setStartEdge(IntervalEdge startEdge);
IntervalEdge getEndEdge();
void setEndEdge(IntervalEdge startEdge);
void expandStartTo(DateTime moment);
void expandEndTo(DateTime moment);
void expandTo(DateTime moment);
void expandTo(ITimePeriod period);
void shrinkStartTo(DateTime moment);
void shrinkEndTo(DateTime moment);
void shrinkTo(DateTime moment);
void shrinkTo(ITimePeriod period);
/** 현재 IInterval에서 오프셋만큼 이동한 {@link ITimeInterval}을 반환합니다. */
@Override
ITimeInterval copy(Duration offset);
}