001: /*
002: * Portions Copyright 2000-2007 Sun Microsystems, Inc. All Rights
003: * Reserved. Use is subject to license terms.
004: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
005: *
006: * This program is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU General Public License version
008: * 2 only, as published by the Free Software Foundation.
009: *
010: * This program is distributed in the hope that it will be useful, but
011: * WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * General Public License version 2 for more details (a copy is
014: * included at /legal/license.txt).
015: *
016: * You should have received a copy of the GNU General Public License
017: * version 2 along with this work; if not, write to the Free Software
018: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
019: * 02110-1301 USA
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
022: * Clara, CA 95054 or visit www.sun.com if you need additional
023: * information or have any questions.
024: */
025: /*
026: */
027: package gov.nist.javax.sdp.fields;
028:
029: import gov.nist.core.*;
030: import gov.nist.javax.sdp.*;
031: import java.util.Vector;
032:
033: /**
034: * Repeat SDP Field (part of the time field).
035: *
036: *@version JSR141-PUBLIC-REVIEW (subject to change).
037: *
038: *
039: *<a href="{@docRoot}/uncopyright.html">This code is in the public domain.</a>
040: *
041: */
042: public class RepeatField extends SDPField {
043: /** Repeat interval. */
044: protected TypedTime repeatInterval;
045: /** Duration. */
046: protected TypedTime activeDuration;
047: /** List of time offsets. */
048: protected SDPObjectList offsets;
049:
050: /**
051: * Copies the current instance.
052: * @return the copy of this object
053: */
054: public Object clone() {
055: RepeatField retval = new RepeatField();
056: if (this .repeatInterval != null)
057: retval.repeatInterval = (TypedTime) this .repeatInterval
058: .clone();
059: if (this .activeDuration != null)
060: retval.activeDuration = (TypedTime) this .activeDuration
061: .clone();
062: retval.offsets = (SDPObjectList) this .offsets.clone();
063: return retval;
064: }
065:
066: /** Default constructor. */
067: public RepeatField() {
068: super (REPEAT_FIELD);
069: offsets = new SDPObjectList();
070: }
071:
072: /**
073: * Sets the repeat interval.
074: * @param interval the new repeat interval
075: */
076: public void setRepeatInterval(TypedTime interval) {
077: repeatInterval = interval;
078: }
079:
080: /**
081: * Sets the duration.
082: * @param duration the active duration time period
083: */
084: public void setActiveDuration(TypedTime duration) {
085: activeDuration = duration;
086: }
087:
088: /**
089: * Adds an starting time offset.
090: * @param offset the new time offset to process
091: */
092: public void addOffset(TypedTime offset) {
093: offsets.addElement(offset);
094: }
095:
096: /**
097: * Gets a vector of starting time offsets.
098: * @return vector of time offsets
099: */
100: public Vector getOffsets() {
101: return offsets;
102: }
103:
104: /**
105: * Returns the "repeat interval" in seconds.
106: * @throws SdpParseException if a parsing error occurs
107: * @return the "repeat interval" in seconds.
108: */
109: public int getRepeatInterval() throws SdpParseException {
110: if (repeatInterval == null)
111: return -1;
112: else {
113: return repeatInterval.getTime();
114: }
115: }
116:
117: /**
118: * Sets the repeat interval in seconds.
119: * @param repeatInterval the "repeat interval" in seconds.
120: * @throws SdpException if repeatInterval is less than 0
121: */
122: public void setRepeatInterval(int repeatInterval)
123: throws SdpException {
124: if (repeatInterval < 0)
125: throw new SdpException("The repeat interval is < 0");
126: else {
127: if (this .repeatInterval == null)
128: this .repeatInterval = new TypedTime();
129: this .repeatInterval.setTime(repeatInterval);
130: }
131: }
132:
133: /**
134: * Returns the "active duration" in seconds.
135: * @throws SdpParseException if a parinsg error occurs
136: * @return the "active duration" in seconds.
137: */
138: public int getActiveDuration() throws SdpParseException {
139: if (activeDuration == null)
140: return -1;
141: else {
142: return activeDuration.getTime();
143: }
144: }
145:
146: /**
147: * Sets the "active duration" in seconds.
148: * @param activeDuration the "active duration" in seconds.
149: * @throws SdpException if the active duration is less than 0
150: */
151: public void setActiveDuration(int activeDuration)
152: throws SdpException {
153: if (activeDuration < 0)
154: throw new SdpException("The active Duration is < 0");
155: else {
156: if (this .activeDuration == null)
157: this .activeDuration = new TypedTime();
158: this .activeDuration.setTime(activeDuration);
159: }
160: }
161:
162: /**
163: * Returns the list of offsets. These are relative to the start-time given
164: * in the Time object (t=field) with which this RepeatTime is associated.
165: * @throws SdpParseException if a parsing error occurs
166: * @return the list of offsets
167: */
168: public int[] getOffsetArray() throws SdpParseException {
169: int[] result = new int[offsets.size()];
170: for (int i = 0; i < offsets.size(); i++) {
171: TypedTime typedTime = (TypedTime) offsets.elementAt(i);
172: result[i] = typedTime.getTime();
173: }
174: return result;
175: }
176:
177: /**
178: * Sets the list of offsets. These are relative to the start-time
179: * given in the Time object (t=field) with which this RepeatTime
180: * is associated.
181: * @param offsets array of repeat time offsets
182: * @throws SdpException if an error occurs setting the offsets
183: */
184: public void setOffsetArray(int[] offsets) throws SdpException {
185: for (int i = 0; i < offsets.length; i++) {
186: TypedTime typedTime = new TypedTime();
187: typedTime.setTime(offsets[i]);
188: addOffset(typedTime);
189: }
190:
191: }
192:
193: /**
194: * Returns whether the field will be output as a typed time or a
195: * integer value.
196: *
197: * Typed time is formatted as an integer followed by a unit
198: * character. The unit indicates an
199: * appropriate multiplier for the integer.
200: *<pre>
201: * The following unit types are allowed.
202: * d - days (86400 seconds)
203: * h - hours (3600 seconds)
204: * m - minutes (60 seconds)
205: * s - seconds ( 1 seconds)
206: * </pre>
207: * @throws SdpParseException if a parsing error occurs
208: * @return true, if the field will be output as a typed time; false,
209: * if as an integer value.
210: */
211: public boolean getTypedTime() throws SdpParseException {
212: return true;
213: }
214:
215: /**
216: * Sets whether the field will be output as a typed time or a integer value.
217: *
218: * Typed time is formatted as an integer followed by a unit
219: * character. The unit indicates an
220: * appropriate multiplier for the integer.
221: * <pre>
222: * The following unit types are allowed.
223: * d - days (86400 seconds)
224: * h - hours (3600 seconds)
225: * m - minutes (60 seconds)
226: * s - seconds ( 1 seconds)
227: * </pre>
228: * @param typedTime typedTime - if set true, the start and stop times
229: * will be output in an optimal typed
230: * time format; if false, the times will be output as integers.
231: */
232: public void setTypedTime(boolean typedTime) {
233:
234: }
235:
236: /**
237: * Gets an encoded string representation of the object.
238: * @return the encoded string of object contents
239: */
240: public String encode() {
241: String retval = REPEAT_FIELD + repeatInterval.encode()
242: + Separators.SP + activeDuration.encode();
243: for (int i = 0; i < offsets.size(); i++) {
244: TypedTime off = (TypedTime) offsets.elementAt(i);
245: retval += Separators.SP + off.encode();
246: }
247: retval += Separators.NEWLINE;
248: return retval;
249: }
250:
251: }
|