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:
033: import org.cougaar.planning.ldm.asset.Asset;
034:
035: /**
036: * A RoleSchedule is a representation of an asset's scheduled
037: * commitments. These commitments(plan elements) are stored
038: * in a Collection. RoleSchedules do not travel with an
039: * asset across agent boundaries, therefore, the roleschedule
040: * is only valid while that asset is assigned to the current agent.
041: **/
042:
043: public interface RoleSchedule extends Schedule {
044: /** @return Asset the Asset of this roleschedule.
045: **/
046: Asset getAsset();
047:
048: /** @return a sorted Collection containing planelements
049: * whose estimatedschedule falls within the given date range.
050: * @param start Start time of the desired range.
051: * @param end End time of the desired range.
052: **/
053: Collection getEncapsulatedRoleSchedule(long start, long end);
054:
055: /** @deprecated use getEncapsulatedRoleSchedule(long, long) **/
056: Collection getEncapsulatedRoleSchedule(Date start, Date end);
057:
058: /**
059: * @param aspecttype The AspectType
060: * @param value The double representing value of the given AspectType
061: * @return a sorted Collection containing planelements with
062: * a given AspectType and value.
063: **/
064: Collection getEqualAspectValues(int aspecttype, double value);
065:
066: /** @return a sorted collection containing planelements
067: * whose estimatedschedule overlaps with the given date range
068: * @param start Start time of overlapping range
069: * @param end End time of overlapping range
070: **/
071: Collection getOverlappingRoleSchedule(long start, long end);
072:
073: /** @deprecated use getOverlappingRoleSchedule(long, long) **/
074: Collection getOverlappingRoleSchedule(Date start, Date end);
075:
076: /** @return an Enumeration of PlanElements representing
077: * the entire roleschedule
078: **/
079: Enumeration getRoleScheduleElements();
080:
081: /** The AvailableSchedule represents the time period that this asset
082: * is assigned to a agent for use. It does not represent any usage
083: * of this asset - that information is elsewhere in the RoleSchedule.
084: *
085: * @return the schedule marking the availability time frame for the asset
086: * in this agent.
087: **/
088: Schedule getAvailableSchedule();
089:
090: /** @return a time ordered Collection containing planelements with a given Role.
091: * @param aRole The Role to find
092: **/
093: Collection getMatchingRoleElements(Role aRole);
094:
095: /**
096: * @return a time sorted Collection of planelements which
097: * include this time.
098: */
099: Collection getScheduleElementsWithTime(long aDate);
100:
101: /** @deprecated use getScheduleElementsWithTime(long) **/
102: Collection getScheduleElementsWithDate(Date aDate);
103:
104: /** Convenience utility that adds the requested aspectvalues of the estimated
105: * allocationresult of each PlanElement (RoleSchedule Element) in the given
106: * collection.
107: * If the requested aspecttype is not defined for any of the elements, nothing
108: * will be added to the sum for that particular element.
109: * This utility should be used to add aspecttypes like quantity, cost, etc.
110: * @return The sum of the aspectvalues
111: * @param elementsToAdd A set of roleschedule elements (planelements) to add
112: * @see org.cougaar.planning.ldm.plan.AspectType
113: **/
114: double addAspectValues(Collection elementsToAdd, int aspecttype);
115: }
|