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