Beispiel #1
0
        private void UpdateConstraintBinding(TemplateConstraint constraint, ImportConstraint importConstraint)
        {
            if (importConstraint.Item is ImportSingleValueCode)
            {
                ImportSingleValueCode importSvc = importConstraint.Item as ImportSingleValueCode;

                if (constraint.Value != importSvc.code)
                {
                    constraint.Value = importSvc.code;
                }

                if (constraint.DisplayName != importSvc.displayName)
                {
                    constraint.DisplayName = importSvc.displayName;
                }
            }
            else if (importConstraint.Item is ImportValueSet)
            {
                ImportValueSet importVs = importConstraint.Item as ImportValueSet;

                if (AreBooleansDifferent(constraint.IsStatic, importVs.isStatic, importVs.isStaticSpecified))
                {
                    constraint.IsStatic = importVs.isStatic;
                }

                // Old bug in Trifolia allowing the same value set identifier to be used more than once
                var foundValueSets = this.tdb.ValueSets.Where(y => y.Oid.ToLower() == importVs.identifier.ToLower()).ToList();

                if (foundValueSets.Count == 0)
                {
                    var newValueSet = new ValueSet()
                    {
                        Oid          = importVs.identifier,
                        Name         = string.IsNullOrEmpty(importVs.name) ? importVs.identifier + " incomplete" : importVs.name,
                        IsIncomplete = true,
                        Description  = "Automatically generated by template import",
                        LastUpdate   = DateTime.Now
                    };
                    this.tdb.ValueSets.AddObject(newValueSet);
                    foundValueSets.Add(newValueSet);
                }

                if (constraint.ValueSet != null && foundValueSets.Contains(constraint.ValueSet))
                {
                    return;
                }

                if (constraint.ValueSet != foundValueSets.First())
                {
                    constraint.ValueSet = foundValueSets.First();
                }
            }
        }
Beispiel #2
0
        public static ExportConstraint Export(this TemplateConstraint constraint, IObjectRepository tdb, IGSettingsManager igSettings, IIGTypePlugin igTypePlugin, bool isVerbose = false, List <string> categories = null)
        {
            ExportConstraint exportConstraint = new ExportConstraint()
            {
                number             = constraint.Number != null ? constraint.Number.Value : 0,
                numberSpecified    = constraint.Number != null,
                displayNumber      = constraint.DisplayNumber,
                context            = constraint.Context,
                conformance        = GetExportConformance(constraint.Conformance),
                cardinality        = !string.IsNullOrEmpty(constraint.Cardinality) ? constraint.Cardinality : null,
                dataType           = !string.IsNullOrEmpty(constraint.DataType) ? constraint.DataType : null,
                isBranch           = constraint.IsBranch,
                isBranchIdentifier = constraint.IsBranchIdentifier,
                isSchRooted        = constraint.IsSchRooted,
                isPrimitive        = constraint.IsPrimitive,
                isStatic           = constraint.IsStatic == true,
                isStaticSpecified  = constraint.IsStatic != null,
                isInheritable      = constraint.IsInheritable,
                SchematronTest     = !string.IsNullOrEmpty(constraint.Schematron) ? constraint.Schematron : null,
                isVerbose          = isVerbose,
                mustSupport        = constraint.MustSupport,
                isModifier         = constraint.IsModifier,
                isHeading          = constraint.IsHeading,
                HeadingDescription = constraint.HeadingDescription,
                Notes = constraint.Notes,
                Label = constraint.Label
            };

            var containedTemplates = (from tcr in constraint.References
                                      join t in tdb.Templates on tcr.ReferenceIdentifier equals t.Oid
                                      where tcr.ReferenceType == ConstraintReferenceTypes.Template
                                      select t);

            foreach (var containedTemplate in containedTemplates)
            {
                exportConstraint.ContainedTemplate.Add(new Shared.ImportExport.Model.ConstraintTypeContainedTemplate()
                {
                    identifier = containedTemplate.Oid,
                    type       = containedTemplate.PrimaryContextType
                });
            }

            if (!string.IsNullOrEmpty(constraint.Category))
            {
                exportConstraint.Category = (from c in constraint.Category.Split(',')
                                             select new ExportCategory()
                {
                    name = c
                }).ToList();
            }

            if (!string.IsNullOrEmpty(constraint.Value))
            {
                ExportSingleValueCode exportSVC = new ExportSingleValueCode()
                {
                    code        = constraint.Value,
                    displayName = constraint.DisplayName
                };
                exportConstraint.Item = exportSVC;
            }
            else if (constraint.ValueSet != null)
            {
                ExportValueSet exportValueSet = new ExportValueSet()
                {
                    name              = constraint.ValueSet.Name,
                    isStatic          = constraint.IsStatic == true,
                    isStaticSpecified = constraint.IsStatic != null,
                    identifier        = constraint.ValueSet.GetIdentifier(igTypePlugin),
                    date              = constraint.ValueSetDate.HasValue ? constraint.ValueSetDate.Value : DateTime.MinValue,
                    dateSpecified     = constraint.ValueSetDate.HasValue
                };
                exportConstraint.Item = exportValueSet;
            }

            if (constraint.CodeSystem != null)
            {
                exportConstraint.CodeSystem = new ExportCodeSystem()
                {
                    identifier = constraint.CodeSystem.Oid,
                    name       = constraint.CodeSystem.Name
                };
            }
            else
            {
                exportConstraint.CodeSystem = null;
            }

            if (!string.IsNullOrEmpty(constraint.Description))
            {
                exportConstraint.Description = constraint.Description;
            }

            if (!string.IsNullOrEmpty(constraint.Label))
            {
                exportConstraint.Label = constraint.Label;
            }

            if (!constraint.IsPrimitive)
            {
                IFormattedConstraint fc = FormattedConstraintFactory.NewFormattedConstraint(tdb, igSettings, igTypePlugin, constraint);

                // Only include the generated narrative, as Description and Label are already exported in separate fields.
                exportConstraint.NarrativeText = fc.GetPlainText(false, false, false);
            }
            else
            {
                exportConstraint.NarrativeText = constraint.PrimitiveText;
            }

            // Get all child constraints and build a new export-version of the constraint
            var childConstraints = constraint.ChildConstraints.Where(y => y.ParentConstraintId == constraint.Id).OrderBy(y => y.Order);

            foreach (var cChildConstraint in childConstraints)
            {
                if (!cChildConstraint.CategoryIsMatch(categories))
                {
                    continue;
                }

                exportConstraint.Constraint.Add(cChildConstraint.Export(tdb, igSettings, igTypePlugin, isVerbose, categories));
            }

            return(exportConstraint);
        }
