Example #1
0
 private void PopulateCodeSystemMembers(Model.ImportValueSet importValueSet, DateTime?versionDate, XmlNodeList contentNodes, ValueSet currentValueSet, string specialization = null)
 {
     foreach (XmlNode cContentNode in contentNodes)
     {
         string codeSystemOid = cContentNode.Attributes["codeSystem"].Value;
         PopulateCodeSystemMembers(importValueSet, versionDate, codeSystemOid, currentValueSet, specialization);
     }
 }
Example #2
0
        public void SaveValueSet(IObjectRepository tdb, Model.ImportValueSet valueSet)
        {
            ValueSet tdbValueSet = FindOrAddValueSet(tdb, valueSet);

            foreach (Model.ImportValueSetMember cImportMember in valueSet.Members)
            {
                FindOrAddValueSetMember(tdb, tdbValueSet, cImportMember);
            }
        }
Example #3
0
        private ValueSet FindOrAddValueSet(IObjectRepository tdb, Model.ImportValueSet valueSet)
        {
            ValueSet foundValueSet = tdb.ValueSets.SingleOrDefault(y => y.Oid == valueSet.Oid);

            if (valueSet.ImportStatus == "None")
            {
                return(foundValueSet);
            }

            string name = TruncateString(valueSet.Name, 254);
            string code = TruncateString(valueSet.Code, 254);
            string oid  = TruncateString(valueSet.Oid, 254);

            if (foundValueSet == null)
            {
                foundValueSet = new ValueSet();
                tdb.ValueSets.AddObject(foundValueSet);
            }

            if (foundValueSet.Code != code)
            {
                foundValueSet.Code = code;
            }

            if (foundValueSet.Oid != oid)
            {
                foundValueSet.Oid = oid;
            }

            if (foundValueSet.Description != valueSet.Description)
            {
                foundValueSet.Description = valueSet.Description;
            }

            if (foundValueSet.Name != name)
            {
                foundValueSet.Name = name;
            }

            if (foundValueSet.EntityState != System.Data.Entity.EntityState.Unchanged)
            {
                foundValueSet.LastUpdate = DateTime.Now;
            }

            return(foundValueSet);
        }
Example #4
0
        private void PopulateCodeSystemMembers(Model.ImportValueSet importValueSet, DateTime?versionDate, string codeSystemOid, ValueSet currentValueSet, string specialization = null, string relationshipType = null)
        {
            string  codeSystemXpath = string.Format("/mif:vocabularyModel/mif:codeSystem[@codeSystemId='{0}']", codeSystemOid);
            XmlNode codeSystemNode  = this.sourceDoc.SelectSingleNode(codeSystemXpath, this.nsManager);

            if (codeSystemNode == null)
            {
                return;
            }

            XmlNodeList conceptNodes = null;

            if (specialization == null)
            {
                conceptNodes = codeSystemNode.SelectNodes("mif:releasedVersion/mif:concept", this.nsManager);
            }
            else
            {
                conceptNodes = codeSystemNode.SelectNodes("mif:releasedVersion/mif:concept[mif:conceptRelationship[@relationshipName='Specializes'][mif:targetConcept/@code='" + specialization + "']]", this.nsManager);
            }

            foreach (XmlNode cConceptNode in conceptNodes)
            {
                V importMember = Activator.CreateInstance <V>();

                XmlNode codeNode      = cConceptNode.SelectSingleNode("mif:code", this.nsManager);
                XmlNode printNameNode = cConceptNode.SelectSingleNode("mif:printName", this.nsManager);

                if (codeNode == null || printNameNode == null)
                {
                    continue;
                }

                string code = codeNode.Attributes["code"].Value;

                importMember.Code           = code;
                importMember.CodeSystemName = codeSystemNode.Attributes["title"].Value;
                importMember.CodeSystemOid  = codeSystemOid;
                importMember.DisplayName    = printNameNode.Attributes["text"].Value;
                importMember.Status         = codeNode.Attributes["status"].Value;
                importMember.StatusDate     = versionDate;

                AddImportMember(importValueSet, versionDate, currentValueSet, importMember, true, relationshipType);
            }
        }
