FOSSredder 0.5.0
Loading...
Searching...
No Matches
Contract.cpp
Go to the documentation of this file.
1
5
7
8#include <algorithm>
9#include <cctype>
10#include <utility>
11
12namespace core::domain {
13
14Contract::Contract() = default;
15
17 name_ = std::move(value.value());
18}
19
20void Contract::rename(std::string value) {
21 rename(EntityName(std::move(value)));
22}
23
25 type_ = std::move(value.value());
26}
27
28void Contract::setType(std::string value) {
29 setType(ContractType(std::move(value)));
30}
31
32void Contract::setAllocatableMode(std::string value) {
33 auto normalized = policies::alias::trimCopy(std::move(value));
34 std::transform(normalized.begin(), normalized.end(), normalized.begin(), [](unsigned char c) {
35 return static_cast<char>(std::tolower(c));
36 });
37 if (normalized == "all")
38 normalized = "mixed";
39 if (normalized != "mixed" && normalized != "allocatable" && normalized != "non-allocatable")
40 normalized = "mixed";
41 allocatableMode_ = std::move(normalized);
42}
43
44void Contract::setActorIds(std::vector<std::string> value) {
45 normalizeIds(value);
46 actorIds_ = std::move(value);
47}
48
49void Contract::addActorId(std::string value) {
50 value = policies::alias::trimCopy(std::move(value));
51 if (value.empty() || containsActorId(value)) {
52 return;
53 }
54 actorIds_.push_back(std::move(value));
55}
56
57void Contract::removeActorId(const std::string& value) {
58 const auto normalized = policies::alias::trimCopy(value);
59 actorIds_.erase(std::remove(actorIds_.begin(), actorIds_.end(), normalized), actorIds_.end());
60}
61
63 actorIds_.clear();
64}
65
66void Contract::setPropertyIds(std::vector<std::string> value) {
67 normalizeIds(value);
68 propertyIds_ = std::move(value);
69}
70
71void Contract::addPropertyId(std::string value) {
72 value = policies::alias::trimCopy(std::move(value));
73 if (value.empty() || containsPropertyId(value)) {
74 return;
75 }
76 propertyIds_.push_back(std::move(value));
77}
78
79void Contract::removePropertyId(const std::string& value) {
80 const auto normalized = policies::alias::trimCopy(value);
81 propertyIds_.erase(std::remove(propertyIds_.begin(), propertyIds_.end(), normalized), propertyIds_.end());
82}
83
85 propertyIds_.clear();
86}
87
88void Contract::setAliases(std::vector<Alias> value) {
90 aliases_ = std::move(value);
91}
92
95 if (value.value().empty() || policies::alias::containsAliasValue(aliases_, value.value())) {
96 return;
97 }
98 aliases_.push_back(std::move(value));
99}
100
101void Contract::removeAlias(std::string value) {
102 const auto normalized = policies::alias::canonicalAliasValue(value);
103 policies::alias::removeAliasValue(aliases_, normalized);
104}
105
106void Contract::recordAliasHit(std::string value, std::string timestamp) {
107 policies::alias::recordAliasHit(aliases_, std::move(value), std::move(timestamp));
108}
109
110bool Contract::hasName() const noexcept {
111 return !name_.empty();
112}
113
114bool Contract::hasAlias(const std::string& value) const {
115 return policies::alias::containsAliasValue(aliases_, value);
116}
117
118std::size_t Contract::aliasCount() const noexcept {
119 return aliases_.size();
120}
121
122bool Contract::hasAliases() const noexcept {
123 return !aliases_.empty();
124}
125
127 aliases_.clear();
128}
129
130bool Contract::containsActorId(const std::string& value) const {
131 const auto normalized = policies::alias::trimCopy(value);
132 return std::find(actorIds_.begin(), actorIds_.end(), normalized) != actorIds_.end();
133}
134
135bool Contract::containsPropertyId(const std::string& value) const {
136 const auto normalized = policies::alias::trimCopy(value);
137 return std::find(propertyIds_.begin(), propertyIds_.end(), normalized) != propertyIds_.end();
138}
139
140bool Contract::hasSingleActor() const noexcept {
141 return actorIds_.size() == 1u;
142}
143
144bool Contract::hasActorRelations() const noexcept {
145 return !actorIds_.empty();
146}
147
148bool Contract::hasPropertyRelations() const noexcept {
149 return !propertyIds_.empty();
150}
151
152bool Contract::hasRelations() const noexcept {
153 return !actorIds_.empty() || !propertyIds_.empty();
154}
155
156std::size_t Contract::relationCount() const noexcept {
157 return actorIds_.size() + propertyIds_.size();
158}
159
160std::size_t Contract::actorCount() const noexcept {
161 return actorIds_.size();
162}
163
164std::size_t Contract::propertyCount() const noexcept {
165 return propertyIds_.size();
166}
167
168bool Contract::hasType() const noexcept {
169 return !type_.empty();
170}
171
172bool Contract::isConfigured() const noexcept {
173 return hasName() && hasType();
174}
175
176bool Contract::isMatchingReady() const noexcept {
177 return isConfigured() && hasAliases();
178}
179
180bool Contract::isStandalone() const noexcept {
181 return !hasRelations();
182}
183
184const std::string& Contract::id() const noexcept { return id_; }
185const std::string& Contract::name() const noexcept { return name_; }
186const std::string& Contract::type() const noexcept { return type_; }
187const std::string& Contract::allocatableMode() const noexcept { return allocatableMode_; }
188const std::vector<std::string>& Contract::actorIds() const noexcept { return actorIds_; }
189const std::vector<std::string>& Contract::propertyIds() const noexcept { return propertyIds_; }
190const std::vector<Alias>& Contract::aliases() const noexcept { return aliases_; }
191const std::string& Contract::createdAt() const noexcept { return createdAt_; }
192const std::string& Contract::updatedAt() const noexcept { return updatedAt_; }
193void Contract::setId(std::string value) { id_ = std::move(value); }
194void Contract::setCreatedAt(std::string value) { createdAt_ = std::move(value); }
195void Contract::setUpdatedAt(std::string value) { updatedAt_ = std::move(value); }
196
197} // namespace core::domain
Domain model for contracts.
const std::string & value() const noexcept
Definition Alias.cpp:27
void setAliases(std::vector< Alias > value)
Definition Contract.cpp:88
std::size_t relationCount() const noexcept
Returns the total number of linked relations.
Definition Contract.cpp:156
bool hasAlias(const std::string &value) const
Checks whether an alias exists on the contract.
Definition Contract.cpp:114
const std::vector< Alias > & aliases() const noexcept
Definition Contract.cpp:190
bool hasRelations() const noexcept
Checks whether the contract has any relations.
Definition Contract.cpp:152
void setType(ContractType value)
Sets the contract type from a normalized value object.
Definition Contract.cpp:24
std::size_t propertyCount() const noexcept
Returns the number of linked properties.
Definition Contract.cpp:164
bool hasName() const noexcept
Checks whether the contract has a name.
Definition Contract.cpp:110
bool hasActorRelations() const noexcept
Checks whether any actor relations exist.
Definition Contract.cpp:144
void clearAliases()
Clears all aliases from the contract.
Definition Contract.cpp:126
void addAlias(Alias value)
Adds a normalized alias when it is not already present.
Definition Contract.cpp:93
void setId(std::string value)
Definition Contract.cpp:193
std::size_t actorCount() const noexcept
Returns the number of linked actors.
Definition Contract.cpp:160
bool containsActorId(const std::string &value) const
Checks whether an actor id exists.
Definition Contract.cpp:130
bool hasType() const noexcept
Checks whether the contract has a type.
Definition Contract.cpp:168
bool containsPropertyId(const std::string &value) const
Checks whether a property id exists.
Definition Contract.cpp:135
void removeAlias(std::string value)
Removes an alias.
Definition Contract.cpp:101
void addActorId(std::string value)
Adds an actor id when it is not already present.
Definition Contract.cpp:49
void removePropertyId(const std::string &value)
Removes a property id from the contract.
Definition Contract.cpp:79
void clearPropertyIds()
Clears all linked property ids.
Definition Contract.cpp:84
bool isConfigured() const noexcept
Checks whether the contract is fully configured.
Definition Contract.cpp:172
void clearActorIds()
Clears all linked actor ids.
Definition Contract.cpp:62
const std::string & name() const noexcept
Definition Contract.cpp:185
void setCreatedAt(std::string value)
Definition Contract.cpp:194
const std::string & allocatableMode() const noexcept
Definition Contract.cpp:187
void setActorIds(std::vector< std::string > value)
Replaces the linked actor ids with normalized values.
Definition Contract.cpp:44
void removeActorId(const std::string &value)
Removes an actor id from the contract.
Definition Contract.cpp:57
const std::string & id() const noexcept
Definition Contract.cpp:184
bool hasPropertyRelations() const noexcept
Checks whether any property relations exist.
Definition Contract.cpp:148
void setUpdatedAt(std::string value)
Definition Contract.cpp:195
void setPropertyIds(std::vector< std::string > value)
Replaces the linked property ids with normalized values.
Definition Contract.cpp:66
void addPropertyId(std::string value)
Adds a property id when it is not already present.
Definition Contract.cpp:71
bool isMatchingReady() const noexcept
Checks whether the contract is ready for matching.
Definition Contract.cpp:176
void recordAliasHit(std::string value, std::string timestamp={})
Records a usage hit for an alias.
Definition Contract.cpp:106
std::size_t aliasCount() const noexcept
Returns the number of aliases.
Definition Contract.cpp:118
const std::string & updatedAt() const noexcept
Definition Contract.cpp:192
bool hasAliases() const noexcept
Checks whether the contract has any aliases.
Definition Contract.cpp:122
const std::string & type() const noexcept
Definition Contract.cpp:186
void rename(EntityName value)
Renames the contract with normalized entity text.
Definition Contract.cpp:16
bool hasSingleActor() const noexcept
Checks whether the contract has exactly one actor.
Definition Contract.cpp:140
void setAllocatableMode(std::string value)
Definition Contract.cpp:32
const std::vector< std::string > & actorIds() const noexcept
Definition Contract.cpp:188
bool isStandalone() const noexcept
Checks whether the contract has no actor or property links.
Definition Contract.cpp:180
const std::string & createdAt() const noexcept
Definition Contract.cpp:191
const std::vector< std::string > & propertyIds() const noexcept
Definition Contract.cpp:189
const std::string & value() const noexcept
const std::string & value() const noexcept
std::string canonicalAliasValue(std::string value)
Canonicalizes an alias string for comparison.
void recordAliasHit(std::vector< Alias > &aliases, const std::string &value, const std::string &timestamp={})
Records or updates a hit for an alias value.
std::string trimCopy(std::string value)
Trims leading and trailing whitespace from text.
void normalizeAliases(std::vector< Alias > &aliases)
Normalizes and deduplicates a list of aliases.
bool containsAliasValue(const std::vector< Alias > &aliases, const std::string &value)
Checks whether an alias list already contains a value.
void removeAliasValue(std::vector< Alias > &aliases, const std::string &value)
Removes aliases with a given value.
void normalizeAlias(Alias &alias)
Normalizes a single alias in place.