/// <summary>
        /// Handles the CodeRef type element  child elements
        /// </summary>
        /// <param name="parent">
        /// The parent ICodeRefMutableObject object
        /// </param>
        /// <param name="localName">
        /// The name of the current xml element
        /// </param>
        /// <returns>
        /// The <see cref="StructureReaderBaseV20.ElementActions"/>.
        /// </returns>
        private ElementActions HandleChildElements(ICodeRefMutableObject parent, object localName)
        {
            ElementActions actions = null;
            if (NameTableCache.IsElement(localName, ElementNameTable.CodeRef))
            {
                var cr = new CodeRefMutableCore();
                ParseAttributes(cr, this.Attributes);
                parent.AddCodeRef(cr);
                actions = this.BuildElementActions(cr, HandleChildElements, this.HandleTextChildElement);
            }

            return actions;
        }
示例#2
0
        /// <summary>
        /// Retrieve and populate the <see cref="IHierarchyMutableObject.HierarchicalCodeObjects"/> for the HIERARCHY with specified Primary KEY
        /// </summary>
        /// <param name="artefact">
        /// The <see cref="IHierarchyMutableObject"/> instance to populate
        /// </param>
        /// <param name="hid">
        /// The Hierarchy Mapping store Primary KEY
        /// </param>
        private void FillCodeRef(IHierarchyMutableObject artefact, long hid)
        {
            IDictionary <long, ICodeRefMutableObject> allItems = new ListDictionary <long, ICodeRefMutableObject>();
            var childItems = new Dictionary <long, long>();

            using (DbCommand command = this._itemCommandBuilder.Build(new ItemSqlQuery(this._codeRefQueryInfo, hid)))
            {
                using (IDataReader dataReader = this.MappingStoreDb.ExecuteReader(command))
                {
                    int sysIdIdx       = dataReader.GetOrdinal("SYSID");
                    int idIdx          = dataReader.GetOrdinal("CODE_ID");
                    int parentIdx      = dataReader.GetOrdinal("PARENT");
                    int nodeAliasIdIdx = dataReader.GetOrdinal("NodeAliasID");

                    //// TODO check how to set the version (it seems supported in v2.1)
                    int levelRefIdx  = dataReader.GetOrdinal("LEVEL_REF");
                    int clidIdx      = dataReader.GetOrdinal("CLID");
                    int clversionIdx = dataReader.GetOrdinal("CLVERSION");
                    int clagencyIdx  = dataReader.GetOrdinal("CLAGENCY");
                    int validFromIdx = dataReader.GetOrdinal("VALID_FROM");
                    int validToIdx   = dataReader.GetOrdinal("VALID_TO");
                    while (dataReader.Read())
                    {
                        var codeRef = new CodeRefMutableCore
                        {
                            CodelistAliasRef =
                                BuildCodelistRefAlias(
                                    DataReaderHelper.GetString(dataReader, clidIdx),
                                    DataReaderHelper.GetString(dataReader, clagencyIdx),
                                    DataReaderHelper.GetString(dataReader, clversionIdx)),
                            Id     = DataReaderHelper.GetString(dataReader, nodeAliasIdIdx),
                            CodeId = DataReaderHelper.GetString(dataReader, idIdx)
                        };
                        if (artefact.ChildLevel != null)
                        {
                            var levelRef = DataReaderHelper.GetString(dataReader, levelRefIdx);
                            ILevelMutableObject currentLevel = artefact.ChildLevel;
                            var normalizedLevel = GetNormalizedLevel(currentLevel, levelRef);
                            codeRef.LevelReference = normalizedLevel;
                        }
                        if (string.IsNullOrWhiteSpace(codeRef.Id))
                        {
                            codeRef.Id = string.Format(CultureInfo.InvariantCulture, "{0}{1}{2}", codeRef.CodelistAliasRef.Replace('@', '_'), '_', codeRef.CodeId);
                        }

                        DateTime?validFrom = DataReaderHelper.GetStringDate(dataReader, validFromIdx);
                        if (validFrom != null)
                        {
                            codeRef.ValidFrom = validFrom.Value;
                        }

                        DateTime?validTo = DataReaderHelper.GetStringDate(dataReader, validToIdx);
                        if (validTo != null)
                        {
                            codeRef.ValidTo = validTo.Value;
                        }

                        long sysId        = DataReaderHelper.GetInt64(dataReader, sysIdIdx);
                        long parentItemId = DataReaderHelper.GetInt64(dataReader, parentIdx);
                        if (parentItemId > long.MinValue)
                        {
                            childItems.Add(sysId, parentItemId);
                        }

                        allItems.Add(sysId, codeRef);
                    }
                }
            }

            this._hierarchalCodeAnnotationRetrieverEngine.RetrieveAnnotations(hid, allItems);

            ICollection <KeyValuePair <long, ICodeRefMutableObject> > collection = allItems;

            foreach (KeyValuePair <long, ICodeRefMutableObject> item in collection)
            {
                long sysId = item.Key;
                ICodeRefMutableObject codeRef = item.Value;
                long parentItemId;
                if (childItems.TryGetValue(sysId, out parentItemId))
                {
                    // has parent
                    ICodeRefMutableObject parent = allItems[parentItemId];
                    parent.AddCodeRef(codeRef);
                }
                else
                {
                    // add only root elements
                    artefact.AddHierarchicalCode(codeRef);
                }
            }
        }