|
- #pragma once
-
- #include "domain/control_logic_model.h"
-
- #include <string>
-
- class ProjectService;
-
- enum class LogicEditorError
- {
- None,
- LogicNotFound,
- RungNotFound,
- StageNotFound,
- NodeNotFound,
- InvalidNode,
- InvalidOperation,
- UnsupportedNodeChange
- };
-
- struct LogicEditorResult
- {
- bool succeeded = false;
- LogicEditorError error = LogicEditorError::None;
- std::string message;
- std::string id;
- };
-
- class LogicEditorService
- {
- public:
- explicit LogicEditorService(ProjectService &project_service);
-
- const ControlLogic *findLogic(const std::string &logic_id) const;
- const LadderRung *findRung(
- const std::string &logic_id, const std::string &rung_id) const;
- const LogicNode *findNode(
- const std::string &logic_id, const std::string &node_id) const;
- std::string firstLogicId() const;
- std::string firstRungId(const std::string &logic_id) const;
- std::string rungIdForNode(
- const std::string &logic_id, const std::string &node_id) const;
- std::string stageIdForNode(
- const std::string &logic_id, const std::string &node_id) const;
-
- LogicEditorResult ensureDefaultLogic();
- LogicEditorResult addRung(const std::string &logic_id);
- LogicEditorResult removeRung(
- const std::string &logic_id, const std::string &rung_id);
- LogicEditorResult appendCondition(
- const std::string &logic_id,
- const std::string &rung_id,
- const LogicNodeConfig &config);
- LogicEditorResult addParallelCondition(
- const std::string &logic_id,
- const std::string &rung_id,
- const std::string &stage_id,
- const LogicNodeConfig &config);
- LogicEditorResult setOutput(
- const std::string &logic_id,
- const std::string &rung_id,
- const LogicNodeConfig &config);
- LogicEditorResult updateNodeConfig(
- const std::string &logic_id,
- const std::string &node_id,
- const LogicNodeConfig &config);
- LogicEditorResult removeNode(
- const std::string &logic_id, const std::string &node_id);
-
- private:
- static bool isConditionConfig(const LogicNodeConfig &config);
- static bool isOutputConfig(const LogicNodeConfig &config);
- static std::string nodePrefix(const LogicNodeConfig &config);
- static std::string makeUniqueNodeId(
- const ControlLogic &logic, const std::string &prefix);
- static std::string makeUniqueRungId(const ControlLogic &logic);
- static std::string makeUniqueStageId(const LadderRung &rung);
- static LogicEditorResult failure(
- LogicEditorError error, const std::string &message);
-
- ProjectService &project_service_;
- };
|