|
2 | 2 |
|
3 | 3 | require_once "functions.php"; |
4 | 4 |
|
| 5 | +$errorMsg = array(); |
| 6 | +$implementationReferenceFile = "src/assets/YAML/default/implementations.yaml"; |
5 | 7 | $metadata = readYaml("src/assets/YAML/meta.yaml"); |
| 8 | + |
6 | 9 | $teams = $metadata["teams"]; |
7 | 10 | if (sizeof($teams) == 0) { |
8 | 11 | echo "Warning: No teams defined"; |
|
12 | 15 | $teamsImplemented[$team] = false; |
13 | 16 | } |
14 | 17 |
|
15 | | - |
16 | 18 | $files = glob("src/assets/YAML/default/*/*.yaml"); |
17 | 19 | $dimensions = array(); |
18 | 20 | foreach ($files as $filename) { |
19 | | - //echo "Found $filename\n"; |
| 21 | + echo "Reading $filename\n"; |
20 | 22 | if (preg_match("/_meta.yaml/", $filename)) continue; |
21 | 23 | $dimension = getDimensions($filename); |
22 | 24 | if (array_key_exists("_yaml_references", $dimension)) { |
|
29 | 31 | $dimensionsCustom = array(); |
30 | 32 | $dimensionsAggregated = array(); |
31 | 33 | foreach ($files as $filename) { |
32 | | - //echo "Found $filename"; |
| 34 | + echo "Reading custom $filename\n"; |
33 | 35 | $dimensionCustom = getDimensions($filename); |
34 | 36 | $dimensionsCustom = array_merge_recursive_ex($dimensionsCustom, $dimensionCustom); |
35 | 37 | } |
|
48 | 50 | } else { |
49 | 51 | $dimensionsAggregated = $dimensions; |
50 | 52 | } |
51 | | -$errorMsg = array(); |
| 53 | + |
52 | 54 | foreach ($dimensionsAggregated as $dimension => $subdimensions) { |
53 | 55 | ksort($subdimensions); |
54 | 56 | foreach ($subdimensions as $subdimension => $elements) { |
|
150 | 152 | } |
151 | 153 | } |
152 | 154 | } |
153 | | -if (count($errorMsg) > 0) { |
154 | | - echo "\n\nFound " . count($errorMsg) . " errors:\n"; |
155 | | - foreach ($errorMsg as $e) { |
156 | | - echo "ERROR: $e\n"; |
157 | | - } |
158 | | - exit("Please fix the errors"); |
159 | | -} |
160 | 155 |
|
161 | 156 |
|
162 | 157 | foreach ($dimensionsAggregated as $dimension => $subdimensions) { |
|
166 | 161 | } |
167 | 162 | } |
168 | 163 |
|
| 164 | + |
| 165 | +$implementationReferences = readYaml($implementationReferenceFile)['implementations']; |
| 166 | +assert_unique_refs($implementationReferences, $errorMsg); |
| 167 | + |
169 | 168 | resolve_json_ref($dimensionsAggregated); |
170 | 169 |
|
| 170 | + |
| 171 | +if (count($errorMsg) > 0) { |
| 172 | + echo "\n\nFound " . count($errorMsg) . " errors:\n"; |
| 173 | + foreach ($errorMsg as $e) { |
| 174 | + echo "ERROR: $e\n"; |
| 175 | + } |
| 176 | + exit("Please fix the errors"); |
| 177 | +} |
| 178 | + |
| 179 | + |
| 180 | + |
| 181 | + |
171 | 182 | $dimensionsString = yaml_emit($dimensionsAggregated); |
172 | 183 | $targetGeneratedFile = getcwd() . "/src/assets/YAML/generated/generated.yaml"; |
173 | 184 | echo "\nStoring to $targetGeneratedFile\n"; |
174 | 185 | file_put_contents($targetGeneratedFile, $dimensionsString); |
175 | 186 |
|
176 | 187 |
|
| 188 | + |
| 189 | +function assert_unique_refs($implementationReferences, &$errorMsg) { |
| 190 | + assert_unique_ref_by_key($implementationReferences, 'uuid', $errorMsg); |
| 191 | + assert_unique_ref_by_key($implementationReferences, 'name', $errorMsg); |
| 192 | + assert_unique_ref_by_key($implementationReferences, 'url', $errorMsg); |
| 193 | +} |
| 194 | + |
| 195 | +function assert_unique_ref_by_key($implementationReferences, $keyToAssert, &$errorMsg) { |
| 196 | + $all_values = array(); |
| 197 | + |
| 198 | + foreach ($implementationReferences as $key => $reference) { |
| 199 | + if (array_key_exists($keyToAssert, $reference)) { |
| 200 | + $value = $reference[$keyToAssert]; |
| 201 | + // echo "$key: $value\n"; |
| 202 | + if (array_key_exists($value, $all_values)) { |
| 203 | + array_push($errorMsg, "Duplicate '$keyToAssert' in reference: " . $all_values[$value] . " and $key: '$value'"); |
| 204 | + } else { |
| 205 | + $all_values[$value] = $key; |
| 206 | + } |
| 207 | + } |
| 208 | + } |
| 209 | +} |
| 210 | + |
| 211 | + |
177 | 212 | /** |
178 | 213 | * |
179 | 214 | * @param unknown $dimensions |
|
0 commit comments