SVCS - Русская документация
Загрузка...
Поиск...
Не найдено
BaseCommand.hxx
См. документацию.
1
21#pragma once
22
23#include "ICommand.hxx"
25
26#include <memory>
27#include <string>
28#include <iostream>
29
41 * включая AddCommand, CommitCommand, StatusCommand и другие.
42 */
43namespace svcs::cli {
44
45using namespace svcs::core;
46
48
53 * @details Provides a common infrastructure for interacting with the Event Bus system (ISubject)
54 * and utility methods for working with the repository. It is responsible for logging
55 * via the Event Bus.
56 *
57 * @russian
58 * @class BaseCommand
59 * @brief Базовый класс для всех CLI команд.
60 * @details Предоставляет общую инфраструктуру для взаимодействия с системой шины событий (ISubject)
61 * и служебные методы для работы с репозиторием. Отвечает за логирование
62 * через шину событий.
63 */
64class BaseCommand : public ICommand {
65protected:
75 std::shared_ptr<ISubject> eventSubject_;
76
86 static std::shared_ptr<Repository> findRepository() {
88 }
101 static std::shared_ptr<Repository> createRepository(const std::string& path = ".") {
102 return std::make_shared<Repository>(path);
103 }
104
105public:
111 * @russian
112 * @brief Конструктор.
113 * @param subject Экземпляр ISubject (шины событий), который будет использоваться для генерации событий и логов.
114 */
115 BaseCommand(std::shared_ptr<ISubject> subject) : eventSubject_(std::move(subject)) {}
116
122 * @russian
123 * @brief Виртуальный деструктор.
124 * @details Обеспечивает корректную очистку производных классов.
125 */
126 ~BaseCommand() override = default;
127
131 * @return The command name as a string.
132 *
133 * @russian
134 * @brief Получает имя команды (например, "init", "commit").
135 * @return Имя команды в виде строки.
136 */
137 virtual std::string getName() const override = 0;
138
141 * @brief Gets a brief description of the command.
142 * @return The command's description.
143 *
144 * @russian
145 * @brief Получает краткое описание команды.
146 * @return Описание команды.
147 */
148 virtual std::string getDescription() const override = 0;
149
151 * @english
152 * @brief Gets the command's usage syntax.
153 * @return A string with the syntax (e.g., "vcs init <path>").
154 *
155 * @russian
156 * @brief Получает синтаксис использования команды.
157 * @return Строка с синтаксисом (например, "vcs init <path>").
158 */
159 virtual std::string getUsage() const override = 0;
160
170 void showHelp() const override {
171 std::cout << "Usage: " << getUsage() << std::endl;
172 std::cout << "Description: " << getDescription() << std::endl;
173 }
174
184 void logDebug(const std::string& message) const {
185 if (eventSubject_) {
186 // Note: Assuming Event takes (Type, Message, Source/Command Name)
187 eventSubject_->notify({Event::DEBUG_MESSAGE, message, getName()});
188 }
189 }
190
200 void logInfo(const std::string& message) const {
201 if (eventSubject_) {
202 eventSubject_->notify({Event::GENERAL_INFO, message, getName()});
203 }
204 }
205
215 void logError(const std::string& message) const {
216 if (eventSubject_) {
217 eventSubject_->notify({Event::RUNTIME_ERROR, message, getName()});
218 }
219 }
220
230 void logSuccess(const std::string& message) const {
231 if (eventSubject_) {
232 eventSubject_->notify({Event::GENERAL_INFO, "SUCCESS: " + message, getName()});
233 }
234 }
235
245 void logWarning(const std::string& message) const {
246 if (eventSubject_) {
247 eventSubject_->notify({Event::RUNTIME_ERROR, "WARNING: " + message, getName()});
248 }
249 }
250};
251
252}
Объявление интерфейса ICommand для всех исполняемых CLI команд.
Управляет всем репозиторием системы контроля версий, действует как Subject для логирования событий и ...
BaseCommand(std::shared_ptr< ISubject > subject)
Конструктор.
Определения BaseCommand.hxx:71
static std::shared_ptr< Repository > createRepository(const std::string &path=".")
Создает новый экземпляр репозитория.
Определения BaseCommand.hxx:62
void logSuccess(const std::string &message) const
Генерирует событие успешного выполнения (GENERAL_INFO с префиксом SUCCESS).
Определения BaseCommand.hxx:141
virtual std::string getUsage() const override=0
Получает синтаксис использования команды.
virtual std::string getDescription() const override=0
Получает краткое описание команды.
virtual std::string getName() const override=0
Получает имя команды (например, "init", "commit").
void logDebug(const std::string &message) const
Генерирует событие отладочной информации (DEBUG_MESSAGE).
Определения BaseCommand.hxx:110
void logInfo(const std::string &message) const
Генерирует общее информационное событие (GENERAL_INFO).
Определения BaseCommand.hxx:121
void showHelp() const override
Отображает справку по команде (использование и описание).
Определения BaseCommand.hxx:101
void logError(const std::string &message) const
Генерирует событие ошибки выполнения (RUNTIME_ERROR).
Определения BaseCommand.hxx:131
static std::shared_ptr< Repository > findRepository()
Находит существующий репозиторий в текущей или родительских директориях.
Определения BaseCommand.hxx:53
std::shared_ptr< ISubject > eventSubject_
Экземпляр субъекта событий (шины событий).
Определения BaseCommand.hxx:47
void logWarning(const std::string &message) const
Генерирует событие предупреждения (RUNTIME_ERROR с префиксом WARNING).
Определения BaseCommand.hxx:151
~BaseCommand() override=default
Виртуальный деструктор.
Интерфейс (абстрактный базовый класс) для всех команд, выполняемых через CLI.
Определения ICommand.hxx:31
static std::shared_ptr< Repository > findRepository(const std::string &start_path=".")
Статически ищет существующий репозиторий, начиная с заданного пути и поднимаясь вверх.
Определения Repository.cxx:166
Интерфейс Subject (Издатель) (Абстрактный Базовый Класс).
Определения ISubject.hxx:35
Компоненты командной строки и реализации команд.
Основные структуры данных СКВ и модель объектов.
@ DEBUG_MESSAGE
Отладочное сообщение для целей разработки.
Определения Event.hxx:90
@ RUNTIME_ERROR
Ошибка выполнения, которая может позволить продолжить выполнение.
Определения Event.hxx:40
@ GENERAL_INFO
Общее информационное сообщение.
Определения Event.hxx:80