/// <summary> /// Gets the conformance reflecting the capabilities of all registred servants. /// </summary> /// <returns>Conformance.</returns> public Conformance Metadata() { var conformance = new Conformance { Description = "This is an example implementation of an FHIR server - for demonstration purpose only.", Date = DateTime.UtcNow.ToString("s"), Experimental = true, AcceptUnknown = false, FhirVersion = "DSTU 1.1", Name = "FHIR Server for Patient Resources", Publisher = "MSDN Code Gallery, Stefan Heesch", Telecom = new List <Contact> { new Contact { System = Contact.ContactSystem.Url, Value = "https://twitter.com/hb9tws" } }, Rest = new List <Conformance.ConformanceRestComponent>() }; var rc = new Conformance.ConformanceRestComponent { Mode = Conformance.RestfulConformanceMode.Server, Resource = new List <Conformance.ConformanceRestResourceComponent>() }; foreach (var servant in _servants.Values) { rc.Resource.Add(servant.Metadata()); } conformance.Rest.Add(rc); return(conformance); }
public static Conformance.ConformanceRestComponent AddRestComponent(this Conformance conformance, Boolean isServer, String documentation = null) { var server = new Conformance.ConformanceRestComponent(); server.Mode = (isServer) ? Conformance.RestfulConformanceMode.Server : Conformance.RestfulConformanceMode.Client; if (documentation != null) { server.Documentation = documentation; } conformance.Rest.Add(server); return(server); }
public static Conformance.ConformanceRestComponent AddRestComponent(this Conformance conformance, Boolean isServer, String documentation = null, String mailbox = null) { var server = new Conformance.ConformanceRestComponent(); server.Mode = (isServer) ? Conformance.RestfulConformanceMode.Server : Conformance.RestfulConformanceMode.Client; if (documentation != null) { server.Documentation = documentation; } if (mailbox != null) { var listmailbox = (List <String>)server.DocumentMailbox; listmailbox.Add(mailbox); server.DocumentMailbox = listmailbox; } conformance.Rest.Add(server); return(server); }
public static Conformance Build() { Stream s = typeof(ConformanceBuilder).Assembly.GetManifestResourceStream("Spark.Service.Service.Conformance.xml"); StreamReader sr = new StreamReader(s); string conformanceXml = sr.ReadToEnd(); var conformance = (Conformance)FhirParser.ParseResourceFromXml(conformanceXml); conformance.Software.Version = ReadVersionFromAssembly(); conformance.Software.Name = ReadProductNameFromAssembly(); conformance.FhirVersion = ModelInfo.Version; conformance.Date = Date.Today().Value; Conformance.ConformanceRestComponent serverComponent = conformance.Rest[0]; // Replace anything that was there before... serverComponent.Resource = new List <Conformance.ConformanceRestResourceComponent>(); // todo: An alternative is needed for the missing operation types below: var allOperations = new List <Conformance.ConformanceRestResourceOperationComponent>() { new Conformance.ConformanceRestResourceOperationComponent { Code = Conformance.RestfulOperationType.Create }, new Conformance.ConformanceRestResourceOperationComponent { Code = Conformance.RestfulOperationType.Delete }, new Conformance.ConformanceRestResourceOperationComponent { Code = Conformance.RestfulOperationType.HistoryInstance }, /* * new Conformance.ConformanceRestResourceOperationComponent { Code = * Conformance.RestfulOperationType.HistorySystem }, */ new Conformance.ConformanceRestResourceOperationComponent { Code = Conformance.RestfulOperationType.HistoryType }, new Conformance.ConformanceRestResourceOperationComponent { Code = Conformance.RestfulOperationType.Read }, new Conformance.ConformanceRestResourceOperationComponent { Code = Conformance.RestfulOperationType.SearchType }, /* * new Conformance.ConformanceRestResourceOperationComponent { Code = * Conformance.RestfulOperationType.Transaction }, */ new Conformance.ConformanceRestResourceOperationComponent { Code = Conformance.RestfulOperationType.Update }, new Conformance.ConformanceRestResourceOperationComponent { Code = Conformance.RestfulOperationType.Validate }, new Conformance.ConformanceRestResourceOperationComponent { Code = Conformance.RestfulOperationType.Vread }, }; foreach (var resourceName in ModelInfo.SupportedResources) { var supportedResource = new Conformance.ConformanceRestResourceComponent(); supportedResource.Type = resourceName; supportedResource.ReadHistory = true; supportedResource.Operation = allOperations; // Add supported _includes for this resource supportedResource.SearchInclude = ModelInfo.SearchParameters .Where(sp => sp.Resource == resourceName) .Where(sp => sp.Type == Conformance.SearchParamType.Reference) .Select(sp => sp.Name); supportedResource.SearchParam = new List <Conformance.ConformanceRestResourceSearchParamComponent>(); // todo: search params. error: "The name "Search" does not exist in the current context var parameters = ModelInfo.SearchParameters.Where(sp => sp.Resource == resourceName) .Select(sp => new Conformance.ConformanceRestResourceSearchParamComponent { Name = sp.Name, Source = new Uri("http://hl7.org/fhir/" + resourceName.ToLower() + "/search#" + sp.Name), Type = sp.Type, Documentation = sp.Description, Xpath = sp.Path != null ? String.Join(",", sp.Path) : null }); supportedResource.SearchParam.AddRange(parameters); serverComponent.Resource.Add(supportedResource); } // todo: This constant has become internal. Please undo. We need it. // Update: new location: XHtml.XHTMLNS / XHtml // XNamespace ns = Hl7.Fhir.Support.Util.XHTMLNS; XNamespace ns = "http://www.w3.org/1999/xhtml"; var summary = new XElement(ns + "div"); foreach (string resourceName in ModelInfo.SupportedResources) { summary.Add(new XElement(ns + "p", String.Format("The server supports all operations on the {0} resource, including history", resourceName))); } conformance.Text.Div = summary.ToString(); return(conformance); }