Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Сахабутдинов Ильфир #10

Open
wants to merge 46 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 40 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
fcfef16
Add. Созданы проекты для работы
Dec 18, 2024
abccc22
Add. Тесты на анализатор размеров слов
Dec 18, 2024
6949841
Add. Тесты на CircularCloudLayouter
Dec 18, 2024
01469e5
Add. Модели для работы с визуализацией слов
Dec 18, 2024
7506f8c
Add. Провайдер для доставки и изменения настроек визуализации
Dec 18, 2024
11a771c
Add. Логика визуализации слов
Dec 18, 2024
875b3e7
Add. Модели для анализа текста
Dec 18, 2024
9799764
Add. Провайдер для изменения настроек анализа слов
Dec 18, 2024
374e8b8
Add. Логика анализа текста
Dec 18, 2024
cc2d9ec
Add. Options консольного клиента
Dec 18, 2024
b280405
Add. Обработчики команд для консольного клиента
Dec 18, 2024
3cf4786
Add. Реализация консольного цикла UI
Dec 18, 2024
b036085
Add. DI консольного клиента
Dec 18, 2024
3d0f01e
Fix. Убрал локальный путь к MyStem
Dec 18, 2024
6555faf
Add. Тесты для проекта "TextAnalyzer"
Dec 22, 2024
b7d1f84
Update. Изменены тесты для класса "CircularCloudLayouter"
Dec 22, 2024
dafbd1f
Update. Изменены тесты для класса "WeigherWordSizer"
Dec 22, 2024
12d3867
Add. Добавлены тесты для класса "LayoutCreator"
Dec 22, 2024
576342e
Add. Добавлены тесты для класса "SpiralPlacementStrategy"
Dec 22, 2024
ed52137
Update. Проект "TextAnalyzer" переведен с Autofac на Microsoft Depend…
Dec 22, 2024
89a8163
Add. Добавлены внешние ресурсы
Dec 22, 2024
0c30b05
Update. Изменен уровень доступа модели для тестирования
Dec 22, 2024
a518a02
Update. В проекте "TextAnalyzer" убраны неиспользуемые методы
Dec 22, 2024
811186a
Fix. Исправлена ошибка с сохранением только уникальных слов
Dec 22, 2024
168c4bb
Update. Проект "TagsCloudVisualization" переведен с Autofac на Micros…
Dec 22, 2024
5bf1148
Add. Добавлены настройки путей к исходному и конечному файлам
Dec 22, 2024
0218dcb
Add. Добавлен создатель "Layouter" для получения нового экземпляра пр…
Dec 22, 2024
f90b190
Update. Разделение ответственности. Выделены функции для получения ло…
Dec 22, 2024
17995b9
Fix. Убрана лишняя проверка на null
Dec 22, 2024
3dbbf15
Update. Переделана регистрация в di сервисов из библиотек
Dec 22, 2024
33ff049
Update. Изменены опции для отдельной работы с настройками и генерацией
Dec 22, 2024
73fa95a
Update. Изменены обработчики.
Dec 22, 2024
beb0653
Update. Обработка команд заменена на использование специализированных…
Dec 22, 2024
f8138dd
Update. Регистрация обработчиков и опций в di
Dec 22, 2024
a956e96
Update. Переход на net8.0-windows для зависимостей, специфичных для W…
Dec 22, 2024
2afad1f
Fix. Правки проверок изменений опций для настроек в консольном клиенте
Dec 22, 2024
0ca0484
Fix. Небольшие исправления после инспекции кода связанные с чистотой …
Dec 22, 2024
3bf28fa
Fix. Правки связанные с пробелами и отступами
Dec 22, 2024
fcacd8e
Add. Более подробное описание опции в `HelpText`
Dec 22, 2024
3e9a479
Add. Примеры и мануал
Dec 22, 2024
2cdc617
Update. Конфигурирование через параметры запуска
Dec 24, 2024
95ed38d
Fix. Поправка жизненного цикла сервиса
Dec 24, 2024
bee0e72
Fix. Удаление ненужного вызова .ToList()
Dec 24, 2024
c63a0bb
Fix. Форматирование стиля кода (добавление пробелов)
Dec 24, 2024
ce3021e
Fix. Удаление папки Logic из ItemGroup
Dec 24, 2024
99843fc
Add. Добавлены тесты, проверяющие работу всей программы в сборке
Dec 24, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions TagsCloudContainer.ConsoleUi/ConsoleClientModule.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using Autofac;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Еще не хватает теста, проверяющего работу всей программы

