View Javadoc

1   //
2   // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vhudson-jaxb-ri-2.1-2 
3   // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
4   // Any modifications to this file will be lost upon recompilation of the source schema. 
5   // Generated on: 2013.01.03 at 05:01:35 AM CET 
6   //
7   
8   
9   package org.jomc.model;
10  
11  import java.io.ByteArrayInputStream;
12  import java.io.ByteArrayOutputStream;
13  import java.io.File;
14  import java.io.IOException;
15  import java.io.InvalidClassException;
16  import java.io.NotSerializableException;
17  import java.io.ObjectInputStream;
18  import java.io.ObjectOutputStream;
19  import java.io.OptionalDataException;
20  import java.io.Serializable;
21  import java.io.StreamCorruptedException;
22  import java.lang.reflect.Array;
23  import java.lang.reflect.InvocationTargetException;
24  import java.math.BigDecimal;
25  import java.math.BigInteger;
26  import java.net.MalformedURLException;
27  import java.net.URI;
28  import java.net.URISyntaxException;
29  import java.net.URL;
30  import java.util.Calendar;
31  import java.util.Currency;
32  import java.util.Date;
33  import java.util.Locale;
34  import java.util.TimeZone;
35  import java.util.UUID;
36  import javax.activation.MimeType;
37  import javax.activation.MimeTypeParseException;
38  import javax.annotation.Generated;
39  import javax.xml.bind.JAXBElement;
40  import javax.xml.bind.annotation.XmlAccessType;
41  import javax.xml.bind.annotation.XmlAccessorType;
42  import javax.xml.bind.annotation.XmlAnyElement;
43  import javax.xml.bind.annotation.XmlAttribute;
44  import javax.xml.bind.annotation.XmlType;
45  import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
46  import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
47  import javax.xml.datatype.Duration;
48  import javax.xml.datatype.XMLGregorianCalendar;
49  import javax.xml.namespace.QName;
50  import org.w3c.dom.Element;
51  
52  
53  /**
54   * 
55   * Model of a property.
56   * 
57   * The 'Property' type defines attributes 'name', 'type', 'value', 'final' and 'override'. Attribute 'name' holds the name
58   * uniquely identifying the property in a set of properties. Attribute 'type' holds an identifier of the type of the
59   * property. Attribute 'value' holds the properties value.
60   *       
61   * 
62   * <p>Java class for Property complex type.
63   * 
64   * <p>The following schema fragment specifies the expected content contained within this class.
65   * 
66   * <pre>
67   * &lt;complexType name="Property">
68   *   &lt;complexContent>
69   *     &lt;extension base="{http://jomc.org/model}ModelObject">
70   *       &lt;sequence>
71   *         &lt;any processContents='lax' namespace='##other' minOccurs="0"/>
72   *       &lt;/sequence>
73   *       &lt;attribute name="name" use="required" type="{http://jomc.org/model}Identifier" />
74   *       &lt;attribute name="type" type="{http://jomc.org/model}Identifier" />
75   *       &lt;attribute name="value" type="{http://jomc.org/model}String" />
76   *       &lt;attribute name="final" type="{http://jomc.org/model}Flag" default="false" />
77   *       &lt;attribute name="override" type="{http://jomc.org/model}Flag" default="false" />
78   *     &lt;/extension>
79   *   &lt;/complexContent>
80   * &lt;/complexType>
81   * </pre>
82   * 
83   * 
84   */
85  @XmlAccessorType(XmlAccessType.FIELD)
86  @XmlType(name = "Property", namespace = "http://jomc.org/model", propOrder = {
87      "any"
88  })
89  @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
90  public class Property
91      extends ModelObject
92      implements Cloneable, Inheritable
93  {
94  
95      @XmlAnyElement(lax = true)
96      @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
97      protected Object any;
98      @XmlAttribute(name = "name", required = true)
99      @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
100     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
101     protected String name;
102     @XmlAttribute(name = "type")
103     @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
104     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
105     protected String type;
106     @XmlAttribute(name = "value")
107     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
108     protected String value;
109     @XmlAttribute(name = "final")
110     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
111     protected Boolean _final;
112     @XmlAttribute(name = "override")
113     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
114     protected Boolean override;
115 
116     /**
117      * Creates a new {@code Property} instance.
118      * 
119      */
120     public Property() {
121         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
122         super();
123     }
124 
125     /**
126      * Creates a new {@code Property} instance by deeply copying a given {@code Property} instance.
127      * 
128      * 
129      * @param o
130      *     The instance to copy.
131      * @throws NullPointerException
132      *     if {@code o} is {@code null}.
133      */
134     public Property(final Property o) {
135         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
136         super(o);
137         if (o == null) {
138             throw new NullPointerException("Cannot create a copy of 'Property' from 'null'.");
139         }
140         // 'Any' property.
141         this.any = ((o.any == null)?null:copyOfAny(o.getAny()));
142         // CBuiltinLeafInfo: java.lang.String
143         this.name = ((o.name == null)?null:o.getName());
144         // CBuiltinLeafInfo: java.lang.String
145         this.type = ((o.type == null)?null:o.getType());
146         // CBuiltinLeafInfo: java.lang.String
147         this.value = ((o.value == null)?null:o.getValue());
148         // CBuiltinLeafInfo: java.lang.Boolean
149         this._final = ((o._final == null)?null:o.isFinal());
150         // CBuiltinLeafInfo: java.lang.Boolean
151         this.override = ((o.override == null)?null:o.isOverride());
152     }
153 
154     /**
155      * Object value of this property or {@code null}.
156      * 
157      * @return
158      *     possible object is
159      *     {@link Object }
160      *     {@link Element }
161      *     
162      */
163     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
164     public Object getAny() {
165         return any;
166     }
167 
168     /**
169      * Sets the value of the any property.
170      * 
171      * @param value
172      *     allowed object is
173      *     {@link Object }
174      *     {@link Element }
175      *     
176      */
177     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
178     public void setAny(Object value) {
179         this.any = value;
180     }
181 
182     /**
183      * Name of this property.
184      * 
185      * @return
186      *     possible object is
187      *     {@link String }
188      *     
189      */
190     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
191     public String getName() {
192         return name;
193     }
194 
195     /**
196      * Sets the value of the name property.
197      * 
198      * @param value
199      *     allowed object is
200      *     {@link String }
201      *     
202      */
203     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
204     public void setName(String value) {
205         this.name = value;
206     }
207 
208     /**
209      * Type of this property or {@code null}.
210      * 
211      * @return
212      *     possible object is
213      *     {@link String }
214      *     
215      */
216     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
217     public String getType() {
218         return type;
219     }
220 
221     /**
222      * Sets the value of the type property.
223      * 
224      * @param value
225      *     allowed object is
226      *     {@link String }
227      *     
228      */
229     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
230     public void setType(String value) {
231         this.type = value;
232     }
233 
234     /**
235      * String value of this property or {@code null}.
236      * 
237      * @return
238      *     possible object is
239      *     {@link String }
240      *     
241      */
242     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
243     public String getValue() {
244         return value;
245     }
246 
247     /**
248      * Sets the value of the value property.
249      * 
250      * @param value
251      *     allowed object is
252      *     {@link String }
253      *     
254      */
255     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
256     public void setValue(String value) {
257         this.value = value;
258     }
259 
260     /**
261      * {@code true}, if this property is the final node in an inheritance hierarchy.
262      * 
263      * @return
264      *     possible object is
265      *     {@link Boolean }
266      *     
267      */
268     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
269     public boolean isFinal() {
270         if (_final == null) {
271             return false;
272         } else {
273             return _final;
274         }
275     }
276 
277     /**
278      * Sets the value of the final property.
279      * 
280      * @param value
281      *     allowed object is
282      *     {@link Boolean }
283      *     
284      */
285     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
286     public void setFinal(Boolean value) {
287         this._final = value;
288     }
289 
290     /**
291      * {@code true}, if this property is intended to override a super property.
292      * 
293      * @return
294      *     possible object is
295      *     {@link Boolean }
296      *     
297      */
298     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
299     public boolean isOverride() {
300         if (override == null) {
301             return false;
302         } else {
303             return override;
304         }
305     }
306 
307     /**
308      * Sets the value of the override property.
309      * 
310      * @param value
311      *     allowed object is
312      *     {@link Boolean }
313      *     
314      */
315     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
316     public void setOverride(Boolean value) {
317         this.override = value;
318     }
319 
320     /**
321      * Creates and returns a deep copy of property {@code Any}.
322      * 
323      * @param source
324      *     The source to copy from or {@code null}.
325      * @return
326      *     A deep copy of {@code source} or {@code null} if {@code source} is {@code null}.
327      */
328     @SuppressWarnings("unchecked")
329     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
330     private static Object copyOfAny(final Object source) {
331         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
332         if (source!= null) {
333             if (source instanceof Element) {
334                 // CWildcardTypeInfo: org.w3c.dom.Element
335                 return ((Element)((Element) source).cloneNode(true));
336             }
337             if (source instanceof Object) {
338                 // CBuiltinLeafInfo: java.lang.Object
339                 return copyOf(((Object) source));
340             }
341             // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
342             throw new AssertionError((("Unexpected instance '"+ source)+"' for property 'Any' of class 'org.jomc.model.Property'."));
343         }
344         return null;
345     }
346 
347     /**
348      * Creates and returns a deep copy of a given object.
349      * 
350      * @param o
351      *     The instance to copy or {@code null}.
352      * @return
353      *     A deep copy of {@code o} or {@code null} if {@code o} is {@code null}.
354      */
355     @SuppressWarnings("unchecked")
356     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
357     private static Object copyOf(final Object o) {
358         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
359         try {
360             if (o!= null) {
361                 if (o.getClass().isPrimitive()) {
362                     return o;
363                 }
364                 if (o.getClass().isArray()) {
365                     return copyOfArray(o);
366                 }
367                 // Immutable types.
368                 if (o instanceof Boolean) {
369                     return o;
370                 }
371                 if (o instanceof Byte) {
372                     return o;
373                 }
374                 if (o instanceof Character) {
375                     return o;
376                 }
377                 if (o instanceof Double) {
378                     return o;
379                 }
380                 if (o instanceof Enum) {
381                     return o;
382                 }
383                 if (o instanceof Float) {
384                     return o;
385                 }
386                 if (o instanceof Integer) {
387                     return o;
388                 }
389                 if (o instanceof Long) {
390                     return o;
391                 }
392                 if (o instanceof Short) {
393                     return o;
394                 }
395                 if (o instanceof String) {
396                     return o;
397                 }
398                 if (o instanceof BigDecimal) {
399                     return o;
400                 }
401                 if (o instanceof BigInteger) {
402                     return o;
403                 }
404                 if (o instanceof UUID) {
405                     return o;
406                 }
407                 if (o instanceof QName) {
408                     return o;
409                 }
410                 if (o instanceof Duration) {
411                     return o;
412                 }
413                 if (o instanceof Currency) {
414                     return o;
415                 }
416                 // String based types.
417                 if (o instanceof File) {
418                     return new File(o.toString());
419                 }
420                 if (o instanceof URI) {
421                     return new URI(o.toString());
422                 }
423                 if (o instanceof URL) {
424                     return new URL(o.toString());
425                 }
426                 if (o instanceof MimeType) {
427                     return new MimeType(o.toString());
428                 }
429                 // Cloneable types.
430                 if (o instanceof XMLGregorianCalendar) {
431                     return ((XMLGregorianCalendar) o).clone();
432                 }
433                 if (o instanceof Date) {
434                     return ((Date) o).clone();
435                 }
436                 if (o instanceof Calendar) {
437                     return ((Calendar) o).clone();
438                 }
439                 if (o instanceof TimeZone) {
440                     return ((TimeZone) o).clone();
441                 }
442                 if (o instanceof Locale) {
443                     return ((Locale) o).clone();
444                 }
445                 if (o instanceof Element) {
446                     return ((Element)((Element) o).cloneNode(true));
447                 }
448                 if (o instanceof JAXBElement) {
449                     return copyOf(((JAXBElement) o));
450                 }
451                 try {
452                     return o.getClass().getMethod("clone", ((Class[]) null)).invoke(o, ((Object[]) null));
453                 } catch (NoSuchMethodException e) {
454                     if (o instanceof Serializable) {
455                         return copyOf(((Serializable) o));
456                     }
457                     // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
458                     throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
459                 } catch (IllegalAccessException e) {
460                     // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
461                     throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
462                 } catch (InvocationTargetException e) {
463                     // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
464                     throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
465                 } catch (SecurityException e) {
466                     // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
467                     throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
468                 } catch (IllegalArgumentException e) {
469                     // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
470                     throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
471                 } catch (ExceptionInInitializerError e) {
472                     // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
473                     throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
474                 }
475             }
476             return null;
477         } catch (URISyntaxException e) {
478             throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
479         } catch (MimeTypeParseException e) {
480             throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
481         } catch (MalformedURLException e) {
482             throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
483         }
484     }
485 
486     /**
487      * Creates and returns a deep copy of a given array.
488      * 
489      * @param array
490      *     The array to copy or {@code null}.
491      * @return
492      *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
493      */
494     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
495     private static Object copyOfArray(final Object array) {
496         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
497         if (array!= null) {
498             if (array.getClass() == boolean[].class) {
499                 return copyOf(((boolean[]) array));
500             }
501             if (array.getClass() == byte[].class) {
502                 return copyOf(((byte[]) array));
503             }
504             if (array.getClass() == char[].class) {
505                 return copyOf(((char[]) array));
506             }
507             if (array.getClass() == double[].class) {
508                 return copyOf(((double[]) array));
509             }
510             if (array.getClass() == float[].class) {
511                 return copyOf(((float[]) array));
512             }
513             if (array.getClass() == int[].class) {
514                 return copyOf(((int[]) array));
515             }
516             if (array.getClass() == long[].class) {
517                 return copyOf(((long[]) array));
518             }
519             if (array.getClass() == short[].class) {
520                 return copyOf(((short[]) array));
521             }
522             final int len = Array.getLength(array);
523             final Object copy = Array.newInstance(array.getClass().getComponentType(), len);
524             for (int i = (len- 1); (i >= 0); i--) {
525                 Array.set(copy, i, copyOf(Array.get(array, i)));
526             }
527             return copy;
528         }
529         return null;
530     }
531 
532     /**
533      * Creates and returns a deep copy of a given array.
534      * 
535      * @param array
536      *     The array to copy or {@code null}.
537      * @return
538      *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
539      */
540     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
541     private static boolean[] copyOf(final boolean[] array) {
542         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
543         if (array!= null) {
544             final boolean[] copy = ((boolean[]) Array.newInstance(array.getClass().getComponentType(), array.length));
545             System.arraycopy(array, 0, copy, 0, array.length);
546             return copy;
547         }
548         return null;
549     }
550 
551     /**
552      * Creates and returns a deep copy of a given array.
553      * 
554      * @param array
555      *     The array to copy or {@code null}.
556      * @return
557      *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
558      */
559     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
560     private static byte[] copyOf(final byte[] array) {
561         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
562         if (array!= null) {
563             final byte[] copy = ((byte[]) Array.newInstance(array.getClass().getComponentType(), array.length));
564             System.arraycopy(array, 0, copy, 0, array.length);
565             return copy;
566         }
567         return null;
568     }
569 
570     /**
571      * Creates and returns a deep copy of a given array.
572      * 
573      * @param array
574      *     The array to copy or {@code null}.
575      * @return
576      *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
577      */
578     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
579     private static char[] copyOf(final char[] array) {
580         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
581         if (array!= null) {
582             final char[] copy = ((char[]) Array.newInstance(array.getClass().getComponentType(), array.length));
583             System.arraycopy(array, 0, copy, 0, array.length);
584             return copy;
585         }
586         return null;
587     }
588 
589     /**
590      * Creates and returns a deep copy of a given array.
591      * 
592      * @param array
593      *     The array to copy or {@code null}.
594      * @return
595      *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
596      */
597     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
598     private static double[] copyOf(final double[] array) {
599         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
600         if (array!= null) {
601             final double[] copy = ((double[]) Array.newInstance(array.getClass().getComponentType(), array.length));
602             System.arraycopy(array, 0, copy, 0, array.length);
603             return copy;
604         }
605         return null;
606     }
607 
608     /**
609      * Creates and returns a deep copy of a given array.
610      * 
611      * @param array
612      *     The array to copy or {@code null}.
613      * @return
614      *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
615      */
616     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
617     private static float[] copyOf(final float[] array) {
618         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
619         if (array!= null) {
620             final float[] copy = ((float[]) Array.newInstance(array.getClass().getComponentType(), array.length));
621             System.arraycopy(array, 0, copy, 0, array.length);
622             return copy;
623         }
624         return null;
625     }
626 
627     /**
628      * Creates and returns a deep copy of a given array.
629      * 
630      * @param array
631      *     The array to copy or {@code null}.
632      * @return
633      *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
634      */
635     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
636     private static int[] copyOf(final int[] array) {
637         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
638         if (array!= null) {
639             final int[] copy = ((int[]) Array.newInstance(array.getClass().getComponentType(), array.length));
640             System.arraycopy(array, 0, copy, 0, array.length);
641             return copy;
642         }
643         return null;
644     }
645 
646     /**
647      * Creates and returns a deep copy of a given array.
648      * 
649      * @param array
650      *     The array to copy or {@code null}.
651      * @return
652      *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
653      */
654     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
655     private static long[] copyOf(final long[] array) {
656         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
657         if (array!= null) {
658             final long[] copy = ((long[]) Array.newInstance(array.getClass().getComponentType(), array.length));
659             System.arraycopy(array, 0, copy, 0, array.length);
660             return copy;
661         }
662         return null;
663     }
664 
665     /**
666      * Creates and returns a deep copy of a given array.
667      * 
668      * @param array
669      *     The array to copy or {@code null}.
670      * @return
671      *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
672      */
673     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
674     private static short[] copyOf(final short[] array) {
675         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
676         if (array!= null) {
677             final short[] copy = ((short[]) Array.newInstance(array.getClass().getComponentType(), array.length));
678             System.arraycopy(array, 0, copy, 0, array.length);
679             return copy;
680         }
681         return null;
682     }
683 
684     /**
685      * Creates and returns a deep copy of a given {@code JAXBElement} instance.
686      * 
687      * @param element
688      *     The instance to copy or {@code null}.
689      * @return
690      *     A deep copy of {@code element} or {@code null} if {@code element} is {@code null}.
691      */
692     @SuppressWarnings("unchecked")
693     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
694     private static JAXBElement copyOf(final JAXBElement element) {
695         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
696         if (element!= null) {
697             final JAXBElement copy = new JAXBElement(element.getName(), element.getDeclaredType(), element.getScope(), element.getValue());
698             copy.setNil(element.isNil());
699             copy.setValue(copyOf(copy.getValue()));
700             return copy;
701         }
702         return null;
703     }
704 
705     /**
706      * Creates and returns a deep copy of a given {@code Serializable}.
707      * 
708      * @param serializable
709      *     The instance to copy or {@code null}.
710      * @return
711      *     A deep copy of {@code serializable} or {@code null} if {@code serializable} is {@code null}.
712      */
713     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
714     private static Serializable copyOf(final Serializable serializable) {
715         // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
716         if (serializable!= null) {
717             try {
718                 final ByteArrayOutputStream byteArrayOutput = new ByteArrayOutputStream();
719                 final ObjectOutputStream out = new ObjectOutputStream(byteArrayOutput);
720                 out.writeObject(serializable);
721                 out.close();
722                 final ByteArrayInputStream byteArrayInput = new ByteArrayInputStream(byteArrayOutput.toByteArray());
723                 final ObjectInputStream in = new ObjectInputStream(byteArrayInput);
724                 final Serializable copy = ((Serializable) in.readObject());
725                 in.close();
726                 return copy;
727             } catch (SecurityException e) {
728                 throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
729             } catch (ClassNotFoundException e) {
730                 throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
731             } catch (InvalidClassException e) {
732                 throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
733             } catch (NotSerializableException e) {
734                 throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
735             } catch (StreamCorruptedException e) {
736                 throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
737             } catch (OptionalDataException e) {
738                 throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
739             } catch (IOException e) {
740                 throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
741             }
742         }
743         return null;
744     }
745 
746     /**
747      * Creates and returns a deep copy of this object.
748      * 
749      * 
750      * @return
751      *     A deep copy of this object.
752      */
753     @Override
754     @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
755     public Property clone() {
756         {
757             // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
758             final Property clone = ((Property) super.clone());
759             // 'Any' property.
760             clone.any = ((this.any == null)?null:copyOfAny(this.getAny()));
761             // CBuiltinLeafInfo: java.lang.String
762             clone.name = ((this.name == null)?null:this.getName());
763             // CBuiltinLeafInfo: java.lang.String
764             clone.type = ((this.type == null)?null:this.getType());
765             // CBuiltinLeafInfo: java.lang.String
766             clone.value = ((this.value == null)?null:this.getValue());
767             // CBuiltinLeafInfo: java.lang.Boolean
768             clone._final = ((this._final == null)?null:this.isFinal());
769             // CBuiltinLeafInfo: java.lang.Boolean
770             clone.override = ((this.override == null)?null:this.isOverride());
771             return clone;
772         }
773     }
774     
775     /**
776      * Gets the Java value of the property.
777      * <p>The Java value of the property is computed based on the following rules:
778      * <ol>
779      * <li>If property {@code any} is set, the Java value is computed based on the object returned by method
780      * {@code getAny()} by possibly unwrapping any {@code JAXBElement} instances. If that object declares a
781      * <blockquote><pre>public Object getJavaValue( ClassLoader )</pre></blockquote> method, the value returned by this
782      * method is the object returned by a call to that method using reflection. If that object does not declare such a
783      * method, the value returned by this method is that (possibly unwrapped) object.</li>
784      * <li>If property {@code value} is set, the Java value is computed based on the values of properties {@code type}
785      * and {@code value}. If property {@code type} is not set or equals {@code java.lang.String}, the value returned
786      * by this method is the string value returned by method {@code getValue()}. If property {@code type} equals a name
787      * of a Java primitive type, an instance of the wrapper class corresponding to that primitive type name is returned
788      * instantiated by passing the value of property {@code value} to the public constructor taking a single
789      * {@code java.lang.String} argument of that wrapper class. For all other values of property {@code type} an
790      * instance of a class with a name equal to the value of property {@code type} is returned instantiated by passing
791      * the value of property {@code value} to the public constructor taking a single {@code java.lang.String} argument
792      * of that class.</li>
793      * <li>If properties {@code any} and {@code value} are both {@code null}, this method returns {@code null}.</li>
794      * </ol></p>
795      *
796      * @param classLoader The class loader to use for getting the Java value; {@code null} to use the platform's
797      * bootstrap class loader.
798      *
799      * @return The Java value of the property or {@code null}.
800      *
801      * @throws ModelObjectException if compiling the name of the type to a {@code JavaTypeName} fails.
802      * @throws PropertyException if getting the Java value of the property fails unexpectedly.
803      *
804      * @see #getJavaTypeName()
805      */
806     public Object getJavaValue( final ClassLoader classLoader ) throws ModelObjectException, PropertyException
807     {
808         try
809         {
810             if ( this.getAny() != null )
811             {
812                 if ( this.getType() == null )
813                 {
814                     throw new PropertyException( getMessage( "mandatoryType", this.getName() ) );
815                 }
816 
817                 final Object anyObject = this.getAny() instanceof JAXBElement
818                                          ? ( (JAXBElement) this.getAny() ).getValue() : this.getAny();
819 
820                 return this.getJavaValue( classLoader, anyObject,
821                                           this.getJavaTypeName().getClass( classLoader, false ) );
822 
823             }
824             else
825             {
826                 if ( this.getJavaTypeName().isPrimitive() && this.getValue() == null )
827                 {
828                     throw new PropertyException( getMessage( "mandatoryPrimitiveValue", this.getName(),
829                                                              this.getType() ) );
830 
831                 }
832 
833                 return this.getJavaValue( this.getJavaTypeName().isPrimitive()
834                                           ? this.getJavaTypeName().getBoxedName().getClass( classLoader, false )
835                                           : this.getJavaTypeName().getClass( classLoader, false ),
836                                           this.getValue() );
837 
838             }
839         }
840         catch ( final ClassNotFoundException e )
841         {
842             throw new PropertyException( getMessage( "classNotFound", this.getName(), this.getType() ), e );
843         }
844     }
845 
846     /**
847      * Gets the Java type name of the property.
848      *
849      * @return The Java type name of the type referenced by the property or {@code null}, if the property does not
850      * reference a type.
851      *
852      * @throws ModelObjectException if compiling the name of the type referenced by the property to a
853      * {@code JavaTypeName} fails.
854      *
855      * @since 1.4
856      */
857     public JavaTypeName getJavaTypeName() throws ModelObjectException
858     {
859         final String typeName = this.getType() == null
860                                 ? this.getAny() == null
861                                   ? String.class.getName()
862                                   : Object.class.getName()
863                                 : this.getType();
864 
865         try
866         {
867             return JavaTypeName.parse( typeName );
868         }
869         catch ( final java.text.ParseException e )
870         {
871             throw new ModelObjectException( getMessage( "javaTypeNameParseException", typeName, getMessage( e ) ), e );
872         }
873     }
874 
875     /**
876      * Gets the Java getter method name of the property.
877      *
878      * @return The Java getter method name of the property.
879      *
880      * @throws ModelObjectException if compiling the name of the type referenced by the property to a
881      * {@code JavaTypeName} fails or if compiling the name of the property to a {@code JavaIdentifier} fails.
882      *
883      * @since 1.4
884      *
885      * @see #getName()
886      */
887     public JavaIdentifier getJavaGetterMethodName() throws ModelObjectException
888     {
889         try
890         {
891             final JavaTypeName javaType = this.getJavaTypeName();
892             final String prefix = javaType.runtimeEquals( JavaTypeName.BOOLEAN )
893                                   || javaType.runtimeEquals( JavaTypeName.BOOLEAN_TYPE ) ? "is" : "get";
894 
895             return JavaIdentifier.parse( prefix + JavaIdentifier.normalize(
896                 this.getName() != null ? this.getName() : "", JavaIdentifier.NormalizationMode.CAMEL_CASE ) );
897 
898         }
899         catch ( final java.text.ParseException e )
900         {
901             throw new ModelObjectException( getMessage( "javaIdentifierParseException", this.getName(),
902                                                         getMessage( e ) ), e );
903 
904         }
905     }
906 
907     /**
908      * Gets the Java setter method name of the property.
909      *
910      * @return The Java setter method name of the property.
911      *
912      * @throws ModelObjectException if compiling the name of the property to a {@code JavaIdentifier} fails.
913      *
914      * @since 1.4
915      *
916      * @see #getName()
917      */
918     public JavaIdentifier getJavaSetterMethodName() throws ModelObjectException
919     {
920         try
921         {
922             return JavaIdentifier.parse( "set" + JavaIdentifier.normalize(
923                 this.getName() != null ? this.getName() : "", JavaIdentifier.NormalizationMode.CAMEL_CASE ) );
924 
925         }
926         catch ( final java.text.ParseException e )
927         {
928             throw new ModelObjectException( getMessage( "javaIdentifierParseException", this.getName(),
929                                                         getMessage( e ) ), e );
930 
931         }
932     }
933 
934     /**
935      * Gets the Java variable name of the property.
936      *
937      * @return The Java variable name of the property.
938      *
939      * @throws ModelObjectException if compiling the name of the property to a {@code JavaIdentifier} fails.
940      *
941      * @since 1.4
942      *
943      * @see #getName()
944      */
945     public JavaIdentifier getJavaVariableName() throws ModelObjectException
946     {
947         try
948         {
949             return JavaIdentifier.normalize( this.getName() != null ? this.getName() : "",
950                                              JavaIdentifier.NormalizationMode.VARIABLE_NAME_CONVENTION );
951 
952         }
953         catch ( final java.text.ParseException e )
954         {
955             throw new ModelObjectException( getMessage( "javaIdentifierParseException", this.getName(),
956                                                         getMessage( e ) ), e );
957 
958         }
959     }
960 
961     /**
962      * Gets the Java constant name of the message.
963      *
964      * @return The Java constant name of the message.
965      *
966      * @throws ModelObjectException if compiling the name of the property to a {@code JavaIdentifier} fails.
967      *
968      * @since 1.4
969      *
970      * @see #getName()
971      */
972     public JavaIdentifier getJavaConstantName() throws ModelObjectException
973     {
974         try
975         {
976             return JavaIdentifier.normalize( this.getName() != null ? this.getName() : "",
977                                              JavaIdentifier.NormalizationMode.CONSTANT_NAME_CONVENTION );
978 
979         }
980         catch ( final java.text.ParseException e )
981         {
982             throw new ModelObjectException( getMessage( "javaIdentifierParseException", this.getName(),
983                                                         getMessage( e ) ), e );
984 
985         }
986     }
987 
988     private Object getJavaValue( final ClassLoader classLoader, final Object any, final Class<?> returnType )
989         throws PropertyException
990     {
991         if ( any != null )
992         {
993             final String methodName = "getJavaValue";
994 
995             try
996             {
997                 final java.lang.reflect.Method m = any.getClass().getMethod( methodName, ClassLoader.class );
998                 final Object result = m.invoke( any, classLoader );
999 
1000                 if ( result != null && !returnType.isAssignableFrom( result.getClass() ) )
1001                 {
1002                     throw new PropertyException( getMessage( "illegalMethodInvocationResult", methodName,
1003                                                              any.getClass().getName(), result.getClass().getName(),
1004                                                              returnType.getName() ) );
1005 
1006                 }
1007 
1008                 return result;
1009             }
1010             catch ( final IllegalAccessException e )
1011             {
1012                 throw new PropertyException( getMessage( "methodAccessDenied", methodName,
1013                                                          any.getClass().getName() ), e );
1014 
1015             }
1016             catch ( final IllegalArgumentException e )
1017             {
1018                 throw new AssertionError( e );
1019             }
1020             catch ( final InvocationTargetException e )
1021             {
1022                 throw new PropertyException( getMessage( "methodInvocationFailure", methodName,
1023                                                          any.getClass().getName() ), e );
1024 
1025             }
1026             catch ( final SecurityException e )
1027             {
1028                 throw new PropertyException( getMessage( "methodAccessDenied", methodName,
1029                                                          any.getClass().getName() ), e );
1030 
1031             }
1032             catch ( final NoSuchMethodException e )
1033             {
1034                 // Optional method not provided.
1035             }
1036         }
1037 
1038         return any;
1039     }
1040 
1041     private Object getJavaValue( final Class<?> type, final String value ) throws PropertyException
1042     {
1043         if ( value != null )
1044         {
1045             try
1046             {
1047                 if ( type == Character.class )
1048                 {
1049                     if ( value.length() != 1 )
1050                     {
1051                         throw new PropertyException( getMessage( "illegalValue", value, Character.class.getName() ) );
1052                     }
1053 
1054                     return type.getConstructor( new Class<?>[]
1055                         {
1056                             char.class
1057                         } ).newInstance( new Object[]
1058                         {
1059                             value.charAt( 0 )
1060                         } );
1061 
1062                 }
1063                 else if ( type == String.class )
1064                 {
1065                     return value;
1066                 }
1067                 else
1068                 {
1069                     return type.getConstructor( new Class<?>[]
1070                         {
1071                             String.class
1072                         } ).newInstance( value );
1073 
1074                 }
1075             }
1076             catch ( final InstantiationException e )
1077             {
1078                 throw new PropertyException( getMessage( "instantiationException", type.getName() ), e );
1079             }
1080             catch ( final IllegalAccessException e )
1081             {
1082                 throw new PropertyException( getMessage( "constructorAccessDenied", type.getName() ), e );
1083             }
1084             catch ( final IllegalArgumentException e )
1085             {
1086                 throw new AssertionError( e );
1087             }
1088             catch ( final InvocationTargetException e )
1089             {
1090                 throw new PropertyException( getMessage( "constructorInvocationFailure", type.getName() ), e );
1091             }
1092             catch ( final NoSuchMethodException e )
1093             {
1094                 throw new PropertyException( getMessage( "constructorNotFound", type.getName() ), e );
1095             }
1096         }
1097 
1098         return value;
1099     }
1100 
1101     private static String getMessage( final Throwable t )
1102     {
1103         return t != null ? t.getMessage() != null ? t.getMessage() : getMessage( t.getCause() ) : null;
1104     }
1105 
1106     private static String getMessage( final String key, final Object... arguments )
1107     {
1108         return java.text.MessageFormat.format( java.util.ResourceBundle.getBundle(
1109             Property.class.getName().replace( '.', '/' ), java.util.Locale.getDefault() ).getString( key ), arguments );
1110 
1111     }
1112       
1113 }