public void SendData(IRelationalObject relationalObject) { if (relationalObject == null) { throw new ArgumentNullException(nameof(relationalObject)); } if (!streams.ContainsKey(configuration)) { var fileName = configuration.FileName; var factory = new OutputStreamFactory(configuration.Format, configuration.ColumnHeaders, serialiser); var writer = streamFactory.OpenWrite(fileName); streams.Add(configuration, new FileStream(factory.Create(writer))); } var stream = streams[configuration]; var bindingConfig = configuration as IBindingConfiguration; if (bindingConfig != null) { relationalObject = relationalObject.WithForeignKey(bindingConfig); } stream.SendData(relationalObject); }
private RelationalObject ReadJson(JObject jsonData, string name, IRelationalObject parent) { if (jsonData == null) { throw new ArgumentNullException(nameof(jsonData)); } var data = new Dictionary <string, object>(); var relationships = new List <JProperty>(); foreach (var property in jsonData.Properties()) { if (property.Value.Type == JTokenType.Object || property.Value.Type == JTokenType.Array) { relationships.Add(property); continue; } data.Add(property.Name, property.Value.ToObject <object>()); } var obj = new RelationalObject { RelationshipName = name, Data = data, Parent = parent }; obj.Children = ReadRelationships(relationships, obj).ToList(); return(obj); }
private void ProcessData(IDataConfiguration config, IRelationalObject data) { if (config == null) { throw new ArgumentNullException(nameof(config)); } if (data == null) { throw new ArgumentNullException(nameof(data)); } var sender = senderFactory.GetDataSender(config); sender.SendData(data); if (data.Children == null || !data.Children.Any()) { return; } foreach (var relationship in data.Children) { if (!config.Relationships.ContainsKey(relationship.RelationshipName)) { throw new InvalidOperationException($"Cannot find relationship with name {relationship.RelationshipName}"); } var relationshipConfig = config.Relationships[relationship.RelationshipName]; ProcessData(relationshipConfig, relationship); } }
public void SendData(IRelationalObject relationalObject) { if (relationalObject == null) { throw new ArgumentNullException(nameof(relationalObject)); } output.Write(relationalObject); }
public void Write(IRelationalObject data) { if (data == null) { throw new ArgumentNullException(nameof(data)); } serialiser.Serialize(jsonWriter, data.Data); writer.WriteLine(); }
public void Write(IRelationalObject data) { if (data == null) { throw new ArgumentNullException(nameof(data)); } if (csvColumnOrder == null) { csvColumnOrder = CreateCsvColumnOrder(data); if (includeHeaders) { WriteHeader(csvColumnOrder); } } WriteRecord(data.Data); }
public void SendData(IRelationalObject relationalObject) { if (relationalObject == null) { throw new ArgumentNullException(nameof(relationalObject)); } if (process == null) { StartProcess(); } if (process.HasExited) { throw new InvalidOperationException($"Target process has exited: {process.Id} ({config.FileName} {config.Arguments})"); } output.Write(relationalObject); }
public void SendData(IRelationalObject relationalObject) { if (relationalObject == null) { throw new ArgumentNullException(nameof(relationalObject)); } if (!streams.ContainsKey(configuration)) { var outputStreamFactory = new OutputStreamFactory(configuration.Format, configuration.ColumnHeaders, serialiser); streams.Add(configuration, new ProcessStream(configuration, outputStreamFactory)); } var stream = streams[configuration]; var bindingConfig = configuration as IBindingConfiguration; if (bindingConfig != null) { relationalObject = relationalObject.WithForeignKey(bindingConfig); } stream.SendData(relationalObject); }
private IEnumerable <RelationalObject> ReadRelationships(List <JProperty> relationships, IRelationalObject parent) { if (relationships == null) { throw new ArgumentNullException(nameof(relationships)); } foreach (var relationship in relationships) { var relationshipData = relationship.Value; var dataItems = new List <JObject>(); if (relationshipData.Type == JTokenType.Array) { foreach (var relationshipItem in relationshipData.AsJEnumerable()) { dataItems.Add((JObject)relationshipItem); } } else { dataItems.Add((JObject)relationshipData); } foreach (var dataItem in dataItems) { yield return(ReadJson(dataItem, relationship.Name, parent)); } } }
private string[] CreateCsvColumnOrder(IRelationalObject relationalObject) { return(relationalObject.Data.Keys.ToArray()); }