//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2012.01.10 at 10:31:03 AM CST 
//


package org.isotc211._2005.gfc;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import org.isotc211._2005.gco.AbstractObjectType;
import org.isotc211._2005.gco.BooleanPropertyType;
import org.isotc211._2005.gco.CharacterStringPropertyType;
import org.isotc211._2005.gco.LocalNamePropertyType;


/**
 * Class of real world phenomena with common properties -  - [ocl] - typeName realizes GF_FeatureType::typeName; - isAbstract realizes GF_FeatureType::isAbstract; - constrainedBy realizes GF_FeatureType::constrainedBy - [/ocl]
 * 
 * <p>Java class for FC_FeatureType_Type complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="FC_FeatureType_Type">
 *   &lt;complexContent>
 *     &lt;extension base="{http://www.isotc211.org/2005/gco}AbstractObject_Type">
 *       &lt;sequence>
 *         &lt;element name="typeName" type="{http://www.isotc211.org/2005/gco}LocalName_PropertyType"/>
 *         &lt;element name="definition" type="{http://www.isotc211.org/2005/gco}CharacterString_PropertyType" minOccurs="0"/>
 *         &lt;element name="code" type="{http://www.isotc211.org/2005/gco}CharacterString_PropertyType" minOccurs="0"/>
 *         &lt;element name="isAbstract" type="{http://www.isotc211.org/2005/gco}Boolean_PropertyType"/>
 *         &lt;element name="aliases" type="{http://www.isotc211.org/2005/gco}LocalName_PropertyType" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element name="inheritsFrom" type="{http://www.isotc211.org/2005/gfc}FC_InheritanceRelation_PropertyType" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element name="inheritsTo" type="{http://www.isotc211.org/2005/gfc}FC_InheritanceRelation_PropertyType" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element name="featureCatalogue" type="{http://www.isotc211.org/2005/gfc}FC_FeatureCatalogue_PropertyType"/>
 *         &lt;element name="constrainedBy" type="{http://www.isotc211.org/2005/gfc}FC_Constraint_PropertyType" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element name="definitionReference" type="{http://www.isotc211.org/2005/gfc}FC_DefinitionReference_PropertyType" minOccurs="0"/>
 *         &lt;element name="carrierOfCharacteristics" type="{http://www.isotc211.org/2005/gfc}FC_CarrierOfCharacteristics_PropertyType" maxOccurs="unbounded" minOccurs="0"/>
 *       &lt;/sequence>
 *     &lt;/extension>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "FC_FeatureType_Type", propOrder = {
    "typeName",
    "definition",
    "code",
    "isAbstract",
    "aliases",
    "inheritsFrom",
    "inheritsTo",
    "featureCatalogue",
    "constrainedBy",
    "definitionReference",
    "carrierOfCharacteristics"
})
@XmlSeeAlso({
    FCFeatureAssociationType.class
})
public class FCFeatureTypeType
    extends AbstractObjectType
{

    @XmlElement(required = true)
    protected LocalNamePropertyType typeName;
    protected CharacterStringPropertyType definition;
    protected CharacterStringPropertyType code;
    @XmlElement(required = true)
    protected BooleanPropertyType isAbstract;
    protected List<LocalNamePropertyType> aliases;
    protected List<FCInheritanceRelationPropertyType> inheritsFrom;
    protected List<FCInheritanceRelationPropertyType> inheritsTo;
    @XmlElement(required = true)
    protected FCFeatureCataloguePropertyType featureCatalogue;
    protected List<FCConstraintPropertyType> constrainedBy;
    protected FCDefinitionReferencePropertyType definitionReference;
    protected List<FCCarrierOfCharacteristicsPropertyType> carrierOfCharacteristics;

    /**
     * Gets the value of the typeName property.
     * 
     * @return
     *     possible object is
     *     {@link LocalNamePropertyType }
     *     
     */
    public LocalNamePropertyType getTypeName() {
        return typeName;
    }

    /**
     * Sets the value of the typeName property.
     * 
     * @param value
     *     allowed object is
     *     {@link LocalNamePropertyType }
     *     
     */
    public void setTypeName(LocalNamePropertyType value) {
        this.typeName = value;
    }

    /**
     * Gets the value of the definition property.
     * 
     * @return
     *     possible object is
     *     {@link CharacterStringPropertyType }
     *     
     */
    public CharacterStringPropertyType getDefinition() {
        return definition;
    }

    /**
     * Sets the value of the definition property.
     * 
     * @param value
     *     allowed object is
     *     {@link CharacterStringPropertyType }
     *     
     */
    public void setDefinition(CharacterStringPropertyType value) {
        this.definition = value;
    }

    /**
     * Gets the value of the code property.
     * 
     * @return
     *     possible object is
     *     {@link CharacterStringPropertyType }
     *     
     */
    public CharacterStringPropertyType getCode() {
        return code;
    }

    /**
     * Sets the value of the code property.
     * 
     * @param value
     *     allowed object is
     *     {@link CharacterStringPropertyType }
     *     
     */
    public void setCode(CharacterStringPropertyType value) {
        this.code = value;
    }

    /**
     * Gets the value of the isAbstract property.
     * 
     * @return
     *     possible object is
     *     {@link BooleanPropertyType }
     *     
     */
    public BooleanPropertyType getIsAbstract() {
        return isAbstract;
    }

    /**
     * Sets the value of the isAbstract property.
     * 
     * @param value
     *     allowed object is
     *     {@link BooleanPropertyType }
     *     
     */
    public void setIsAbstract(BooleanPropertyType value) {
        this.isAbstract = value;
    }

    /**
     * Gets the value of the aliases property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the aliases property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getAliases().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link LocalNamePropertyType }
     * 
     * 
     */
    public List<LocalNamePropertyType> getAliases() {
        if (aliases == null) {
            aliases = new ArrayList<LocalNamePropertyType>();
        }
        return this.aliases;
    }

    /**
     * Gets the value of the inheritsFrom property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the inheritsFrom property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getInheritsFrom().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link FCInheritanceRelationPropertyType }
     * 
     * 
     */
    public List<FCInheritanceRelationPropertyType> getInheritsFrom() {
        if (inheritsFrom == null) {
            inheritsFrom = new ArrayList<FCInheritanceRelationPropertyType>();
        }
        return this.inheritsFrom;
    }

    /**
     * Gets the value of the inheritsTo property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the inheritsTo property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getInheritsTo().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link FCInheritanceRelationPropertyType }
     * 
     * 
     */
    public List<FCInheritanceRelationPropertyType> getInheritsTo() {
        if (inheritsTo == null) {
            inheritsTo = new ArrayList<FCInheritanceRelationPropertyType>();
        }
        return this.inheritsTo;
    }

    /**
     * Gets the value of the featureCatalogue property.
     * 
     * @return
     *     possible object is
     *     {@link FCFeatureCataloguePropertyType }
     *     
     */
    public FCFeatureCataloguePropertyType getFeatureCatalogue() {
        return featureCatalogue;
    }

    /**
     * Sets the value of the featureCatalogue property.
     * 
     * @param value
     *     allowed object is
     *     {@link FCFeatureCataloguePropertyType }
     *     
     */
    public void setFeatureCatalogue(FCFeatureCataloguePropertyType value) {
        this.featureCatalogue = value;
    }

    /**
     * Gets the value of the constrainedBy property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the constrainedBy property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getConstrainedBy().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link FCConstraintPropertyType }
     * 
     * 
     */
    public List<FCConstraintPropertyType> getConstrainedBy() {
        if (constrainedBy == null) {
            constrainedBy = new ArrayList<FCConstraintPropertyType>();
        }
        return this.constrainedBy;
    }

    /**
     * Gets the value of the definitionReference property.
     * 
     * @return
     *     possible object is
     *     {@link FCDefinitionReferencePropertyType }
     *     
     */
    public FCDefinitionReferencePropertyType getDefinitionReference() {
        return definitionReference;
    }

    /**
     * Sets the value of the definitionReference property.
     * 
     * @param value
     *     allowed object is
     *     {@link FCDefinitionReferencePropertyType }
     *     
     */
    public void setDefinitionReference(FCDefinitionReferencePropertyType value) {
        this.definitionReference = value;
    }

    /**
     * Gets the value of the carrierOfCharacteristics property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the carrierOfCharacteristics property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getCarrierOfCharacteristics().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link FCCarrierOfCharacteristicsPropertyType }
     * 
     * 
     */
    public List<FCCarrierOfCharacteristicsPropertyType> getCarrierOfCharacteristics() {
        if (carrierOfCharacteristics == null) {
            carrierOfCharacteristics = new ArrayList<FCCarrierOfCharacteristicsPropertyType>();
        }
        return this.carrierOfCharacteristics;
    }

}
