예제 #1
0
        /// <summary>
        /// Compress a ReportObject and return its array of bytes.
        /// </summary>
        /// <param name="ro">ReportObject to be compressed</param>
        /// <returns>Array of bytes representing the compressed ReportObject</returns>
        private byte[] Compress(ReportObject ro)
        {
            using (var ms = new MemoryStream())
            {
                using (var zf = new ZipFile())
                {
                    zf.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
                    var dat = JsonConvert.SerializeObject(ro, this._serializerSettings);
                    zf.AddEntry("ReportObject", dat);
                    zf.Save(ms);
                }

                return(ms.ToArray());
            }
        }
예제 #2
0
        /// <summary>
        /// Stores a ReportLog object and its object data into a IFilesContainer container.
        /// The ReportLog object and its data is stored into a ReportObject object.
        ///
        /// The Report object is compressed before it is saved.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="metadata">ReportLog object to saved</param>
        /// <param name="dataObject">Data associated to the ReportLog</param>
        public void StoreReportData <T>(ReportLog metadata, T dataObject)
        {
            if (string.IsNullOrEmpty(metadata.Id))
            {
                metadata.Id = Guid.NewGuid().ToString();
            }
            //fc is a local storage FileStoreBlobFileContainer
            var fc = this.GetStorage(metadata);
            var ro = new ReportObject
            {
                Metadata   = metadata,
                ReportData = dataObject
            };
            var compressed = this.Compress(ro);

            //save into local disk
            fc.Save(metadata.Id, compressed);
        }