Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
Units.hpp
Go to the documentation of this file.
1#ifndef IV_SRC_UNITS_MODEL_UNITS_HPP_
2#define IV_SRC_UNITS_MODEL_UNITS_HPP_
3
4#include "core/defines.hpp"
6
7#include <map>
8#include <unordered_set>
9
10namespace iv::units
11{
12
13class Units : public std::map<iv::types::unitId, std::shared_ptr<iv::units::Unit>>
14{
15public:
16 bool load(const iv::file::xml::node &nodeDataProject, std::string_view unitsFolderPath);
17 bool save(iv::file::xml::node &nodeDataProject, std::string_view unitsFolderPath,
18 const std::optional<std::shared_ptr<std::vector<std::shared_ptr<iv::file::xml::File>>>> &savingFilesOut =
19 std::nullopt) const;
20
21 void update(Units &other);
22
23 [[nodiscard]] bool hasChannels() const;
24 [[nodiscard]] bool hasRmsUnit() const;
25 [[nodiscard]] bool hasHeartbeatUnit() const;
26 [[nodiscard]] bool hasCommFailUnit() const;
27 [[nodiscard]] std::weak_ptr<Unit> rmsUnit();
28 [[nodiscard]] std::weak_ptr<Unit> heartbeatUnit() const;
29 [[nodiscard]] std::weak_ptr<Unit> commFailureUnit() const;
30
31 [[nodiscard]] std::weak_ptr<Unit> getUnit(iv::types::unitId unitId) const;
32 [[nodiscard]] std::weak_ptr<Unit> getUnitAt(uint32_t index);
33 [[nodiscard]] std::optional<uint32_t> getUnitIndex(iv::types::unitId unitId) const;
34 [[nodiscard]] std::vector<std::shared_ptr<iv::units::Unit>>
35 getUnitsFromIds(const std::set<iv::types::unitId> &unitIds) const;
36 [[nodiscard]] std::set<iv::types::unitId> unitsReadyForSetSpare() const;
37
38 std::vector<std::weak_ptr<iv::channels::AbstractChannel>> getAllChannelsOrdered();
39 std::map<iv::types::channelId, std::shared_ptr<iv::channels::AbstractChannel>> getAllChannels();
40
41 void initializeChannels(const std::shared_ptr<AbstractProgress> &progress);
42
43 // Controller
44 std::weak_ptr<iv::channels::AbstractChannel> getChannel(const iv::types::channelId &channelId);
45 std::weak_ptr<iv::channels::AbstractChannel> getChannelByShipyardTag(const std::string &channelTag);
46 [[nodiscard]] bool existsChannel(const iv::types::channelId &channelId);
47
48 bool addUnit(const std::shared_ptr<iv::units::Unit> &unit, bool createHeartbeatAndFailChannels = true);
49
50 bool deleteUnit(iv::types::unitId unitId);
51
52 bool changeUnitId(const iv::types::unitId &unitId, const iv::types::unitId &newUnitId);
53 bool swapUnitsId(const iv::types::unitId &firstUnitId, const iv::types::unitId &secondUnitId);
54
55 std::shared_ptr<std::vector<std::weak_ptr<iv::channels::AbstractChannel>>>
56 getActiveChannelsByGroupId(const iv::types::groupId &groupId, bool refreshCache = false);
57
58 void disableGroups(const std::unordered_set<iv::types::groupId> &groups);
59
60 // Controller: Processed gets
61 [[nodiscard]] std::shared_ptr<std::vector<std::weak_ptr<iv::channels::AbstractChannel>>>
63 [[nodiscard]] std::shared_ptr<std::vector<std::weak_ptr<iv::channels::AbstractChannel>>>
65 [[nodiscard]] std::shared_ptr<std::vector<std::weak_ptr<iv::channels::AbstractChannel>>>
67
68 [[nodiscard]] iv::types::unitId
69 getFirstFreeUnitId(std::optional<iv::units::eUnitType> unitType = std::nullopt) const;
70
71 [[nodiscard]] std::set<iv::types::unitId> getLOMsOnline(bool isNotInProjectUnit = false) const;
72 [[nodiscard]] std::set<iv::types::unitId> getLOMsOffline(bool isNotInProjectUnit = false) const;
73 [[nodiscard]] std::vector<iv::units::UnitIdAndName> getAllUnitsIdAndNameOnline() const;
74 [[nodiscard]] std::set<iv::types::unitId> getIdsAllOnUnits() const;
75 uint32_t getNumberOfChannels();
76
84
85 static std::shared_ptr<iv::channels::AbstractChannel>
87 static std::shared_ptr<iv::channels::AbstractChannel> generateCanAFailChannel(iv::types::unitId unitId,
88 iv::types::channelOrder channelOrder);
89 static std::shared_ptr<iv::channels::AbstractChannel> generateCanBFailChannel(iv::types::unitId unitId,
90 iv::types::channelOrder channelOrder);
91 static std::shared_ptr<iv::channels::AbstractChannel> generateCanCFailChannel(iv::types::unitId unitId,
92 iv::types::channelOrder channelOrder);
93 static std::shared_ptr<iv::channels::AbstractChannel>
95
96 static std::shared_ptr<iv::channels::AbstractChannel>
98
99 static std::shared_ptr<iv::channels::AbstractChannel>
101
102 static std::shared_ptr<iv::channels::AbstractChannel>
104
105 static std::shared_ptr<iv::channels::AbstractChannel>
107
108 static std::shared_ptr<iv::channels::AbstractChannel>
110 iv::types::channelOrder channelOrder);
111
112 static std::shared_ptr<iv::channels::AbstractChannel>
114
115private:
116 bool loadUnit(iv::types::unitId unitId, std::string_view unitsFolderPath);
118
119 [[nodiscard]] std::vector<std::shared_ptr<iv::channels::AbstractChannel>>
121
122 struct Sections
123 {
124 static constexpr std::string_view units {"Units"};
125 static constexpr std::string_view unit {"Unit"};
126 };
127
128 struct Keys
129 {
130 static constexpr std::string_view unitId {"Id"};
131 };
132
134 {
135 static constexpr iv::types::unitId defaultUnitId {0};
136 };
137};
138
139}// namespace iv::units
140
141#endif//IV_SRC_UNITS_MODEL_UNITS_HPP_
Definition xmlFile.hpp:15
Definition Units.hpp:14
std::weak_ptr< Unit > rmsUnit()
Definition Units.cpp:161
void disableGroups(const std::unordered_set< iv::types::groupId > &groups)
Definition Units.cpp:633
std::weak_ptr< Unit > getUnit(iv::types::unitId unitId) const
Definition Units.cpp:134
void initializeChannels(const std::shared_ptr< AbstractProgress > &progress)
Definition Units.cpp:278
void update(Units &other)
Definition Units.cpp:96
bool hasRmsUnit() const
Definition Units.cpp:113
bool swapUnitsId(const iv::types::unitId &firstUnitId, const iv::types::unitId &secondUnitId)
Definition Units.cpp:478
bool existsChannel(const iv::types::channelId &channelId)
Definition Units.cpp:323
std::shared_ptr< std::vector< std::weak_ptr< iv::channels::AbstractChannel > > > getAllChannelsInverted() const
Definition Units.cpp:647
bool deleteUnit(iv::types::unitId unitId)
Definition Units.cpp:353
bool save(iv::file::xml::node &nodeDataProject, std::string_view unitsFolderPath, const std::optional< std::shared_ptr< std::vector< std::shared_ptr< iv::file::xml::File > > > > &savingFilesOut=std::nullopt) const
Definition Units.cpp:57
bool load(const iv::file::xml::node &nodeDataProject, std::string_view unitsFolderPath)
Definition Units.cpp:19
std::set< iv::types::unitId > getLOMsOnline(bool isNotInProjectUnit=false) const
Definition Units.cpp:739
static std::shared_ptr< iv::channels::AbstractChannel > generateStationHeartbeatChannel(const iv::types::stationId &stationId, iv::types::channelOrder channelOrder)
Definition Units.cpp:1454
std::shared_ptr< std::vector< std::weak_ptr< iv::channels::AbstractChannel > > > getAllChannelsOffScan() const
Definition Units.cpp:670
void createUnitHeartbeatAndFailureChannels(iv::types::unitId newUnitId) const
Definition Units.cpp:1040
bool loadUnit(iv::types::unitId unitId, std::string_view unitsFolderPath)
Definition Units.cpp:1021
std::shared_ptr< std::vector< std::weak_ptr< iv::channels::AbstractChannel > > > getActiveChannelsByGroupId(const iv::types::groupId &groupId, bool refreshCache=false)
Get all channels that belong to a group.
Definition Units.cpp:579
std::map< iv::types::channelId, std::shared_ptr< iv::channels::AbstractChannel > > getAllChannels()
Definition Units.cpp:265
std::weak_ptr< iv::channels::AbstractChannel > getChannelByShipyardTag(const std::string &channelTag)
Definition Units.cpp:307
void rearrangeCommHeartbeatAndFailureChannel() const
Definition Units.cpp:815
iv::types::unitId getFirstFreeUnitId(std::optional< iv::units::eUnitType > unitType=std::nullopt) const
Definition Units.cpp:706
std::set< iv::types::unitId > getLOMsOffline(bool isNotInProjectUnit=false) const
Definition Units.cpp:754
static std::shared_ptr< iv::channels::AbstractChannel > generateCanAFailChannel(iv::types::unitId unitId, iv::types::channelOrder channelOrder)
Definition Units.cpp:1283
std::weak_ptr< Unit > commFailureUnit() const
Definition Units.cpp:201
static std::shared_ptr< iv::channels::AbstractChannel > generateCanCFailChannel(iv::types::unitId unitId, iv::types::channelOrder channelOrder)
Definition Units.cpp:1367
std::vector< std::shared_ptr< iv::channels::AbstractChannel > > extractUnitHeartbeatAndFailureChannels(iv::types::unitId unitId) const
Definition Units.cpp:1130
void rearrangeStationHeartbeatAndFailureChannel() const
Definition Units.cpp:1507
void rearrangeWatchcallNodeHeartbeatAndFailureChannel() const
Definition Units.cpp:1645
std::vector< std::shared_ptr< iv::units::Unit > > getUnitsFromIds(const std::set< iv::types::unitId > &unitIds) const
Definition Units.cpp:221
static std::shared_ptr< iv::channels::AbstractChannel > generateCanBFailChannel(iv::types::unitId unitId, iv::types::channelOrder channelOrder)
Definition Units.cpp:1325
static std::shared_ptr< iv::channels::AbstractChannel > generateNetworkHeartbeatChannel(iv::types::networkId networkId, iv::types::channelOrder channelOrder)
Definition Units.cpp:1230
uint32_t getNumberOfChannels()
Definition Units.cpp:803
bool hasChannels() const
Definition Units.cpp:129
void createCommHeartbeatAndFailureChannel(const iv::types::networkId &commId) const
Creates the Network's Heartbeat and Failure channels in their corresponding units.
Definition Units.cpp:929
bool addUnit(const std::shared_ptr< iv::units::Unit > &unit, bool createHeartbeatAndFailChannels=true)
Definition Units.cpp:336
std::weak_ptr< Unit > heartbeatUnit() const
Definition Units.cpp:181
static std::shared_ptr< iv::channels::AbstractChannel > generateLomHeartBeatChannel(iv::types::unitId unitId, iv::types::channelOrder channelOrder)
Definition Units.cpp:1174
std::weak_ptr< iv::channels::AbstractChannel > getChannel(const iv::types::channelId &channelId)
Definition Units.cpp:291
static std::shared_ptr< iv::channels::AbstractChannel > generateWatchcallNodeHeartbeatChannel(const iv::types::repeaterId &repeaterId, iv::types::channelOrder channelOrder)
Definition Units.cpp:1594
static std::shared_ptr< iv::channels::AbstractChannel > generateNetworkFailChannel(iv::types::networkId networkId, iv::types::channelOrder channelOrder)
Definition Units.cpp:1256
std::optional< uint32_t > getUnitIndex(iv::types::unitId unitId) const
Definition Units.cpp:149
static std::shared_ptr< iv::channels::AbstractChannel > generateWatchcallNodeFailChannel(const iv::types::repeaterId &repeaterId, iv::types::channelOrder channelOrder)
Definition Units.cpp:1619
bool hasHeartbeatUnit() const
Definition Units.cpp:118
std::set< iv::types::unitId > unitsReadyForSetSpare() const
Definition Units.cpp:236
std::shared_ptr< std::vector< std::weak_ptr< iv::channels::AbstractChannel > > > getAllChannelsInhibited() const
Definition Units.cpp:688
std::vector< iv::units::UnitIdAndName > getAllUnitsIdAndNameOnline() const
Definition Units.cpp:769
bool hasCommFailUnit() const
Definition Units.cpp:123
void createStationHeartbeatAndFailureChannel(const iv::types::stationId &stationId) const
Definition Units.cpp:1408
std::weak_ptr< Unit > getUnitAt(uint32_t index)
Definition Units.cpp:144
void createWatchcallNodeHearbeatAndFailureChannel(const iv::types::repeaterId &repeaterId) const
Definition Units.cpp:1549
bool changeUnitId(const iv::types::unitId &unitId, const iv::types::unitId &newUnitId)
Definition Units.cpp:394
std::set< iv::types::unitId > getIdsAllOnUnits() const
Definition Units.cpp:789
void createAllSystemChannels()
Definition Units.cpp:986
std::vector< std::weak_ptr< iv::channels::AbstractChannel > > getAllChannelsOrdered()
Definition Units.cpp:250
static std::shared_ptr< iv::channels::AbstractChannel > generateLomOfflineChannel(iv::types::unitId unitId, iv::types::channelOrder channelOrder)
Definition Units.cpp:1200
static std::shared_ptr< iv::channels::AbstractChannel > generateStationFailChannel(const iv::types::stationId &stationId, iv::types::channelOrder channelOrder)
Definition Units.cpp:1481
uint16_t unitId
Definition types.hpp:77
uint16_t channelOrder
Definition types.hpp:68
std::string stationId
Definition types.hpp:75
std::string networkId
Definition types.hpp:43
std::string channelId
Definition types.hpp:66
std::string groupId
Definition types.hpp:70
std::string repeaterId
Definition types.hpp:79
Definition AbstractChannel.hpp:16
Definition Units.hpp:134
static constexpr iv::types::unitId defaultUnitId
Definition Units.hpp:135
Definition Units.hpp:129
static constexpr std::string_view unitId
Definition Units.hpp:130
Definition Units.hpp:123
static constexpr std::string_view unit
Definition Units.hpp:125
static constexpr std::string_view units
Definition Units.hpp:124