1 /* 2 * Redistribution and use of this software and associated documentation 3 * ("Software"), with or without modification, are permitted provided that the 4 * following conditions are met: 5 * 6 * 1. Redistributions of source code must retain copyright statements and 7 * notices. Redistributions must also contain a copy of this document. 8 * 9 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * this list of conditions and the following disclaimer in the documentation 11 * and/or other materials provided with the distribution. 12 * 13 * 3. The name "Exolab" must not be used to endorse or promote products derived 14 * from this Software without prior written permission of Intalio, Inc. For 15 * written permission, please contact info@exolab.org. 16 * 17 * 4. Products derived from this Software may not be called "Exolab" nor may 18 * "Exolab" appear in their names without prior written permission of Intalio, 19 * Inc. Exolab is a registered trademark of Intalio, Inc. 20 * 21 * 5. Due credit should be given to the Exolab Project (http://www.exolab.org/). 22 * 23 * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS ``AS IS'' AND ANY 24 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 26 * DISCLAIMED. IN NO EVENT SHALL INTALIO, INC. OR ITS CONTRIBUTORS BE LIABLE FOR 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 31 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 * 34 * Copyright 2000-2004 (C) Intalio, Inc. All Rights Reserved. 35 * 36 * $Id$ 37 */ 38 package org.exolab.castor.xml.descriptors; 39 40 import java.sql.Date; 41 42 import org.exolab.castor.mapping.AccessMode; 43 import org.exolab.castor.mapping.ClassDescriptor; 44 import org.exolab.castor.mapping.FieldDescriptor; 45 import org.exolab.castor.xml.NodeType; 46 import org.exolab.castor.xml.TypeValidator; 47 import org.exolab.castor.xml.XMLFieldDescriptor; 48 import org.exolab.castor.xml.XMLFieldHandler; 49 import org.exolab.castor.xml.handlers.DateFieldHandler; 50 import org.exolab.castor.xml.util.XMLFieldDescriptorImpl; 51 52 /** 53 * A ClassDescriptor for java.sql.Date. 54 * 55 * @author <a href="kvisco-at-intalio.com">Keith Visco</a> 56 * @version $Revision$ $Date: 2004-12-16 22:49:25 -0700 (Thu, 16 Dec 2004) $ 57 */ 58 public class SQLDateClassDescriptor extends BaseDescriptor { 59 60 /** Used for returning no attribute and no element fields. */ 61 private static final XMLFieldDescriptor[] NO_FIELDS = new XMLFieldDescriptor[0]; 62 /** The name of the XML element. */ 63 private static final String XML_NAME = "sql-date"; 64 /** Our field descriptor for our "content". */ 65 private static final XMLFieldDescriptorImpl CONTENT_DESCRIPTOR; 66 /** Our field descriptor array. Lists the fields we describe. */ 67 private static final FieldDescriptor[] FIELDS; 68 /** Type validator to use to validate an instance of this type. */ 69 private static final TypeValidator VALIDATOR = null; 70 71 static { 72 CONTENT_DESCRIPTOR = new XMLFieldDescriptorImpl(String.class, 73 "content", "content", NodeType.Text); 74 75 CONTENT_DESCRIPTOR.setImmutable(true); 76 77 DateFieldHandler dfh = new DateFieldHandler(new XMLFieldHandler() { 78 79 /** 80 * {@inheritDoc} 81 */ 82 public Object getValue(final Object object) throws IllegalStateException { 83 return object; 84 } 85 86 /** 87 * {@inheritDoc} 88 */ 89 public void setValue(final Object object, final Object value) 90 throws IllegalStateException, IllegalArgumentException { 91 if (java.sql.Date.class == object.getClass()) { 92 Date target = (Date) object; 93 if (java.util.Date.class.isAssignableFrom(value.getClass())) { 94 target.setTime(((Date) value).getTime()); 95 } 96 } 97 } 98 99 /** 100 * {@inheritDoc} 101 */ 102 public Object newInstance(final Object parent) { 103 return null; 104 } 105 }); 106 dfh.setUseSQLDate(true); 107 108 CONTENT_DESCRIPTOR.setHandler(dfh); 109 110 FIELDS = new FieldDescriptor[1]; 111 FIELDS[0] = CONTENT_DESCRIPTOR; 112 } 113 114 // ----------------/ 115 // - Constructors -/ 116 // ----------------/ 117 118 /** 119 * No-arg constructor. 120 */ 121 public SQLDateClassDescriptor() { 122 super(); 123 } // -- DateDescriptor 124 125 // ------------------/ 126 // - Public Methods -/ 127 // ------------------/ 128 129 /** 130 * Returns the set of XMLFieldDescriptors for all members that should be 131 * marshaled as XML attributes. 132 * 133 * @return an array of XMLFieldDescriptors for all members that should be 134 * marshaled as XML attributes. 135 */ 136 public XMLFieldDescriptor[] getAttributeDescriptors() { 137 return NO_FIELDS; 138 } // getAttributeDescriptors 139 140 /** 141 * Returns the XMLFieldDescriptor for the member that should be marshaled 142 * as text content. 143 * 144 * @return the XMLFieldDescriptor for the member that should be marshaled 145 * as text content. 146 */ 147 public XMLFieldDescriptor getContentDescriptor() { 148 return CONTENT_DESCRIPTOR; 149 } // getContentDescriptor 150 151 /** 152 * Returns the set of XMLFieldDescriptors for all members that should be 153 * marshaled as XML elements. 154 * 155 * @return an array of XMLFieldDescriptors for all members that should be 156 * marshaled as XML elements. 157 */ 158 public XMLFieldDescriptor[] getElementDescriptors() { 159 return NO_FIELDS; 160 } // getElementDescriptors 161 162 /** 163 * Returns the XML field descriptor matching the given xml name and 164 * nodeType. If NodeType is null, then either an AttributeDescriptor, or 165 * ElementDescriptor may be returned. Null is returned if no matching 166 * descriptor is available. 167 * 168 * @param name the xml name to match against 169 * @param namespace the namespace uri 170 * @param nodeType the NodeType to match against, or null if the node type 171 * is not known. 172 * @return the matching descriptor, or null if no matching descriptor is 173 * available. 174 */ 175 public XMLFieldDescriptor getFieldDescriptor(final String name, final String namespace, 176 final NodeType nodeType) { 177 return null; 178 } // -- getFieldDescriptor 179 180 /** 181 * @return the namespace prefix to use when marshaling as XML. 182 */ 183 public String getNameSpacePrefix() { 184 return null; 185 } // -- getNameSpacePrefix 186 187 /** 188 * @return the namespace URI used when marshaling and unmarshaling as XML. 189 */ 190 public String getNameSpaceURI() { 191 return null; 192 } // -- getNameSpaceURI 193 194 /** 195 * Returns a specific validator for the class described by this 196 * ClassDescriptor. A null value may be returned if no specific validator 197 * exists. 198 * 199 * @return the type validator for the class described by this 200 * ClassDescriptor. 201 */ 202 public TypeValidator getValidator() { 203 return VALIDATOR; 204 } // -- getValidator 205 206 /** 207 * Returns the XML Name for the Class being described. 208 * 209 * @return the XML name. 210 */ 211 public String getXMLName() { 212 return XML_NAME; 213 } // -- getXMLName 214 215 /** 216 * Returns the String representation of this XMLClassDescriptor. 217 * 218 * @return the String representation of this XMLClassDescriptor. 219 */ 220 public String toString() { 221 return super.toString() + "; descriptor for class: java.sql.Date; xml name: " + XML_NAME; 222 } // -- toString 223 224 // -------------------------------------/ 225 // - Implementation of ClassDescriptor -/ 226 // -------------------------------------/ 227 228 /** 229 * Returns the Java class represented by this descriptor. 230 * 231 * @return The Java class 232 */ 233 public Class getJavaClass() { 234 return java.sql.Date.class; 235 } // -- getJavaClass 236 237 /** 238 * Returns a list of fields represented by this descriptor. 239 * 240 * @return A list of fields 241 */ 242 public FieldDescriptor[] getFields() { 243 return FIELDS; 244 } // -- getFields 245 246 /** 247 * Returns the class descriptor of the class extended by this class. 248 * 249 * @return The extended class descriptor 250 */ 251 public ClassDescriptor getExtends() { 252 return null; 253 } // -- getExtends 254 255 /** 256 * Returns the identity field, null if this class has no identity. 257 * 258 * @return The identity field 259 */ 260 public FieldDescriptor getIdentity() { 261 return null; 262 } // -- getIdentity 263 264 /** 265 * Returns the access mode specified for this class. 266 * 267 * @return The access mode 268 */ 269 public AccessMode getAccessMode() { 270 return null; 271 } // -- getAccessMode 272 273 } // -- class: DateClassDescriptor