public virtual void Save(ThingGraphContent source, Iori sinkInfo) { if (source == null) { return; } using (var sink = new FileStream(sinkInfo.ToFileName(), FileMode.Create)) { var serializer = new ThingXmlSerializer { Graph = source.Data, Things = source.Data.Elements().ToList() }; serializer.Write(sink); sink.Flush(); sink.Close(); } source.Source = sinkInfo; }
public virtual IThingGraph Open(Stream stream) { var sink = new ThingGraph(); if (stream != null && stream.Length > 0) { try { var serializer = new ThingXmlSerializer { Graph = sink }; serializer.Read(stream); sink.AddRange(serializer.Things); } catch (Exception ex) { Registry.Pooled <IExceptionHandler>() .Catch(new Exception("File load failed: " + ex.Message, ex), MessageType.OK); } finally { stream.Close(); } } return(sink); }
public void TestThingSerializer() { var sourceGraph = ModelHelper.GetSourceGraph <EntityProgrammingLanguageFactory>(10); var thingGraph = sourceGraph.Source as IThingGraph; var dataStream = new StreamWriter(new MemoryStream()); var streamContent = "This is the streamcontent"; dataStream.Write(streamContent); dataStream.Flush(); var streamThing = factory.CreateItem <Stream>(null) as IStreamThing; thingGraph.Add(streamThing); var streamId = streamThing.Id; streamThing.StreamType = ContentTypes.Text; streamThing.Compression = CompressionType.bZip2; streamThing.Data = dataStream.BaseStream; streamThing.Flush(); streamThing.ClearRealSubject(); var s = new MemoryStream(); var serializer = new ThingXmlSerializer(); serializer.Graph = thingGraph; int thingCount = 0; foreach (var thing in thingGraph) { serializer.Things.Add(thing); thingCount++; } Assert.AreEqual(thingCount, serializer.Things.Count); serializer.Write(s); this.ReportDetail(string.Format("Stream.Length={0}", s.Length)); this.ReportDetail(string.Format("Thing.Count={0}", thingCount)); thingGraph.Clear(); thingGraph = null; serializer = null; var compressionWorker = Registry.Factory.Create <ICompressionWorker>(); var compressed = compressionWorker.Compress(s, CompressionType.bZip2); this.ReportDetail(string.Format("CompressedStream.Length={0}", compressed.Length)); compressed.Dispose(); compressed = null; // readtest s.Position = 0; var reader = new StreamReader(s); this.ReportDetail(reader.ReadToEnd()); s.Position = 0; serializer = new ThingXmlSerializer(); serializer.Graph = new ThingGraph(); serializer.Read(s); Assert.AreEqual(thingCount, serializer.Things.Count); serializer.Graph.AddRange(serializer.Things); var data = serializer.Graph.ContentContainer.GetById(streamId); Assert.IsNotNull(data); streamThing = serializer.Graph.GetById(streamId) as IStreamThing; Assert.IsNotNull(streamThing); streamThing.DeCompress(); using (var streamReader = new StreamReader(streamThing.Data)) { var resultContent = streamReader.ReadToEnd(); Assert.AreEqual(resultContent, streamContent); } streamThing.ClearRealSubject(); }