综合平台编程器项目的远程存储
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

83 wiersze
2.6 KiB

  1. #pragma once
  2. #include "domain/control_logic_model.h"
  3. #include <string>
  4. class ProjectService;
  5. enum class LogicEditorError
  6. {
  7. None,
  8. LogicNotFound,
  9. RungNotFound,
  10. StageNotFound,
  11. NodeNotFound,
  12. InvalidNode,
  13. InvalidOperation,
  14. UnsupportedNodeChange
  15. };
  16. struct LogicEditorResult
  17. {
  18. bool succeeded = false;
  19. LogicEditorError error = LogicEditorError::None;
  20. std::string message;
  21. std::string id;
  22. };
  23. class LogicEditorService
  24. {
  25. public:
  26. explicit LogicEditorService(ProjectService &project_service);
  27. const ControlLogic *findLogic(const std::string &logic_id) const;
  28. const LadderRung *findRung(
  29. const std::string &logic_id, const std::string &rung_id) const;
  30. const LogicNode *findNode(
  31. const std::string &logic_id, const std::string &node_id) const;
  32. std::string firstLogicId() const;
  33. std::string firstRungId(const std::string &logic_id) const;
  34. std::string rungIdForNode(
  35. const std::string &logic_id, const std::string &node_id) const;
  36. std::string stageIdForNode(
  37. const std::string &logic_id, const std::string &node_id) const;
  38. LogicEditorResult ensureDefaultLogic();
  39. LogicEditorResult addRung(const std::string &logic_id);
  40. LogicEditorResult removeRung(
  41. const std::string &logic_id, const std::string &rung_id);
  42. LogicEditorResult appendCondition(
  43. const std::string &logic_id,
  44. const std::string &rung_id,
  45. const LogicNodeConfig &config);
  46. LogicEditorResult addParallelCondition(
  47. const std::string &logic_id,
  48. const std::string &rung_id,
  49. const std::string &stage_id,
  50. const LogicNodeConfig &config);
  51. LogicEditorResult setOutput(
  52. const std::string &logic_id,
  53. const std::string &rung_id,
  54. const LogicNodeConfig &config);
  55. LogicEditorResult updateNodeConfig(
  56. const std::string &logic_id,
  57. const std::string &node_id,
  58. const LogicNodeConfig &config);
  59. LogicEditorResult removeNode(
  60. const std::string &logic_id, const std::string &node_id);
  61. private:
  62. static bool isConditionConfig(const LogicNodeConfig &config);
  63. static bool isOutputConfig(const LogicNodeConfig &config);
  64. static std::string nodePrefix(const LogicNodeConfig &config);
  65. static std::string makeUniqueNodeId(
  66. const ControlLogic &logic, const std::string &prefix);
  67. static std::string makeUniqueRungId(const ControlLogic &logic);
  68. static std::string makeUniqueStageId(const LadderRung &rung);
  69. static LogicEditorResult failure(
  70. LogicEditorError error, const std::string &message);
  71. ProjectService &project_service_;
  72. };