1 /* 2 * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 27 package javax.print.attribute; 28 29 import java.io.Serializable; 30 31 import java.util.Date; 32 33 /** 34 * Class DateTimeSyntax is an abstract base class providing the common 35 * implementation of all attributes whose value is a date and time. 36 * <P> 37 * Under the hood, a date-time attribute is stored as a value of class 38 * {@code java.util.Date}. You can get a date-time attribute's Date value by 39 * calling {@link #getValue() getValue()}. A date-time attribute's 40 * Date value is established when it is constructed (see {@link 41 * #DateTimeSyntax(Date) DateTimeSyntax(Date)}). Once 42 * constructed, a date-time attribute's value is immutable. 43 * <P> 44 * To construct a date-time attribute from separate values of the year, month, 45 * day, hour, minute, and so on, use a {@code java.util.Calendar} 46 * object to construct a {@code java.util.Date} object, then use the 47 * {@code java.util.Date} object to construct the date-time attribute. 48 * To convert 49 * a date-time attribute to separate values of the year, month, day, hour, 50 * minute, and so on, create a {@code java.util.Calendar} object and 51 * set it to the {@code java.util.Date} from the date-time attribute. Class 52 * DateTimeSyntax stores its value in the form of a {@code java.util.Date} 53 * rather than a {@code java.util.Calendar} because it typically takes 54 * less memory to store and less time to compare a {@code java.util.Date} 55 * than a {@code java.util.Calendar}. 56 * 57 * @author Alan Kaminsky 58 */ 59 public abstract class DateTimeSyntax implements Serializable, Cloneable { 60 61 private static final long serialVersionUID = -1400819079791208582L; 62 63 // Hidden data members. 64 65 /** 66 * This date-time attribute's {@code java.util.Date} value. 67 * @serial 68 */ 69 private Date value; 70 71 // Hidden constructors. 72 73 /** 74 * Construct a new date-time attribute with the given 75 * {@code java.util.Date} value. 76 * 77 * @param value {@code java.util.Date} value. 78 * 79 * @exception NullPointerException 80 * (unchecked exception) Thrown if {@code theValue} is null. 81 */ 82 protected DateTimeSyntax(Date value) { 83 if (value == null) { 84 throw new NullPointerException("value is null"); 85 } 86 this.value = value; 87 } 88 89 // Exported operations. 90 91 /** 92 * Returns this date-time attribute's {@code java.util.Date} 93 * value. 94 * @return the Date. 95 */ 96 public Date getValue() { 97 return new Date (value.getTime()); 98 } 99 100 // Exported operations inherited and overridden from class Object. 101 102 /** 103 * Returns whether this date-time attribute is equivalent to the passed in 104 * object. To be equivalent, all of the following conditions must be true: 105 * <OL TYPE=1> 106 * <LI> 107 * {@code object} is not null. 108 * <LI> 109 * {@code object} is an instance of class DateTimeSyntax. 110 * <LI> 111 * This date-time attribute's {@code java.util.Date} value and 112 * {@code object}'s {@code java.util.Date} value are 113 * equal. </OL> 114 * 115 * @param object Object to compare to. 116 * 117 * @return True if {@code object} is equivalent to this date-time 118 * attribute, false otherwise. 119 */ 120 public boolean equals(Object object) { 121 return (object != null && 122 object instanceof DateTimeSyntax && 123 value.equals(((DateTimeSyntax) object).value)); 124 } 125 126 /** 127 * Returns a hash code value for this date-time attribute. The hashcode is 128 * that of this attribute's {@code java.util.Date} value. 129 */ 130 public int hashCode() { 131 return value.hashCode(); 132 } 133 134 /** 135 * Returns a string value corresponding to this date-time attribute. 136 * The string value is just this attribute's 137 * {@code java.util.Date} value 138 * converted to a string. 139 */ 140 public String toString() { 141 return "" + value; 142 } 143 144 }