private Result <IInitialSettings> GetSettingsResult(IInitialSettings settings, Size size) { var newSettings = (IInitialSettings)settings.Clone(); newSettings.ImageSize = size; return(Result.Ok(newSettings)); }
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))); }
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); }
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")); }
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))); }
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)); }
public abstract Result <IInitialSettings> TryChangeSettings(string[] arguments, IInitialSettings settings);
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)); }