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.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 properties.
023     * 
024     * <p>Java class for Properties complex type.
025     * 
026     * <p>The following schema fragment specifies the expected content contained within this class.
027     * 
028     * <pre>
029     * &lt;complexType name="Properties">
030     *   &lt;complexContent>
031     *     &lt;extension base="{http://jomc.org/model}ModelObject">
032     *       &lt;sequence>
033     *         &lt;element ref="{http://jomc.org/model}property" maxOccurs="unbounded" minOccurs="0"/>
034     *         &lt;element name="reference" type="{http://jomc.org/model}PropertyReference" 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 = "Properties", namespace = "http://jomc.org/model", propOrder = {
045        "property",
046        "reference"
047    })
048    @Generated(value = "com.sun.tools.xjc.Driver", date = "2012-04-01T02:39:59+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
049    public class Properties
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-04-01T02:39:59+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
056        protected List<Property> property;
057        @XmlElement(namespace = "http://jomc.org/model")
058        @Generated(value = "com.sun.tools.xjc.Driver", date = "2012-04-01T02:39:59+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
059        protected List<PropertyReference> reference;
060    
061        /**
062         * Creates a new {@code Properties} instance.
063         * 
064         */
065        public Properties() {
066            // CC-XJC Version 2.0 Build 2011-09-16T18:27:24+0000
067            super();
068        }
069    
070        /**
071         * Creates a new {@code Properties} instance by deeply copying a given {@code Properties} instance.
072         * 
073         * 
074         * @param o
075         *     The instance to copy.
076         * @throws NullPointerException
077         *     if {@code o} is {@code null}.
078         */
079        public Properties(final Properties 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 'Properties' from 'null'.");
084            }
085            // 'Property' collection.
086            if (o.property!= null) {
087                copyProperty(o.getProperty(), this.getProperty());
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 property 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 property property.
103         * 
104         * <p>
105         * For example, to add a new item, do as follows:
106         * <pre>
107         *    getProperty().add(newItem);
108         * </pre>
109         * 
110         * 
111         * <p>
112         * Objects of the following type(s) are allowed in the list
113         * {@link Property }
114         * 
115         * 
116         */
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        public List<Property> getProperty() {
119            if (property == null) {
120                property = new ArrayList<Property>();
121            }
122            return this.property;
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 PropertyReference }
144         * 
145         * 
146         */
147        @Generated(value = "com.sun.tools.xjc.Driver", date = "2012-04-01T02:39:59+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
148        public List<PropertyReference> getReference() {
149            if (reference == null) {
150                reference = new ArrayList<PropertyReference>();
151            }
152            return this.reference;
153        }
154    
155        /**
156         * Copies all values of property {@code Property} 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-04-01T02:39:59+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
167        private static void copyProperty(final List<Property> source, final List<Property> 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 Property) {
173                        // CClassInfo: org.jomc.model.Property
174                        target.add(((Property) 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 'Property' of class 'org.jomc.model.Properties'."));
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-04-01T02:39:59+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
195        private static void copyReference(final List<PropertyReference> source, final List<PropertyReference> 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 PropertyReference) {
201                        // CClassInfo: org.jomc.model.PropertyReference
202                        target.add(((PropertyReference) 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.Properties'."));
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-04-01T02:39:59+02:00", comments = "JAXB RI vhudson-jaxb-ri-2.1-2")
220        public Properties clone() {
221            {
222                // CC-XJC Version 2.0 Build 2011-09-16T18:27:24+0000
223                final Properties clone = ((Properties) super.clone());
224                // 'Property' collection.
225                if (this.property!= null) {
226                    clone.property = null;
227                    copyProperty(this.getProperty(), clone.getProperty());
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 a property for a given name from the list of properties.
240         *
241         * @param name The name of the property to return.
242         *
243         * @return The first matching property or {@code null}, if no such property is found.
244         *
245         * @throws NullPointerException if {@code name} is {@code null}.
246         *
247         * @see #getProperty()
248         * @see Property#getName()
249         */
250        public Property getProperty( final String name )
251        {
252            if ( name == null )
253            {
254                throw new NullPointerException( "name" );
255            }
256    
257            for ( int i = 0, s0 = this.getProperty().size(); i < s0; i++ )
258            {
259                final Property p = this.getProperty().get( i );
260    
261                if ( name.equals( p.getName() ) )
262                {
263                    return p;
264                }
265            }
266    
267            return null;
268        }
269    
270        /**
271         * Gets a property reference for a given name from the list of references.
272         *
273         * @param name The name of the property reference to return.
274         *
275         * @return The first matching property reference or {@code null}, if no such reference is found.
276         *
277         * @throws NullPointerException if {@code name} is {@code null}.
278         *
279         * @see #getReference()
280         * @see PropertyReference#getName()
281         */
282        public PropertyReference getReference( final String name )
283        {
284            if ( name == null )
285            {
286                throw new NullPointerException( "name" );
287            }
288    
289            for ( int i = 0, s0 = this.getReference().size(); i < s0; i++ )
290            {
291                final PropertyReference r = this.getReference().get( i );
292    
293                if ( name.equals( r.getName() ) )
294                {
295                    return r;
296                }
297            }
298    
299            return null;
300        }
301    
302        /**
303         * Gets a list of properties of a given type.
304         *
305         * @param type The type of the properties to return or {@code null}, to return properties of the default type.
306         *
307         * @return An unmodifiable list holding all properties of {@code type}.
308         *
309         * @see #getProperty()
310         * @see Property#getType()
311         *
312         * @since 1.2
313         */
314        public List<Property> getPropertiesByType( final String type )
315        {
316            final List<Property> list = new ArrayList<Property>( this.getProperty().size() );
317    
318            for ( int i = 0, s0 = this.getProperty().size(); i < s0; i++ )
319            {
320                final Property p = this.getProperty().get( i );
321    
322                if ( type == null ? p.getType() == null : type.equals( p.getType() ) )
323                {
324                    list.add( p );
325                }
326            }
327    
328            return java.util.Collections.unmodifiableList( list );
329        }
330          
331    }