private Result <IInitialSettings> GetSettingsResult(IInitialSettings settings, Size size)
        {
            var newSettings = (IInitialSettings)settings.Clone();

            newSettings.ImageSize = size;
            return(Result.Ok(newSettings));
        }
Example #2
0
 private Result <IInitialSettings> TryChangeSettings(string input, IInitialSettings settings)
 {
     return(Result.Of(() => settingsCommands
                      .Select(cmd => cmd
                              .GetArguments(input)
                              .Then(args => (cmd, args)))
                      .First(r => r.IsSuccess).Value, "Unknown command")
            .Then(x => x.cmd.TryChangeSettings(x.args, settings)));
 }
Example #3
0
 private static Result <Size> HandleSize(IInitialSettings settings, Size calculatedSize)
 {
     if (settings.ImageSize == Size.Empty)
     {
         return(calculatedSize);
     }
     if (settings.ImageSize.Width < calculatedSize.Width ||
         settings.ImageSize.Height < calculatedSize.Height)
     {
         return(Result.Fail <Size>("Tag cloud does not fit to size"));
     }
     return(settings.ImageSize);
 }
Example #4
0
        private Result <IInitialSettings> TryChangeSettings(string input, IInitialSettings settings)
        {
            foreach (var command in settingsCommands)
            {
                if (!command.IsThisCommandInput(input, out var arguments))
                {
                    continue;
                }
                var result = command.TryChangeSettings(arguments, settings);
                return(result);
            }

            return(Result.Fail <IInitialSettings>("Unknown command"));
        }
Example #5
0
        public Result <None> CreateImage(IInitialSettings settings)
        {
            var words = reader.ReadWords(settings.InputFilePath);

            return(wordProcessor.ProcessWords(words)
                   .Then(wordsWithCount => wordsWithCount.ToList())
                   .Then(wordsWithCount =>
            {
                words = wordsWithCount.Select(e => e.Word);
                var sizes = converter.ConvertToSizes(wordsWithCount);
                var rectangles = layouter.GetRectangles(sizes);
                return imageSizeCalculator.CalculateImageSize(rectangles)
                .Then(calculatedSize => HandleSize(settings, calculatedSize))
                .Then(imageSize => (rect: GetWordRectangles(words, rectangles, imageSize), imageSize));
            })
                   .Then(x => visualizer.DrawImage(x.rect, x.imageSize))
                   .Then(image => saver.SaveImage(image, settings.OutputFilePath)));
        }
Example #6
0
        public void CreateImage(IInitialSettings settings)
        {
            var words          = reader.ReadWords(settings.InputFilePath);
            var wordsWithCount = wordProcessor.ProcessWords(words).ToList();
            var sizes          = converter.ConvertToSizes(wordsWithCount);
            var rectangles     = layouter.GetRectangles(sizes);
            var imageSize      = settings.ImageSize;

            if (imageSize == Size.Empty)
            {
                imageSize = imageSizeCalculator.CalculateImageSize(rectangles);
            }
            rectangles = rectanglesTransformer.TransformRectangles(rectangles, imageSize);
            words      = wordsWithCount.Select(e => e.Word);
            var wordRectangles = words.Zip(rectangles, (w, r) => new WordRectangle(w, r)).ToList();
            var image          = visualizer.DrawImage(wordRectangles, imageSize);

            saver.SaveImage(image, settings.OutputFilePath);
        }
        public override Result <IInitialSettings> TryChangeSettings(string[] arguments, IInitialSettings settings)
        {
            if (arguments.Length < 3)
            {
                return(Result.Fail <IInitialSettings>("Should be 2 arguments: width and height"));
            }
            if (!int.TryParse(arguments[1], out var width) || !int.TryParse(arguments[2], out var height))
            {
                return(Result.Fail <IInitialSettings>("Arguments should be integers"));
            }
            if (width <= 0 || height <= 0)
            {
                return(Result.Fail <IInitialSettings>("Width and height should be positive"));
            }
            var newSettings = (IInitialSettings)settings.Clone();

            newSettings.ImageSize = new Size(width, height);
            return(Result.Ok(newSettings));
        }
 public void CreateSettings()
 {
     settings = new InitialSettings();
 }
 public override Result <IInitialSettings> TryChangeSettings(string[] arguments, IInitialSettings settings)
 {
     if (arguments.Length <= 1 || arguments[1] == "auto")
     {
         return(GetSettingsResult(settings, Size.Empty));
     }
     if (arguments.Length < 3)
     {
         return(Result.Fail <IInitialSettings>("Should be 2 arguments: width and height"));
     }
     if (!int.TryParse(arguments[1], out var width) || !int.TryParse(arguments[2], out var height))
     {
         return(Result.Fail <IInitialSettings>("Arguments should be integers"));
     }
     if (width <= 0 || height <= 0)
     {
         return(Result.Fail <IInitialSettings>("Width and height should be positive"));
     }
     return(GetSettingsResult(settings, new Size(width, height)));
 }
        public override Result <IInitialSettings> TryChangeSettings(string[] arguments, IInitialSettings settings)
        {
            if (arguments.Length < 2)
            {
                return(Result.Fail <IInitialSettings>("Should be 1 argument: output path"));
            }
            var path        = arguments[1];
            var newSettings = (IInitialSettings)settings.Clone();

            newSettings.OutputFilePath = path;
            return(Result.Ok(newSettings));
        }
Example #11
0
 public abstract Result <IInitialSettings> TryChangeSettings(string[] arguments, IInitialSettings settings);
Example #12
0
        public override Result <IInitialSettings> TryChangeSettings(string[] arguments, IInitialSettings settings)
        {
            if (arguments.Length < 2)
            {
                return(Result.Fail <IInitialSettings>("Should be 1 argument: input path"));
            }
            var path = arguments[1];

            if (!File.Exists(path))
            {
                return(Result.Fail <IInitialSettings>($"File {path} not exists"));
            }
            var newSettings = (IInitialSettings)settings.Clone();

            newSettings.InputFilePath = path;
            return(Result.Ok(newSettings));
        }