//
// This file was generated by the BinaryNotes compiler.
// See http://bnotes.sourceforge.net 
// Any modifications to this file will be lost upon recompilation of the source ASN.1. 
//

using GSF.ASN1;
using GSF.ASN1.Attributes;
using GSF.ASN1.Coders;
using GSF.ASN1.Types;

namespace GSF.MMS.Model
{
    
    [ASN1PreparedElement]
    [ASN1Sequence(Name = "GetNameList_Request", IsSet = false)]
    public class GetNameList_Request : IASN1PreparedElement
    {
        private static readonly IASN1PreparedElementData preparedData = CoderFactory.getInstance().newPreparedElementData(typeof(GetNameList_Request));
        private Identifier continueAfter_;

        private bool continueAfter_present;
        private ObjectClass objectClass_;


        private ObjectScopeChoiceType objectScope_;

        [ASN1Element(Name = "objectClass", IsOptional = false, HasTag = true, Tag = 0, HasDefaultValue = false)]
        public ObjectClass ObjectClass
        {
            get
            {
                return objectClass_;
            }
            set
            {
                objectClass_ = value;
            }
        }


        [ASN1Element(Name = "objectScope", IsOptional = false, HasTag = true, Tag = 1, HasDefaultValue = false)]
        public ObjectScopeChoiceType ObjectScope
        {
            get
            {
                return objectScope_;
            }
            set
            {
                objectScope_ = value;
            }
        }


        [ASN1Element(Name = "continueAfter", IsOptional = true, HasTag = true, Tag = 2, HasDefaultValue = false)]
        public Identifier ContinueAfter
        {
            get
            {
                return continueAfter_;
            }
            set
            {
                continueAfter_ = value;
                continueAfter_present = true;
            }
        }


        public void initWithDefaults()
        {
        }


        public IASN1PreparedElementData PreparedData
        {
            get
            {
                return preparedData;
            }
        }

        public bool isContinueAfterPresent()
        {
            return continueAfter_present;
        }

        [ASN1PreparedElement]
        [ASN1Choice(Name = "objectScope")]
        public class ObjectScopeChoiceType : IASN1PreparedElement
        {
            private static IASN1PreparedElementData preparedData = CoderFactory.getInstance().newPreparedElementData(typeof(ObjectScopeChoiceType));
            private NullObject aaSpecific_;
            private bool aaSpecific_selected;
            private Identifier domainSpecific_;
            private bool domainSpecific_selected;
            private NullObject vmdSpecific_;
            private bool vmdSpecific_selected;


            [ASN1Null(Name = "vmdSpecific")]
            [ASN1Element(Name = "vmdSpecific", IsOptional = false, HasTag = true, Tag = 0, HasDefaultValue = false)]
            public NullObject VmdSpecific
            {
                get
                {
                    return vmdSpecific_;
                }
                set
                {
                    selectVmdSpecific(value);
                }
            }


            [ASN1Element(Name = "domainSpecific", IsOptional = false, HasTag = true, Tag = 1, HasDefaultValue = false)]
            public Identifier DomainSpecific
            {
                get
                {
                    return domainSpecific_;
                }
                set
                {
                    selectDomainSpecific(value);
                }
            }


            [ASN1Null(Name = "aaSpecific")]
            [ASN1Element(Name = "aaSpecific", IsOptional = false, HasTag = true, Tag = 2, HasDefaultValue = false)]
            public NullObject AaSpecific
            {
                get
                {
                    return aaSpecific_;
                }
                set
                {
                    selectAaSpecific(value);
                }
            }

            public void initWithDefaults()
            {
            }

            public IASN1PreparedElementData PreparedData
            {
                get
                {
                    return preparedData;
                }
            }


            public bool isVmdSpecificSelected()
            {
                return vmdSpecific_selected;
            }


            public void selectVmdSpecific()
            {
                selectVmdSpecific(new NullObject());
            }


            public void selectVmdSpecific(NullObject val)
            {
                vmdSpecific_ = val;
                vmdSpecific_selected = true;


                domainSpecific_selected = false;

                aaSpecific_selected = false;
            }


            public bool isDomainSpecificSelected()
            {
                return domainSpecific_selected;
            }


            public void selectDomainSpecific(Identifier val)
            {
                domainSpecific_ = val;
                domainSpecific_selected = true;


                vmdSpecific_selected = false;

                aaSpecific_selected = false;
            }


            public bool isAaSpecificSelected()
            {
                return aaSpecific_selected;
            }


            public void selectAaSpecific()
            {
                selectAaSpecific(new NullObject());
            }


            public void selectAaSpecific(NullObject val)
            {
                aaSpecific_ = val;
                aaSpecific_selected = true;


                vmdSpecific_selected = false;

                domainSpecific_selected = false;
            }
        }
    }
}