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 java.util.*;
031: import gov.nist.javax.sdp.*;
032:
033: /**
034: * Zone SDP 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:
043: public class ZoneField extends SDPField {
044: /** Zone adjustments. */
045: protected SDPObjectList zoneAdjustments;
046:
047: /**
048: * Copies the current instance.
049: * @return the copy of this object
050: */
051: public Object clone() {
052: ZoneField retval = new ZoneField();
053: retval.zoneAdjustments = (SDPObjectList) this .zoneAdjustments
054: .clone();
055: return retval;
056: }
057:
058: /**
059: * Default onstructor.
060: */
061: public ZoneField() {
062: super (ZONE_FIELD);
063: zoneAdjustments = new SDPObjectList();
064: }
065:
066: /**
067: * Adds an element to the zone adjustment list.
068: * @param za zone adjustment to add.
069: */
070: public void addZoneAdjustment(ZoneAdjustment za) {
071: zoneAdjustments.addElement(za);
072: }
073:
074: /**
075: * Gets the zone adjustment list.
076: * @return the list of zone adjustments.
077: */
078: public SDPObjectList getZoneAdjustments() {
079: return zoneAdjustments;
080: }
081:
082: /**
083: * Encodes this structure into a canonical form.
084: * @return encoded string of object contents
085: */
086: public String encode() {
087: StringBuffer retval = new StringBuffer(ZONE_FIELD);
088: for (int i = 0; i < zoneAdjustments.size(); i++) {
089: ZoneAdjustment za = (ZoneAdjustment) zoneAdjustments
090: .elementAt(i);
091: if (i > 0)
092: retval.append(Separators.SP);
093: retval.append(za.encode());
094: }
095: retval.append(Separators.NEWLINE);
096: return retval.toString();
097: }
098:
099: /**
100: * Returns a Hashtable of adjustment times, where:
101: * key = Date. This is the equivalent of the decimal NTP time value.
102: * value = Int Adjustment. This is a relative time value in seconds.
103: * @param create to set
104: * @throws SdpParseException if a parsing error occurs
105: * @return create when true, an empty Hashtable is created, if it is null.
106: */
107: public Hashtable getZoneAdjustments(boolean create)
108: throws SdpParseException {
109: Hashtable result = new Hashtable();
110: SDPObjectList zoneAdjustments = getZoneAdjustments();
111: ZoneAdjustment zone;
112: if (zoneAdjustments == null)
113: if (create)
114: return new Hashtable();
115: else
116: return null;
117: else {
118: for (int i = 0; i < zoneAdjustments.size(); i++) {
119: zone = (ZoneAdjustment) zoneAdjustments.elementAt(i);
120: Long l = new Long(zone.getTime());
121: Integer time = new Integer((int) l.longValue());
122: Date date = new Date(zone.getTime());
123: result.put(date, time);
124: }
125: return result;
126: }
127: }
128:
129: /**
130: * Sets the Hashtable of adjustment times, where:
131: * key = Date. This is the equivalent of the decimal NTP time value.
132: * value = Int Adjustment. This is a relative time value in seconds.
133: * @param map Hashtable to set
134: * @throws SdpException if the parameter is null
135: */
136: public void setZoneAdjustments(Hashtable map) throws SdpException {
137: if (map == null)
138: throw new SdpException("The map is null");
139: else {
140: SDPObjectList zoneAdjustments = getZoneAdjustments();
141: for (Enumeration e = map.keys(); e.hasMoreElements();) {
142: Object o = e.nextElement();
143: if (o instanceof Date) {
144: Date date = (Date) o;
145: ZoneAdjustment zone = new ZoneAdjustment();
146: zone.setTime(date.getTime());
147: addZoneAdjustment(zone);
148: } else
149: throw new SdpException(
150: "The map is not well-formated ");
151: }
152: }
153: }
154:
155: /**
156: * Sets whether the field will be output as a typed time or a integer value.
157: *
158: * Typed time is formatted as an integer followed by a unit character.
159: * The unit indicates an appropriate multiplier for
160: * the integer.
161: *
162: * The following unit types are allowed.
163: * <pre>
164: * d - days (86400 seconds)
165: * h - hours (3600 seconds)
166: * m - minutes (60 seconds)
167: * s - seconds ( 1 seconds)
168: * </pre>
169: * @param typedTime typedTime - if set true, the start
170: * and stop times will be
171: * output in an optimal typed time format; if false, the
172: * times will be output as integers.
173: */
174: public void setTypedTime(boolean typedTime) {
175: // Dummy -- feature not implemented.
176: }
177:
178: /**
179: * Returns whether the field will be output as a typed time or a
180: * integer value.
181: *
182: * Typed time is formatted as an integer followed by a unit character.
183: * The unit indicates an appropriate multiplier for
184: * the integer.
185: *
186: * The following unit types are allowed.
187: * <pre>
188: * d - days (86400 seconds)
189: * h - hours (3600 seconds)
190: * m - minutes (60 seconds)
191: * s - seconds ( 1 seconds)
192: * </pre>
193: * @return true, if the field will be output as a typed time;
194: * false, if as an integer value.
195: */
196: public boolean getTypedTime() {
197: return false;
198: }
199: }
|