EMMA Coverage Report (generated Thu Jan 03 04:54:40 CET 2013)
[all classes][org.jomc.model]

COVERAGE SUMMARY FOR SOURCE FILE [Instance.java]

nameclass, %method, %block, %line, %
Instance.java100% (1/1)42%  (22/53)10%  (164/1573)13%  (42.6/331)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class Instance100% (1/1)42%  (22/53)10%  (164/1573)13%  (42.6/331)
Instance (Instance): void 0%   (0/1)0%   (0/116)0%   (0/14)
clone (): Instance 0%   (0/1)0%   (0/114)0%   (0/13)
copyAny (List, List): void 0%   (0/1)0%   (0/50)0%   (0/11)
copyOf (JAXBElement): JAXBElement 0%   (0/1)0%   (0/27)0%   (0/6)
copyOf (Object): Object 0%   (0/1)0%   (0/364)0%   (0/81)
copyOf (Serializable): Serializable 0%   (0/1)0%   (0/163)0%   (0/25)
copyOf (boolean []): boolean [] 0%   (0/1)0%   (0/22)0%   (0/5)
copyOf (byte []): byte [] 0%   (0/1)0%   (0/22)0%   (0/5)
copyOf (char []): char [] 0%   (0/1)0%   (0/22)0%   (0/5)
copyOf (double []): double [] 0%   (0/1)0%   (0/22)0%   (0/5)
copyOf (float []): float [] 0%   (0/1)0%   (0/22)0%   (0/5)
copyOf (int []): int [] 0%   (0/1)0%   (0/22)0%   (0/5)
copyOf (long []): long [] 0%   (0/1)0%   (0/22)0%   (0/5)
copyOf (short []): short [] 0%   (0/1)0%   (0/22)0%   (0/5)
copyOfArray (Object): Object 0%   (0/1)0%   (0/102)0%   (0/23)
getAnyElement (String, String): JAXBElement 0%   (0/1)0%   (0/7)0%   (0/1)
getAnyElement (String, String, Class): JAXBElement 0%   (0/1)0%   (0/8)0%   (0/1)
getAnyElements (String, String): List 0%   (0/1)0%   (0/7)0%   (0/1)
getAnyElements (String, String, Class): List 0%   (0/1)0%   (0/8)0%   (0/1)
getAnyObject (Class): Object 0%   (0/1)0%   (0/6)0%   (0/1)
getAnyObjects (Class): List 0%   (0/1)0%   (0/6)0%   (0/1)
getDependencyObjects (): Map 0%   (0/1)0%   (0/11)0%   (0/3)
getJavaClass (ClassLoader): Class 0%   (0/1)0%   (0/14)0%   (0/5)
getJavaClasses (ClassLoader): Class [] 0%   (0/1)0%   (0/45)0%   (0/8)
getJavaConstructor (ClassLoader): Constructor 0%   (0/1)0%   (0/30)0%   (0/10)
getJavaFactoryMethod (ClassLoader): Method 0%   (0/1)0%   (0/41)0%   (0/16)
getJavaProxyClass (ClassLoader): Class 0%   (0/1)0%   (0/38)0%   (0/8)
getMessageObjects (): Map 0%   (0/1)0%   (0/11)0%   (0/3)
getPropertyObjects (): Map 0%   (0/1)0%   (0/11)0%   (0/3)
isJavaClassAssignable (ClassLoader): boolean 0%   (0/1)0%   (0/40)0%   (0/10)
isStateless (): boolean 0%   (0/1)0%   (0/9)0%   (0/3)
getMessage (Throwable): String 100% (1/1)64%  (9/14)64%  (0.6/1)
<static initializer> 100% (1/1)100% (4/4)100% (1/1)
Instance (): void 100% (1/1)100% (3/3)100% (2/2)
getAny (): List 100% (1/1)100% (11/11)100% (3/3)
getClazz (): String 100% (1/1)100% (3/3)100% (1/1)
getDependencies (): Dependencies 100% (1/1)100% (3/3)100% (1/1)
getIdentifier (): String 100% (1/1)100% (3/3)100% (1/1)
getJavaFactoryMethodName (): String 100% (1/1)100% (41/41)100% (6/6)
getJavaTypeName (): JavaTypeName 100% (1/1)100% (31/31)100% (6/6)
getMessage (String, Object []): String 100% (1/1)100% (12/12)100% (1/1)
getMessages (): Messages 100% (1/1)100% (3/3)100% (1/1)
getName (): String 100% (1/1)100% (3/3)100% (1/1)
getProperties (): Properties 100% (1/1)100% (3/3)100% (1/1)
getSpecifications (): Specifications 100% (1/1)100% (3/3)100% (1/1)
setClazz (String): void 100% (1/1)100% (4/4)100% (2/2)
setDependencies (Dependencies): void 100% (1/1)100% (4/4)100% (2/2)
setIdentifier (String): void 100% (1/1)100% (4/4)100% (2/2)
setMessages (Messages): void 100% (1/1)100% (4/4)100% (2/2)
setName (String): void 100% (1/1)100% (4/4)100% (2/2)
setProperties (Properties): void 100% (1/1)100% (4/4)100% (2/2)
setSpecifications (Specifications): void 100% (1/1)100% (4/4)100% (2/2)
setStateless (Boolean): void 100% (1/1)100% (4/4)100% (2/2)

