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