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.03.14 at 10:22:27 AM CET 
006    //
007    
008    
009    package org.jomc.model;
010    
011    import java.util.ArrayList;
012    import java.util.Iterator;
013    import java.util.List;
014    import javax.annotation.Generated;
015    import javax.xml.bind.annotation.XmlAccessType;
016    import javax.xml.bind.annotation.XmlAccessorType;
017    import javax.xml.bind.annotation.XmlElement;
018    import javax.xml.bind.annotation.XmlType;
019    
020    
021    /**
022     * List of implementations.
023     * 
024     * <p>Java class for Implementations complex type.
025     * 
026     * <p>The following schema fragment specifies the expected content contained within this class.
027     * 
028     * <pre>
029     * &lt;complexType name="Implementations">
030     *   &lt;complexContent>
031     *     &lt;extension base="{http://jomc.org/model}ModelObject">
032     *       &lt;sequence>
033     *         &lt;element ref="{http://jomc.org/model}implementation" maxOccurs="unbounded" minOccurs="0"/>
034     *         &lt;element name="reference" type="{http://jomc.org/model}ImplementationReference" maxOccurs="unbounded" minOccurs="0"/>
035     *       &lt;/sequence>
036     *     &lt;/extension>
037     *   &lt;/complexContent>
038     * &lt;/complexType>
039     * </pre>
040     * 
041     * 
042     */
043    @XmlAccessorType(XmlAccessType.FIELD)
044    @XmlType(name = "Implementations", namespace = "http://jomc.org/model", propOrder = {
045        "implementation",
046        "reference"
047    })
048    @Generated(value = "com.sun.tools.xjc.Driver", date = "2012-03-14T10:22:27+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
049    public class Implementations
050        extends ModelObject
051        implements Cloneable
052    {
053    
054        @XmlElement(namespace = "http://jomc.org/model")
055        @Generated(value = "com.sun.tools.xjc.Driver", date = "2012-03-14T10:22:27+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
056        protected List<Implementation> implementation;
057        @XmlElement(namespace = "http://jomc.org/model")
058        @Generated(value = "com.sun.tools.xjc.Driver", date = "2012-03-14T10:22:27+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
059        protected List<ImplementationReference> reference;
060    
061        /**
062         * Creates a new {@code Implementations} instance.
063         * 
064         */
065        public Implementations() {
066            // CC-XJC Version 2.0 Build 2011-09-16T18:27:24+0000
067            super();
068        }
069    
070        /**
071         * Creates a new {@code Implementations} instance by deeply copying a given {@code Implementations} instance.
072         * 
073         * 
074         * @param o
075         *     The instance to copy.
076         * @throws NullPointerException
077         *     if {@code o} is {@code null}.
078         */
079        public Implementations(final Implementations o) {
080            // CC-XJC Version 2.0 Build 2011-09-16T18:27:24+0000
081            super(o);
082            if (o == null) {
083                throw new NullPointerException("Cannot create a copy of 'Implementations' from 'null'.");
084            }
085            // 'Implementation' collection.
086            if (o.implementation!= null) {
087                copyImplementation(o.getImplementation(), this.getImplementation());
088            }
089            // 'Reference' collection.
090            if (o.reference!= null) {
091                copyReference(o.getReference(), this.getReference());
092            }
093        }
094    
095        /**
096         * Gets the value of the implementation property.
097         * 
098         * <p>
099         * This accessor method returns a reference to the live list,
100         * not a snapshot. Therefore any modification you make to the
101         * returned list will be present inside the JAXB object.
102         * This is why there is not a <CODE>set</CODE> method for the implementation property.
103         * 
104         * <p>
105         * For example, to add a new item, do as follows:
106         * <pre>
107         *    getImplementation().add(newItem);
108         * </pre>
109         * 
110         * 
111         * <p>
112         * Objects of the following type(s) are allowed in the list
113         * {@link Implementation }
114         * 
115         * 
116         */
117        @Generated(value = "com.sun.tools.xjc.Driver", date = "2012-03-14T10:22:27+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
118        public List<Implementation> getImplementation() {
119            if (implementation == null) {
120                implementation = new ArrayList<Implementation>();
121            }
122            return this.implementation;
123        }
124    
125        /**
126         * Gets the value of the reference property.
127         * 
128         * <p>
129         * This accessor method returns a reference to the live list,
130         * not a snapshot. Therefore any modification you make to the
131         * returned list will be present inside the JAXB object.
132         * This is why there is not a <CODE>set</CODE> method for the reference property.
133         * 
134         * <p>
135         * For example, to add a new item, do as follows:
136         * <pre>
137         *    getReference().add(newItem);
138         * </pre>
139         * 
140         * 
141         * <p>
142         * Objects of the following type(s) are allowed in the list
143         * {@link ImplementationReference }
144         * 
145         * 
146         */
147        @Generated(value = "com.sun.tools.xjc.Driver", date = "2012-03-14T10:22:27+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
148        public List<ImplementationReference> getReference() {
149            if (reference == null) {
150                reference = new ArrayList<ImplementationReference>();
151            }
152            return this.reference;
153        }
154    
155        /**
156         * Copies all values of property {@code Implementation} deeply.
157         * 
158         * @param source
159         *     The source to copy from.
160         * @param target
161         *     The target to copy {@code source} to.
162         * @throws NullPointerException
163         *     if {@code target} is {@code null}.
164         */
165        @SuppressWarnings("unchecked")
166        @Generated(value = "com.sun.tools.xjc.Driver", date = "2012-03-14T10:22:27+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
167        private static void copyImplementation(final List<Implementation> source, final List<Implementation> target) {
168            // CC-XJC Version 2.0 Build 2011-09-16T18:27:24+0000
169            if ((source!= null)&&(!source.isEmpty())) {
170                for (final Iterator<?> it = source.iterator(); it.hasNext(); ) {
171                    final Object next = it.next();
172                    if (next instanceof Implementation) {
173                        // CClassInfo: org.jomc.model.Implementation
174                        target.add(((Implementation) next).clone());
175                        continue;
176                    }
177                    // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
178                    throw new AssertionError((("Unexpected instance '"+ next)+"' for property 'Implementation' of class 'org.jomc.model.Implementations'."));
179                }
180            }
181        }
182    
183        /**
184         * Copies all values of property {@code Reference} deeply.
185         * 
186         * @param source
187         *     The source to copy from.
188         * @param target
189         *     The target to copy {@code source} to.
190         * @throws NullPointerException
191         *     if {@code target} is {@code null}.
192         */
193        @SuppressWarnings("unchecked")
194        @Generated(value = "com.sun.tools.xjc.Driver", date = "2012-03-14T10:22:27+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
195        private static void copyReference(final List<ImplementationReference> source, final List<ImplementationReference> target) {
196            // CC-XJC Version 2.0 Build 2011-09-16T18:27:24+0000
197            if ((source!= null)&&(!source.isEmpty())) {
198                for (final Iterator<?> it = source.iterator(); it.hasNext(); ) {
199                    final Object next = it.next();
200                    if (next instanceof ImplementationReference) {
201                        // CClassInfo: org.jomc.model.ImplementationReference
202                        target.add(((ImplementationReference) next).clone());
203                        continue;
204                    }
205                    // Please report this at https://apps.sourceforge.net/mantisbt/ccxjc/
206                    throw new AssertionError((("Unexpected instance '"+ next)+"' for property 'Reference' of class 'org.jomc.model.Implementations'."));
207                }
208            }
209        }
210    
211        /**
212         * Creates and returns a deep copy of this object.
213         * 
214         * 
215         * @return
216         *     A deep copy of this object.
217         */
218        @Override
219        @Generated(value = "com.sun.tools.xjc.Driver", date = "2012-03-14T10:22:27+01:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
220        public Implementations clone() {
221            {
222                // CC-XJC Version 2.0 Build 2011-09-16T18:27:24+0000
223                final Implementations clone = ((Implementations) super.clone());
224                // 'Implementation' collection.
225                if (this.implementation!= null) {
226                    clone.implementation = null;
227                    copyImplementation(this.getImplementation(), clone.getImplementation());
228                }
229                // 'Reference' collection.
230                if (this.reference!= null) {
231                    clone.reference = null;
232                    copyReference(this.getReference(), clone.getReference());
233                }
234                return clone;
235            }
236        }
237        
238        /**
239         * Gets an implementation for a given identifier from the list of implementations.
240         *
241         * @param implementation The identifier of the implementation to return.
242         *
243         * @return The first matching implementation or {@code null}, if no such implementation is found.
244         *
245         * @throws NullPointerException if {@code implementation} is {@code null}.
246         *
247         * @see #getImplementation()
248         * @see Implementation#getIdentifier()
249         */
250        public Implementation getImplementation( final String implementation )
251        {
252            if ( implementation == null )
253            {
254                throw new NullPointerException( "implementation" );
255            }
256    
257            for ( int i = 0, s0 = this.getImplementation().size(); i < s0; i++ )
258            {
259                final Implementation current = this.getImplementation().get( i );
260    
261                if ( implementation.equals( current.getIdentifier() ) )
262                {
263                    return current;
264                }
265            }
266    
267            return null;
268        }
269    
270        /**
271         * Gets an implementation for a given class from the list of implementations.
272         *
273         * @param implementation The class of the implementation to return.
274         *
275         * @return The first matching implementation or {@code null}, if no such implementation is found.
276         *
277         * @throws NullPointerException if {@code implementation} is {@code null}.
278         *
279         * @see #getImplementation()
280         * @see Implementation#isClassDeclaration()
281         * @see Implementation#getClazz()
282         */
283        public Implementation getImplementation( final Class<?> implementation )
284        {
285            if ( implementation == null )
286            {
287                throw new NullPointerException( "implementation" );
288            }
289    
290            for ( int i = 0, s0 = this.getImplementation().size(); i < s0; i++ )
291            {
292                final Implementation current = this.getImplementation().get( i );
293    
294                if ( current.isClassDeclaration() && implementation.getName().equals( current.getClazz() ) )
295                {
296                    return current;
297                }
298            }
299    
300            return null;
301        }
302    
303        /**
304         * Gets an implementation for a given name from the list of implementations.
305         *
306         * @param name The name of the implementation to return.
307         *
308         * @return The first matching implementation or {@code null}, if no such implementation is found.
309         *
310         * @throws NullPointerException if {@code name} is {@code null}.
311         *
312         * @see #getImplementation()
313         * @see Implementation#getName()
314         */
315        public Implementation getImplementationByName( final String name )
316        {
317            if ( name == null )
318            {
319                throw new NullPointerException( "name" );
320            }
321    
322            for ( int i = 0, s0 = this.getImplementation().size(); i < s0; i++ )
323            {
324                final Implementation current = this.getImplementation().get( i );
325    
326                if ( name.equals( current.getName() ) )
327                {
328                    return current;
329                }
330            }
331    
332            return null;
333        }
334    
335        /**
336         * Gets an implementation reference for a given identifier from the list of references.
337         *
338         * @param implementation The identifier of the reference to return.
339         *
340         * @return The first matching implementation reference or {@code null}, if no such reference is found.
341         *
342         * @throws NullPointerException if {@code implementation} is {@code null}.
343         *
344         * @see #getReference()
345         * @see ImplementationReference#getIdentifier()
346         */
347        public ImplementationReference getReference( final String implementation )
348        {
349            if ( implementation == null )
350            {
351                throw new NullPointerException( "implementation" );
352            }
353    
354            for ( int i = 0, s0 = this.getReference().size(); i < s0; i++ )
355            {
356                final ImplementationReference r = this.getReference().get( i );
357    
358                if ( implementation.equals( r.getIdentifier() ) )
359                {
360                    return r;
361                }
362            }
363    
364            return null;
365        }
366          
367    }