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: package gov.nist.siplite.header;
027:
028: import gov.nist.core.*;
029: import java.util.Calendar;
030: import java.util.Date;
031: import java.util.TimeZone;
032:
033: /**
034: * Date sip header.
035: *
036: * IMPL_NOTE: implement setHeaderValue()!
037: */
038:
039: public class DateHeader extends ParameterLessHeader {
040: /** Value for current date header field. */
041: private ExtendedCalendar date;
042:
043: /** Label for date header field. */
044: public static final String NAME = Header.DATE;
045:
046: /** Class handle. */
047: protected static Class clazz;
048:
049: static {
050: clazz = new DateHeader().getClass();
051: }
052:
053: /** Default constructor. */
054: public DateHeader() {
055: super (Header.DATE);
056: date = new ExtendedCalendar();
057: }
058:
059: /**
060: * Sets the expiry date.
061: * @param dateToSet is the date to set.
062: */
063: public void setDate(Date dateToSet) {
064: this .date.setTime(dateToSet);
065: }
066:
067: /**
068: * Sets the date.
069: * @param calendarToSet the new value for date field
070: */
071: public void setDate(Calendar calendarToSet) {
072: this .date.setCalendar(calendarToSet);
073: }
074:
075: /**
076: * Gets the expiry date.
077: * @return get the expiry date.
078: */
079: public Date getDate() {
080: return this .date.getTime();
081: }
082:
083: /**
084: * Gets the calendar date.
085: * @return the current date value
086: */
087: public Object getValue() {
088: return this .date;
089: }
090:
091: /**
092: * Encodes into canonical form.
093: * @return encoded string of object contents
094: */
095: public String encodeBody() {
096: StringBuffer sbuf = new StringBuffer();
097: sbuf.append(encodeCalendar(date.getCalendar()));
098: return sbuf.toString();
099: }
100:
101: /**
102: * Copies the current instance.
103: * @return copy of the current object
104: */
105: public Object clone() {
106: DateHeader retval = new DateHeader();
107: retval.setDate(this .getDate());
108: return retval;
109: }
110:
111: /**
112: * Encodes the object. Calls encode().
113: * @return String string representation of the date.
114: */
115: public String toString() {
116: return encode();
117: }
118:
119: /**
120: * ExtendedCalendar class is a wrapper for Calendar class.
121: * It's required because java.util.Calendar in CLDC doesn't implement
122: * toString(), so DateHeader.getValue().toString() will return
123: * something like com.sun.cldc.util.j2me$Calendar@... instead of
124: * the string date representation expected by the caller.
125: */
126: private class ExtendedCalendar extends Object {
127:
128: /** Internal Calendar object which is represented by this class. */
129: private Calendar date;
130:
131: /** Default constructor. */
132: public ExtendedCalendar() {
133: date = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
134: }
135:
136: /**
137: * Sets the internal Calendar object.
138: * @param calendarToSet the new value for date field
139: */
140: public void setCalendar(Calendar calendarToSet) {
141: date = calendarToSet;
142: }
143:
144: /**
145: * Return the internal Calendar object.
146: * @return the internal Calendar object
147: */
148: public Calendar getCalendar() {
149: return date;
150: }
151:
152: /**
153: * Sets this Calendar's current time with the given Date.
154: * @param timeToSet the given Date
155: */
156: public void setTime(Date timeToSet) {
157: date.setTime(timeToSet);
158: }
159:
160: /**
161: * Gets this Calendar's current time.
162: * @return the current time
163: */
164: public Date getTime() {
165: return date.getTime();
166: }
167:
168: /**
169: * Encodes the object.
170: * @return string representation of the date.
171: */
172: public String toString() {
173: return Header.encodeCalendar(date);
174: }
175:
176: } // ExtendedCalendar end
177:
178: }
|