/// <summary>
        /// Get Ae AreaSpace Data
        /// </summary>
        private void GetAeAreaSpaceData(TreeNode node, AeSession session)
        {
            AddressSpaceElementBrowseOptions browseOptions = new AddressSpaceElementBrowseOptions();

            browseOptions.ElementTypeFilter = Softing.OPCToolbox.Client.EnumAddressSpaceElementType.BRANCH;

            AddressSpaceElement elem = null;

            if (!node.Equals(browseTreeView.Nodes[0]))
            {
                elem = node.Tag as AddressSpaceElement;
            }
            AddressSpaceElement[] addressSpaceElements = null;
            if (ResultCode.SUCCEEDED(session.Browse((AddressSpaceElement)elem,
                                                    browseOptions,
                                                    out addressSpaceElements,
                                                    executionOptions)))
            {
                node.Nodes.Clear();
                for (int i = 0; i < addressSpaceElements.Length; i++)
                {
                    TreeNode newNode = new TreeNode(addressSpaceElements[i].Name, NODE_INDEX, NODE_INDEX);
                    newNode.Name = addressSpaceElements[i].Name;
                    newNode.Tag  = addressSpaceElements[i];
                    node.Nodes.Add(newNode);
                    newNode.Nodes.Add(new TreeNode(""));
                    string[] conditions = null;
                    string   sourcePath = GetSourcePath(newNode);
                    if (ResultCode.SUCCEEDED(session.QueryAeSourceConditions(sourcePath, out conditions, executionOptions)))
                    {
                        for (int j = 0; j < conditions.Length; j++)
                        {
                            TreeNode conditionNode = new TreeNode(conditions[j], PROP_INDEX, PROP_INDEX);
                            conditionNode.Name = conditions[j];
                            conditionNode.Tag  = String.Empty;
                            newNode.Nodes.Add(conditionNode);
                        }
                    }
                }
            }
            AddressSpaceElementBrowseOptions browseOpt = new AddressSpaceElementBrowseOptions();

            browseOpt.ElementTypeFilter = Softing.OPCToolbox.Client.EnumAddressSpaceElementType.LEAF;
            if (ResultCode.SUCCEEDED(session.Browse((AddressSpaceElement)elem,
                                                    browseOpt,
                                                    out addressSpaceElements,
                                                    executionOptions)))
            {
                for (int i = 0; i < addressSpaceElements.Length; i++)
                {
                    TreeNode newNode = new TreeNode(addressSpaceElements[i].Name, TAG_INDEX, TAG_INDEX);
                    newNode.Name = addressSpaceElements[i].Name;
                    newNode.Tag  = addressSpaceElements[i];
                    node.Nodes.Add(newNode);
                    string[] conditions = null;
                    string   sourcePath = GetSourcePath(newNode);
                    if (ResultCode.SUCCEEDED(session.QueryAeSourceConditions(sourcePath, out conditions, executionOptions)))
                    {
                        for (int j = 0; j < conditions.Length; j++)
                        {
                            TreeNode conditionNode = new TreeNode(conditions[j], PROP_INDEX, PROP_INDEX);
                            conditionNode.Name = conditions[j];
                            conditionNode.Tag  = String.Empty;
                            newNode.Nodes.Add(conditionNode);
                        }
                    }
                }
            }
        }
        public override int QueryAddressSpaceElementData(string anElementID, out AddressSpaceElement anElement)
        {
            DaAddressSpaceElement element = new DaAddressSpaceElement();

            if (anElementID.StartsWith("stringBased"))
            {
                if (anElementID == "stringBased")
                {
                    element.Name        = anElementID;
                    element.IoMode      = EnumIoMode.NONE;
                    element.HasChildren = true;
                }
                else if (anElementID == "stringBased.N1" ||
                         anElementID == "stringBased.N2")
                {
                    element.Name         = anElementID.Substring(anElementID.LastIndexOf(".") + 1);
                    element.AccessRights = EnumAccessRights.READWRITEABLE;
                    element.Datatype     = typeof(byte);
                    element.HasChildren  = true;
                    element.IoMode       = EnumIoMode.REPORT;
                }
                else if (anElementID == "stringBased.T1")
                {
                    element.Name         = anElementID.Substring(anElementID.LastIndexOf(".") + 1);
                    element.AccessRights = EnumAccessRights.READWRITEABLE;
                    element.Datatype     = typeof(byte);
                    element.HasChildren  = false;
                    element.IoMode       = EnumIoMode.REPORT;
                }
                else if (anElementID.LastIndexOf("N1") > 0)
                {
                    if (anElementID.Substring(anElementID.LastIndexOf("N1")).EndsWith("T1"))
                    {
                        element.Name         = anElementID.Substring(anElementID.LastIndexOf(".") + 1);
                        element.AccessRights = EnumAccessRights.READWRITEABLE;
                        element.Datatype     = typeof(byte);
                        element.HasChildren  = false;
                        element.IoMode       = EnumIoMode.REPORT;
                    }
                }
                else if (anElementID.LastIndexOf("N2") > 0)
                {
                    if (anElementID.Substring(anElementID.LastIndexOf("N2")).EndsWith("T1") ||
                        anElementID.Substring(anElementID.LastIndexOf("N2")).EndsWith("T2"))
                    {
                        element.Name         = anElementID.Substring(anElementID.LastIndexOf(".") + 1);
                        element.AccessRights = EnumAccessRights.READWRITEABLE;
                        element.Datatype     = typeof(byte);
                        element.HasChildren  = false;
                        element.IoMode       = EnumIoMode.REPORT;
                    }
                }
            }
            else if (anElementID.StartsWith("syntaxBased"))
            {
                if (anElementID == "syntaxBased")
                {
                    element.Name        = anElementID;
                    element.IoMode      = EnumIoMode.NONE;
                    element.HasChildren = true;
                }

                Int32 index = anElementID.LastIndexOf(".T");
                if (index > 0)
                {
                    element.Name = anElementID.Substring(index + 1);
                    if (element.Name.Length == 2)
                    {
                        element.HasChildren  = false;
                        element.IoMode       = EnumIoMode.POLL;
                        element.AccessRights = EnumAccessRights.READWRITEABLE;
                        element.Datatype     = typeof(Int32);
                    }
                    else
                    {
                        element.Name = string.Empty;
                    }
                }
                else
                {
                    index = anElementID.LastIndexOf(".N");
                    if (index > 0)
                    {
                        element.Name = anElementID.Substring(index + 1);
                        if (element.Name.Length == 2)
                        {
                            element.HasChildren = true;
                            element.IoMode      = EnumIoMode.NONE;
                        }
                        else
                        {
                            element.Name = string.Empty;
                        }
                    }
                }
            }

            //	check if an element was succeeded
            if (element.Name == string.Empty)
            {
                anElement = null;
                return((int)EnumResultCode.E_BADTYPE);
            }               //	end if

            anElement = element;
            return((int)EnumResultCode.S_OK);
        }           //	end QueryAddressSpaceElementData