Beispiel #3
0
        private void UpdateConstraintBinding(TemplateConstraint constraint, ImportConstraint importConstraint)
        {
            if (importConstraint.Item is ImportSingleValueCode)
            {
                ImportSingleValueCode importSvc = importConstraint.Item as ImportSingleValueCode;

                if (constraint.Value != importSvc.code)
                {
                    constraint.Value = importSvc.code;
                }

                if (constraint.DisplayName != importSvc.displayName)
                {
                    constraint.DisplayName = importSvc.displayName;
                }
            }
            else if (importConstraint.Item is ImportValueSet)
            {
                ImportValueSet importVs   = importConstraint.Item as ImportValueSet;
                bool           vsHasError = false;

                if (AreBooleansDifferent(constraint.IsStatic, importVs.isStatic, importVs.isStaticSpecified))
                {
                    constraint.IsStatic = importVs.isStatic;
                }

                if (importVs.dateSpecified)
                {
                    constraint.ValueSetDate = importVs.date;
                }

                // Old bug in Trifolia allowing the same value set identifier to be used more than once
                var foundValueSets = (from vsi in this.valueSets.SelectMany(y => y.Identifiers)
                                      where vsi.Identifier.ToLower().Trim() == importVs.identifier.ToLower().Trim()
                                      select vsi.ValueSet).Distinct().ToList();

                if (foundValueSets.Count() == 0)
                {
                    var newValueSet = new ValueSet()
                    {
                        Name         = string.IsNullOrEmpty(importVs.name) ? importVs.identifier + " incomplete" : importVs.name,
                        IsIncomplete = true,
                        Description  = !string.IsNullOrEmpty(importVs.Description) ? importVs.Description : "Automatically generated by template import",
                        LastUpdate   = DateTime.Now
                    };

                    var newValueSetIdentifier = new ValueSetIdentifier();
                    newValueSetIdentifier.Identifier = importVs.identifier;

                    if (importVs.identifier.StartsWith("http://") || importVs.identifier.StartsWith("https://"))
                    {
                        newValueSetIdentifier.Type = ValueSetIdentifierTypes.HTTP;
                    }
                    else if (importVs.identifier.StartsWith("urn:oid:"))
                    {
                        newValueSetIdentifier.Type = ValueSetIdentifierTypes.Oid;
                    }
                    else if (importVs.identifier.StartsWith("urn:hl7ii:"))
                    {
                        newValueSetIdentifier.Type = ValueSetIdentifierTypes.HL7II;
                    }
                    else
                    {
                        this.Errors.Add("Value set referenced by constraint has incorrect identifier (" + importVs.identifier + ")");
                        vsHasError = true;
                    }

                    if (!vsHasError)
                    {
                        newValueSet.Identifiers.Add(newValueSetIdentifier);
                        this.tdb.ValueSets.Add(newValueSet);
                        foundValueSets.Add(newValueSet);
                    }
                }

                if (vsHasError)
                {
                    return;
                }

                if (constraint.ValueSet != null && foundValueSets.Contains(constraint.ValueSet))
                {
                    return;
                }

                if (constraint.ValueSet != foundValueSets.First())
                {
                    constraint.ValueSet = foundValueSets.First();
                }
            }
        }