Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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();
        }