/// <summary>
        /// Add an extension element to the element.
        /// </summary>
        /// <param name="extensionElement">  the extension element to add </param>
        /// <returns> the builder object </returns>
        public virtual IBaseElementBuilder <TE> AddExtensionElement(IBpmnModelElementInstance extensionElement)
        {
            IExtensionElements extensionElements = GetCreateSingleChild <IExtensionElements>(typeof(IExtensionElements));

            extensionElements.AddChildElement(extensionElement);
            return(this);
        }
        private void addExecutionListener(IBaseElement element, string eventName)
        {
            IExtensionElements    extensionElements = element.ModelInstance.NewInstance <IExtensionElements>(typeof(IExtensionElements));
            IModelElementInstance executionListener = extensionElements.AddExtensionElement(BpmnModelConstants.CamundaNs, "executionListener");

            //JAVA TO C# CONVERTER WARNING: The .NET Type.FullName property will not always yield results identical to the Java Class.getName method:
            executionListener.SetAttributeValueNs(BpmnModelConstants.CamundaNs, "class", typeof(ModelExecutionContextExecutionListener).FullName);
            executionListener.SetAttributeValueNs(BpmnModelConstants.CamundaNs, "event", eventName);
            element.ExtensionElements = extensionElements;
        }
        protected internal virtual T GetCreateSingleExtensionElement <T>(Type typeClass) where T : IBpmnModelElementInstance
        {
            IExtensionElements extensionElements = GetCreateSingleChild <IExtensionElements>(typeof(IExtensionElements));

            return(GetCreateSingleChild <T>(extensionElements, typeClass));
        }