1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/* 2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Conditions Of Use 3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* This software was developed by employees of the National Institute of 5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Standards and Technology (NIST), an agency of the Federal Government. 6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Pursuant to title 15 Untied States Code Section 105, works of NIST 7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* employees are not subject to copyright protection in the United States 8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* and are considered to be in the public domain. As a result, a formal 9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* license is not needed to use the software. 10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* This software is provided by NIST as a service and is expressly 12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED 13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF 14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT 15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* AND DATA ACCURACY. NIST does not warrant or make any representations 16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* regarding the use of the software or the results thereof, including but 17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* not limited to the correctness, accuracy, reliability or usefulness of 18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* the software. 19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Permission to use this software is contingent upon your acceptance 21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* of the terms of this agreement 22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* . 24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*/ 26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/******************************************************************************* 27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Product of NIST/ITL Advanced Networking Technologies Division (ANTD). * 28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*******************************************************************************/ 29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.header; 30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.*; 31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.util.Calendar; 32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.util.TimeZone; 33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.util.Locale; 34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.util.GregorianCalendar; 35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.io.Serializable; 36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.lang.IllegalArgumentException; 37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/** 39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Implements a parser class for tracking expiration time 40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* when specified as a Date value. 41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*<pre> 42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* From the HTTP 1.1 spec 43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*14.18 Date 44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* The Date general-header field represents the date and time at which 46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* the message was originated, having the same semantics as orig-date in 47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* RFC 822. The field value is an HTTP-date, as described in section 48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 3.3.1; it MUST be sent in RFC 1123 [8]-date format. 49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Date = "Date" ":" HTTP-date 51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* An example is 53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Date: Tue, 15 Nov 1994 08:12:31 GMT 55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*</pre> 56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*@version 1.2 $Revision: 1.9 $ $Date: 2009/10/18 13:46:33 $ 58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*@author M. Ranganathan <br/> 60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*/ 65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class SIPDate implements Cloneable,Serializable { 67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Comment for <code>serialVersionUID</code> 69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private static final long serialVersionUID = 8544101899928346909L; 71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String GMT = "GMT"; 72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String MON = "Mon"; 73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String TUE = "Tue"; 74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String WED = "Wed"; 75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String THU = "Thu"; 76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String FRI = "Fri"; 77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String SAT = "Sat"; 78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String SUN = "Sun"; 79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String JAN = "Jan"; 80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String FEB = "Feb"; 81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String MAR = "Mar"; 82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String APR = "Apr"; 83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String MAY = "May"; 84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String JUN = "Jun"; 85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String JUL = "Jul"; 86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String AUG = "Aug"; 87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String SEP = "Sep"; 88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String OCT = "Oct"; 89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String NOV = "Nov"; 90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String DEC = "Dec"; 91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** sipWkDay member 93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected String sipWkDay; 95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** sipMonth member 97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected String sipMonth; 99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** wkday member 101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected int wkday; 103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** day member 105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected int day; 107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** month member 109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected int month; 111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** year member 113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected int year; 115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** hour member 117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected int hour; 119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** minute member 121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected int minute; 123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** second member 125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected int second; 127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** javaCal member 129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private java.util.Calendar javaCal; 131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** equality check. 133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *@return true if the two date fields are equals 135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public boolean equals(Object that){ 137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (that.getClass() != this.getClass())return false; 138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPDate other = (SIPDate)that; 139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return this.wkday == other.wkday && 140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.day == other.day && 141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.month == other.month && 142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.year == other.year && 143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.hour == other.hour && 144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.minute == other.minute && 145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.second == other.second; 146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Initializer, sets all the fields to invalid values. 150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public SIPDate() { 152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang wkday = -1; 153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang day = -1; 154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = -1; 155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang year = -1; 156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hour = -1; 157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang minute = -1; 158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang second = -1; 159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal = null; 160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Construct a SIP date from the time offset given in miliseconds 164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param timeMillis long to set 165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public SIPDate(long timeMillis) { 167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal = 168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang new GregorianCalendar( 169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang TimeZone.getTimeZone("GMT:0"), 170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Locale.getDefault()); 171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang java.util.Date date = new java.util.Date(timeMillis); 172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal.setTime(date); 173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang wkday = javaCal.get(Calendar.DAY_OF_WEEK); 174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang switch (wkday) { 175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.MONDAY : 176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipWkDay = MON; 177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.TUESDAY : 179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipWkDay = TUE; 180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.WEDNESDAY : 182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipWkDay = WED; 183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.THURSDAY : 185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipWkDay = THU; 186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.FRIDAY : 188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipWkDay = FRI; 189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.SATURDAY : 191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipWkDay = SAT; 192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.SUNDAY : 194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipWkDay = SUN; 195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang default : 197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang InternalErrorHandler.handleException( 198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "No date map for wkday " + wkday); 199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang day = javaCal.get(Calendar.DAY_OF_MONTH); 202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = javaCal.get(Calendar.MONTH); 203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang switch (month) { 204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.JANUARY : 205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = JAN; 206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.FEBRUARY : 208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = FEB; 209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.MARCH : 211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = MAR; 212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.APRIL : 214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = APR; 215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.MAY : 217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = MAY; 218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.JUNE : 220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = JUN; 221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.JULY : 223600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = JUL; 224600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 225600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.AUGUST : 226600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = AUG; 227600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 228600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.SEPTEMBER : 229600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = SEP; 230600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 231600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.OCTOBER : 232600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = OCT; 233600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 234600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.NOVEMBER : 235600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = NOV; 236600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 237600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang case Calendar.DECEMBER : 238600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = DEC; 239600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang break; 240600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang default : 241600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang InternalErrorHandler.handleException( 242600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "No date map for month " + month); 243600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 244600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang year = javaCal.get(Calendar.YEAR); 245600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Bug report by Bruno Konik 246600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hour = javaCal.get(Calendar.HOUR_OF_DAY); 247600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang minute = javaCal.get(Calendar.MINUTE); 248600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang second = javaCal.get(Calendar.SECOND); 249600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 250600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 251600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 252600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Get canonical string representation. 253600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return String 254600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 255600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String encode() { 256600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 257600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String dayString; 258600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (day < 10) { 259600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang dayString = "0" + day; 260600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else 261600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang dayString = "" + day; 262600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 263600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String hourString; 264600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (hour < 10) { 265600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hourString = "0" + hour; 266600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else 267600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hourString = "" + hour; 268600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 269600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String minuteString; 270600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (minute < 10) { 271600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang minuteString = "0" + minute; 272600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else 273600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang minuteString = "" + minute; 274600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 275600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String secondString; 276600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (second < 10) { 277600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang secondString = "0" + second; 278600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else 279600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang secondString = "" + second; 280600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 281600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String encoding = ""; 282600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 283600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sipWkDay != null) 284600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang encoding += sipWkDay + Separators.COMMA + Separators.SP; 285600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 286600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang encoding += dayString + Separators.SP; 287600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 288600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sipMonth != null) 289600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang encoding += sipMonth + Separators.SP; 290600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 291600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang encoding += year 292600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + Separators.SP 293600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + hourString 294600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + Separators.COLON 295600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + minuteString 296600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + Separators.COLON 297600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + secondString 298600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + Separators.SP 299600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + GMT; 300600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 301600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return encoding; 302600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 303600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 304600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 305600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * The only accessor we allow is to the java calendar record. 306600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * All other fields are for this package only. 307600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return Calendar 308600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 309600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public java.util.Calendar getJavaCal() { 310600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (javaCal == null) 311600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang setJavaCal(); 312600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return javaCal; 313600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 314600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 315600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** get the WkDay field 316600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return String 317600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 318600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getWkday() { 319600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipWkDay; 320600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 321600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 322600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** get the month 323600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return String 324600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 325600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getMonth() { 326600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipMonth; 327600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 328600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 329600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** get the hour 330600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return int 331600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 332600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int getHour() { 333600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return hour; 334600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 335600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 336600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** get the minute 337600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return int 338600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 339600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int getMinute() { 340600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return minute; 341600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 342600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 343600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** get the second 344600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return int 345600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 346600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int getSecond() { 347600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return second; 348600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 349600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 350600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 351600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * convert the SIP Date of this structure to a Java Date. 352600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * SIP Dates are forced to be GMT. Stores the converted time 353600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * as a java Calendar class. 354600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 355600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private void setJavaCal() { 356600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal = 357600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang new GregorianCalendar( 358600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang TimeZone.getTimeZone("GMT:0"), 359600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Locale.getDefault()); 360600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (year != -1) 361600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal.set(Calendar.YEAR, year); 362600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (day != -1) 363600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal.set(Calendar.DAY_OF_MONTH, day); 364600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (month != -1) 365600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal.set(Calendar.MONTH, month); 366600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (wkday != -1) 367600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal.set(Calendar.DAY_OF_WEEK, wkday); 368600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (hour != -1) 369600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal.set(Calendar.HOUR, hour); 370600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (minute != -1) 371600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal.set(Calendar.MINUTE, minute); 372600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (second != -1) 373600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal.set(Calendar.SECOND, second); 374600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 375600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 376600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 377600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the wkday member 378600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param w String to set 379600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws IllegalArgumentException if w is not a valid day. 380600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 381600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setWkday(String w) throws IllegalArgumentException { 382600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipWkDay = w; 383600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sipWkDay.compareToIgnoreCase(MON) == 0) { 384600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang wkday = Calendar.MONDAY; 385600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipWkDay.compareToIgnoreCase(TUE) == 0) { 386600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang wkday = Calendar.TUESDAY; 387600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipWkDay.compareToIgnoreCase(WED) == 0) { 388600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang wkday = Calendar.WEDNESDAY; 389600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipWkDay.compareToIgnoreCase(THU) == 0) { 390600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang wkday = Calendar.THURSDAY; 391600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipWkDay.compareToIgnoreCase(FRI) == 0) { 392600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang wkday = Calendar.FRIDAY; 393600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipWkDay.compareToIgnoreCase(SAT) == 0) { 394600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang wkday = Calendar.SATURDAY; 395600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipWkDay.compareToIgnoreCase(SUN) == 0) { 396600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang wkday = Calendar.SUNDAY; 397600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else { 398600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new IllegalArgumentException("Illegal Week day :" + w); 399600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 400600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 401600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 402600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 403600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the day member 404600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param d int to set 405600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws IllegalArgumentException if d is not a valid day 406600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 407600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setDay(int d) throws IllegalArgumentException { 408600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (d < 1 || d > 31) 409600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new IllegalArgumentException( 410600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "Illegal Day of the month " + Integer.toString(d)); 411600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang day = d; 412600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 413600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 414600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 415600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the month member 416600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param m String to set. 417600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws IllegalArgumentException if m is not a valid month 418600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 419600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setMonth(String m) throws IllegalArgumentException { 420600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMonth = m; 421600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sipMonth.compareToIgnoreCase(JAN) == 0) { 422600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = Calendar.JANUARY; 423600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipMonth.compareToIgnoreCase(FEB) == 0) { 424600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = Calendar.FEBRUARY; 425600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipMonth.compareToIgnoreCase(MAR) == 0) { 426600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = Calendar.MARCH; 427600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipMonth.compareToIgnoreCase(APR) == 0) { 428600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = Calendar.APRIL; 429600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipMonth.compareToIgnoreCase(MAY) == 0) { 430600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = Calendar.MAY; 431600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipMonth.compareToIgnoreCase(JUN) == 0) { 432600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = Calendar.JUNE; 433600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipMonth.compareToIgnoreCase(JUL) == 0) { 434600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = Calendar.JULY; 435600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipMonth.compareToIgnoreCase(AUG) == 0) { 436600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = Calendar.AUGUST; 437600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipMonth.compareToIgnoreCase(SEP) == 0) { 438600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = Calendar.SEPTEMBER; 439600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipMonth.compareToIgnoreCase(OCT) == 0) { 440600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = Calendar.OCTOBER; 441600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipMonth.compareToIgnoreCase(NOV) == 0) { 442600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = Calendar.NOVEMBER; 443600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else if (sipMonth.compareToIgnoreCase(DEC) == 0) { 444600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang month = Calendar.DECEMBER; 445600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else { 446600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new IllegalArgumentException("Illegal Month :" + m); 447600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 448600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 449600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 450600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 451600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the year member 452600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param y int to set 453600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws IllegalArgumentException if y is not a valid year. 454600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 455600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setYear(int y) throws IllegalArgumentException { 456600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (y < 0) 457600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new IllegalArgumentException("Illegal year : " + y); 458600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal = null; 459600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang year = y; 460600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 461600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 462600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 463600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Get the year member. 464600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 465600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int getYear() { 466600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return year; 467600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 468600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 469600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 470600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the hour member 471600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param h int to set 472600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws IllegalArgumentException if h is not a valid hour. 473600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 474600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setHour(int h) throws IllegalArgumentException { 475600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (h < 0 || h > 24) 476600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new IllegalArgumentException("Illegal hour : " + h); 477600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal = null; 478600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hour = h; 479600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 480600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 481600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 482600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the minute member 483600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param m int to set 484600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws IllegalArgumentException if m is not a valid minute 485600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 486600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setMinute(int m) throws IllegalArgumentException { 487600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (m < 0 || m >= 60) 488600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new IllegalArgumentException( 489600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "Illegal minute : " + (Integer.toString(m))); 490600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal = null; 491600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang minute = m; 492600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 493600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 494600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 495600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the second member 496600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param s int to set 497600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws IllegalArgumentException if s is not a valid second 498600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 499600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setSecond(int s) throws IllegalArgumentException { 500600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (s < 0 || s >= 60) 501600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new IllegalArgumentException( 502600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "Illegal second : " + Integer.toString(s)); 503600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang javaCal = null; 504600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang second = s; 505600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 506600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 507600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Get the time offset from the current time. 508600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 509600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *@return offset from the current time. 510600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 511600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int getDeltaSeconds() { 512600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // long ctime = this.getJavaCal().getTimeInMillis(); 513600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang long ctime = this.getJavaCal().getTime().getTime(); 514600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return (int) (ctime - System.currentTimeMillis()) / 1000; 515600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 516600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 517600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Object clone() { 518600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPDate retval; 519600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang try { 520600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang retval = (SIPDate) super.clone(); 521600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } catch (CloneNotSupportedException e) { 522600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new RuntimeException("Internal error"); 523600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 524600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (javaCal != null) 525600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang retval.javaCal = (java.util.Calendar) javaCal.clone(); 526600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return retval; 527600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 528600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang} 529600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/* 530600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * $Log: SIPDate.java,v $ 531600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.9 2009/10/18 13:46:33 deruelle_jean 532600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * FindBugs Fixes (Category Performance Warnings) 533600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 534600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Issue number: 535600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Obtained from: 536600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Submitted by: Jean Deruelle 537600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Reviewed by: 538600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 539600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.8 2009/07/17 18:57:37 emcho 540600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Converts indentation tabs to spaces so that we have a uniform indentation policy in the whole project. 541600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 542600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.7 2006/07/13 09:01:16 mranga 543600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Issue number: 544600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Obtained from: 545600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Submitted by: jeroen van bemmel 546600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Reviewed by: mranga 547600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Moved some changes from jain-sip-1.2 to java.net 548600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 549600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: ---------------------------------------------------------------------- 550600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Issue number: 551600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change addresses one or more issues, 552600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then enter the issue number(s) here. 553600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Obtained from: 554600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change has been taken from another system, 555600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then name the system in this line, otherwise delete it. 556600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Submitted by: 557600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this code has been contributed to the project by someone else; i.e., 558600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: they sent us a patch or a set of diffs, then include their name/email 559600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: address here. If this is your work then delete this line. 560600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Reviewed by: 561600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If we are doing pre-commit code reviews and someone else has 562600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: reviewed your changes, include their name(s) here. 563600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If you have not had it reviewed then delete this line. 564600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 565600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.3 2006/06/19 06:47:26 mranga 566600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * javadoc fixups 567600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 568600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.2 2006/06/16 15:26:28 mranga 569600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Added NIST disclaimer to all public domain files. Clean up some javadoc. Fixed a leak 570600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 571600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.1.1.1 2005/10/04 17:12:35 mranga 572600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 573600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Import 574600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 575600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 576600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.5 2005/04/16 20:35:10 dmuresan 577600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * SIPDate made cloneable. 578600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 579600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.4 2004/07/28 14:41:53 mranga 580600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Submitted by: mranga 581600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 582600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * fixed equality check for SIPDate. 583600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 584600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.3 2004/04/05 21:46:08 mranga 585600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Submitted by: Bruno Konik 586600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Reviewed by: mranga 587600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 588600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.2 2004/01/22 13:26:29 sverker 589600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Issue number: 590600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Obtained from: 591600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Submitted by: sverker 592600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Reviewed by: mranga 593600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 594600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Major reformat of code to conform with style guide. Resolved compiler and javadoc warnings. Added CVS tags. 595600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 596600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: ---------------------------------------------------------------------- 597600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Issue number: 598600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change addresses one or more issues, 599600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then enter the issue number(s) here. 600600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Obtained from: 601600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change has been taken from another system, 602600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then name the system in this line, otherwise delete it. 603600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Submitted by: 604600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this code has been contributed to the project by someone else; i.e., 605600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: they sent us a patch or a set of diffs, then include their name/email 606600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: address here. If this is your work then delete this line. 607600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Reviewed by: 608600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If we are doing pre-commit code reviews and someone else has 609600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: reviewed your changes, include their name(s) here. 610600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If you have not had it reviewed then delete this line. 611600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 612600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 613