1#ifndef IV_SRC_UNITS_MODEL_UNITS_HPP_
2#define IV_SRC_UNITS_MODEL_UNITS_HPP_
8#include <unordered_set>
13class Units :
public std::map<iv::types::unitId, std::shared_ptr<iv::units::Unit>>
18 const std::optional<std::shared_ptr<std::vector<std::shared_ptr<iv::file::xml::File>>>> &savingFilesOut =
27 [[nodiscard]] std::weak_ptr<Unit>
rmsUnit();
32 [[nodiscard]] std::weak_ptr<Unit>
getUnitAt(uint32_t index);
34 [[nodiscard]] std::vector<std::shared_ptr<iv::units::Unit>>
39 std::map<iv::types::channelId, std::shared_ptr<iv::channels::AbstractChannel>>
getAllChannels();
48 bool addUnit(
const std::shared_ptr<iv::units::Unit> &unit,
bool createHeartbeatAndFailChannels =
true);
55 std::shared_ptr<std::vector<std::weak_ptr<iv::channels::AbstractChannel>>>
58 void disableGroups(
const std::unordered_set<iv::types::groupId> &groups);
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>>>
71 [[nodiscard]] std::set<iv::types::unitId>
getLOMsOnline(
bool isNotInProjectUnit =
false)
const;
72 [[nodiscard]] std::set<iv::types::unitId>
getLOMsOffline(
bool isNotInProjectUnit =
false)
const;
85 static std::shared_ptr<iv::channels::AbstractChannel>
93 static std::shared_ptr<iv::channels::AbstractChannel>
96 static std::shared_ptr<iv::channels::AbstractChannel>
99 static std::shared_ptr<iv::channels::AbstractChannel>
102 static std::shared_ptr<iv::channels::AbstractChannel>
105 static std::shared_ptr<iv::channels::AbstractChannel>
108 static std::shared_ptr<iv::channels::AbstractChannel>
112 static std::shared_ptr<iv::channels::AbstractChannel>
119 [[nodiscard]] std::vector<std::shared_ptr<iv::channels::AbstractChannel>>
124 static constexpr std::string_view
units {
"Units"};
125 static constexpr std::string_view
unit {
"Unit"};
130 static constexpr std::string_view
unitId {
"Id"};
Definition xmlFile.hpp:15
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
static constexpr iv::types::unitId defaultUnitId
Definition Units.hpp:135
static constexpr std::string_view unitId
Definition Units.hpp:130
static constexpr std::string_view unit
Definition Units.hpp:125
static constexpr std::string_view units
Definition Units.hpp:124