001//
002// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vhudson-jaxb-ri-2.1-2 
003// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
004// Any modifications to this file will be lost upon recompilation of the source schema. 
005// Generated on: 2015.05.31 at 11:45:27 PM CEST 
006//
007
008
009package org.jomc.model;
010
011import java.io.ByteArrayInputStream;
012import java.io.ByteArrayOutputStream;
013import java.io.File;
014import java.io.IOException;
015import java.io.InvalidClassException;
016import java.io.NotSerializableException;
017import java.io.ObjectInputStream;
018import java.io.ObjectOutputStream;
019import java.io.OptionalDataException;
020import java.io.Serializable;
021import java.io.StreamCorruptedException;
022import java.lang.reflect.Array;
023import java.lang.reflect.InvocationTargetException;
024import java.math.BigDecimal;
025import java.math.BigInteger;
026import java.net.MalformedURLException;
027import java.net.URI;
028import java.net.URISyntaxException;
029import java.net.URL;
030import java.util.ArrayList;
031import java.util.Calendar;
032import java.util.Currency;
033import java.util.Date;
034import java.util.Iterator;
035import java.util.List;
036import java.util.Locale;
037import java.util.TimeZone;
038import java.util.UUID;
039import javax.activation.MimeType;
040import javax.activation.MimeTypeParseException;
041import javax.annotation.Generated;
042import javax.xml.bind.JAXBElement;
043import javax.xml.bind.annotation.XmlAccessType;
044import javax.xml.bind.annotation.XmlAccessorType;
045import javax.xml.bind.annotation.XmlAnyElement;
046import javax.xml.bind.annotation.XmlAttribute;
047import javax.xml.bind.annotation.XmlType;
048import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
049import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
050import javax.xml.datatype.Duration;
051import javax.xml.datatype.XMLGregorianCalendar;
052import javax.xml.namespace.QName;
053import org.w3c.dom.Element;
054
055
056/**
057 * 
058 * Model of a message argument.
059 * 
060 * The 'Argument' type defines attributes 'index', 'name' and 'type'. Attribute 'index' holds the index of the argument in
061 * a list of arguments. Attribute 'name' holds the name uniquely identifying the argument in a set of arguments. Attribute
062 * 'type' holds the type of the argument.
063 *       
064 * 
065 * <p>Java class for Argument complex type.
066 * 
067 * <p>The following schema fragment specifies the expected content contained within this class.
068 * 
069 * <pre>
070 * &lt;complexType name="Argument">
071 *   &lt;complexContent>
072 *     &lt;extension base="{http://jomc.org/model}ModelObject">
073 *       &lt;sequence>
074 *         &lt;any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
075 *       &lt;/sequence>
076 *       &lt;attribute name="index" use="required" type="{http://jomc.org/model}Index" />
077 *       &lt;attribute name="name" use="required" type="{http://jomc.org/model}Identifier" />
078 *       &lt;attribute name="type" type="{http://jomc.org/model}ArgumentType" default="Text" />
079 *     &lt;/extension>
080 *   &lt;/complexContent>
081 * &lt;/complexType>
082 * </pre>
083 * 
084 * 
085 */
086@XmlAccessorType(XmlAccessType.FIELD)
087@XmlType(name = "Argument", namespace = "http://jomc.org/model", propOrder = {
088    "any"
089})
090@Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
091public class Argument
092    extends ModelObject
093    implements Cloneable
094{
095
096    @XmlAnyElement(lax = true)
097    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
098    protected List<Object> any;
099    @XmlAttribute(name = "index", required = true)
100    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
101    protected int index;
102    @XmlAttribute(name = "name", required = true)
103    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
104    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
105    protected String name;
106    @XmlAttribute(name = "type")
107    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
108    protected ArgumentType type;
109
110    /**
111     * Creates a new {@code Argument} instance.
112     * 
113     */
114    public Argument() {
115        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
116        super();
117    }
118
119    /**
120     * Creates a new {@code Argument} instance by deeply copying a given {@code Argument} instance.
121     * 
122     * 
123     * @param o
124     *     The instance to copy.
125     * @throws NullPointerException
126     *     if {@code o} is {@code null}.
127     */
128    public Argument(final Argument o) {
129        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
130        super(o);
131        if (o == null) {
132            throw new NullPointerException("Cannot create a copy of 'Argument' from 'null'.");
133        }
134        // 'Any' collection.
135        if (o.any!= null) {
136            copyAny(o.getAny(), this.getAny());
137        }
138        // CBuiltinLeafInfo: java.lang.Integer
139        this.index = o.getIndex();
140        // CBuiltinLeafInfo: java.lang.String
141        this.name = ((o.name == null)?null:o.getName());
142        // CEnumLeafInfo: org.jomc.model.ArgumentType
143        this.type = ((o.type == null)?null:o.getType());
144    }
145
146    /**
147     * Gets the value of the any property.
148     * 
149     * <p>
150     * This accessor method returns a reference to the live list,
151     * not a snapshot. Therefore any modification you make to the
152     * returned list will be present inside the JAXB object.
153     * This is why there is not a <CODE>set</CODE> method for the any property.
154     * 
155     * <p>
156     * For example, to add a new item, do as follows:
157     * <pre>
158     *    getAny().add(newItem);
159     * </pre>
160     * 
161     * 
162     * <p>
163     * Objects of the following type(s) are allowed in the list
164     * {@link Object }
165     * {@link Element }
166     * 
167     * 
168     */
169    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
170    public List<Object> getAny() {
171        if (any == null) {
172            any = new ArrayList<Object>();
173        }
174        return this.any;
175    }
176
177    /**
178     * Index of this argument.
179     * 
180     */
181    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
182    public int getIndex() {
183        return index;
184    }
185
186    /**
187     * Sets the value of the index property.
188     * 
189     */
190    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
191    public void setIndex(int value) {
192        this.index = value;
193    }
194
195    /**
196     * Name of this argument.
197     * 
198     * @return
199     *     possible object is
200     *     {@link String }
201     *     
202     */
203    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
204    public String getName() {
205        return name;
206    }
207
208    /**
209     * Sets the value of the name property.
210     * 
211     * @param value
212     *     allowed object is
213     *     {@link String }
214     *     
215     */
216    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
217    public void setName(String value) {
218        this.name = value;
219    }
220
221    /**
222     * Type of this argument.
223     * 
224     * @return
225     *     possible object is
226     *     {@link ArgumentType }
227     *     
228     */
229    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
230    public ArgumentType getType() {
231        if (type == null) {
232            return ArgumentType.TEXT;
233        } else {
234            return type;
235        }
236    }
237
238    /**
239     * Sets the value of the type property.
240     * 
241     * @param value
242     *     allowed object is
243     *     {@link ArgumentType }
244     *     
245     */
246    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
247    public void setType(ArgumentType value) {
248        this.type = value;
249    }
250
251    /**
252     * Copies all values of property {@code Any} deeply.
253     * 
254     * @param source
255     *     The source to copy from.
256     * @param target
257     *     The target to copy {@code source} to.
258     * @throws NullPointerException
259     *     if {@code target} is {@code null}.
260     */
261    @SuppressWarnings("unchecked")
262    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
263    private static void copyAny(final List<Object> source, final List<Object> target) {
264        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
265        if ((source!= null)&&(!source.isEmpty())) {
266            for (final Iterator<?> it = source.iterator(); it.hasNext(); ) {
267                final Object next = it.next();
268                if (next instanceof Element) {
269                    // CWildcardTypeInfo: org.w3c.dom.Element
270                    target.add(((Element)((Element) next).cloneNode(true)));
271                    continue;
272                }
273                if (next instanceof Object) {
274                    // CBuiltinLeafInfo: java.lang.Object
275                    target.add(copyOf(((Object) next)));
276                    continue;
277                }
278                // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
279                throw new AssertionError((("Unexpected instance '"+ next)+"' for property 'Any' of class 'org.jomc.model.Argument'."));
280            }
281        }
282    }
283
284    /**
285     * Creates and returns a deep copy of a given object.
286     * 
287     * @param o
288     *     The instance to copy or {@code null}.
289     * @return
290     *     A deep copy of {@code o} or {@code null} if {@code o} is {@code null}.
291     */
292    @SuppressWarnings("unchecked")
293    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
294    private static Object copyOf(final Object o) {
295        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
296        try {
297            if (o!= null) {
298                if (o.getClass().isPrimitive()) {
299                    return o;
300                }
301                if (o.getClass().isArray()) {
302                    return copyOfArray(o);
303                }
304                // Immutable types.
305                if (o instanceof Boolean) {
306                    return o;
307                }
308                if (o instanceof Byte) {
309                    return o;
310                }
311                if (o instanceof Character) {
312                    return o;
313                }
314                if (o instanceof Double) {
315                    return o;
316                }
317                if (o instanceof Enum) {
318                    return o;
319                }
320                if (o instanceof Float) {
321                    return o;
322                }
323                if (o instanceof Integer) {
324                    return o;
325                }
326                if (o instanceof Long) {
327                    return o;
328                }
329                if (o instanceof Short) {
330                    return o;
331                }
332                if (o instanceof String) {
333                    return o;
334                }
335                if (o instanceof BigDecimal) {
336                    return o;
337                }
338                if (o instanceof BigInteger) {
339                    return o;
340                }
341                if (o instanceof UUID) {
342                    return o;
343                }
344                if (o instanceof QName) {
345                    return o;
346                }
347                if (o instanceof Duration) {
348                    return o;
349                }
350                if (o instanceof Currency) {
351                    return o;
352                }
353                // String based types.
354                if (o instanceof File) {
355                    return new File(o.toString());
356                }
357                if (o instanceof URI) {
358                    return new URI(o.toString());
359                }
360                if (o instanceof URL) {
361                    return new URL(o.toString());
362                }
363                if (o instanceof MimeType) {
364                    return new MimeType(o.toString());
365                }
366                // Cloneable types.
367                if (o instanceof XMLGregorianCalendar) {
368                    return ((XMLGregorianCalendar) o).clone();
369                }
370                if (o instanceof Date) {
371                    return ((Date) o).clone();
372                }
373                if (o instanceof Calendar) {
374                    return ((Calendar) o).clone();
375                }
376                if (o instanceof TimeZone) {
377                    return ((TimeZone) o).clone();
378                }
379                if (o instanceof Locale) {
380                    return ((Locale) o).clone();
381                }
382                if (o instanceof Element) {
383                    return ((Element)((Element) o).cloneNode(true));
384                }
385                if (o instanceof JAXBElement) {
386                    return copyOf(((JAXBElement) o));
387                }
388                try {
389                    return o.getClass().getMethod("clone", ((Class[]) null)).invoke(o, ((Object[]) null));
390                } catch (NoSuchMethodException e) {
391                    if (o instanceof Serializable) {
392                        return copyOf(((Serializable) o));
393                    }
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 (IllegalAccessException 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                } catch (InvocationTargetException e) {
400                    // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
401                    throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
402                } catch (SecurityException e) {
403                    // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
404                    throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
405                } catch (IllegalArgumentException e) {
406                    // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
407                    throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
408                } catch (ExceptionInInitializerError e) {
409                    // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
410                    throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
411                }
412            }
413            return null;
414        } catch (MalformedURLException e) {
415            throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
416        } catch (MimeTypeParseException e) {
417            throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
418        } catch (URISyntaxException e) {
419            throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
420        }
421    }
422
423    /**
424     * Creates and returns a deep copy of a given array.
425     * 
426     * @param array
427     *     The array to copy or {@code null}.
428     * @return
429     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
430     */
431    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
432    private static Object copyOfArray(final Object array) {
433        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
434        if (array!= null) {
435            if (array.getClass() == boolean[].class) {
436                return copyOf(((boolean[]) array));
437            }
438            if (array.getClass() == byte[].class) {
439                return copyOf(((byte[]) array));
440            }
441            if (array.getClass() == char[].class) {
442                return copyOf(((char[]) array));
443            }
444            if (array.getClass() == double[].class) {
445                return copyOf(((double[]) array));
446            }
447            if (array.getClass() == float[].class) {
448                return copyOf(((float[]) array));
449            }
450            if (array.getClass() == int[].class) {
451                return copyOf(((int[]) array));
452            }
453            if (array.getClass() == long[].class) {
454                return copyOf(((long[]) array));
455            }
456            if (array.getClass() == short[].class) {
457                return copyOf(((short[]) array));
458            }
459            final int len = Array.getLength(array);
460            final Object copy = Array.newInstance(array.getClass().getComponentType(), len);
461            for (int i = (len- 1); (i >= 0); i--) {
462                Array.set(copy, i, copyOf(Array.get(array, i)));
463            }
464            return copy;
465        }
466        return null;
467    }
468
469    /**
470     * Creates and returns a deep copy of a given array.
471     * 
472     * @param array
473     *     The array to copy or {@code null}.
474     * @return
475     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
476     */
477    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
478    private static boolean[] copyOf(final boolean[] array) {
479        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
480        if (array!= null) {
481            final boolean[] copy = ((boolean[]) Array.newInstance(array.getClass().getComponentType(), array.length));
482            System.arraycopy(array, 0, copy, 0, array.length);
483            return copy;
484        }
485        return null;
486    }
487
488    /**
489     * Creates and returns a deep copy of a given array.
490     * 
491     * @param array
492     *     The array to copy or {@code null}.
493     * @return
494     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
495     */
496    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
497    private static byte[] copyOf(final byte[] array) {
498        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
499        if (array!= null) {
500            final byte[] copy = ((byte[]) Array.newInstance(array.getClass().getComponentType(), array.length));
501            System.arraycopy(array, 0, copy, 0, array.length);
502            return copy;
503        }
504        return null;
505    }
506
507    /**
508     * Creates and returns a deep copy of a given array.
509     * 
510     * @param array
511     *     The array to copy or {@code null}.
512     * @return
513     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
514     */
515    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
516    private static char[] copyOf(final char[] array) {
517        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
518        if (array!= null) {
519            final char[] copy = ((char[]) Array.newInstance(array.getClass().getComponentType(), array.length));
520            System.arraycopy(array, 0, copy, 0, array.length);
521            return copy;
522        }
523        return null;
524    }
525
526    /**
527     * Creates and returns a deep copy of a given array.
528     * 
529     * @param array
530     *     The array to copy or {@code null}.
531     * @return
532     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
533     */
534    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
535    private static double[] copyOf(final double[] array) {
536        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
537        if (array!= null) {
538            final double[] copy = ((double[]) Array.newInstance(array.getClass().getComponentType(), array.length));
539            System.arraycopy(array, 0, copy, 0, array.length);
540            return copy;
541        }
542        return null;
543    }
544
545    /**
546     * Creates and returns a deep copy of a given array.
547     * 
548     * @param array
549     *     The array to copy or {@code null}.
550     * @return
551     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
552     */
553    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
554    private static float[] copyOf(final float[] array) {
555        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
556        if (array!= null) {
557            final float[] copy = ((float[]) Array.newInstance(array.getClass().getComponentType(), array.length));
558            System.arraycopy(array, 0, copy, 0, array.length);
559            return copy;
560        }
561        return null;
562    }
563
564    /**
565     * Creates and returns a deep copy of a given array.
566     * 
567     * @param array
568     *     The array to copy or {@code null}.
569     * @return
570     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
571     */
572    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
573    private static int[] copyOf(final int[] array) {
574        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
575        if (array!= null) {
576            final int[] copy = ((int[]) Array.newInstance(array.getClass().getComponentType(), array.length));
577            System.arraycopy(array, 0, copy, 0, array.length);
578            return copy;
579        }
580        return null;
581    }
582
583    /**
584     * Creates and returns a deep copy of a given array.
585     * 
586     * @param array
587     *     The array to copy or {@code null}.
588     * @return
589     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
590     */
591    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
592    private static long[] copyOf(final long[] array) {
593        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
594        if (array!= null) {
595            final long[] copy = ((long[]) Array.newInstance(array.getClass().getComponentType(), array.length));
596            System.arraycopy(array, 0, copy, 0, array.length);
597            return copy;
598        }
599        return null;
600    }
601
602    /**
603     * Creates and returns a deep copy of a given array.
604     * 
605     * @param array
606     *     The array to copy or {@code null}.
607     * @return
608     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
609     */
610    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
611    private static short[] copyOf(final short[] array) {
612        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
613        if (array!= null) {
614            final short[] copy = ((short[]) Array.newInstance(array.getClass().getComponentType(), array.length));
615            System.arraycopy(array, 0, copy, 0, array.length);
616            return copy;
617        }
618        return null;
619    }
620
621    /**
622     * Creates and returns a deep copy of a given {@code JAXBElement} instance.
623     * 
624     * @param element
625     *     The instance to copy or {@code null}.
626     * @return
627     *     A deep copy of {@code element} or {@code null} if {@code element} is {@code null}.
628     */
629    @SuppressWarnings("unchecked")
630    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
631    private static JAXBElement copyOf(final JAXBElement element) {
632        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
633        if (element!= null) {
634            final JAXBElement copy = new JAXBElement(element.getName(), element.getDeclaredType(), element.getScope(), element.getValue());
635            copy.setNil(element.isNil());
636            copy.setValue(copyOf(copy.getValue()));
637            return copy;
638        }
639        return null;
640    }
641
642    /**
643     * Creates and returns a deep copy of a given {@code Serializable}.
644     * 
645     * @param serializable
646     *     The instance to copy or {@code null}.
647     * @return
648     *     A deep copy of {@code serializable} or {@code null} if {@code serializable} is {@code null}.
649     */
650    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
651    private static Serializable copyOf(final Serializable serializable) {
652        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
653        if (serializable!= null) {
654            try {
655                final ByteArrayOutputStream byteArrayOutput = new ByteArrayOutputStream();
656                final ObjectOutputStream out = new ObjectOutputStream(byteArrayOutput);
657                out.writeObject(serializable);
658                out.close();
659                final ByteArrayInputStream byteArrayInput = new ByteArrayInputStream(byteArrayOutput.toByteArray());
660                final ObjectInputStream in = new ObjectInputStream(byteArrayInput);
661                final Serializable copy = ((Serializable) in.readObject());
662                in.close();
663                return copy;
664            } catch (SecurityException e) {
665                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
666            } catch (ClassNotFoundException e) {
667                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
668            } catch (InvalidClassException e) {
669                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
670            } catch (NotSerializableException e) {
671                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
672            } catch (StreamCorruptedException e) {
673                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
674            } catch (OptionalDataException e) {
675                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
676            } catch (IOException e) {
677                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
678            }
679        }
680        return null;
681    }
682
683    /**
684     * Creates and returns a deep copy of this object.
685     * 
686     * 
687     * @return
688     *     A deep copy of this object.
689     */
690    @Override
691    @Generated(value = "com.sun.tools.xjc.Driver", date = "2015-05-31T11:45:26+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
692    public Argument clone() {
693        {
694            // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
695            final Argument clone = ((Argument) super.clone());
696            // 'Any' collection.
697            if (this.any!= null) {
698                clone.any = null;
699                copyAny(this.getAny(), clone.getAny());
700            }
701            // CBuiltinLeafInfo: java.lang.Integer
702            clone.index = this.getIndex();
703            // CBuiltinLeafInfo: java.lang.String
704            clone.name = ((this.name == null)?null:this.getName());
705            // CEnumLeafInfo: org.jomc.model.ArgumentType
706            clone.type = ((this.type == null)?null:this.getType());
707            return clone;
708        }
709    }
710    
711    /**
712     * Gets the Java type name of the type referenced by the argument.
713     *
714     * @return The Java type name of the type referenced by the argument or {@code null}, if the argument does not
715     * reference a type.
716     *
717     * @throws ModelObjectException if compiling the name of the referenced type to a {@code JavaTypeName} fails.
718     *
719     * @since 1.4
720     *
721     * @see #getType()
722     */
723    public JavaTypeName getJavaTypeName() throws ModelObjectException
724    {
725        try
726        {
727            String typeName = "java.lang.String";
728
729            if ( this.getType() == ArgumentType.DATE || this.getType() == ArgumentType.TIME )
730            {
731                typeName = "java.util.Date";
732            }
733            else if ( this.getType() == ArgumentType.NUMBER )
734            {
735                typeName = "java.lang.Number";
736            }
737
738            return JavaTypeName.parse( typeName );
739        }
740        catch ( final java.text.ParseException e )
741        {
742            throw new ModelObjectException( getMessage( "javaTypeNameParseException", this.getType(), getMessage( e ) ),
743                                            e );
744
745        }
746    }
747
748    /**
749     * Gets the Java variable name of the argument.
750     *
751     * @return The Java variable name of the argument.
752     *
753     * @throws ModelObjectException if compiling the name of the argument to a {@code JavaIdentifier} fails.
754     *
755     * @since 1.4
756     *
757     * @see #getName()
758     */
759    public JavaIdentifier getJavaVariableName() throws ModelObjectException
760    {
761        try
762        {
763            return JavaIdentifier.normalize( this.getName() != null ? this.getName() : "",
764                                             JavaIdentifier.NormalizationMode.VARIABLE_NAME_CONVENTION );
765
766        }
767        catch ( final java.text.ParseException e )
768        {
769            throw new ModelObjectException( getMessage( "javaMethodParameterNameParseException", this.getName(),
770                                                        getMessage( e ) ), e );
771
772        }
773    }
774
775    /**
776     * Gets a single {@code JAXBElement} matching a namespace URI and local part from the {@code any} property of the
777     * instance.
778     *
779     * @param namespaceURI The namespace URI of the {@code JAXBElement} to return.
780     * @param localPart The local part of the {@code JAXBElement} to return.
781     *
782     * @return The {@code JAXBElement} matching {@code namespaceURI} and {@code localPart} from the {@code any} property
783     * of the instance or {@code null}, if no such element is found.
784     *
785     * @throws NullPointerException if {@code namespaceURI} or {@code localPart} is {@code null}.
786     * @throws IllegalStateException if the {@code any} property contains more than one matching element.
787     *
788     * @see #getAnyElement(java.util.List, java.lang.String, java.lang.String)
789     *
790     * @deprecated As of JOMC 1.1, please use method {@link #getAnyElement(java.lang.String, java.lang.String, java.lang.Class)}.
791     * This method will be removed in version 2.0.
792     */
793    @Deprecated
794    public javax.xml.bind.JAXBElement getAnyElement( final String namespaceURI, final String localPart )
795    {
796        return this.getAnyElement( this.getAny(), namespaceURI, localPart );
797    }
798
799    /**
800     * Gets a list containing all {@code JAXBElement}s matching a namespace URI and local part from the {@code any}
801     * property of the instance.
802     *
803     * @param namespaceURI The namespace URI of the {@code JAXBElement}s to return.
804     * @param localPart The local part of the {@code JAXBElement}s to return.
805     *
806     * @return An unmodifiable list of all {@code JAXBElement}s matching {@code namespaceURI} and {@code localPart} from
807     * the {@code any} property of the instance - an empty list if no such elements are found.
808     *
809     * @throws NullPointerException if {@code namespaceURI} or {@code localPart} is {@code null}.
810     *
811     * @see #getAnyElements(java.util.List, java.lang.String, java.lang.String)
812     *
813     * @deprecated As of JOMC 1.1, please use method {@link #getAnyElements(java.lang.String, java.lang.String, java.lang.Class)}.
814     * This method will be removed in version 2.0.
815     */
816    @Deprecated
817    public java.util.List<javax.xml.bind.JAXBElement> getAnyElements( final String namespaceURI,
818                                                                      final String localPart )
819    {
820        return this.getAnyElements( this.getAny(), namespaceURI, localPart );
821    }
822
823    /**
824     * Gets a single {@code JAXBElement} matching a namespace URI and local part from the {@code any} property of the
825     * instance.
826     *
827     * @param namespaceURI The namespace URI of the {@code JAXBElement} to return.
828     * @param localPart The local part of the {@code JAXBElement} to return.
829     * @param type The class of the type the element is bound to.
830     * @param <T> The type the element is bound to.
831     *
832     * @return The {@code JAXBElement} matching {@code namespaceURI} and {@code localPart} from the {@code any} property
833     * of the instance or {@code null}, if no such element is found.
834     *
835     * @throws NullPointerException if {@code namespaceURI}, {@code localPart} or {@code type} is {@code null}.
836     * @throws IllegalStateException if the {@code any} property contains more than one matching element.
837     *
838     * @see #getAnyElement(java.util.List, java.lang.String, java.lang.String, java.lang.Class)
839     *
840     * @since 1.1
841     */
842    public <T> javax.xml.bind.JAXBElement<T> getAnyElement( final String namespaceURI, final String localPart,
843                                                            final Class<T> type )
844    {
845        return this.getAnyElement( this.getAny(), namespaceURI, localPart, type );
846    }
847
848    /**
849     * Gets a list containing all {@code JAXBElement}s matching a namespace URI and local part from the {@code any}
850     * property of the instance.
851     *
852     * @param namespaceURI The namespace URI of the {@code JAXBElement}s to return.
853     * @param localPart The local part of the {@code JAXBElement}s to return.
854     * @param type The class of the type the elements are bound to.
855     * @param <T> The type the elements are bound to.
856     *
857     * @return An unmodifiable list of all {@code JAXBElement}s matching {@code namespaceURI} and {@code localPart} from
858     * the {@code any} property of the instance - an empty list if no such elements are found.
859     *
860     * @throws NullPointerException if {@code namespaceURI}, {@code localPart} or {@code type} is {@code null}.
861     *
862     * @see #getAnyElements(java.util.List, java.lang.String, java.lang.String, java.lang.Class)
863     *
864     * @since 1.1
865     */
866    public <T> java.util.List<javax.xml.bind.JAXBElement<T>> getAnyElements( final String namespaceURI,
867                                                                             final String localPart,
868                                                                             final Class<T> type )
869    {
870        return this.getAnyElements( this.getAny(), namespaceURI, localPart, type );
871    }
872
873    /**
874     * Gets a single object matching a given class from the {@code any} property of the instance.
875     *
876     * @param clazz The class to return an instance of.
877     * @param <T> The type of the object to return.
878     *
879     * @return The instance of {@code clazz} from the {@code any} property of the instance or {@code null}, if no such
880     * instance is found.
881     *
882     * @throws NullPointerException if {@code clazz} is {@code null}.
883     * @throws IllegalStateException if the {@code any} property contains more than one matching object.
884     *
885     * @see #getAnyObject(java.util.List, java.lang.Class)
886     */
887    public <T> T getAnyObject( final Class<T> clazz )
888    {
889        return this.getAnyObject( this.getAny(), clazz );
890    }
891
892    /**
893     * Gets a list containing all objects matching a given class from the {@code any} property of the instance.
894     *
895     * @param clazz The class to return all instances of.
896     * @param <T> The type of the objects to return.
897     *
898     * @return An unmodifiable list of all instances of {@code clazz} from the {@code any} property of the instance -
899     * an empty list if no such objects are found.
900     *
901     * @throws NullPointerException if {@code clazz} is {@code null}.
902     *
903     * @see #getAnyObjects(java.util.List, java.lang.Class)
904     */
905    public <T> java.util.List<T> getAnyObjects( final Class<T> clazz )
906    {
907        return this.getAnyObjects( this.getAny(), clazz );
908    }
909
910    private static String getMessage( final Throwable t )
911    {
912        return t != null
913               ? t.getMessage() != null && t.getMessage().trim().length() > 0
914                 ? t.getMessage()
915                 : getMessage( t.getCause() )
916               : null;
917
918    }
919
920    private static String getMessage( final String key, final Object... arguments )
921    {
922        return java.text.MessageFormat.format( java.util.ResourceBundle.getBundle(
923            Argument.class.getName().replace( '.', '/' ), java.util.Locale.getDefault() ).
924            getString( key ), arguments );
925
926    }
927      
928}