SVCS - English Documentation
Loading...
Searching...
No Matches
BaseCommand.hxx
Go to the documentation of this file.
1
21#pragma once
22
23#include "ICommand.hxx"
25
26#include <memory>
27#include <string>
28#include <iostream>
29
43namespace svcs::cli {
45using namespace svcs::core;
46
47class ISubject;
48
58 * @class BaseCommand
59 * @brief Базовый класс для всех CLI команд.
60 * @details Предоставляет общую инфраструктуру для взаимодействия с системой шины событий (ISubject)
61 * и служебные методы для работы с репозиторием. Отвечает за логирование
62 * через шину событий.
63 */
64class BaseCommand : public ICommand {
65protected:
68 * @brief The Event Subject (Event Bus) instance.
69 * @details Used to generate events (logs) that will be received by observers, such as the Logger.
70 *
71 * @russian
72 * @brief Экземпляр субъекта событий (шины событий).
73 * @details Используется для генерации событий (логов), которые будут получены наблюдателями, такими как Logger.
74 */
75 std::shared_ptr<ISubject> eventSubject_;
76
86 static std::shared_ptr<Repository> findRepository() {
88 }
89
101 static std::shared_ptr<Repository> createRepository(const std::string& path = ".") {
102 return std::make_shared<Repository>(path);
103 }
104
105public:
113 * @param subject Экземпляр ISubject (шины событий), который будет использоваться для генерации событий и логов.
114 */
115 BaseCommand(std::shared_ptr<ISubject> subject) : eventSubject_(std::move(subject)) {}
116
117
123 * @brief Виртуальный деструктор.
124 * @details Обеспечивает корректную очистку производных классов.
125 */
126 ~BaseCommand() override = default;
127
129
135 * @return Имя команды в виде строки.
136 */
137 virtual std::string getName() const override = 0;
138
140
146 * @return Описание команды.
147 */
148 virtual std::string getDescription() const override = 0;
149
151
157 * @return Строка с синтаксисом (например, "vcs init <path>").
158 */
159 virtual std::string getUsage() const override = 0;
160
162
168 * @details Этот метод выводит информацию непосредственно в стандартный поток вывода (stdout).
169 */
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}
Declaration of the ICommand interface for all executable CLI commands.
Manages the entire version control repository, acts as a Subject for event logging,...
BaseCommand(std::shared_ptr< ISubject > subject)
Constructor.
Definition BaseCommand.hxx:78
static std::shared_ptr< Repository > createRepository(const std::string &path=".")
Creates a new repository instance.
Definition BaseCommand.hxx:68
void logSuccess(const std::string &message) const
Generates a successful execution event (GENERAL_INFO with SUCCESS prefix).
Definition BaseCommand.hxx:157
virtual std::string getUsage() const override=0
Gets the command's usage syntax.
virtual std::string getDescription() const override=0
Gets a brief description of the command.
virtual std::string getName() const override=0
Gets the command name (e.g., "init", "commit").
void logDebug(const std::string &message) const
Generates a debug information event (DEBUG_MESSAGE).
Definition BaseCommand.hxx:123
void logInfo(const std::string &message) const
Generates a general informational event (GENERAL_INFO).
Definition BaseCommand.hxx:135
void showHelp() const override
Displays the command's help (Usage and Description).
Definition BaseCommand.hxx:113
void logError(const std::string &message) const
Generates a runtime error event (RUNTIME_ERROR).
Definition BaseCommand.hxx:146
static std::shared_ptr< Repository > findRepository()
Finds an existing repository in the current or parent directories.
Definition BaseCommand.hxx:58
std::shared_ptr< ISubject > eventSubject_
The Event Subject (Event Bus) instance.
Definition BaseCommand.hxx:51
void logWarning(const std::string &message) const
Generates a warning event (RUNTIME_ERROR with WARNING prefix).
Definition BaseCommand.hxx:168
~BaseCommand() override=default
Virtual destructor.
Interface (abstract base class) for all commands executed via the CLI.
Definition ICommand.hxx:34
static std::shared_ptr< Repository > findRepository(const std::string &start_path=".")
Statically searches for an existing repository starting from a given path and moving up.
Definition Repository.cxx:167
The Subject (Publisher) Interface (Abstract Base Class).
Definition ISubject.hxx:38
Command-line interface components and command implementations.
Core VCS data structures and object model.
@ DEBUG_MESSAGE
Debug message for development purposes.
Definition Event.hxx:106
@ RUNTIME_ERROR
Runtime error that may allow continued execution.
Definition Event.hxx:46
@ GENERAL_INFO
General informational message.
Definition Event.hxx:94