/*
* Portions Copyright 2000-2007 Sun Microsystems, Inc. All Rights
* Reserved. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 only, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License version 2 for more details (a copy is
* included at /legal/license.txt).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 or visit www.sun.com if you need additional
* information or have any questions.
*/
/*
*/
package gov.nist.javax.sdp.fields;
import gov.nist.core.*;
import gov.nist.javax.sdp.*;
import java.util.Vector;
/**
* Repeat SDP Field (part of the time field).
*
*@version JSR141-PUBLIC-REVIEW (subject to change).
*
*
*<a href="{@docRoot}/uncopyright.html">This code is in the public domain.</a>
*
*/
public class RepeatField extends SDPField {
/** Repeat interval. */
protected TypedTime repeatInterval;
/** Duration. */
protected TypedTime activeDuration;
/** List of time offsets. */
protected SDPObjectList offsets;
/**
* Copies the current instance.
* @return the copy of this object
*/
public Object clone() {
RepeatField retval = new RepeatField();
if (this.repeatInterval != null)
retval.repeatInterval =
(TypedTime) this.repeatInterval.clone();
if (this.activeDuration != null)
retval.activeDuration =
(TypedTime)this.activeDuration.clone();
retval.offsets =
(SDPObjectList) this.offsets.clone();
return retval;
}
/** Default constructor. */
public RepeatField() {
super(REPEAT_FIELD);
offsets = new SDPObjectList();
}
/**
* Sets the repeat interval.
* @param interval the new repeat interval
*/
public void setRepeatInterval(TypedTime interval) {
repeatInterval = interval;
}
/**
* Sets the duration.
* @param duration the active duration time period
*/
public void setActiveDuration(TypedTime duration) {
activeDuration = duration;
}
/**
* Adds an starting time offset.
* @param offset the new time offset to process
*/
public void addOffset(TypedTime offset) {
offsets.addElement(offset);
}
/**
* Gets a vector of starting time offsets.
* @return vector of time offsets
*/
public Vector getOffsets()
{ return offsets; }
/**
* Returns the "repeat interval" in seconds.
* @throws SdpParseException if a parsing error occurs
* @return the "repeat interval" in seconds.
*/
public int getRepeatInterval()
throws SdpParseException {
if (repeatInterval == null)
return -1;
else {
return repeatInterval.getTime();
}
}
/**
* Sets the repeat interval in seconds.
* @param repeatInterval the "repeat interval" in seconds.
* @throws SdpException if repeatInterval is less than 0
*/
public void setRepeatInterval(int repeatInterval)
throws SdpException {
if (repeatInterval < 0)
throw new SdpException("The repeat interval is < 0");
else {
if (this.repeatInterval == null)
this.repeatInterval = new TypedTime();
this.repeatInterval.setTime(repeatInterval);
}
}
/**
* Returns the "active duration" in seconds.
* @throws SdpParseException if a parinsg error occurs
* @return the "active duration" in seconds.
*/
public int getActiveDuration()
throws SdpParseException {
if (activeDuration == null)
return -1;
else {
return activeDuration.getTime();
}
}
/**
* Sets the "active duration" in seconds.
* @param activeDuration the "active duration" in seconds.
* @throws SdpException if the active duration is less than 0
*/
public void setActiveDuration(int activeDuration)
throws SdpException {
if (activeDuration < 0)
throw new SdpException("The active Duration is < 0");
else {
if (this.activeDuration == null)
this.activeDuration = new TypedTime();
this.activeDuration.setTime(activeDuration);
}
}
/**
* Returns the list of offsets. These are relative to the start-time given
* in the Time object (t=field) with which this RepeatTime is associated.
* @throws SdpParseException if a parsing error occurs
* @return the list of offsets
*/
public int[] getOffsetArray()
throws SdpParseException {
int[] result = new int[offsets.size()];
for (int i = 0; i < offsets.size(); i++) {
TypedTime typedTime = (TypedTime)offsets.elementAt(i);
result[i] = typedTime.getTime();
}
return result;
}
/**
* Sets the list of offsets. These are relative to the start-time
* given in the Time object (t=field) with which this RepeatTime
* is associated.
* @param offsets array of repeat time offsets
* @throws SdpException if an error occurs setting the offsets
*/
public void setOffsetArray(int[] offsets)
throws SdpException {
for (int i = 0; i < offsets.length; i++) {
TypedTime typedTime = new TypedTime();
typedTime.setTime(offsets[i]);
addOffset(typedTime);
}
}
/**
* Returns whether the field will be output as a typed time or a
* integer value.
*
* Typed time is formatted as an integer followed by a unit
* character. The unit indicates an
* appropriate multiplier for the integer.
*<pre>
* The following unit types are allowed.
* d - days (86400 seconds)
* h - hours (3600 seconds)
* m - minutes (60 seconds)
* s - seconds ( 1 seconds)
* </pre>
* @throws SdpParseException if a parsing error occurs
* @return true, if the field will be output as a typed time; false,
* if as an integer value.
*/
public boolean getTypedTime()
throws SdpParseException {
return true;
}
/**
* Sets whether the field will be output as a typed time or a integer value.
*
* Typed time is formatted as an integer followed by a unit
* character. The unit indicates an
* appropriate multiplier for the integer.
* <pre>
* The following unit types are allowed.
* d - days (86400 seconds)
* h - hours (3600 seconds)
* m - minutes (60 seconds)
* s - seconds ( 1 seconds)
* </pre>
* @param typedTime typedTime - if set true, the start and stop times
* will be output in an optimal typed
* time format; if false, the times will be output as integers.
*/
public void setTypedTime(boolean typedTime) {
}
/**
* Gets an encoded string representation of the object.
* @return the encoded string of object contents
*/
public String encode() {
String retval = REPEAT_FIELD + repeatInterval.encode()
+ Separators.SP +
activeDuration.encode();
for (int i = 0; i < offsets.size(); i++) {
TypedTime off = (TypedTime) offsets.elementAt(i);
retval += Separators.SP + off.encode();
}
retval += Separators.NEWLINE;
return retval;
}
}
|