Esempio n. 1
0
 /// <summary>
 ///     Constructor for the tree.
 /// </summary>
 public classFactorTree()
 {
     m_datasetList = new ArrayList();
     m_factorList = new ArrayList();
     m_currentTree = null;
     m_treeDirty = true;
 }
Esempio n. 2
0
        protected void Init()
        {
            m_level = -1;
            m_idNumber = -1;
            m_groupIDNumber = -1;
            m_name = string.Empty;
            m_groupIDName = string.Empty;

            m_parent = null;
            m_children = new ArrayList();
        }
Esempio n. 3
0
 public classTreeNode(classTreeNode parent)
 {
     Init();
     m_parent = parent;
 }
Esempio n. 4
0
        /// <summary>
        ///     Builds a tree from the hash-table for visualization or hierachy parsing.
        /// </summary>
        /// <returns></returns>
        public classTreeNode BuildTree()
        {
            m_currentTree = null;
            m_currentTree = new classTreeNode();

            // Only sort if there were changes made to the ordering.
            if (m_treeDirty)
            {
                ///
                /// This object implements the IComparer interface for sorting.
                ///
                var tempDatasort = new ArrayList();
                tempDatasort = m_datasetList.Clone() as ArrayList;
                if (m_datasetMapping == null || m_datasetMapping.Length != m_datasetList.Count)
                {
                    m_datasetMapping = new long[m_datasetList.Count];
                }

                m_datasetList.Sort(this);

                /// Un-mapped items will be -1
                for (var i = 0; i < tempDatasort.Count; i++)
                {
                    var oldName = tempDatasort[i] as clsFactorDataset;
                    for (var j = 0; j < m_datasetList.Count; j++)
                    {
                        var newName = m_datasetList[j] as clsFactorDataset;
                        if (oldName.Name == newName.Name)
                        {
                            m_datasetMapping[oldName.Index] = j;
                            break;
                        }
                        m_datasetMapping[oldName.Index] = -1;
                    }
                }

                // Tree has been sorted.  Next time we can skip this step.
                m_treeDirty = false;
            }

            if (m_datasetList.Count <= 0)
                return m_currentTree;

            ///
            /// Now build the tree
            ///
            var root = m_currentTree;

            foreach (clsFactorDataset data in  m_datasetList)
            {
                var tempRootNode = root;
                var createNew = false;
                long i = 0;
                ///
                /// Foreach factor, find where the tree needs to branch.
                ///
                foreach (clsFactor factor in m_factorList)
                {
                    ///
                    /// Get the factor value information
                    ///
                    var factorValue = data.Values[factor.Name] as string;
                    // If we have children compare to the last item.
                    if (factorValue == null)
                    {
                        factorValue = "<undefined>";
                        createNew = true;
                    }
                    else if (createNew == false && tempRootNode.Children != null && tempRootNode.Children.Count > 0)
                    {
                        ///
                        /// The last node should be the one we need to examine against.
                        ///
                        var node = tempRootNode.Children[tempRootNode.Children.Count - 1] as classTreeNode;
                        if (node.Name != factorValue)
                            createNew = true;
                        else
                            tempRootNode = node;
                    }
                    else
                    {
                        createNew = true;
                    }
                    if (createNew)
                    {
                        var newNode = new classTreeNode();
                        newNode.Name = factorValue;
                        newNode.Parent = tempRootNode;
                        newNode.Level = i;
                        tempRootNode.Children.Add(newNode);
                        tempRootNode = newNode;
                    }
                    i++;
                }

                ///
                /// Add the dataset
                ///
                var dataNode = new classTreeNode();
                dataNode.Name = data.Name;
                dataNode.Parent = tempRootNode;
                dataNode.Level = i;
                tempRootNode.Children.Add(dataNode);
            }
            return m_currentTree;
        }