001: /*
002: * <copyright>
003: *
004: * Copyright 1997-2004 BBNT Solutions, LLC
005: * under sponsorship of the Defense Advanced Research Projects
006: * Agency (DARPA).
007: *
008: * You can redistribute this software and/or modify it under the
009: * terms of the Cougaar Open Source License as published on the
010: * Cougaar Open Source Website (www.cougaar.org).
011: *
012: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
013: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
014: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
015: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
016: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
017: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
018: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
019: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
020: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
021: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
022: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
023: *
024: * </copyright>
025: */
026:
027: package org.cougaar.planning.ldm.plan;
028:
029: import java.util.Collection;
030: import java.util.Date;
031: import java.util.Enumeration;
032: import java.util.List;
033:
034: import org.cougaar.util.Thunk;
035: import org.cougaar.util.TimeSpan;
036: import org.cougaar.util.UnaryPredicate;
037:
038: /**
039: * A Schedule is an encapsulation of spatio-temporal relationships.
040: * Current thought is to bind up both time and space into a single
041: * object which may then be queried in various ways to test for
042: * overlaps, inclusion, exclusion, etc with other schedules.
043: *
044: * Extends Collection to provide direct access to the collection api
045: * accessors, and TimeSpan to allow comparison of whole schedules to
046: * each other.
047: **/
048:
049: public interface Schedule extends List, TimeSpan {
050: /** get a string describing what type of schedule this is (i.e.
051: * what kind of scheduleelements this schedule containts).
052: * Values are defined in ScheduleElementType.
053: * @see org.cougaar.planning.ldm.plan.ScheduleElementType
054: * @return String
055: **/
056: Class getScheduleElementType();
057:
058: /** get a description of what type of Schedule this is
059: * Values are defined in ScheduleType
060: * @see org.cougaar.planning.ldm.plan.ScheduleType
061: * @return ScheduleType
062: **/
063: String getScheduleType();
064:
065: /** get an enumeration of all of the schedule elements of this schedule.
066: * Enumeration backed by a copy of the Schedule.
067: * @return Enumeration{ScheduleElement}
068: */
069: Enumeration getAllScheduleElements();
070:
071: /** Apply a Thunk to each ScheduleElement in the Schedule **/
072: void applyThunkToScheduleElements(Thunk t);
073:
074: /** return subset of elements which meet the specified predicate
075: * @return Collection(ScheduleElements)
076: */
077: Collection filter(UnaryPredicate predicate);
078:
079: /**
080: * @deprecated Use getScheduleElementsWithTime(long aTime)
081: */
082: Collection getScheduleElementsWithDate(Date aDate);
083:
084: /** @return a sorted Collection of schedule elements that include this date.
085: * Note that each schedule element will have a start date less than or equal to
086: * the specified date and an end date after the specified date.
087: */
088: Collection getScheduleElementsWithTime(long aTime);
089:
090: /**
091: * @deprecated Use getOverlappingScheduleElements(long, long)
092: */
093: Collection getOverlappingScheduleElements(Date startDate,
094: Date endDate);
095:
096: /** @return a sorted Collection of schedule elements that have dates in the
097: * given range of dates. Note that these schedule elements may
098: * or may not be fully bound by the date range - they may overlap.
099: * Note that enddates are not included in time spans.
100: */
101: Collection getOverlappingScheduleElements(long startTime,
102: long endTime);
103:
104: /** @deprecated use getEncapsulatedScheduleElements(long, long)
105: */
106: Collection getEncapsulatedScheduleElements(Date startDate,
107: Date endDate);
108:
109: /**
110: * @return a sorted collection of schedule elements that are fully bound
111: * or encapsulated by a date range.
112: * Note that enddates are not included in time spans.
113: */
114: Collection getEncapsulatedScheduleElements(long startTime,
115: long endTime);
116:
117: /** @deprecated use getStartTime() **/
118: Date getStartDate();
119:
120: /** @deprecated use getEndTime() **/
121: Date getEndDate();
122:
123: }
|