Example #1
0
        public static IXMindWriter ResolveContentFile(XMindWriterContext context, List <IXMindWriter> writers)
        {
            var fileLabel   = "output:definition:content";
            var writerFound = context.ResolveWriterByOutputName(writers, fileLabel);

            return(writerFound);
        }
        /// <summary>
        /// Save the current XMind workbook file to disk.
        /// </summary>
        public override async Task Save()
        {
            var requestId = $"SaveWorkBook-{SmallGuidGenerator.NewGuid()}";

            Logger.Log.RequestStart(requestId);
            var manifestFileName = _xMindSettings[XMindConfiguration.ManifestLabel];
            var metaFileName     = _xMindSettings[XMindConfiguration.MetaLabel];
            var contentFileName  = _xMindSettings[XMindConfiguration.ContentLabel];

            var files = new Dictionary <string, XDocument>(3)
            {
                [metaFileName]     = _documentBuilder.MetaFile,
                [manifestFileName] = _documentBuilder.ManifestFile,
                [contentFileName]  = _documentBuilder.ContentFile
            };
            var writerJobs     = new List <Task>(3);
            var writerContexts = new List <XMindWriterContext>();

            foreach (var kvp in files)
            {
                var currentWriterContext = new XMindWriterContext()
                {
                    FileName    = kvp.Key,
                    FileEntries = new XDocument[1] {
                        kvp.Value
                    }
                };
                var selectedWriters = _bookConfiguration
                                      .WriteTo
                                      .ResolveWriters(currentWriterContext);
                if (selectedWriters == null)
                {
                    var errorMessage = "XMindBook.Save: Writer is not selected";
                    Logger.Log.Error(errorMessage);
                    throw new InvalidOperationException(errorMessage);
                }
                foreach (var writer in selectedWriters)
                {
                    writerJobs.Add(writer.WriteToStorage(kvp.Value, kvp.Key));
                }
                writerContexts.Add(currentWriterContext);
            }
            try
            {
                await Task.WhenAll(writerJobs);

                Logger.Log.RequestPhase(requestId, "WritersCompleted");
                _bookConfiguration.WriteTo.FinalizeAction?.Invoke(writerContexts, this);
                Logger.Log.RequestPhase(requestId, "FinalizerExecuted");
            }
            catch (Exception e)
            {
                Logger.Log.Error(e.Message);
                throw;
            }
            finally
            {
                Logger.Log.RequestStop(requestId);
            }
        }
Example #3
0
        /// <summary>
        /// Save the current XMind workbook file to disk.
        /// </summary>
        public void Save()
        {
            var manifestFileName = _xMindSettings.XMindConfigCollection["output:definition:manifest"];
            var metaFileName     = _xMindSettings.XMindConfigCollection["output:definition:meta"];
            var contentFileName  = _xMindSettings.XMindConfigCollection["output:definition:content"];

            var files = new Dictionary <string, XDocument>(3)
            {
                [metaFileName]     = _metaData,
                [manifestFileName] = _manifestData,
                [contentFileName]  = _contentData
            };

            var writerContexts = new List <XMindWriterContext>();

            foreach (var kvp in files)
            {
                var currentWriterContext = new XMindWriterContext()
                {
                    FileName    = kvp.Key,
                    FileEntries = new XDocument[1] {
                        kvp.Value
                    }
                };
                var selectedWriters = _globalConfiguration
                                      .WriteTo
                                      .ResolveWriters(currentWriterContext);
                if (selectedWriters == null)
                {
                    throw new InvalidOperationException("XMindBook.Save: Writer is not selected");
                }
                selectedWriters.ForEach(w => w.WriteToStorage(kvp.Value, kvp.Key));
                writerContexts.Add(currentWriterContext);
            }
            _globalConfiguration.WriteTo.FinalizeAction?.Invoke(writerContexts);

            // if (_fileName == null)
            // { throw new InvalidOperationException("Nothing to save!"); }

            // String tempPath = Path.GetTempPath() + Guid.NewGuid() + "\\";

            // Directory.CreateDirectory(tempPath);
            // Directory.CreateDirectory(tempPath + "META-INF");
            // Directory.CreateDirectory(tempPath + "Thumbnails");

            // File.WriteAllText(tempPath + "META-INF\\manifest.xml", _manifestData.ToString());
            // File.WriteAllText(tempPath + "meta.xml", _metaData.ToString());
            // File.WriteAllText(tempPath + "content.xml", _contentData.ToString());

            // using (ZipStorer zip = ZipStorer.Create(_fileName, string.Empty))
            // {
            //     zip.AddFile(ZipStorer.Compression.Deflate, tempPath + "META-INF\\manifest.xml", "manifest.xml", string.Empty);
            //     zip.AddFile(ZipStorer.Compression.Deflate, tempPath + "meta.xml", "meta.xml", string.Empty);
            //     zip.AddFile(ZipStorer.Compression.Deflate, tempPath + "content.xml", "content.xml", string.Empty);
            // }

            // Directory.Delete(tempPath, true);
        }
Example #4
0
        private static IXMindWriter ResolveWriterByOutputName(
            this XMindWriterContext context,
            List <IXMindWriter> writers,
            string fileLabel)
        {
            var xMindSettings = XMindConfigurationCache.Configuration.XMindConfigCollection;
            var file          = xMindSettings[fileLabel];
            var writerFound   = writers
                                .FirstOrDefault(w => context.FileName.Equals(file) && w.GetOutputConfig().OutputName.Equals(file));

            return(writerFound);
        }
        internal List <IXMindWriter> ResolveWriters(XMindWriterContext context)
        {
            if (_writers == null || !_writers.Any())
            {
                throw new InvalidOperationException("XMindConfiguration.ResolveWriter: Writer is not specified");
            }
            if (_criteria == null)
            {
                // Logger.WarnFormat("XMindConfiguration.ResolveWriter: default writer is assigned");
                return(_writers.Take(1).ToList());
            }
            var writersFound = _criteria.Select(w => w.Invoke(context, _writers)).Where(w => w != null);

            // Logger.Debug($"For context.FileName: {context.FileName} ResolveWriters.writersFound: {writersFound.Count()}");
            return(writersFound.ToList());
        }
Example #6
0
        /// <summary>
        /// Save the current XMind workbook file to disk.
        /// </summary>
        public override async Task Save()
        {
            var manifestFileName = _xMindSettings[XMindConfiguration.ManifestLabel];
            var metaFileName     = _xMindSettings[XMindConfiguration.MetaLabel];
            var contentFileName  = _xMindSettings[XMindConfiguration.ContentLabel];

            var files = new Dictionary <string, XDocument>(3)
            {
                [metaFileName]     = _documentBuilder.MetaFile,
                [manifestFileName] = _documentBuilder.ManifestFile,
                [contentFileName]  = _documentBuilder.ContentFile
            };

            var writerContexts = new List <XMindWriterContext>();

            foreach (var kvp in files)
            {
                var currentWriterContext = new XMindWriterContext()
                {
                    FileName    = kvp.Key,
                    FileEntries = new XDocument[1] {
                        kvp.Value
                    }
                };
                var selectedWriters = _bookConfiguration
                                      .WriteTo
                                      .ResolveWriters(currentWriterContext);
                if (selectedWriters == null)
                {
                    throw new InvalidOperationException("XMindBook.Save: Writer is not selected");
                }

                foreach (var writer in selectedWriters)
                {
                    writer.WriteToStorage(kvp.Value, kvp.Key);
                }
                writerContexts.Add(currentWriterContext);
            }
            _bookConfiguration.WriteTo.FinalizeAction?.Invoke(writerContexts, this);
        }