Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }