public override async Task <OperationResultEnum> Execute()
        {
            Validate(_arguments);

            Binary binary = _generator.GenerateBinary(_arguments);

            var resource = new ResourceWrapper(binary, FhirVersion.R4);

            var serializer = new SerializationWrapper(FhirVersion.R4);

            var serialized = serializer.Serialize(resource, _arguments.MimeType);

            if (serialized == null)
            {
                _issues.Add(new Issue
                {
                    Details  = $"Failed to serialize binary from file\nLocation: '{_arguments.Path}'.",
                    Severity = IssueSeverityEnum.Error
                });

                return(OperationResultEnum.Failed);
            }

            await File.WriteAllTextAsync(@$ "{_arguments.OutPath}\binary-{_arguments.Id}.json", serialized);

            _logger.LogInformation($"Successfully generated 'binary-{_arguments.Id}.json' to location: '{_arguments.OutPath}'.");

            return(_issues.Any(issue => issue.Severity == IssueSeverityEnum.Error)
                ? OperationResultEnum.Failed
                : OperationResultEnum.Succeeded);
        }
        private async IAsyncEnumerable <ResourceWrapper> ExpandInputFiles()
        {
            var serializer = new SerializationWrapper(_arguments.FhirVersion);
            var content    = await File.ReadAllTextAsync(_arguments.QuestionnairePath);

            var resource = serializer.Parse(content, _arguments.MimeType);

            if (resource == null)
            {
                _issues.Add(new Issue
                {
                    Details  = $"Failed to deserialize Questionnaire from file\nLocation: '{_arguments.QuestionnairePath}'.",
                    Severity = IssueSeverityEnum.Error,
                });

                yield break;
            }

            if (resource.ResourceType == ResourceTypeWrapper.Bundle)
            {
                var bundle = resource.CastToBundle();
                foreach (var r in bundle.GetResources())
                {
                    if (r.ResourceType != ResourceTypeWrapper.Questionnaire)
                    {
                        continue;
                    }
                    yield return(r);
                }
            }
            else
            {
                yield return(resource);
            }
        }
Exemplo n.º 3
0
        private string GetContentAs(string content, FhirMimeType mimeType)
        {
            var serializer = new SerializationWrapper(_arguments.FhirVersion);
            var resource   = serializer.Parse(content);

            return(serializer.Serialize(resource, mimeType));
        }
        private async Tasks.Task <BundleWrapper> CreateBundle(IEnumerable <string> batch, FhirVersion fhirVersion)
        {
            var serializer = new SerializationWrapper(fhirVersion);
            var bundle     = new BundleWrapper(fhirVersion);

            foreach (var file in batch)
            {
                ResourceWrapper resource = null;
                try
                {
                    var content = await File.ReadAllTextAsync(file);

                    resource = serializer.Parse(content, _arguments.MimeType);
                }
                catch (Exception e)
                {
                    _logger.LogError($"Could not read and parse {file}. Skipping: {e.Message}");
                }
                var entry   = bundle.AddResourceEntry(resource, null);
                var request = new RequestComponentWrapper(fhirVersion);
                request.Method = HTTPVerbWrapper.PUT;
                request.Url    = $"/{resource.ResourceType}/{resource.Id}";
                entry.Request  = request;
                _logger.LogInformation($"  Added {request.Url} to bundle");
            }

            return(bundle);
        }
Exemplo n.º 5
0
        public override string ToString()
        {
            var root = new SerializationWrapper
            {
                CostFunction = this,
            };

            return(JsonSerializer.Serialize(root));
        }
Exemplo n.º 6
0
        /// <summary>
        /// Converts a message to a byte array
        /// </summary>
        /// <typeparam name="T">The message type</typeparam>
        /// <param name="message">The message.</param>
        /// <param name="headers">the message headers</param>
        /// <returns></returns>
        public byte[] ConvertMessageToBytes <T>(T message, IReadOnlyDictionary <string, object> headers)
            where T : class
        {
            Guard.NotNull(() => message, message);
            var wrapper = new SerializationWrapper <T> {
                Message = message
            };

            return(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(wrapper, _serializerSettings)));
        }
Exemplo n.º 7
0
        public string Convert(string fromString)
        {
            var parser     = new SerializationWrapper(FromVersion);
            var serializer = new SerializationWrapper(ToVersion);

            var fromObject = parser.Parse(fromString);
            var converted  = Convert <Base, Base>(fromObject.Resource);

            return(serializer.Serialize(converted));
        }
Exemplo n.º 8
0
        public Task SerializeAsync(Stream stream)
        {
            var root = new SerializationWrapper
            {
                CostFunction = this,
            };

            // Save to the writer
            return(JsonSerializer.SerializeAsync(stream, root));
        }
Exemplo n.º 9
0
        private static object InternalSerialize(string HandleName, bool Compress = false, string OutputFilePath = null)
        {
            HandleName = HandleNames.GetNameFrom(HandleName);
            IStoredObject storedObj;

            if (!m_ObjectStore.GetByName(HandleName, out storedObj))
            {
                throw new Exception($"No object named {HandleName} found");
            }

            bool WriteToFile = !String.IsNullOrWhiteSpace(OutputFilePath);

            var obj = new SerializationWrapper {
                ContainedObject = storedObj
            };
            var result = XmlSerialize <SerializationWrapper>(obj);

            if (Compress)
            {
                var       compressed = Zip(result);
                XDocument doc        = new XDocument(new XElement("CompressedData", new XAttribute("Algorithm", "gzip"), Convert.ToBase64String(compressed)));

                if (WriteToFile)
                {
                    OutputFilePath = Environment.ExpandEnvironmentVariables(OutputFilePath);

                    using (var fileWriter = new FileStream(OutputFilePath, FileMode.Create))
                    {
                        doc.Save(fileWriter);
                    }
                    return($"Written to '{OutputFilePath}' in compressed format.");
                }
                else
                {
                    using (var stringWriter = new StringWriter())
                    {
                        doc.Save(stringWriter);
                        return(stringWriter.ToString());
                    }
                }
            }
            else
            {
                if (WriteToFile)
                {
                    File.WriteAllLines(OutputFilePath, new string[] { result });
                    return($"Written to '{OutputFilePath}' in uncompressed XML format.");
                }
                else
                {
                    return(result);
                }
            }
        }
Exemplo n.º 10
0
        //[InlineData(@"TestData\account.profile-r4.json")]
        //[InlineData(@"TestData\activitydefinition.profile-r4.json")]
        //[InlineData(@"TestData\adverseevent.profile-r4.json")]
        //[InlineData(@"TestData\allergyintolerance.profile-r4.json")]
        //[InlineData(@"TestData\appointment.profile-r4.json")]
        //[InlineData(@"TestData\appointmentresponse.profile-r4.json")]
        //[InlineData(@"TestData\consent.profile-r4.json")]
        public async Task CanConvert_Questionnaire_FromR4ToR3_RoundTrip(string path)
        {
            var converterFromR4ToR3 = new FhirConverter(to: FhirVersion.R3, from: FhirVersion.R4);
            var converterFromR3ToR4 = new FhirConverter(to: FhirVersion.R4, from: FhirVersion.R3);

            var r4Serializer = new SerializationWrapper(FhirVersion.R4);
            var r4Resource   = r4Serializer.Parse(await File.ReadAllTextAsync(path));

            var r3Resource          = converterFromR4ToR3.Convert <Resource, Resource>(r4Resource.Resource);
            var r4ResourceRoundTrip = converterFromR3ToR4.Convert <Resource, Resource>(r3Resource);

            var r4ResourceContent          = r4Serializer.Serialize(r4Resource);
            var r4ResourceRoundTripContent = r4Serializer.Serialize(r4ResourceRoundTrip);

            Assert.Equal(r4ResourceContent, r4ResourceRoundTripContent);
        }
        private async Task SerializeAndStore(BundleWrapper result, DirectoryInfo baseDir)
        {
            if (result == null)
            {
                return;
            }

            var serializer = new SerializationWrapper(result.FhirVersion);
            var resources  = result.GetResources();

            _logger.LogInformation($"  Fetched {resources.Count()} resources from server");
            foreach (var resource in resources)
            {
                string serialized = serializer.Serialize(resource, _arguments.MimeType);
                await Store(resource.Id, serialized, baseDir);
            }
        }
        public override async Tasks.Task <OperationResultEnum> Execute()
        {
            Validate(_arguments);

            TokenResponse tokenResponse = null;

            if (!string.IsNullOrEmpty(_arguments.Credentials))
            {
                tokenResponse = await GetToken(_arguments.Environment?.AuthorizationUrl, _arguments.Credentials, _arguments.AuthorizationUrl);
            }

            var endpoint = _arguments.FhirBaseUrl?.Uri;

            if (string.IsNullOrEmpty(endpoint))
            {
                endpoint = tokenResponse == null ? _arguments.Environment.FhirBaseUrl : _arguments.Environment.ProxyBaseUrl;
            }

            var client = new FhirClientWrapper(endpoint, _logger, _arguments.FhirVersion, tokenResponse?.AccessToken);

            var batches = FindFiles().Batch(_arguments.BatchSize);

            foreach (var batch in batches)
            {
                var bundle = await CreateBundle(batch, client.FhirVersion);

                bundle.Type = BundleTypeWrapper.Transaction;

                try
                {
                    _logger.LogInformation($"Uploading batch with {batch.Count()} entries");
                    await client.TransactionAsync(bundle);

                    System.Threading.Thread.Sleep(_arguments.Sleep);
                }
                catch (Exception e)
                {
                    _logger.LogError($"Failed to upload batch: {e.Message}");
                    _logger.LogError($"Response was: {client.LastBodyAsText}");
                    var bundleAsStr = new SerializationWrapper(client.FhirVersion).Serialize(bundle.ToBase());
                    await File.WriteAllTextAsync("debug-on-exception", bundleAsStr);
                }
            }

            return(await Tasks.Task.FromResult(OperationResultEnum.Succeeded));
        }
Exemplo n.º 13
0
        public override async Task <OperationResultEnum> Execute()
        {
            _logger.LogInformation($"Starting conversion of source file: '{_arguments.Source}' from format: '{_arguments.FromMimeType}' to format '{_arguments.ToMimeType}'.");

            var serializer = new SerializationWrapper(_arguments.FhirVersion);
            var resource   = serializer.Parse(_arguments.SourceContent, _arguments.FromMimeType, true);
            var outContent = serializer.Serialize(resource, _arguments.ToMimeType.GetValueOrDefault());
            var fileName   = Path.GetFileName(_arguments.Source);
            var outPath    = GetOutPath(_arguments.OutPath, fileName, _arguments.ToMimeType.GetValueOrDefault());

            if (!string.IsNullOrWhiteSpace(outContent))
            {
                using var stream = File.Open(outPath, FileMode.OpenOrCreate, FileAccess.Write);
                await stream.WriteAsync(Encoding.UTF8.GetBytes(outContent));

                _logger.LogInformation($"Converted file stored at: '{outPath}'.");
            }

            return(await Task.FromResult(OperationResultEnum.Succeeded));
        }
Exemplo n.º 14
0
        public override async Task <OperationResultEnum> Execute()
        {
            DocumentReference documentReference = _documentReferenceGenerator.GenerateDocumentReference(_arguments);

            var resource   = new ResourceWrapper(documentReference, FhirVersion.R4);
            var serializer = new SerializationWrapper(FhirVersion.R4);

            var serialized = serializer.Serialize(resource, _arguments.MimeType);

            if (serialized == null)
            {
                _issues.Add(new Issue
                {
                    Details  = $"Failed to serialize documentreference for Id: '{_arguments.Id}'.",
                    Severity = IssueSeverityEnum.Error
                });

                return(OperationResultEnum.Failed);
            }

            await File.WriteAllTextAsync(@$ "{_arguments.OutPath}\documentreference-{_arguments.Id}.json", serialized);
        public override async Tasks.Task <OperationResultEnum> Execute()
        {
            var serializer = new SerializationWrapper(_arguments.FhirVersion);
            var lines      = await File.ReadAllLinesAsync(_arguments.DumpFile.Path);

            var linenr = 0;

            var versionMap = new Dictionary <string, Data>();

            foreach (var entry in lines)
            {
                linenr++;
                try
                {
                    var json = JObject.Parse(entry);

                    var versionPath = json["_id"].ToString();
                    json.Property("_id").Remove();
                    var id = $"{json["resourceType"]}/{json["id"]}";

                    if (_arguments.SkipIds.Contains(id))
                    {
                        _logger.LogInformation($"Skipping {id} as requested");
                        continue;
                    }

                    RemoveUnwantedMongoDbElements(json);

                    var dataEntry = new Data
                    {
                        Id          = id,
                        JObject     = json,
                        Line        = linenr,
                        RawContent  = entry,
                        VersionPath = versionPath
                    };

                    if (versionMap.TryGetValue(id, out Data other))
                    {
                        var version      = GetVersion(json);
                        var otherVersion = GetVersion(other.JObject);

                        if (version > otherVersion)
                        {
                            versionMap.Remove(id);
                            versionMap.Add(id, dataEntry);
                        }
                    }
                    else
                    {
                        versionMap.Add(id, dataEntry);
                    }
                }
                catch (Exception e)
                {
                    _logger.LogError($"line {linenr}: Not valid json{Environment.NewLine}{e.Message}");
                    if (_arguments.ShowOriginalJson)
                    {
                        _logger.LogInformation(entry);
                    }
                    continue;
                }
            }

            foreach (var key in versionMap.Keys)
            {
                var data = versionMap[key];
                try
                {
                    var content  = data.JObject.ToString();
                    var resource = serializer.Parse(content, permissiveParsing: _arguments.PermissiveParsing);
                }
                catch (Exception e)
                {
                    _logger.LogError($"line {data.Line}: resource {key} is not a valid FHIR object (was {data.VersionPath}){Environment.NewLine}{e.Message}");
                    if (_arguments.ShowOriginalJson)
                    {
                        _logger.LogInformation(data.RawContent);
                    }
                    continue;
                }
            }

            return(await Tasks.Task.FromResult(OperationResultEnum.Succeeded));
        }
Exemplo n.º 16
0
 public MetadataTests(SerializationWrapper serializer, DeserializationWrapper deserializer)
 {
     Serializer   = serializer;
     Deserializer = deserializer;
 }
Exemplo n.º 17
0
 /**
  * Create a new wrapping StorageUtility
  *
  * @param name unique name for underlying StorageUtility
  * @param wrapper serialization wrapper
  * @param storageFactory factory to create underlying StorageUtility
  */
 public WrappingStorageUtility(String name, SerializationWrapper wrapper, IStorageFactory storageFactory)
 {
     this.storage = storageFactory.newStorage(name, wrapper.GetType());
     this.wrapper = wrapper;
 }