Добавь несколько более крупных тестов, проверяющих работу всей программы в сборе.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавил

using TagsCloudContainer.ConsoleUi.Handlers;
using TagsCloudContainer.ConsoleUi.Handlers.Interfaces;
using TagsCloudContainer.ConsoleUi.Options;
using TagsCloudContainer.ConsoleUi.Options.Interfaces;
using TagsCloudContainer.ConsoleUi.Runner;
using TagsCloudContainer.ConsoleUi.Runner.Interfaces;

namespace TagsCloudContainer.ConsoleUi;

public class ConsoleClientModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<TagsCloudContainerUi>().As<ITagsCloudContainerUi>();
builder.RegisterType<ExitHandler>().As<IHandler<ExitOptions>>();
builder.RegisterType<WordSettingsHandler>().As<IHandler<WordSettingsOptions>>();
builder.RegisterType<ImageSettingHandler>().As<IHandler<ImageSettingsOptions>>();
builder.RegisterType<FileSettingsHandler>().As<IHandler<FileSettingsOptions>>();
builder.RegisterType<GenerationHandler>().As<IHandler<GenerationOptions>>();
builder.RegisterType<ExitOptions>().As<IOptions>();
builder.RegisterType<GenerationOptions>().As<IOptions>();
builder.RegisterType<ImageSettingsOptions>().As<IOptions>();
builder.RegisterType<FileSettingsOptions>().As<IOptions>();
builder.RegisterType<WordSettingsOptions>().As<IOptions>();
}
}
122 changes: 122 additions & 0 deletions TagsCloudContainer.ConsoleUi/Examples/Words.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
Задание
TagsCloudContainer
Сделай
fork
этого
и
работай
в
нем.
Нужно
сделать
приложение
генератора
облака
слов
по
произвольному
тексту.
Примеры.
В
облаке
не
должно
быть
повторяющихся
слов,
размер
слова
должен
быть
тем
больше,
чем
чаще
встречается
слово,
не
должно
быть
"скучных"
слов
(предлогов,
местоимений,
Используй
алгоритм
из
блока
про
TDD.
Ограничения
Точки
расширения
В
промышленном
программировании
при
разработке
далеко
не
всегда
разумно
создавать
точки
расширения
Чаще
руководствуются
принципами
YAGNI
KISS,
поддерживая
код
как
можно
проще,
а
абстракции
создаются
и
внедряются
в
код
только
в
момент,
когда
понадобилось
расширить
функциональность.
Тем
не
менее
для
учебных
целей
в
этой
задаче
требуется
заранее
предусмотреть
точки
расширения
для
наиболее
вероятных
потенциальных
изменений
в
твоем
продукте.
Результат
твоей
работы
должен
быть
расширяем
без
модификации
уже
имеющегося
кода

Binary file added TagsCloudContainer.ConsoleUi/Examples/result.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TagsCloudContainer.ConsoleUi/Examples/result.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TagsCloudContainer.ConsoleUi/Examples/resultS.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions TagsCloudContainer.ConsoleUi/Handlers/ExitHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using TagsCloudContainer.ConsoleUi.Handlers.Interfaces;
using TagsCloudContainer.ConsoleUi.Options;

namespace TagsCloudContainer.ConsoleUi.Handlers;

public class ExitHandler : IHandler<ExitOptions>
{
public string Execute(ExitOptions options)
{
Environment.Exit(0);
return "Завершение";
}
}
43 changes: 43 additions & 0 deletions TagsCloudContainer.ConsoleUi/Handlers/FileSettingsHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using TagsCloudContainer.ConsoleUi.Handlers.Interfaces;
using TagsCloudContainer.ConsoleUi.Options;
using TagsCloudContainer.TagsCloudVisualization.Providers.Interfaces;

namespace TagsCloudContainer.ConsoleUi.Handlers;

public class FileSettingsHandler(IFileSettingsProvider settingsProvider)
: IHandler<FileSettingsOptions>
{
public string Execute(FileSettingsOptions settingsOptions)
{
SetFileSettings(settingsOptions);
return "Настройки изменены";
}

private void SetFileSettings(FileSettingsOptions settingsOptions)
{
var currentSettings = settingsProvider.GetPathSettings();
if (!string.IsNullOrEmpty(settingsOptions.ImageFormatString) &&
!Equals(settingsOptions.ImageFormat, currentSettings.ImageFormat))
{
settingsProvider.SetImageFormat(settingsOptions.ImageFormat);
}

if (!string.IsNullOrEmpty(settingsOptions.InputPath)
&& !Equals(settingsOptions.InputPath, currentSettings.InputPath))
{
settingsProvider.SetInputPath(settingsOptions.InputPath);
}

if (!string.IsNullOrEmpty(settingsOptions.OutputPath)
&& !Equals(settingsOptions.OutputPath, currentSettings.OutputPath))
{
settingsProvider.SetOutputPath(settingsOptions.OutputPath);
}

if (!string.IsNullOrEmpty(settingsOptions.OutputFileName) &&
!Equals(settingsOptions.OutputFileName, currentSettings.OutputFileName))
{
settingsProvider.SetOutputFileName(settingsOptions.OutputFileName);
}
}
}
36 changes: 36 additions & 0 deletions TagsCloudContainer.ConsoleUi/Handlers/GenerationHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using TagsCloudContainer.ConsoleUi.Handlers.Interfaces;
using TagsCloudContainer.ConsoleUi.Options;
using TagsCloudContainer.TagsCloudVisualization.Logic.Visualizers.Interfaces;
using TagsCloudContainer.TagsCloudVisualization.Providers.Interfaces;
using TagsCloudContainer.TextAnalyzer.Logic.Preprocessors.Interfaces;
using TagsCloudContainer.TextAnalyzer.Logic.Readers.Interfaces;
using TagsCloudContainer.TextAnalyzer.Providers.Interfaces;

namespace TagsCloudContainer.ConsoleUi.Handlers;

public class GenerationHandler(
IFileTextReader fileReader,
ITextPreprocessor textPreprocessor,
IWordsCloudVisualizer wordsCloudVisualizer,
IFileSettingsProvider fileSettingsProvider,
IImageSettingsProvider imageSettingsProvider,
IWordSettingsProvider wordSettingsProvider)
: IHandler<GenerationOptions>
{
public string Execute(GenerationOptions options)
{
GenerateFile();
return "Сгенерирован файл";
}

private void GenerateFile()
{
var pathSettings = fileSettingsProvider.GetPathSettings();
var imageSettings = imageSettingsProvider.GetImageSettings();
var wordSettings = wordSettingsProvider.GetWordSettings();
var text = fileReader.ReadText(pathSettings.InputPath);
var analyzeWords = textPreprocessor.GetWordFrequencies(text, wordSettings);
using var image = wordsCloudVisualizer.CreateImage(imageSettings, analyzeWords);
wordsCloudVisualizer.SaveImage(image, pathSettings);
}
}
45 changes: 45 additions & 0 deletions TagsCloudContainer.ConsoleUi/Handlers/ImageSettingHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using TagsCloudContainer.ConsoleUi.Handlers.Interfaces;
using TagsCloudContainer.ConsoleUi.Options;
using TagsCloudContainer.TagsCloudVisualization.Providers.Interfaces;

namespace TagsCloudContainer.ConsoleUi.Handlers;

public class ImageSettingHandler(IImageSettingsProvider imageSettingsProvider) : IHandler<ImageSettingsOptions>
{
public string Execute(ImageSettingsOptions options)
{
SetSettings(options);
return "Настройки изображения изменены";
}

private void SetSettings(ImageSettingsOptions options)
{
var currentSettings = imageSettingsProvider.GetImageSettings();
if (options.BackgroundColor != default && !options.BackgroundColor.Equals(currentSettings.BackgroundColor))
{
imageSettingsProvider.SetBackgroundColor(options.BackgroundColor);
}

if (options.WordColor != default && !options.WordColor.Equals(currentSettings.WordColor))
{
imageSettingsProvider.SetWordColor(options.WordColor);
}

if (options.FontFamily is not null && !Equals(options.FontFamily, currentSettings.FontFamily))
{
imageSettingsProvider.SetFontFamily(options.FontFamily);
}

if (options.Height != default && !options.Height.Equals(currentSettings.Size.Height))
{
var newSize = currentSettings.Size with { Height = options.Height };
imageSettingsProvider.SetSize(newSize);
}

if (options.Width != default && !options.Width.Equals(currentSettings.Size.Width))
{
var newSize = currentSettings.Size with { Width = options.Width };
imageSettingsProvider.SetSize(newSize);
}
}
}
9 changes: 9 additions & 0 deletions TagsCloudContainer.ConsoleUi/Handlers/Interfaces/IHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using TagsCloudContainer.ConsoleUi.Options.Interfaces;

namespace TagsCloudContainer.ConsoleUi.Handlers.Interfaces;

public interface IHandler<in TOptions>
where TOptions : IOptions
{
public string Execute(TOptions options);
}
24 changes: 24 additions & 0 deletions TagsCloudContainer.ConsoleUi/Handlers/WordSettingsHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using TagsCloudContainer.ConsoleUi.Handlers.Interfaces;
using TagsCloudContainer.ConsoleUi.Options;
using TagsCloudContainer.TextAnalyzer.Providers.Interfaces;

namespace TagsCloudContainer.ConsoleUi.Handlers;

public class WordSettingsHandler(IWordSettingsProvider wordSettingsProvider) : IHandler<WordSettingsOptions>
{
public string Execute(WordSettingsOptions options)
{
SetSettings(options);
return "Настройки изображения изменены";
}

private void SetSettings(WordSettingsOptions options)
{
var currentSettings = wordSettingsProvider.GetWordSettings();
if (options.ValidSpeechParts.Count != 0
&& !options.ValidSpeechParts.SequenceEqual(currentSettings.ValidSpeechParts))
{
wordSettingsProvider.SetValidSpeechParts(options.ValidSpeechParts);
}
}
}
9 changes: 9 additions & 0 deletions TagsCloudContainer.ConsoleUi/Options/ExitOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using CommandLine;
using TagsCloudContainer.ConsoleUi.Options.Interfaces;

namespace TagsCloudContainer.ConsoleUi.Options;

[Verb("exit", HelpText = "Выйти")]
public class ExitOptions : IOptions
{
}
36 changes: 36 additions & 0 deletions TagsCloudContainer.ConsoleUi/Options/FileOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System.Drawing.Imaging;
using CommandLine;
using TagsCloudContainer.ConsoleUi.Options.Interfaces;

namespace TagsCloudContainer.ConsoleUi.Options;

[Verb("files", HelpText = "Настройки путей файлов")]
public class FileSettingsOptions : IOptions
{
[Option('i', "input", Required = true, HelpText = "Путь к файлу текста для анализа.")]
public string InputPath { get; set; }

[Option('o', "output", Required = true, HelpText = "Путь к сохранению изображения.")]
public string OutputPath { get; set; }

[Option('n', "name", Required = true, HelpText = "Имя файла")]
public string OutputFileName { get; set; }

[Option('f', "format", HelpText = "Формат файла (png, jpeg, bmp, jpg.)")]
public string ImageFormatString { get; set; }

public ImageFormat ImageFormat
{
get
{
return ImageFormatString.ToLower() switch
{
"png" => ImageFormat.Png,
"jpg" => ImageFormat.Jpeg,
"jpeg" => ImageFormat.Jpeg,
"bmp" => ImageFormat.Bmp,
_ => throw new ArgumentException($"Unsupported image format: {ImageFormatString}")
};
}
}
}
9 changes: 9 additions & 0 deletions TagsCloudContainer.ConsoleUi/Options/GenerationOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using CommandLine;
using TagsCloudContainer.ConsoleUi.Options.Interfaces;

namespace TagsCloudContainer.ConsoleUi.Options;

[Verb("generate", HelpText = "Сгенерировать изображение")]
public class GenerationOptions : IOptions
{
}
Loading