Example #5
0
        private void AddImportMember(Model.ImportValueSet importValueSet, DateTime?versionDate, ValueSet currentValueSet, Model.ImportValueSetMember importValueSetMember, bool includeHead, string relationshipType)
        {
            if (includeHead)
            {
                ValueSetMember currentMember = currentValueSet != null?
                                               currentValueSet.Members.SingleOrDefault(y => y.Code == importValueSetMember.Code && y.CodeSystem.Oid == importValueSetMember.CodeSystemOid) :
                                                   null;

                importValueSetMember.ImportStatus = DetermineValueSetMemberStatus(importValueSetMember, currentMember);

                importValueSet.Members.Add(importValueSetMember);
            }

            if (!string.IsNullOrEmpty(relationshipType))
            {
                PopulateCodeSystemMembers(importValueSet, versionDate, importValueSetMember.CodeSystemOid, currentValueSet, importValueSetMember.Code, relationshipType == "TransitiveClosure" ? "TransitiveClosure" : null);
            }
        }
Example #6
0
        private void PopulateMembers <X>(Model.ImportValueSet importValueSet, XmlNode versionNode, ValueSet currentValueSet)
            where X : Model.ImportValueSetMember
        {
            string includingValueSetName = versionNode.ParentNode.Attributes["name"].Value;

            if (IsAlreadyIncluded(importValueSet.Oid, includingValueSetName))
            {
                return;
            }

            AddIncludedValueSet(importValueSet.Oid, includingValueSetName);

            XmlNodeList contentUnionNodes = versionNode.SelectNodes("mif:content[not(mif:combinedContent)] | mif:content/mif:combinedContent/mif:unionWithContent", this.nsManager);

            DateTime parsedVersionDate;
            DateTime?versionDate = null;

            if (DateTime.TryParse(versionNode.Attributes["versionDate"].Value, out parsedVersionDate))
            {
                versionDate = parsedVersionDate;
            }

            PopulateContentMembers(
                importValueSet,
                versionDate,
                contentUnionNodes,
                currentValueSet);

            XmlNodeList codeSystemContentNodes = versionNode.SelectNodes(
                "mif:content[not(*) and @codeSystem]", this.nsManager);

            PopulateCodeSystemMembers(
                importValueSet,
                versionDate,
                codeSystemContentNodes,
                currentValueSet);

            if (importValueSet.Members.Count == 0)
            {
                string msg = string.Format("Could not find any members for the valueset '{0}' using current logic.", importValueSet.Oid);
                Log.For(this).Critical(msg);
            }
        }
Example #7
0
        protected string DetermineValueSetStatus(Model.ImportValueSet importValueSet, ValueSet currentValueSet)
        {
            if (currentValueSet == null)
            {
                return("Add");
            }
            else
            {
                bool valueSetIsChanged =
                    importValueSet.Code != currentValueSet.Code ||
                    importValueSet.Description != currentValueSet.Description ||
                    importValueSet.Name != currentValueSet.Name;

                if (valueSetIsChanged)
                {
                    return("Update");
                }
            }

            return("None");
        }
Example #8
0
        private void PopulateContentMembers(Model.ImportValueSet importValueSet, DateTime?versionDate, XmlNodeList contentNodes, ValueSet currentValueSet)
        {
            foreach (XmlNode cContentNode in contentNodes)
            {
                string      codeSystemOid = cContentNode.Attributes["codeSystem"].Value;
                XmlNodeList codeNodes     = cContentNode.SelectNodes("mif:codeBasedContent", this.nsManager);

                foreach (XmlNode cCodeNode in codeNodes)
                {
                    string code             = cCodeNode.Attributes["code"].Value;
                    string relationshipType = null;
                    bool   includeHead      = cCodeNode.Attributes["includeHeadCode"] != null?bool.Parse(cCodeNode.Attributes["includeHeadCode"].Value) : true;

                    XmlNode includeRelatedCodesNode = cCodeNode.SelectSingleNode("mif:includeRelatedCodes[@relationshipName='Generalizes']", this.nsManager);

                    if (includeRelatedCodesNode != null)
                    {
                        relationshipType = includeRelatedCodesNode.Attributes["relationshipTraversal"] != null ? includeRelatedCodesNode.Attributes["relationshipTraversal"].Value : null;
                    }

                    V importMember = Activator.CreateInstance <V>();

                    importMember.CodeSystemOid = codeSystemOid;
                    importMember.Code          = code;
                    importMember.StatusDate    = versionDate;
                    importMember.Status        = "active";

                    PopulateConceptFields(importMember);

                    ValueSetMember currentMember = currentValueSet != null?
                                                   currentValueSet.Members.SingleOrDefault(y => y.Code == code && y.CodeSystem.Oid == codeSystemOid) :
                                                       null;

                    importMember.ImportStatus = DetermineValueSetMemberStatus(importMember, currentMember);

                    AddImportMember(importValueSet, versionDate, currentValueSet, importMember, includeHead, relationshipType);
                }
            }
        }