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(); } } }
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); }
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(); } } }