1//
2// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vhudson-jaxb-ri-2.1-2 
3// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
4// Any modifications to this file will be lost upon recompilation of the source schema. 
5// Generated on: 2013.01.03 at 05:01:35 AM CET 
6//
7 
8 
9package org.jomc.model;
10 
11import java.io.ByteArrayInputStream;
12import java.io.ByteArrayOutputStream;
13import java.io.File;
14import java.io.IOException;
15import java.io.InvalidClassException;
16import java.io.NotSerializableException;
17import java.io.ObjectInputStream;
18import java.io.ObjectOutputStream;
19import java.io.OptionalDataException;
20import java.io.Serializable;
21import java.io.StreamCorruptedException;
22import java.lang.reflect.Array;
23import java.lang.reflect.InvocationTargetException;
24import java.math.BigDecimal;
25import java.math.BigInteger;
26import java.net.MalformedURLException;
27import java.net.URI;
28import java.net.URISyntaxException;
29import java.net.URL;
30import java.util.ArrayList;
31import java.util.Calendar;
32import java.util.Currency;
33import java.util.Date;
34import java.util.Iterator;
35import java.util.List;
36import java.util.Locale;
37import java.util.TimeZone;
38import java.util.UUID;
39import javax.activation.MimeType;
40import javax.activation.MimeTypeParseException;
41import javax.annotation.Generated;
42import javax.xml.bind.JAXBElement;
43import javax.xml.bind.annotation.XmlAccessType;
44import javax.xml.bind.annotation.XmlAccessorType;
45import javax.xml.bind.annotation.XmlAnyElement;
46import javax.xml.bind.annotation.XmlAttribute;
47import javax.xml.bind.annotation.XmlElement;
48import javax.xml.bind.annotation.XmlType;
49import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
50import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
51import javax.xml.datatype.Duration;
52import javax.xml.datatype.XMLGregorianCalendar;
53import javax.xml.namespace.QName;
54import org.w3c.dom.Element;
55 
56 
57/**
58 * 
59 * Model of an instance.
60 * 
61 * The 'Instance' type defines attributes 'identifier', 'name', 'class' and 'stateless'. Attribute 'identifier' holds an
62 * identifier uniquely identifying the instance in a set of instances. Attribute 'name' holds an identifier uniquely
63 * identifying the implementation of the specifications implemented by an instance. Attribute 'class' holds an identifier
64 * of the class of an instance. Attribute 'stateless' flags an instance stateless.
65 * 
66 * An instance is build from implementations. An implementation declaring a location declares its instance located outside
67 * the scope of the model. An implementation not delcaring a class is only available during implementation inheritance
68 * processing. No instance is build from such implementations.
69 *       
70 * 
71 * <p>Java class for Instance complex type.
72 * 
73 * <p>The following schema fragment specifies the expected content contained within this class.
74 * 
75 * <pre>
76 * &lt;complexType name="Instance">
77 *   &lt;complexContent>
78 *     &lt;extension base="{http://jomc.org/model}ModelObject">
79 *       &lt;sequence>
80 *         &lt;element ref="{http://jomc.org/model}specifications" minOccurs="0"/>
81 *         &lt;element ref="{http://jomc.org/model}dependencies" minOccurs="0"/>
82 *         &lt;element ref="{http://jomc.org/model}properties" minOccurs="0"/>
83 *         &lt;element ref="{http://jomc.org/model}messages" minOccurs="0"/>
84 *         &lt;any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
85 *       &lt;/sequence>
86 *       &lt;attribute name="identifier" use="required" type="{http://jomc.org/model}Identifier" />
87 *       &lt;attribute name="name" use="required" type="{http://jomc.org/model}Identifier" />
88 *       &lt;attribute name="class" use="required" type="{http://jomc.org/model}Identifier" />
89 *       &lt;attribute name="stateless" type="{http://jomc.org/model}Flag" default="false" />
90 *     &lt;/extension>
91 *   &lt;/complexContent>
92 * &lt;/complexType>
93 * </pre>
94 * 
95 * 
96 */
97@XmlAccessorType(XmlAccessType.FIELD)
98@XmlType(name = "Instance", namespace = "http://jomc.org/model", propOrder = {
99    "specifications",
100    "dependencies",
101    "properties",
102    "messages",
103    "any"
104})
105@Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
106public class Instance
107    extends ModelObject
108    implements Cloneable
109{
110 
111    @XmlElement(namespace = "http://jomc.org/model")
112    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
113    protected Specifications specifications;
114    @XmlElement(namespace = "http://jomc.org/model")
115    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
116    protected Dependencies dependencies;
117    @XmlElement(namespace = "http://jomc.org/model")
118    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
119    protected Properties properties;
120    @XmlElement(namespace = "http://jomc.org/model")
121    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
122    protected Messages messages;
123    @XmlAnyElement(lax = true)
124    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
125    protected List<Object> any;
126    @XmlAttribute(name = "identifier", required = true)
127    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
128    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
129    protected String identifier;
130    @XmlAttribute(name = "name", required = true)
131    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
132    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
133    protected String name;
134    @XmlAttribute(name = "class", required = true)
135    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
136    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
137    protected String clazz;
138    @XmlAttribute(name = "stateless")
139    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
140    protected Boolean stateless;
141 
142    /**
143     * Creates a new {@code Instance} instance.
144     * 
145     */
146    public Instance() {
147        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
148        super();
149    }
150 
151    /**
152     * Creates a new {@code Instance} instance by deeply copying a given {@code Instance} instance.
153     * 
154     * 
155     * @param o
156     *     The instance to copy.
157     * @throws NullPointerException
158     *     if {@code o} is {@code null}.
159     */
160    public Instance(final Instance o) {
161        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
162        super(o);
163        if (o == null) {
164            throw new NullPointerException("Cannot create a copy of 'Instance' from 'null'.");
165        }
166        // CClassInfo: org.jomc.model.Specifications
167        this.specifications = ((o.specifications == null)?null:((o.getSpecifications() == null)?null:o.getSpecifications().clone()));
168        // CClassInfo: org.jomc.model.Dependencies
169        this.dependencies = ((o.dependencies == null)?null:((o.getDependencies() == null)?null:o.getDependencies().clone()));
170        // CClassInfo: org.jomc.model.Properties
171        this.properties = ((o.properties == null)?null:((o.getProperties() == null)?null:o.getProperties().clone()));
172        // CClassInfo: org.jomc.model.Messages
173        this.messages = ((o.messages == null)?null:((o.getMessages() == null)?null:o.getMessages().clone()));
174        // 'Any' collection.
175        if (o.any!= null) {
176            copyAny(o.getAny(), this.getAny());
177        }
178        // CBuiltinLeafInfo: java.lang.String
179        this.identifier = ((o.identifier == null)?null:o.getIdentifier());
180        // CBuiltinLeafInfo: java.lang.String
181        this.name = ((o.name == null)?null:o.getName());
182        // CBuiltinLeafInfo: java.lang.String
183        this.clazz = ((o.clazz == null)?null:o.getClazz());
184        // CBuiltinLeafInfo: java.lang.Boolean
185        this.stateless = ((o.stateless == null)?null:o.isStateless());
186    }
187 
188    /**
189     * Specifications implemented by this instance or {@code null}.
190     * 
191     * @return
192     *     possible object is
193     *     {@link Specifications }
194     *     
195     */
196    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
197    public Specifications getSpecifications() {
198        return specifications;
199    }
200 
201    /**
202     * Sets the value of the specifications property.
203     * 
204     * @param value
205     *     allowed object is
206     *     {@link Specifications }
207     *     
208     */
209    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
210    public void setSpecifications(Specifications value) {
211        this.specifications = value;
212    }
213 
214    /**
215     * Dependencies of this instance or {@code null}.
216     * 
217     * @return
218     *     possible object is
219     *     {@link Dependencies }
220     *     
221     */
222    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
223    public Dependencies getDependencies() {
224        return dependencies;
225    }
226 
227    /**
228     * Sets the value of the dependencies property.
229     * 
230     * @param value
231     *     allowed object is
232     *     {@link Dependencies }
233     *     
234     */
235    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
236    public void setDependencies(Dependencies value) {
237        this.dependencies = value;
238    }
239 
240    /**
241     * Properties of this instance or {@code null}.
242     * 
243     * @return
244     *     possible object is
245     *     {@link Properties }
246     *     
247     */
248    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
249    public Properties getProperties() {
250        return properties;
251    }
252 
253    /**
254     * Sets the value of the properties property.
255     * 
256     * @param value
257     *     allowed object is
258     *     {@link Properties }
259     *     
260     */
261    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
262    public void setProperties(Properties value) {
263        this.properties = value;
264    }
265 
266    /**
267     * Messages of this instance or {@code null}.
268     * 
269     * @return
270     *     possible object is
271     *     {@link Messages }
272     *     
273     */
274    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
275    public Messages getMessages() {
276        return messages;
277    }
278 
279    /**
280     * Sets the value of the messages property.
281     * 
282     * @param value
283     *     allowed object is
284     *     {@link Messages }
285     *     
286     */
287    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
288    public void setMessages(Messages value) {
289        this.messages = value;
290    }
291 
292    /**
293     * Gets the value of the any property.
294     * 
295     * <p>
296     * This accessor method returns a reference to the live list,
297     * not a snapshot. Therefore any modification you make to the
298     * returned list will be present inside the JAXB object.
299     * This is why there is not a <CODE>set</CODE> method for the any property.
300     * 
301     * <p>
302     * For example, to add a new item, do as follows:
303     * <pre>
304     *    getAny().add(newItem);
305     * </pre>
306     * 
307     * 
308     * <p>
309     * Objects of the following type(s) are allowed in the list
310     * {@link Object }
311     * {@link Element }
312     * 
313     * 
314     */
315    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
316    public List<Object> getAny() {
317        if (any == null) {
318            any = new ArrayList<Object>();
319        }
320        return this.any;
321    }
322 
323    /**
324     * The identifier of this instance.
325     * 
326     * @return
327     *     possible object is
328     *     {@link String }
329     *     
330     */
331    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
332    public String getIdentifier() {
333        return identifier;
334    }
335 
336    /**
337     * Sets the value of the identifier property.
338     * 
339     * @param value
340     *     allowed object is
341     *     {@link String }
342     *     
343     */
344    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
345    public void setIdentifier(String value) {
346        this.identifier = value;
347    }
348 
349    /**
350     * The name of the implementation of the specifications implemented by this instance.
351     * 
352     * @return
353     *     possible object is
354     *     {@link String }
355     *     
356     */
357    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
358    public String getName() {
359        return name;
360    }
361 
362    /**
363     * Sets the value of the name property.
364     * 
365     * @param value
366     *     allowed object is
367     *     {@link String }
368     *     
369     */
370    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
371    public void setName(String value) {
372        this.name = value;
373    }
374 
375    /**
376     * The identifier of the class of this instance.
377     * 
378     * @return
379     *     possible object is
380     *     {@link String }
381     *     
382     */
383    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
384    public String getClazz() {
385        return clazz;
386    }
387 
388    /**
389     * Sets the value of the clazz property.
390     * 
391     * @param value
392     *     allowed object is
393     *     {@link String }
394     *     
395     */
396    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
397    public void setClazz(String value) {
398        this.clazz = value;
399    }
400 
401    /**
402     * {@code true}, if this instance does not retain state across operations.
403     * 
404     * @return
405     *     possible object is
406     *     {@link Boolean }
407     *     
408     */
409    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
410    public boolean isStateless() {
411        if (stateless == null) {
412            return false;
413        } else {
414            return stateless;
415        }
416    }
417 
418    /**
419     * Sets the value of the stateless property.
420     * 
421     * @param value
422     *     allowed object is
423     *     {@link Boolean }
424     *     
425     */
426    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
427    public void setStateless(Boolean value) {
428        this.stateless = value;
429    }
430 
431    /**
432     * Copies all values of property {@code Any} deeply.
433     * 
434     * @param source
435     *     The source to copy from.
436     * @param target
437     *     The target to copy {@code source} to.
438     * @throws NullPointerException
439     *     if {@code target} is {@code null}.
440     */
441    @SuppressWarnings("unchecked")
442    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
443    private static void copyAny(final List<Object> source, final List<Object> target) {
444        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
445        if ((source!= null)&&(!source.isEmpty())) {
446            for (final Iterator<?> it = source.iterator(); it.hasNext(); ) {
447                final Object next = it.next();
448                if (next instanceof Element) {
449                    // CWildcardTypeInfo: org.w3c.dom.Element
450                    target.add(((Element)((Element) next).cloneNode(true)));
451                    continue;
452                }
453                if (next instanceof Object) {
454                    // CBuiltinLeafInfo: java.lang.Object
455                    target.add(copyOf(((Object) next)));
456                    continue;
457                }
458                // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
459                throw new AssertionError((("Unexpected instance '"+ next)+"' for property 'Any' of class 'org.jomc.model.Instance'."));
460            }
461        }
462    }
463 
464    /**
465     * Creates and returns a deep copy of a given object.
466     * 
467     * @param o
468     *     The instance to copy or {@code null}.
469     * @return
470     *     A deep copy of {@code o} or {@code null} if {@code o} is {@code null}.
471     */
472    @SuppressWarnings("unchecked")
473    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
474    private static Object copyOf(final Object o) {
475        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
476        try {
477            if (o!= null) {
478                if (o.getClass().isPrimitive()) {
479                    return o;
480                }
481                if (o.getClass().isArray()) {
482                    return copyOfArray(o);
483                }
484                // Immutable types.
485                if (o instanceof Boolean) {
486                    return o;
487                }
488                if (o instanceof Byte) {
489                    return o;
490                }
491                if (o instanceof Character) {
492                    return o;
493                }
494                if (o instanceof Double) {
495                    return o;
496                }
497                if (o instanceof Enum) {
498                    return o;
499                }
500                if (o instanceof Float) {
501                    return o;
502                }
503                if (o instanceof Integer) {
504                    return o;
505                }
506                if (o instanceof Long) {
507                    return o;
508                }
509                if (o instanceof Short) {
510                    return o;
511                }
512                if (o instanceof String) {
513                    return o;
514                }
515                if (o instanceof BigDecimal) {
516                    return o;
517                }
518                if (o instanceof BigInteger) {
519                    return o;
520                }
521                if (o instanceof UUID) {
522                    return o;
523                }
524                if (o instanceof QName) {
525                    return o;
526                }
527                if (o instanceof Duration) {
528                    return o;
529                }
530                if (o instanceof Currency) {
531                    return o;
532                }
533                // String based types.
534                if (o instanceof File) {
535                    return new File(o.toString());
536                }
537                if (o instanceof URI) {
538                    return new URI(o.toString());
539                }
540                if (o instanceof URL) {
541                    return new URL(o.toString());
542                }
543                if (o instanceof MimeType) {
544                    return new MimeType(o.toString());
545                }
546                // Cloneable types.
547                if (o instanceof XMLGregorianCalendar) {
548                    return ((XMLGregorianCalendar) o).clone();
549                }
550                if (o instanceof Date) {
551                    return ((Date) o).clone();
552                }
553                if (o instanceof Calendar) {
554                    return ((Calendar) o).clone();
555                }
556                if (o instanceof TimeZone) {
557                    return ((TimeZone) o).clone();
558                }
559                if (o instanceof Locale) {
560                    return ((Locale) o).clone();
561                }
562                if (o instanceof Element) {
563                    return ((Element)((Element) o).cloneNode(true));
564                }
565                if (o instanceof JAXBElement) {
566                    return copyOf(((JAXBElement) o));
567                }
568                try {
569                    return o.getClass().getMethod("clone", ((Class[]) null)).invoke(o, ((Object[]) null));
570                } catch (NoSuchMethodException e) {
571                    if (o instanceof Serializable) {
572                        return copyOf(((Serializable) o));
573                    }
574                    // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
575                    throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
576                } catch (IllegalAccessException e) {
577                    // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
578                    throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
579                } catch (InvocationTargetException e) {
580                    // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
581                    throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
582                } catch (SecurityException e) {
583                    // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
584                    throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
585                } catch (IllegalArgumentException e) {
586                    // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
587                    throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
588                } catch (ExceptionInInitializerError e) {
589                    // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
590                    throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
591                }
592            }
593            return null;
594        } catch (URISyntaxException e) {
595            throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
596        } catch (MimeTypeParseException e) {
597            throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
598        } catch (MalformedURLException e) {
599            throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ o)+"'.")).initCause(e));
600        }
601    }
602 
603    /**
604     * Creates and returns a deep copy of a given array.
605     * 
606     * @param array
607     *     The array to copy or {@code null}.
608     * @return
609     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
610     */
611    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
612    private static Object copyOfArray(final Object array) {
613        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
614        if (array!= null) {
615            if (array.getClass() == boolean[].class) {
616                return copyOf(((boolean[]) array));
617            }
618            if (array.getClass() == byte[].class) {
619                return copyOf(((byte[]) array));
620            }
621            if (array.getClass() == char[].class) {
622                return copyOf(((char[]) array));
623            }
624            if (array.getClass() == double[].class) {
625                return copyOf(((double[]) array));
626            }
627            if (array.getClass() == float[].class) {
628                return copyOf(((float[]) array));
629            }
630            if (array.getClass() == int[].class) {
631                return copyOf(((int[]) array));
632            }
633            if (array.getClass() == long[].class) {
634                return copyOf(((long[]) array));
635            }
636            if (array.getClass() == short[].class) {
637                return copyOf(((short[]) array));
638            }
639            final int len = Array.getLength(array);
640            final Object copy = Array.newInstance(array.getClass().getComponentType(), len);
641            for (int i = (len- 1); (i >= 0); i--) {
642                Array.set(copy, i, copyOf(Array.get(array, i)));
643            }
644            return copy;
645        }
646        return null;
647    }
648 
649    /**
650     * Creates and returns a deep copy of a given array.
651     * 
652     * @param array
653     *     The array to copy or {@code null}.
654     * @return
655     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
656     */
657    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
658    private static boolean[] copyOf(final boolean[] array) {
659        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
660        if (array!= null) {
661            final boolean[] copy = ((boolean[]) Array.newInstance(array.getClass().getComponentType(), array.length));
662            System.arraycopy(array, 0, copy, 0, array.length);
663            return copy;
664        }
665        return null;
666    }
667 
668    /**
669     * Creates and returns a deep copy of a given array.
670     * 
671     * @param array
672     *     The array to copy or {@code null}.
673     * @return
674     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
675     */
676    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
677    private static byte[] copyOf(final byte[] array) {
678        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
679        if (array!= null) {
680            final byte[] copy = ((byte[]) Array.newInstance(array.getClass().getComponentType(), array.length));
681            System.arraycopy(array, 0, copy, 0, array.length);
682            return copy;
683        }
684        return null;
685    }
686 
687    /**
688     * Creates and returns a deep copy of a given array.
689     * 
690     * @param array
691     *     The array to copy or {@code null}.
692     * @return
693     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
694     */
695    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
696    private static char[] copyOf(final char[] array) {
697        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
698        if (array!= null) {
699            final char[] copy = ((char[]) Array.newInstance(array.getClass().getComponentType(), array.length));
700            System.arraycopy(array, 0, copy, 0, array.length);
701            return copy;
702        }
703        return null;
704    }
705 
706    /**
707     * Creates and returns a deep copy of a given array.
708     * 
709     * @param array
710     *     The array to copy or {@code null}.
711     * @return
712     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
713     */
714    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
715    private static double[] copyOf(final double[] array) {
716        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
717        if (array!= null) {
718            final double[] copy = ((double[]) Array.newInstance(array.getClass().getComponentType(), array.length));
719            System.arraycopy(array, 0, copy, 0, array.length);
720            return copy;
721        }
722        return null;
723    }
724 
725    /**
726     * Creates and returns a deep copy of a given array.
727     * 
728     * @param array
729     *     The array to copy or {@code null}.
730     * @return
731     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
732     */
733    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
734    private static float[] copyOf(final float[] array) {
735        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
736        if (array!= null) {
737            final float[] copy = ((float[]) Array.newInstance(array.getClass().getComponentType(), array.length));
738            System.arraycopy(array, 0, copy, 0, array.length);
739            return copy;
740        }
741        return null;
742    }
743 
744    /**
745     * Creates and returns a deep copy of a given array.
746     * 
747     * @param array
748     *     The array to copy or {@code null}.
749     * @return
750     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
751     */
752    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
753    private static int[] copyOf(final int[] array) {
754        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
755        if (array!= null) {
756            final int[] copy = ((int[]) Array.newInstance(array.getClass().getComponentType(), array.length));
757            System.arraycopy(array, 0, copy, 0, array.length);
758            return copy;
759        }
760        return null;
761    }
762 
763    /**
764     * Creates and returns a deep copy of a given array.
765     * 
766     * @param array
767     *     The array to copy or {@code null}.
768     * @return
769     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
770     */
771    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
772    private static long[] copyOf(final long[] array) {
773        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
774        if (array!= null) {
775            final long[] copy = ((long[]) Array.newInstance(array.getClass().getComponentType(), array.length));
776            System.arraycopy(array, 0, copy, 0, array.length);
777            return copy;
778        }
779        return null;
780    }
781 
782    /**
783     * Creates and returns a deep copy of a given array.
784     * 
785     * @param array
786     *     The array to copy or {@code null}.
787     * @return
788     *     A deep copy of {@code array} or {@code null} if {@code array} is {@code null}.
789     */
790    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
791    private static short[] copyOf(final short[] array) {
792        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
793        if (array!= null) {
794            final short[] copy = ((short[]) Array.newInstance(array.getClass().getComponentType(), array.length));
795            System.arraycopy(array, 0, copy, 0, array.length);
796            return copy;
797        }
798        return null;
799    }
800 
801    /**
802     * Creates and returns a deep copy of a given {@code JAXBElement} instance.
803     * 
804     * @param element
805     *     The instance to copy or {@code null}.
806     * @return
807     *     A deep copy of {@code element} or {@code null} if {@code element} is {@code null}.
808     */
809    @SuppressWarnings("unchecked")
810    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
811    private static JAXBElement copyOf(final JAXBElement element) {
812        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
813        if (element!= null) {
814            final JAXBElement copy = new JAXBElement(element.getName(), element.getDeclaredType(), element.getScope(), element.getValue());
815            copy.setNil(element.isNil());
816            copy.setValue(copyOf(copy.getValue()));
817            return copy;
818        }
819        return null;
820    }
821 
822    /**
823     * Creates and returns a deep copy of a given {@code Serializable}.
824     * 
825     * @param serializable
826     *     The instance to copy or {@code null}.
827     * @return
828     *     A deep copy of {@code serializable} or {@code null} if {@code serializable} is {@code null}.
829     */
830    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
831    private static Serializable copyOf(final Serializable serializable) {
832        // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
833        if (serializable!= null) {
834            try {
835                final ByteArrayOutputStream byteArrayOutput = new ByteArrayOutputStream();
836                final ObjectOutputStream out = new ObjectOutputStream(byteArrayOutput);
837                out.writeObject(serializable);
838                out.close();
839                final ByteArrayInputStream byteArrayInput = new ByteArrayInputStream(byteArrayOutput.toByteArray());
840                final ObjectInputStream in = new ObjectInputStream(byteArrayInput);
841                final Serializable copy = ((Serializable) in.readObject());
842                in.close();
843                return copy;
844            } catch (SecurityException e) {
845                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
846            } catch (ClassNotFoundException e) {
847                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
848            } catch (InvalidClassException e) {
849                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
850            } catch (NotSerializableException e) {
851                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
852            } catch (StreamCorruptedException e) {
853                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
854            } catch (OptionalDataException e) {
855                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
856            } catch (IOException e) {
857                throw((AssertionError) new AssertionError((("Unexpected instance during copying object '"+ serializable)+"'.")).initCause(e));
858            }
859        }
860        return null;
861    }
862 
863    /**
864     * Creates and returns a deep copy of this object.
865     * 
866     * 
867     * @return
868     *     A deep copy of this object.
869     */
870    @Override
871    @Generated(value = "com.sun.tools.xjc.Driver", date = "2013-01-03T05:01:35+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
872    public Instance clone() {
873        {
874            // CC-XJC Version 2.0.1 Build 2012-03-02T12:09:12+0000
875            final Instance clone = ((Instance) super.clone());
876            // CClassInfo: org.jomc.model.Specifications
877            clone.specifications = ((this.specifications == null)?null:((this.getSpecifications() == null)?null:this.getSpecifications().clone()));
878            // CClassInfo: org.jomc.model.Dependencies
879            clone.dependencies = ((this.dependencies == null)?null:((this.getDependencies() == null)?null:this.getDependencies().clone()));
880            // CClassInfo: org.jomc.model.Properties
881            clone.properties = ((this.properties == null)?null:((this.getProperties() == null)?null:this.getProperties().clone()));
882            // CClassInfo: org.jomc.model.Messages
883            clone.messages = ((this.messages == null)?null:((this.getMessages() == null)?null:this.getMessages().clone()));
884            // 'Any' collection.
885            if (this.any!= null) {
886                clone.any = null;
887                copyAny(this.getAny(), clone.getAny());
888            }
889            // CBuiltinLeafInfo: java.lang.String
890            clone.identifier = ((this.identifier == null)?null:this.getIdentifier());
891            // CBuiltinLeafInfo: java.lang.String
892            clone.name = ((this.name == null)?null:this.getName());
893            // CBuiltinLeafInfo: java.lang.String
894            clone.clazz = ((this.clazz == null)?null:this.getClazz());
895            // CBuiltinLeafInfo: java.lang.Boolean
896            clone.stateless = ((this.stateless == null)?null:this.isStateless());
897            return clone;
898        }
899    }
900    
901    /**
902     * Empty {@code Class} array.
903     * @since 1.2
904     */
905    @javax.xml.bind.annotation.XmlTransient
906    private static final Class<?>[] NO_CLASSES =
907    {
908    };
909 
910    /** Maps dependency names to dependency objects. */
911    @javax.xml.bind.annotation.XmlTransient private java.util.Map<String, Object> dependencyObjects;
912 
913    /**
914     * Maps message names and locales to message format objects.
915     * @since 1.2
916     */
917    @javax.xml.bind.annotation.XmlTransient private java.util.Map<String, java.util.Map<java.util.Locale, java.text.MessageFormat>> messageObjects;
918 
919    /** Maps property names to property objects. */
920    @javax.xml.bind.annotation.XmlTransient private java.util.Map<String, Object> propertyObjects;
921 
922    /**
923     * Gets a mapping of dependency names to objects bound to the instance.
924     * <p>This method returns a reference to the live map, not a snapshot. Any modification you make to the returned map
925     * will be present inside the object.</p>
926     *
927     * @return A mapping of dependency names to objects bound to the instance.
928     */
929    public java.util.Map<String, Object> getDependencyObjects()
930    {
931        if ( this.dependencyObjects == null )
932        {
933            this.dependencyObjects = new java.util.HashMap<String, Object>();
934        }
935 
936        return this.dependencyObjects;
937    }
938 
939    /**
940     * Gets a mapping of message names to a mapping of locales to message format objects bound to the instance.
941     * <p>This method returns a reference to the live map, not a snapshot. Any modification you make to the returned map
942     * will be present inside the object.</p>
943     *
944     * @return A mapping of message names to a mapping of locales to message format objects bound to the instance.
945     *
946     * @since 1.2
947     */
948    public java.util.Map<String, java.util.Map<java.util.Locale, java.text.MessageFormat>> getMessageObjects()
949    {
950        if ( this.messageObjects == null )
951        {
952            this.messageObjects =
953                new java.util.HashMap<String, java.util.Map<java.util.Locale, java.text.MessageFormat>>();
954 
955        }
956 
957        return this.messageObjects;
958    }
959 
960    /**
961     * Gets a mapping of property names to objects bound to the instance.
962     * <p>This method returns a reference to the live map, not a snapshot. Any modification you make to the returned map
963     * will be present inside the object.</p>
964     *
965     * @return A mapping of property names to objects bound to the instance.
966     */
967    public java.util.Map<String, Object> getPropertyObjects()
968    {
969        if ( this.propertyObjects == null )
970        {
971            this.propertyObjects = new java.util.HashMap<String, Object>();
972        }
973 
974        return this.propertyObjects;
975    }
976 
977    /**
978     * Gets the Java class of the type referenced by the instance for a given class loader.
979     *
980     * @param classLoader The class loader to get the Java class from or {@code null}, to get the Java class from the
981     * platform's bootstrap class loader.
982     *
983     * @return The Java class of the type referenced by the instance or {@code null}, if the instance does not reference
984     * a type.
985     *
986     * @throws ClassNotFoundException if the Java class is not found.
987     * @throws ModelObjectException if compiling the name of the referenced type to a {@code JavaTypeName} fails.
988     *
989     * @see #getClazz()
990     * @see #getJavaTypeName()
991     *
992     * @since 1.2
993     */
994    public Class<?> getJavaClass( final ClassLoader classLoader )
995        throws ClassNotFoundException, ModelObjectException
996    {
997        Class<?> javaClass = null;
998        final JavaTypeName javaTypeName = this.getJavaTypeName();
999 
1000        if ( javaTypeName != null )
1001        {
1002            javaClass = javaTypeName.getClass( classLoader, false );
1003        }
1004 
1005        return javaClass;
1006    }
1007 
1008    /**
1009     * Gets the Java classes of all types referenced by the specifications of the instance for a given class loader.
1010     *
1011     * @param classLoader The class loader to get the Java classes from or {@code null}, to get the Java classes from
1012     * the platform's bootstrap class loader.
1013     *
1014     * @return The Java classes of all types referenced by the specifications of the instance.
1015     *
1016     * @throws ClassNotFoundException if a Java class is not found.
1017     * @throws ModelObjectException if parsing a name of a referenced type to a {@code JavaTypeName} fails.
1018     *
1019     * @see #getSpecifications()
1020     * @see Specification#getClazz()
1021     * @see Specification#getJavaClass(java.lang.ClassLoader)
1022     *
1023     * @since 1.2
1024     */
1025    public Class<?>[] getJavaClasses( final ClassLoader classLoader )
1026        throws ClassNotFoundException, ModelObjectException
1027    {
1028        final java.util.Set<Class<?>> classes = new java.util.HashSet<Class<?>>();
1029 
1030        if ( this.getSpecifications() != null )
1031        {
1032            for ( int i = 0, s0 = this.getSpecifications().getSpecification().size(); i < s0; i++ )
1033            {
1034                final Specification s = this.getSpecifications().getSpecification().get( i );
1035                final JavaTypeName javaTypeName = s.getJavaTypeName();
1036 
1037                if ( javaTypeName != null )
1038                {
1039                    classes.add( javaTypeName.getClass( classLoader, false ) );
1040                }
1041            }
1042        }
1043 
1044        return classes.toArray( new Class<?>[ classes.size() ] );
1045    }
1046 
1047    /**
1048     * Gets the Java constructor to use for creating objects of the instance.
1049     *
1050     * @param classLoader The class loader to get the Java class from or {@code null}, to get the Java class from the
1051     * platform's bootstrap class loader.
1052     *
1053     * @return The public default Java constructor of the Java class of the instance or {@code null}, if the instance
1054     * does not reference a type, or if the class is not accessible or abstract or does not declare such a constructor.
1055     *
1056     * @throws ClassNotFoundException if the Java class is not found.
1057     * @throws ModelObjectException if compiling the name of the type referenced by the instance to a
1058     * {@code JavaTypeName} fails.
1059     *
1060     * @see #getJavaClass(java.lang.ClassLoader)
1061     *
1062     * @since 1.2
1063     */
1064    public java.lang.reflect.Constructor<?> getJavaConstructor( final ClassLoader classLoader )
1065        throws ClassNotFoundException, ModelObjectException
1066    {
1067        java.lang.reflect.Constructor<?> javaConstructor = null;
1068        final JavaTypeName javaTypeName = this.getJavaTypeName();
1069 
1070        if ( javaTypeName != null )
1071        {
1072            final Class<?> javaClass = javaTypeName.getClass( classLoader, false );
1073 
1074            if ( java.lang.reflect.Modifier.isPublic( javaClass.getModifiers() )
1075                 && !java.lang.reflect.Modifier.isAbstract( javaClass.getModifiers() ) )
1076            {
1077                try
1078                {
1079                    javaConstructor = javaClass.getConstructor( NO_CLASSES );
1080                }
1081                catch ( final NoSuchMethodException e )
1082                {
1083                    javaConstructor = null;
1084                }
1085            }
1086        }
1087 
1088        return javaConstructor;
1089    }
1090 
1091    /**
1092     * Gets the name of the Java method to use for creating objects of the instance.
1093     *
1094     * @return The name of the Java method to use for creating objects of the instance or {@code null}, if no such
1095     * method name is supported.
1096     *
1097     * @throws ModelObjectException if compiling the name of the instance to a {@code JavaIdentifier} fails.
1098     *
1099     * @see #getName()
1100     *
1101     * @since 1.2
1102     */
1103    public String getJavaFactoryMethodName() throws ModelObjectException
1104    {
1105        try
1106        {
1107            String javaFactoryMethodName = null;
1108 
1109            if ( this.getName() != null )
1110            {
1111                javaFactoryMethodName =
1112                    JavaIdentifier.parse( "get" + JavaIdentifier.normalize(
1113                    this.getName(), JavaIdentifier.NormalizationMode.CAMEL_CASE ) ).toString();
1114 
1115            }
1116 
1117            return javaFactoryMethodName;
1118        }
1119        catch ( final java.text.ParseException e )
1120        {
1121            throw new ModelObjectException( getMessage( "javaIdentifierParseException", this.getName(),
1122                                                        getMessage( e ) ), e );
1123 
1124        }
1125    }
1126 
1127    /**
1128     * Gets the Java method to use for creating objects of the instance.
1129     *
1130     * @param classLoader The class loader to get the Java class from or {@code null}, to get the Java class from the
1131     * platform's bootstrap class loader.
1132     *
1133     * @return The public Java method of the Java class of the instance to use for creating objects of the instance or
1134     * {@code null}, if the instance does not reference a type or no such method is supported.
1135     *
1136     * @throws ClassNotFoundException if the Java class is not found.
1137     * @throws ModelObjectException if compiling the name of the type referenced by the instance to a
1138     * {@code JavaTypeName} or if compiling the name of the instance to a {@code JavaIdentifier} fails.
1139     *
1140     * @see #getJavaClass(java.lang.ClassLoader)
1141     * @see #getJavaFactoryMethodName()
1142     *
1143     * @since 1.2
1144     */
1145    public java.lang.reflect.Method getJavaFactoryMethod( final ClassLoader classLoader )
1146        throws ClassNotFoundException, ModelObjectException
1147    {
1148        final JavaTypeName javaTypeName = this.getJavaTypeName();
1149        java.lang.reflect.Method factoryMethod = null;
1150 
1151        if ( javaTypeName != null )
1152        {
1153            final Class<?> javaClass = javaTypeName.getClass( classLoader, false );
1154            final String methodName = this.getJavaFactoryMethodName();
1155 
1156            if ( methodName != null )
1157            {
1158                try
1159                {
1160                    factoryMethod = javaClass.getMethod( methodName, (Class[]) null );
1161                }
1162                catch ( final NoSuchMethodException e )
1163                {
1164                    factoryMethod = null;
1165                }
1166            }
1167 
1168            if ( factoryMethod == null )
1169            {
1170                try
1171                {
1172                    factoryMethod = javaClass.getMethod( "getObject", (Class[]) null );
1173                }
1174                catch ( final NoSuchMethodException e )
1175                {
1176                    factoryMethod = null;
1177                }
1178            }
1179        }
1180 
1181        return factoryMethod;
1182    }
1183 
1184    /**
1185     * Gets a flag indicating the Java class of the instance is assignable to all Java classes of all specifications of
1186     * the instance.
1187     *
1188     * @param classLoader The class loader to get the Java classes from or {@code null}, to get the Java classes from
1189     * the platform's bootstrap class loader.
1190     *
1191     * @return {@code true}, if the Java class of the instance is assignable to all Java classes of all specifications
1192     * of the instance; {@code false}, if the Java class of the instance is not assignable to all Java classes of all
1193     * specifications of the instance.
1194     *
1195     * @throws ClassNotFoundException if a Java class is not found.
1196     * @throws ModelObjectException if compiling a name of a referenced type to a {@code JavaTypeName} fails.
1197     *
1198     * @see #getJavaClass(java.lang.ClassLoader)
1199     * @see #getJavaClasses(java.lang.ClassLoader)
1200     * @see Class#isAssignableFrom(java.lang.Class)
1201     *
1202     * @since 1.2
1203     */
1204    public boolean isJavaClassAssignable( final ClassLoader classLoader )
1205        throws ClassNotFoundException, ModelObjectException
1206    {
1207        final JavaTypeName javaTypeName = this.getJavaTypeName();
1208        boolean assignable = javaTypeName != null;
1209 
1210        if ( assignable )
1211        {
1212            final Class<?> javaClass = javaTypeName.getClass( classLoader, false );
1213            final Class<?>[] javaClasses = this.getJavaClasses( classLoader );
1214 
1215            for ( int i = javaClasses.length - 1; i >= 0; i-- )
1216            {
1217                if ( !javaClasses[i].isAssignableFrom( javaClass ) )
1218                {
1219                    assignable = false;
1220                    break;
1221                }
1222            }
1223        }
1224 
1225        return assignable;
1226    }
1227 
1228    /**
1229     * Gets the Java proxy class for a given class loader.
1230     *
1231     * @param classLoader The class loader to get the Java proxy class from or {@code null}, to get the Java proxy class
1232     * from the platform's bootstrap class loader.
1233     *
1234     * @return The Java proxy class for {@code classLoader} or {@code null}, if the instance does not support a Java
1235     * proxy class.
1236     *
1237     * @throws ClassNotFoundException if a Java class is not found.
1238     * @throws ModelObjectException if compiling a name of a referenced type to a {@code JavaTypeName} fails.
1239     *
1240     * @see #getJavaClasses(java.lang.ClassLoader)
1241     * @see Class#isInterface()
1242     *
1243     * @since 1.2
1244     */
1245    public Class<?> getJavaProxyClass( final ClassLoader classLoader )
1246        throws ClassNotFoundException, ModelObjectException
1247    {
1248        final Class<?>[] javaClasses = this.getJavaClasses( classLoader );
1249        boolean canProxy = javaClasses.length > 0;
1250 
1251        if ( canProxy )
1252        {
1253            for ( int i = javaClasses.length - 1; i >= 0; i-- )
1254            {
1255                if ( !javaClasses[i].isInterface() )
1256                {
1257                    canProxy = false;
1258                    break;
1259                }
1260            }
1261        }
1262 
1263        return canProxy ? java.lang.reflect.Proxy.getProxyClass( classLoader, javaClasses ) : null;
1264    }
1265 
1266    /**
1267     * Gets the Java type name of the type referenced by the instance.
1268     *
1269     * @return The Java type name of the type referenced by the instance or {@code null}, if the instance does not
1270     * reference a type.
1271     *
1272     * @throws ModelObjectException if compiling the name of the referenced type to a {@code JavaTypeName} fails.
1273     *
1274     * @see #getClazz()
1275     *
1276     * @since 1.4
1277     */
1278    public JavaTypeName getJavaTypeName() throws ModelObjectException
1279    {
1280        try
1281        {
1282            JavaTypeName javaTypeName = null;
1283 
1284            if ( this.getClazz() != null )
1285            {
1286                javaTypeName = JavaTypeName.parse( this.getClazz() );
1287            }
1288 
1289            return javaTypeName;
1290        }
1291        catch ( final java.text.ParseException e )
1292        {
1293            throw new ModelObjectException( getMessage( "javaTypeNameParseException", this.getClazz(),
1294                                                        getMessage( e ) ), e );
1295 
1296        }
1297    }
1298 
1299    /**
1300     * Gets a single {@code JAXBElement} matching a namespace URI and local part from the {@code any} property of the
1301     * instance.
1302     *
1303     * @param namespaceURI The namespace URI of the {@code JAXBElement} to return.
1304     * @param localPart The local part of the {@code JAXBElement} to return.
1305     *
1306     * @return The {@code JAXBElement} matching {@code namespaceURI} and {@code localPart} from the {@code any} property
1307     * of the instance or {@code null}, if no such element is found.
1308     *
1309     * @throws NullPointerException if {@code namespaceURI} or {@code localPart} is {@code null}.
1310     * @throws IllegalStateException if the {@code any} property contains more than one matching element.
1311     *
1312     * @see #getAnyElement(java.util.List, java.lang.String, java.lang.String)
1313     *
1314     * @deprecated As of JOMC 1.1, please use method {@link #getAnyElement(java.lang.String, java.lang.String, java.lang.Class)}.
1315     * This method will be removed in version 2.0.
1316     */
1317    @Deprecated
1318    public javax.xml.bind.JAXBElement getAnyElement( final String namespaceURI, final String localPart )
1319    {
1320        return this.getAnyElement( this.getAny(), namespaceURI, localPart );
1321    }
1322 
1323    /**
1324     * Gets a list containing all {@code JAXBElement}s matching a namespace URI and local part from the {@code any}
1325     * property of the instance.
1326     *
1327     * @param namespaceURI The namespace URI of the {@code JAXBElement}s to return.
1328     * @param localPart The local part of the {@code JAXBElement}s to return.
1329     *
1330     * @return An unmodifiable list of all {@code JAXBElement}s matching {@code namespaceURI} and {@code localPart} from
1331     * the {@code any} property of the instance - an empty list if no such elements are found.
1332     *
1333     * @throws NullPointerException if {@code namespaceURI} or {@code localPart} is {@code null}.
1334     *
1335     * @see #getAnyElements(java.util.List, java.lang.String, java.lang.String)
1336     *
1337     * @deprecated As of JOMC 1.1, please use method {@link #getAnyElements(java.lang.String, java.lang.String, java.lang.Class)}.
1338     * This method will be removed in version 2.0.
1339     */
1340    @Deprecated
1341    public java.util.List<javax.xml.bind.JAXBElement> getAnyElements( final String namespaceURI,
1342                                                                      final String localPart )
1343    {
1344        return this.getAnyElements( this.getAny(), namespaceURI, localPart );
1345    }
1346 
1347    /**
1348     * Gets a single {@code JAXBElement} matching a namespace URI and local part from the {@code any} property of the
1349     * instance.
1350     *
1351     * @param namespaceURI The namespace URI of the {@code JAXBElement} to return.
1352     * @param localPart The local part of the {@code JAXBElement} to return.
1353     * @param type The class of the type the element is bound to.
1354     * @param <T> The type the element is bound to.
1355     *
1356     * @return The {@code JAXBElement} matching {@code namespaceURI} and {@code localPart} from the {@code any} property
1357     * of the instance or {@code null}, if no such element is found.
1358     *
1359     * @throws NullPointerException if {@code namespaceURI}, {@code localPart} or {@code type} is {@code null}.
1360     * @throws IllegalStateException if the {@code any} property contains more than one matching element.
1361     *
1362     * @see #getAnyElement(java.util.List, java.lang.String, java.lang.String, java.lang.Class)
1363     *
1364     * @since 1.1
1365     */
1366    public <T> javax.xml.bind.JAXBElement<T> getAnyElement( final String namespaceURI, final String localPart,
1367                                                            final Class<T> type )
1368    {
1369        return this.getAnyElement( this.getAny(), namespaceURI, localPart, type );
1370    }
1371 
1372    /**
1373     * Gets a list containing all {@code JAXBElement}s matching a namespace URI and local part from the {@code any}
1374     * property of the instance.
1375     *
1376     * @param namespaceURI The namespace URI of the {@code JAXBElement}s to return.
1377     * @param localPart The local part of the {@code JAXBElement}s to return.
1378     * @param type The class of the type the elements are bound to.
1379     * @param <T> The type the elements are bound to.
1380     *
1381     * @return An unmodifiable list of all {@code JAXBElement}s matching {@code namespaceURI} and {@code localPart} from
1382     * the {@code any} property of the instance - an empty list if no such elements are found.
1383     *
1384     * @throws NullPointerException if {@code namespaceURI}, {@code localPart} or {@code type} is {@code null}.
1385     *
1386     * @see #getAnyElements(java.util.List, java.lang.String, java.lang.String, java.lang.Class)
1387     *
1388     * @since 1.1
1389     */
1390    public <T> java.util.List<javax.xml.bind.JAXBElement<T>> getAnyElements( final String namespaceURI,
1391                                                                             final String localPart,
1392                                                                             final Class<T> type )
1393    {
1394        return this.getAnyElements( this.getAny(), namespaceURI, localPart, type );
1395    }
1396 
1397    /**
1398     * Gets a single object matching a given class from the {@code any} property of the instance.
1399     *
1400     * @param clazz The class to return an instance of.
1401     * @param <T> The type of the object to return.
1402     *
1403     * @return The instance of {@code clazz} from the {@code any} property of the instance or {@code null} if no such
1404     * instance is found.
1405     *
1406     * @throws NullPointerException if {@code clazz} is {@code null}.
1407     * @throws IllegalStateException if the {@code any} property contains more than one matching object.
1408     *
1409     * @see #getAnyObject(java.util.List, java.lang.Class)
1410     */
1411    public <T> T getAnyObject( final Class<T> clazz )
1412    {
1413        return this.getAnyObject( this.getAny(), clazz );
1414    }
1415 
1416    /**
1417     * Gets a list containing all objects matching a given class from the {@code any} property of the instance.
1418     *
1419     * @param clazz The class to return all instances of.
1420     * @param <T> The type of the objects to return.
1421     *
1422     * @return An unmodifiable list of all instances of {@code clazz} from the {@code any} property of the instance -
1423     * an empty list if no such objects are found.
1424     *
1425     * @throws NullPointerException if {@code clazz} is {@code null}.
1426     *
1427     * @see #getAnyObjects(java.util.List, java.lang.Class)
1428     */
1429    public <T> java.util.List<T> getAnyObjects( final Class<T> clazz )
1430    {
1431        return this.getAnyObjects( this.getAny(), clazz );
1432    }
1433 
1434    private static String getMessage( final Throwable t )
1435    {
1436        return t != null ? t.getMessage() != null ? t.getMessage() : getMessage( t.getCause() ) : null;
1437    }
1438 
1439    private static String getMessage( final String key, final Object... arguments )
1440    {
1441        return java.text.MessageFormat.format( java.util.ResourceBundle.getBundle(
1442            Instance.class.getName().replace( '.', '/' ), java.util.Locale.getDefault() ).
1443            getString( key ), arguments );
1444 
1445    }
1446      
1447}

[all classes][org.jomc.model]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov