public ActionResult <List <OCRResult> > Recognize(IFormFile file, [FromForm] string templateId) { try { if (templateId == null) { return(BadRequest("No template id was found.")); } if (file == null || file.Length == 0) { return(BadRequest("No image was found.")); } var template = _uow.TemplateRepository.GetById(templateId); var result = TemplateExtension.RecogizeAreas(file, template); return(Ok(result)); } catch (InvalidOperationException ex) { return(StatusCode(500, new { error = ex.Message })); } }
public Extension Convert(TemplateExtension extension) { var fhirExtension = new Extension() { Url = extension.Identifier }; switch (extension.Type) { case "String": fhirExtension.Value = new FhirString(extension.Value); break; case "Integer": try { fhirExtension.Value = new Integer(Int32.Parse(extension.Value)); } catch { } break; case "Boolean": try { fhirExtension.Value = new FhirBoolean(Boolean.Parse(extension.Value)); } catch { } break; case "Date": fhirExtension.Value = new Date(extension.Value); break; case "DateTime": fhirExtension.Value = new FhirDateTime(extension.Value); break; case "Code": fhirExtension.Value = new Code(extension.Value); break; case "Coding": case "CodeableConcept": string[] valueSplit = extension.Value.Split('|'); if (valueSplit.Length == 3) { var coding = new Coding(); coding.Code = valueSplit[0]; coding.Display = valueSplit[1]; coding.System = valueSplit[2]; if (extension.Type == "Coding") { fhirExtension.Value = coding; } else { var codeableConcept = new CodeableConcept(); codeableConcept.Coding.Add(coding); fhirExtension.Value = codeableConcept; } } break; } if (fhirExtension.Value != null) { return(fhirExtension); } return(null); }
/// <summary> /// Converts the TemplateMetaDataModel into the Template (EF) model. /// </summary> /// <remarks> /// Each property is checked to determine if it is different before updating the property, otherwise /// it registers as a change event when auditing, regardless if the value is different. /// </remarks> private Template SaveTemplate(IObjectRepository tdb, TemplateMetaDataModel model) { Template template = null; bool isNew = false; // Create the initial template object and add it to the appropriate list (if it is new) if (model.Id != null) { template = tdb.Templates.Single(y => y.Id == model.Id); } else { template = new Template(); tdb.Templates.Add(template); isNew = true; } // Set the properties if (template.Author == null) { User currentUser = CheckPoint.Instance.GetUser(tdb); template.AuthorId = currentUser.Id; } else if (template.AuthorId != model.AuthorId) { template.AuthorId = model.AuthorId; } ImplementationGuide ig = tdb.ImplementationGuides.Single(y => y.Id == model.OwningImplementationGuideId); if (template.ImplementationGuideTypeId != ig.ImplementationGuideTypeId) { template.ImplementationGuideTypeId = ig.ImplementationGuideTypeId; } if (template.Name != model.Name) { template.Name = model.Name; } if (template.Oid != model.Oid) { // If it is not a new template, there may be refernces to the template // in the TemplateConstraintReferences table representing the plain-string // identifier of this template. Update those references. if (!isNew) { var references = tdb.TemplateConstraintReferences.Where(y => y.ReferenceIdentifier == template.Oid && y.ReferenceType == ConstraintReferenceTypes.Template); foreach (var reference in references) { reference.ReferenceIdentifier = model.Oid; } } template.Oid = model.Oid; } if (template.Bookmark != model.Bookmark) { template.Bookmark = model.Bookmark; } if (template.OwningImplementationGuideId != model.OwningImplementationGuideId) { template.OwningImplementationGuideId = model.OwningImplementationGuideId; } if (template.TemplateTypeId != model.TemplateTypeId) { template.TemplateTypeId = model.TemplateTypeId; } if (template.PrimaryContext != model.PrimaryContext) { template.PrimaryContext = model.PrimaryContext; } if (template.PrimaryContextType != model.PrimaryContextType) { template.PrimaryContextType = model.PrimaryContextType; } if (template.ImpliedTemplateId != model.ImpliedTemplateId) { template.ImpliedTemplateId = model.ImpliedTemplateId; } if (template.Description != model.Description) { template.Description = model.Description; } if (template.Notes != model.Notes) { template.Notes = model.Notes; } if (template.StatusId != model.StatusId) { template.StatusId = model.StatusId; } if (template.IsOpen != model.IsOpen) { template.IsOpen = model.IsOpen; } // Remove Extensions var extensions = template.Extensions.ToList(); foreach (var extension in extensions) { var foundExtension = model.Extensions.SingleOrDefault(y => y.Identifier == extension.Identifier); if (foundExtension == null) { tdb.TemplateExtensions.Remove(extension); } } // Add/Update Extensions foreach (var extensionModel in model.Extensions) { var extension = template.Extensions.SingleOrDefault(y => y.Identifier == extensionModel.Identifier); if (extension == null) { extension = new TemplateExtension(); extension.Identifier = extensionModel.Identifier; template.Extensions.Add(extension); } if (extension.Type != extensionModel.Type) { extension.Type = extensionModel.Type; } if (extension.Value != extensionModel.Value) { extension.Value = extensionModel.Value; } } return(template); }
private TDBTemplate AddImportTemplate(Trifolia.Shared.ImportExport.Model.TrifoliaTemplate importTemplate) { var alreadyBuildTemplate = this.importedTemplates.SingleOrDefault(y => y.Oid == importTemplate.identifier); if (alreadyBuildTemplate != null) { return(alreadyBuildTemplate); } TDBTemplate foundTemplate = this.tdb.Templates.SingleOrDefault(y => y.Oid == importTemplate.identifier); if (string.IsNullOrEmpty(importTemplate.identifier) || importTemplate.identifier.Length > 255) { errors.Add("Template OID is not specified."); return(null); } if (string.IsNullOrEmpty(importTemplate.title) || importTemplate.title.Length > 255) { errors.Add("Template name is not specified."); return(null); } var template = this.tdb.Templates.SingleOrDefaultInclAdded(y => y.Oid.ToLower() == importTemplate.identifier.ToLower()); if (!shouldUpdate && template != null) { errors.Add("Template already exists and should not be updating"); return(template); } if (template == null) { template = new TDBTemplate(); template.Oid = importTemplate.identifier; if (!template.IsIdentifierII() && !template.IsIdentifierOID() && !template.IsIdentifierURL()) { errors.Add("Template identifier " + template.Oid + " is not properly formatted. Must be urn:hl7ii:XXX:YYY or urn:oid:XXX or http(s)://XXX"); return(null); } if (this.DefaultAuthorUser != null) { template.Author = this.DefaultAuthorUser; } else { template.Author = CheckPoint.Instance.GetUser(this.tdb); } this.tdb.Templates.Add(template); } // Find implementation guide type ImplementationGuideType igType = this.tdb.ImplementationGuideTypes.SingleOrDefault(y => y.Name.ToLower() == importTemplate.implementationGuideType.ToLower()); if (igType == null) { this.errors.Add(string.Format( "Could not find implementation guide type \"{0}\" for template with identifier \"{1}\"", importTemplate.implementationGuideType, importTemplate.identifier)); return(null); } template.ImplementationGuideType = igType; if (importTemplate.ImplementationGuide != null && !string.IsNullOrEmpty(importTemplate.ImplementationGuide.name)) { ImplementationGuide ig = this.tdb.ImplementationGuides.SingleOrDefaultInclAdded(y => y.Name.ToLower() == importTemplate.ImplementationGuide.name.ToLower() && ( (y.Version == null && importTemplate.ImplementationGuide.version == 1) || (y.Version != null && y.Version.Value == importTemplate.ImplementationGuide.version) )); if (ig == null) { this.errors.Add(string.Format( "Could not find implementation guide \"{0}\" for template with identifier \"{1}\"", importTemplate.ImplementationGuide.name, importTemplate.identifier)); return(null); } else if (ig.ImplementationGuideType != igType) { this.errors.Add(string.Format( "The implementation guide type for the implementation guide \"{0}\" is not the same as the import.", importTemplate.ImplementationGuide.name)); return(null); } if (template.OwningImplementationGuide != ig) { template.OwningImplementationGuide = ig; } if (!ig.ChildTemplates.Contains(template)) { ig.ChildTemplates.Add(template); } } else if (this.DefaultImplementationGuide != null) { template.OwningImplementationGuide = this.DefaultImplementationGuide; } else { errors.Add("No implementation guide specified for template/profile: " + importTemplate.identifier); return(null); } // Find the template type TemplateType templateType = igType.TemplateTypes.SingleOrDefault(y => y.Name.ToLower() == importTemplate.templateType.ToLower()); if (templateType == null) { this.errors.Add(string.Format( "Could not find template type \"{0}\" for template with identifier \"{1}\"", importTemplate.templateType, importTemplate.identifier)); return(null); } else if (template.TemplateType != templateType) { template.TemplateType = templateType; } // Find or build the implied template if (!string.IsNullOrEmpty(importTemplate.impliedTemplateOid)) { if (importTemplate.impliedTemplateOid.ToLower() == importTemplate.identifier.ToLower()) { this.errors.Add(string.Format( "Template with identifier \"{0}\" implies itself. Cannot import template.", importTemplate.identifier)); return(null); } TDBTemplate impliedTemplate = FindOrBuildTemplate(importTemplate.impliedTemplateOid); // If we didn't find the template in the database or in the import, create an error for the template and don't add it if (impliedTemplate == null) { this.errors.Add(string.Format( "Couldn't find implied template \"{0}\" in either the system or the import, for template with identifier \"{1}\"", importTemplate.impliedTemplateOid, importTemplate.identifier)); return(null); } else { if (template.ImpliedTemplate != impliedTemplate) { template.ImpliedTemplate = impliedTemplate; } if (!impliedTemplate.ImplyingTemplates.Contains(template)) { impliedTemplate.ImplyingTemplates.Add(template); } } } this.UpdateTemplateProperties(template, importTemplate); this.UpdateTemplateSamples(template, importTemplate); // Extensions foreach (var existingExtension in template.Extensions.ToList()) { if (importTemplate.Extension.Count(y => y.identifier == existingExtension.Identifier) == 0) { this.tdb.TemplateExtensions.Remove(existingExtension); } } foreach (var importExtension in importTemplate.Extension) { var foundExtension = template.Extensions.SingleOrDefault(y => y.Identifier == importExtension.identifier); if (foundExtension == null) { foundExtension = new TemplateExtension(); template.Extensions.Add(foundExtension); } foundExtension.Type = importExtension.type; foundExtension.Value = importExtension.value; } try { // Add each of the template's constraints if (importTemplate.Constraint != null) { importTemplate.Constraint.ToList().ForEach(y => AddImportConstraint(template, null, y)); } } catch (Exception ex) { Log.For(this).Error("Error importing constraints for template.", ex); return(null); } // If the object is changed, make sure the user has permissions to the implementation guide if (this.tdb is TrifoliaDatabase) { var dataSource = this.tdb as TrifoliaDatabase; var templateState = dataSource.Entry(template).State; if (templateState == System.Data.Entity.EntityState.Unchanged) { var constraintStates = (from c in template.ChildConstraints where dataSource.Entry(c).State != System.Data.Entity.EntityState.Unchanged select c); var constraintSampleStates = (from c in template.ChildConstraints join cs in this.tdb.TemplateConstraintSamples on c equals cs.Constraint where dataSource.Entry(cs).State != System.Data.Entity.EntityState.Unchanged select cs); var templateSampleStates = (from s in template.TemplateSamples where dataSource.Entry(s).State != System.Data.Entity.EntityState.Unchanged select s); if (constraintStates.Count() > 0 || constraintSampleStates.Count() > 0 || templateSampleStates.Count() > 0) { templateState = System.Data.Entity.EntityState.Modified; } } if (templateState != System.Data.Entity.EntityState.Unchanged && !CheckPoint.Instance.GrantEditImplementationGuide(template.OwningImplementationGuide.Id) && !CheckPoint.Instance.IsDataAdmin) { this.Errors.Add("You do not have permission to modify template \"" + template.Name + "\" with identifier " + template.Oid); return(null); } } this.importedTemplates.Add(template); return(template); }
/// <summary> /// Converts the TemplateMetaDataModel into the Template (EF) model. /// </summary> /// <remarks> /// Each property is checked to determine if it is different before updating the property, otherwise /// it registers as a change event when auditing, regardless if the value is different. /// </remarks> private Template SaveTemplate(IObjectRepository tdb, TemplateMetaDataModel model) { Template template = null; // Create the initial template object and add it to the appropriate list (if it is new) if (model.Id != null) { template = tdb.Templates.Single(y => y.Id == model.Id); } else { template = new Template(); tdb.Templates.AddObject(template); } // Set the properties if (template.Author == null) { User currentUser = CheckPoint.Instance.GetUser(tdb); template.AuthorId = currentUser.Id; } ImplementationGuide ig = tdb.ImplementationGuides.Single(y => y.Id == model.OwningImplementationGuideId); if (template.ImplementationGuideTypeId != ig.ImplementationGuideTypeId) { template.ImplementationGuideTypeId = ig.ImplementationGuideTypeId; } if (template.Name != model.Name) { template.Name = model.Name; } if (template.Oid != model.Oid) { template.Oid = model.Oid; } if (template.Bookmark != model.Bookmark) { template.Bookmark = model.Bookmark; } if (template.OwningImplementationGuideId != model.OwningImplementationGuideId) { template.OwningImplementationGuideId = model.OwningImplementationGuideId; } if (template.TemplateTypeId != model.TemplateTypeId) { template.TemplateTypeId = model.TemplateTypeId; } if (template.PrimaryContext != model.PrimaryContext) { template.PrimaryContext = model.PrimaryContext; } if (template.PrimaryContextType != model.PrimaryContextType) { template.PrimaryContextType = model.PrimaryContextType; } if (template.ImpliedTemplateId != model.ImpliedTemplateId) { template.ImpliedTemplateId = model.ImpliedTemplateId; } if (template.Description != model.Description) { template.Description = model.Description; } if (template.Notes != model.Notes) { template.Notes = model.Notes; } if (template.StatusId != model.StatusId) { template.StatusId = model.StatusId; } if (template.IsOpen != model.IsOpen) { template.IsOpen = model.IsOpen; } // Remove Extensions var extensions = template.Extensions.ToList(); foreach (var extension in extensions) { var foundExtension = model.Extensions.SingleOrDefault(y => y.Identifier == extension.Identifier); if (foundExtension == null) { tdb.TemplateExtensions.DeleteObject(extension); } } // Add/Update Extensions foreach (var extensionModel in model.Extensions) { var extension = template.Extensions.SingleOrDefault(y => y.Identifier == extensionModel.Identifier); if (extension == null) { extension = new TemplateExtension(); extension.Identifier = extensionModel.Identifier; template.Extensions.Add(extension); } if (extension.Type != extensionModel.Type) { extension.Type = extensionModel.Type; } if (extension.Value != extensionModel.Value) { extension.Value = extensionModel.Value; } } return(template); }