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