geonetwork-ui 2.2.0-dev.5b8d393f → 2.2.0-dev.723017a4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +27 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +49 -58
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +5 -4
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +14 -0
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +20 -17
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +52 -23
  8. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +52 -32
  9. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +10 -3
  10. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -5
  11. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +33 -8
  12. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  13. package/esm2022/libs/common/domain/src/lib/model/search/aggregation.model.mjs +1 -1
  14. package/esm2022/libs/common/domain/src/lib/model/search/field.model.mjs +2 -0
  15. package/esm2022/libs/common/domain/src/lib/model/search/filter.model.mjs +1 -1
  16. package/esm2022/libs/common/domain/src/lib/model/search/index.mjs +2 -1
  17. package/esm2022/libs/common/domain/src/lib/model/search/search.model.mjs +1 -1
  18. package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
  19. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  20. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +9 -1
  21. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +2 -2
  22. package/esm2022/libs/feature/search/src/index.mjs +3 -1
  23. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -6
  24. package/esm2022/libs/feature/search/src/lib/filter-geometry.token.mjs +4 -0
  25. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +7 -3
  26. package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -0
  27. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +2 -2
  28. package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +3 -4
  29. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +2 -2
  30. package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
  31. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +41 -26
  32. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +11 -9
  33. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
  34. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +35 -22
  35. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -4
  36. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +9 -6
  37. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +4 -4
  38. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +3 -3
  39. package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
  40. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +6 -6
  41. package/esm2022/libs/util/i18n/src/index.mjs +1 -2
  42. package/esm2022/translations/de.json +7 -5
  43. package/esm2022/translations/en.json +10 -8
  44. package/esm2022/translations/es.json +7 -5
  45. package/esm2022/translations/fr.json +9 -7
  46. package/esm2022/translations/it.json +9 -7
  47. package/esm2022/translations/nl.json +7 -5
  48. package/esm2022/translations/pt.json +7 -5
  49. package/fesm2022/geonetwork-ui.mjs +448 -396
  50. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  51. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +2 -0
  52. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  53. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +0 -1
  54. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  55. package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
  56. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +3 -5
  57. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  58. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts +3 -0
  59. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +1 -0
  60. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
  61. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +6 -6
  62. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  63. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +4 -3
  64. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  65. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  66. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
  67. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  68. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
  69. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  70. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +18 -12
  71. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  72. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts +1 -1
  73. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts.map +1 -1
  74. package/libs/common/domain/src/lib/model/search/field.model.d.ts +2 -0
  75. package/libs/common/domain/src/lib/model/search/field.model.d.ts.map +1 -0
  76. package/libs/common/domain/src/lib/model/search/filter.model.d.ts +1 -1
  77. package/libs/common/domain/src/lib/model/search/filter.model.d.ts.map +1 -1
  78. package/libs/common/domain/src/lib/model/search/index.d.ts +1 -0
  79. package/libs/common/domain/src/lib/model/search/index.d.ts.map +1 -1
  80. package/libs/common/domain/src/lib/model/search/search.model.d.ts +1 -1
  81. package/libs/common/domain/src/lib/model/search/search.model.d.ts.map +1 -1
  82. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
  83. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
  84. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
  85. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  86. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -0
  87. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
  88. package/libs/feature/search/src/index.d.ts +2 -0
  89. package/libs/feature/search/src/index.d.ts.map +1 -1
  90. package/libs/feature/search/src/lib/feature-search.module.d.ts +0 -4
  91. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  92. package/libs/feature/search/src/lib/filter-geometry.token.d.ts +4 -0
  93. package/libs/feature/search/src/lib/filter-geometry.token.d.ts.map +1 -0
  94. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +1 -1
  95. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  96. package/libs/feature/search/src/lib/record-url.token.d.ts +3 -0
  97. package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -0
  98. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +0 -1
  99. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  100. package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -1
  101. package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
  102. package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
  103. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  104. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  105. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +1 -1
  106. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -1
  107. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +10 -6
  108. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  109. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  110. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +3 -1
  111. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  112. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +13 -13
  113. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  114. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  115. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +1 -1
  116. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
  117. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +40 -40
  118. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +1 -1
  119. package/libs/util/i18n/src/index.d.ts +0 -1
  120. package/libs/util/i18n/src/index.d.ts.map +1 -1
  121. package/package.json +2 -2
  122. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +61 -8
  123. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +55 -9
  124. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +225 -24
  125. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +29 -0
  126. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +80 -73
  127. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +4 -3
  128. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +3 -5
  129. package/src/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.ts +16 -0
  130. package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +24 -21
  131. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +115 -62
  132. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +169 -95
  133. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
  134. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
  135. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
  136. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +21 -14
  137. package/src/libs/common/domain/src/lib/model/search/aggregation.model.ts +1 -1
  138. package/src/libs/common/domain/src/lib/model/search/field.model.ts +1 -0
  139. package/src/libs/common/domain/src/lib/model/search/filter.model.ts +1 -1
  140. package/src/libs/common/domain/src/lib/model/search/index.ts +1 -0
  141. package/src/libs/common/domain/src/lib/model/search/search.model.ts +1 -1
  142. package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
  143. package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
  144. package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
  145. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +25 -5
  146. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +10 -0
  147. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +1 -1
  148. package/src/libs/feature/search/src/index.ts +2 -0
  149. package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -10
  150. package/src/libs/feature/search/src/lib/filter-geometry.token.ts +7 -0
  151. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +9 -3
  152. package/src/libs/feature/search/src/lib/record-url.token.ts +4 -0
  153. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +1 -1
  154. package/src/libs/feature/search/src/lib/results-table/results-table.component.html +104 -127
  155. package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +0 -1
  156. package/src/libs/feature/search/src/lib/state/effects.ts +1 -1
  157. package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
  158. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
  159. package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
  160. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +5 -0
  161. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +39 -0
  162. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +58 -0
  163. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +2 -2
  164. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +1 -0
  165. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +50 -23
  166. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +37 -15
  167. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +2 -3
  168. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +5 -5
  169. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +12 -4
  170. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +1 -1
  171. package/src/libs/ui/inputs/src/lib/button/button.component.ts +1 -0
  172. package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +1 -0
  173. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +2 -2
  174. package/src/libs/util/i18n/src/index.ts +0 -1
  175. package/translations/de.json +7 -5
  176. package/translations/en.json +10 -8
  177. package/translations/es.json +7 -5
  178. package/translations/fr.json +9 -7
  179. package/translations/it.json +9 -7
  180. package/translations/nl.json +7 -5
  181. package/translations/pt.json +7 -5
  182. package/translations/sk.json +7 -5
  183. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.loader.mjs +0 -24
  184. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.module.mjs +0 -109
  185. package/esm2022/libs/util/i18n/src/lib/testing/translations.model.mjs +0 -6
  186. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts +0 -17
  187. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts.map +0 -1
  188. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts +0 -131
  189. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts.map +0 -1
  190. package/libs/util/i18n/src/lib/testing/translations.model.d.ts +0 -21
  191. package/libs/util/i18n/src/lib/testing/translations.model.d.ts.map +0 -1
  192. package/src/libs/util/i18n/src/lib/testing/test.translate.loader.ts +0 -26
  193. package/src/libs/util/i18n/src/lib/testing/test.translate.module.ts +0 -235
  194. package/src/libs/util/i18n/src/lib/testing/translations.model.ts +0 -28
@@ -33,25 +33,185 @@ export const GEOCAT_CH_DATASET_RECORD: DatasetRecord = {
33
33
  title: 'Alpenkonvention',
34
34
  abstract: `Perimeter der Alpenkonvention in der Schweiz. Die Alpenkonvention ist ein völkerrechtlicher Vertrag zwischen den acht Alpenländern Deutschland, Frankreich, Italien, Liechtenstein, Monaco, Österreich, Schweiz, Slowenien sowie der Europäischen Union. Das Ziel des Übereinkommens ist der Schutz der Alpen durch eine sektorübergreifende, ganzheitliche und nachhaltige Politik.`,
35
35
  overviews: [],
36
- themes: [
37
- 'Aufbewahrungs- und Archivierungsplanung AAP - Bund',
38
- 'Geobasisdaten',
39
- 'e-geo.ch',
40
- 'opendata.swiss',
41
- 'Nachhaltige Entwicklung',
42
- 'Raumplanung',
43
- 'Bergschutz',
44
- 'Bodenschutz',
45
- 'Umweltpolitik',
46
- 'Umweltpolitik',
47
- 'Verkehr',
48
- 'Verkehr',
49
- 'Verkehr',
50
- 'Umweltüberwachung',
51
- 'Verwaltungseinheiten',
52
- 'BGDI Bundesgeodaten-Infrastruktur',
36
+ topics: ['planningCadastre', 'planningCadastre_Planning'],
37
+ keywords: [
38
+ {
39
+ thesaurus: {
40
+ name: 'geocat.ch',
41
+ id: 'geonetwork.thesaurus.local.theme.geocat.ch',
42
+ url: new URL(
43
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
44
+ ),
45
+ },
46
+ type: 'theme',
47
+ label: 'Aufbewahrungs- und Archivierungsplanung AAP - Bund',
48
+ },
49
+ {
50
+ thesaurus: {
51
+ name: 'geocat.ch',
52
+ id: 'geonetwork.thesaurus.local.theme.geocat.ch',
53
+ url: new URL(
54
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
55
+ ),
56
+ },
57
+ type: 'theme',
58
+ label: 'Geobasisdaten',
59
+ },
60
+ {
61
+ thesaurus: {
62
+ name: 'geocat.ch',
63
+ id: 'geonetwork.thesaurus.local.theme.geocat.ch',
64
+ url: new URL(
65
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
66
+ ),
67
+ },
68
+ type: 'theme',
69
+ label: 'e-geo.ch',
70
+ },
71
+ {
72
+ label: 'opendata.swiss',
73
+ thesaurus: {
74
+ id: 'geonetwork.thesaurus.local.theme.geocat.ch',
75
+ name: 'geocat.ch',
76
+ url: new URL(
77
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
78
+ ),
79
+ },
80
+ type: 'theme',
81
+ },
82
+ {
83
+ label: 'Nachhaltige Entwicklung',
84
+ thesaurus: {
85
+ id: 'geonetwork.thesaurus.external.theme.gemet',
86
+ name: 'GEMET',
87
+ url: new URL(
88
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
89
+ ),
90
+ },
91
+ type: 'theme',
92
+ },
93
+ {
94
+ label: 'Raumplanung',
95
+ thesaurus: {
96
+ id: 'geonetwork.thesaurus.external.theme.gemet',
97
+ name: 'GEMET',
98
+ url: new URL(
99
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
100
+ ),
101
+ },
102
+ type: 'theme',
103
+ },
104
+ {
105
+ label: 'Bergschutz',
106
+ thesaurus: {
107
+ id: 'geonetwork.thesaurus.external.theme.gemet',
108
+ name: 'GEMET',
109
+ url: new URL(
110
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
111
+ ),
112
+ },
113
+ type: 'theme',
114
+ },
115
+ {
116
+ label: 'Bodenschutz',
117
+ thesaurus: {
118
+ id: 'geonetwork.thesaurus.external.theme.gemet',
119
+ name: 'GEMET',
120
+ url: new URL(
121
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
122
+ ),
123
+ },
124
+ type: 'theme',
125
+ },
126
+ {
127
+ label: 'Umweltpolitik',
128
+ thesaurus: {
129
+ id: 'geonetwork.thesaurus.external.theme.gemet',
130
+ name: 'GEMET',
131
+ url: new URL(
132
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
133
+ ),
134
+ },
135
+ type: 'theme',
136
+ },
137
+ {
138
+ label: 'Umweltpolitik',
139
+ thesaurus: {
140
+ id: 'geonetwork.thesaurus.external.theme.gemet',
141
+ name: 'GEMET',
142
+ url: new URL(
143
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
144
+ ),
145
+ },
146
+ type: 'theme',
147
+ },
148
+ {
149
+ label: 'Verkehr',
150
+ thesaurus: {
151
+ id: 'geonetwork.thesaurus.external.theme.gemet',
152
+ name: 'GEMET',
153
+ url: new URL(
154
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
155
+ ),
156
+ },
157
+ type: 'theme',
158
+ },
159
+ {
160
+ label: 'Verkehr',
161
+ thesaurus: {
162
+ id: 'geonetwork.thesaurus.external.theme.gemet',
163
+ name: 'GEMET',
164
+ url: new URL(
165
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
166
+ ),
167
+ },
168
+ type: 'theme',
169
+ },
170
+ {
171
+ label: 'Verkehr',
172
+ thesaurus: {
173
+ id: 'geonetwork.thesaurus.external.theme.gemet',
174
+ name: 'GEMET',
175
+ url: new URL(
176
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
177
+ ),
178
+ },
179
+ type: 'theme',
180
+ },
181
+ {
182
+ label: 'Umweltüberwachung',
183
+ thesaurus: {
184
+ id: 'geonetwork.thesaurus.external.theme.inspire-theme',
185
+ name: 'GEMET - INSPIRE themes, version 1.0',
186
+ url: new URL(
187
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
188
+ ),
189
+ },
190
+ type: 'theme',
191
+ },
192
+ {
193
+ label: 'Verwaltungseinheiten',
194
+ thesaurus: {
195
+ id: 'geonetwork.thesaurus.external.theme.inspire-theme',
196
+ name: 'GEMET - INSPIRE themes, version 1.0',
197
+ url: new URL(
198
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
199
+ ),
200
+ },
201
+ type: 'theme',
202
+ },
203
+ {
204
+ label: 'BGDI Bundesgeodaten-Infrastruktur',
205
+ thesaurus: {
206
+ id: 'geonetwork.thesaurus.local.theme.geocat.ch',
207
+ name: 'geocat.ch',
208
+ url: new URL(
209
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
210
+ ),
211
+ },
212
+ type: 'theme',
213
+ },
53
214
  ],
54
- keywords: [],
55
215
  spatialRepresentation: 'vector',
56
216
  distributions: [
57
217
  {
@@ -138,13 +298,30 @@ export const GEOCAT_CH_DATASET_RECORD: DatasetRecord = {
138
298
  ],
139
299
  lineage:
140
300
  'Digitalisiert nach den administrativen Einheiten der Schweiz, die im Anhang des Übereinkommens erscheinen.',
141
- accessConstraints: [],
142
- useLimitations: [],
143
301
  licenses: [
144
302
  {
145
303
  text: "Licence passée entre l'Office fédéral de l'environnement (OFEV), et le canton de Fribourg, représenté par la Coordination SIT (SITel)",
146
304
  },
147
305
  ],
306
+ legalConstraints: [
307
+ {
308
+ text: `1. Nutzungsbestimmung
309
+
310
+ Diese Geodaten unterliegen folgenden Nutzungsbeschränkungen:
311
+
312
+ - Sie dürfen nicht vervielfältigt, verbreitet und/oder weiter zugänglich gemacht werden.
313
+
314
+ - Sie dürfen nicht kommerziell genutzt werden.
315
+
316
+ - Sie dürfen ausschliesslich zu vorgegebenen Zwecken genutzt werden.
317
+
318
+ - Sie dürfen ausschliesslich zu dem unter 4. beschriebenen Zweck genutzt werden.
319
+
320
+ Die Quelle ist zu bezeichnen: „Quelle: Stadt Zürich“.`,
321
+ },
322
+ ],
323
+ securityConstraints: [],
324
+ otherConstraints: [],
148
325
  // data quality?
149
326
  spatialExtents: [],
150
327
  temporalExtents: [],
@@ -193,8 +370,31 @@ export const GEOCAT_CH_SERVICE_RECORD: ServiceRecord = {
193
370
  description: 'Vorschaubild',
194
371
  },
195
372
  ],
196
- themes: [],
197
- keywords: ['Verkehr', 'opendata.swiss'],
373
+ topics: [],
374
+ keywords: [
375
+ {
376
+ label: 'Verkehr',
377
+ thesaurus: {
378
+ id: 'geonetwork.thesaurus.external.theme.gemet',
379
+ name: 'GEMET',
380
+ url: new URL(
381
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
382
+ ),
383
+ },
384
+ type: 'other',
385
+ },
386
+ {
387
+ label: 'opendata.swiss',
388
+ thesaurus: {
389
+ id: 'geonetwork.thesaurus.local.theme.geocat.ch',
390
+ name: 'geocat.ch',
391
+ url: new URL(
392
+ 'https://geocat-dev.dev.bgdi.ch/geonetwork/srv/api/registries/vocabularies/local.theme.geocat.ch'
393
+ ),
394
+ },
395
+ type: 'other',
396
+ },
397
+ ],
198
398
  onlineResources: [
199
399
  {
200
400
  type: 'link',
@@ -216,7 +416,8 @@ export const GEOCAT_CH_SERVICE_RECORD: ServiceRecord = {
216
416
  'https://services.geo.sg.ch/wss/service/SG00170_WMS/guest?request=GetCapabilities&service=WMS',
217
417
  },
218
418
  ],
219
- accessConstraints: [],
220
- useLimitations: [],
221
419
  licenses: [],
420
+ legalConstraints: [],
421
+ securityConstraints: [],
422
+ otherConstraints: [],
222
423
  }
@@ -3,6 +3,8 @@ import {
3
3
  Organization,
4
4
  } from '../../../../../../libs/common/domain/src/lib/model/record'
5
5
  import { getRoleFromRoleCode } from '../iso19139/codelists/role.mapper'
6
+ import { Thesaurus } from './types'
7
+ import { getKeywordTypeFromKeywordTypeCode } from '../iso19139/codelists/keyword.mapper'
6
8
 
7
9
  export type SourceWithUnknownProps = { [key: string]: unknown }
8
10
 
@@ -98,3 +100,30 @@ export const mapContact = (
98
100
  ...(phone && { phone }),
99
101
  }
100
102
  }
103
+
104
+ export const mapKeywords = (thesauri: Thesaurus[], language: string) => {
105
+ const keywords = []
106
+ for (const thesaurusId in thesauri) {
107
+ const rawThesaurus = thesauri[thesaurusId]
108
+ let thesaurus = null
109
+ if (rawThesaurus.id) {
110
+ const thesaurusSource: SourceWithUnknownProps = { ...rawThesaurus }
111
+ const url = getAsUrl(selectField(thesaurusSource, 'link'))
112
+ const name = selectField(thesaurusSource, 'title')
113
+ thesaurus = {
114
+ id: rawThesaurus.id,
115
+ ...(name && { name }),
116
+ ...(url && { url }),
117
+ }
118
+ }
119
+ for (const keyword of rawThesaurus.keywords) {
120
+ keywords.push({
121
+ label: selectTranslatedValue<string>(keyword, language),
122
+ type: getKeywordTypeFromKeywordTypeCode(rawThesaurus.theme),
123
+ ...(thesaurus && { thesaurus }),
124
+ })
125
+ }
126
+ }
127
+
128
+ return keywords
129
+ }
@@ -4,6 +4,7 @@ import {
4
4
  getAsUrl,
5
5
  getFirstValue,
6
6
  mapContact,
7
+ mapKeywords,
7
8
  selectFallback,
8
9
  selectFallbackFields,
9
10
  selectField,
@@ -17,8 +18,8 @@ import { Injectable } from '@angular/core'
17
18
  import { getStatusFromStatusCode } from '../iso19139/codelists/status.mapper'
18
19
  import { getUpdateFrequencyFromFrequencyCode } from '../iso19139/codelists/update-frequency.mapper'
19
20
  import {
20
- AccessConstraintType,
21
21
  CatalogRecord,
22
+ Constraint,
22
23
  DatasetDistribution,
23
24
  DatasetDistributionType,
24
25
  DatasetDownloadDistribution,
@@ -28,6 +29,7 @@ import {
28
29
  } from '../../../../../../libs/common/domain/src/lib/model/record'
29
30
  import { matchProtocol } from '../common/distribution.mapper'
30
31
  import { LangService } from '../../../../../../libs/util/i18n/src'
32
+ import { Thesaurus } from './types'
31
33
 
32
34
  type ESResponseSource = SourceWithUnknownProps
33
35
 
@@ -92,8 +94,8 @@ export class Gn4FieldMapper {
92
94
  },
93
95
  cl_topic: (output, source) => ({
94
96
  ...output,
95
- themes: [
96
- ...(output.themes || []),
97
+ topics: [
98
+ ...(output.topics || []),
97
99
  ...getAsArray(
98
100
  selectField<SourceWithUnknownProps[]>(source, 'cl_topic')
99
101
  ).map((topic) => selectTranslatedValue<string>(topic, this.lang3)),
@@ -171,51 +173,56 @@ export class Gn4FieldMapper {
171
173
  output
172
174
  )
173
175
  },
174
- tag: (output, source) => ({
176
+ allKeywords: (output, source) => ({
175
177
  ...output,
176
- keywords: getAsArray(
177
- selectField<SourceWithUnknownProps[]>(source, 'tag')
178
- ).map((tag) => selectTranslatedValue<string>(tag, this.lang3)),
178
+ keywords: mapKeywords(
179
+ selectField<Thesaurus[]>(source, 'allKeywords'),
180
+ this.lang3
181
+ ),
179
182
  }),
180
183
  inspireTheme: (output, source) => ({
181
184
  ...output,
182
- themes: [
183
- ...(output.themes || []),
185
+ topics: [
186
+ ...(output.topics || []),
184
187
  ...getAsArray(selectField(source, 'inspireTheme_syn')),
185
188
  ],
186
189
  }),
187
190
  MD_ConstraintsUseLimitationObject: (output, source) =>
188
- this.constraintField('MD_ConstraintsUseLimitationObject', output, source),
191
+ this.constraintField(
192
+ 'other',
193
+ output,
194
+ getAsArray(selectField(source, 'MD_ConstraintsUseLimitationObject'))
195
+ ),
189
196
  MD_LegalConstraintsUseLimitationObject: (output, source) =>
190
197
  this.constraintField(
191
- 'MD_LegalConstraintsUseLimitationObject',
198
+ 'legal',
192
199
  output,
193
- source
200
+ getAsArray(
201
+ selectField(source, 'MD_LegalConstraintsUseLimitationObject')
202
+ )
194
203
  ),
195
204
  MD_LegalConstraintsOtherConstraintsObject: (output, source) =>
196
205
  this.constraintField(
197
- 'MD_LegalConstraintsOtherConstraintsObject',
206
+ 'legal',
198
207
  output,
199
- source
208
+ getAsArray(
209
+ selectField(source, 'MD_LegalConstraintsOtherConstraintsObject')
210
+ )
200
211
  ),
201
212
  MD_SecurityConstraintsUseLimitationObject: (output, source) =>
202
213
  this.constraintField(
203
- 'MD_SecurityConstraintsUseLimitationObject',
214
+ 'security',
204
215
  output,
205
- source
216
+ getAsArray(
217
+ selectField(source, 'MD_SecurityConstraintsUseLimitationObject')
218
+ )
219
+ ),
220
+ licenseObject: (output, source) =>
221
+ this.constraintField(
222
+ 'license',
223
+ output,
224
+ getAsArray(selectField(source, 'licenseObject'))
206
225
  ),
207
- licenseObject: (output, source) => ({
208
- ...output,
209
- licenses: getAsArray(
210
- selectField<SourceWithUnknownProps[]>(source, 'licenseObject')
211
- ).map((license) => {
212
- const link = getAsUrl(selectField(license, 'link'))
213
- return {
214
- text: selectTranslatedValue<string>(license, this.lang3),
215
- ...(link ? { link } : {}),
216
- }
217
- }),
218
- }),
219
226
  lineageObject: (output, source) => ({
220
227
  ...output,
221
228
  lineage: selectTranslatedField(source, 'lineageObject', this.lang3),
@@ -305,53 +312,53 @@ export class Gn4FieldMapper {
305
312
 
306
313
  private genericField = (output) => output
307
314
 
308
- private constraintField = (fieldName: string, output, source) => ({
309
- ...output,
310
- ...(fieldName.endsWith('UseLimitationObject')
311
- ? {
312
- legalConstraints:
313
- fieldName === 'MD_LegalConstraintsUseLimitationObject'
314
- ? [
315
- ...(output.legalConstraints || []),
316
- ...selectField<SourceWithUnknownProps[]>(
317
- source,
318
- fieldName
319
- ).map((source: SourceWithUnknownProps) =>
320
- selectTranslatedValue(source, this.lang3)
321
- ),
322
- ]
323
- : output.legalConstraints || [],
324
- useLimitations: [
325
- ...(output.useLimitations || []),
326
- ...selectField<SourceWithUnknownProps[]>(source, fieldName).map(
327
- (source: SourceWithUnknownProps) =>
328
- selectTranslatedValue(source, this.lang3)
329
- ),
330
- ],
315
+ private constraintField = (
316
+ type: 'license' | 'legal' | 'security' | 'other',
317
+ output: Partial<CatalogRecord>,
318
+ constraintArray: SourceWithUnknownProps[]
319
+ ) => {
320
+ let outputField: string
321
+ switch (type) {
322
+ case 'license':
323
+ outputField = 'licenses'
324
+ break
325
+ case 'legal':
326
+ outputField = 'legalConstraints'
327
+ break
328
+ case 'security':
329
+ outputField = 'securityConstraints'
330
+ break
331
+ case 'other':
332
+ outputField = 'otherConstraints'
333
+ break
334
+ }
335
+ const outputArray: Constraint[] =
336
+ outputField in output ? output[outputField] : []
337
+ outputArray.push(
338
+ ...constraintArray.map((item) => {
339
+ const text = selectTranslatedValue(item, this.lang3) as string
340
+ const url = getAsUrl(selectField(item, 'link'))
341
+ return {
342
+ text,
343
+ ...(url ? { url } : {}),
331
344
  }
332
- : {
333
- accessConstraints: [
334
- ...(output.accessConstraints || []),
335
- ...selectField<SourceWithUnknownProps[]>(source, fieldName).map(
336
- (field) => ({
337
- text: selectTranslatedValue(field, this.lang3),
338
- type: this.getConstraintsType(fieldName),
339
- })
340
- ),
341
- ],
342
- }),
343
- })
344
-
345
- private getConstraintsType(indexField: string): AccessConstraintType {
346
- switch (indexField) {
347
- case 'MD_LegalConstraintsUseLimitationObject':
348
- return 'legal'
349
- case 'MD_SecurityConstraintsUseLimitationObject':
350
- return 'security'
351
- case 'MD_ConstraintsUseLimitationObject':
352
- default:
353
- return 'other'
345
+ })
346
+ )
347
+ const result = {
348
+ ...output,
349
+ [outputField]: outputArray,
350
+ }
351
+ // avoid legal constraints being duplicates of licenses
352
+ if (
353
+ 'legalConstraints' in result &&
354
+ (type === 'legal' || type === 'license')
355
+ ) {
356
+ result.legalConstraints = result.legalConstraints.filter(
357
+ (constraint) =>
358
+ !output.licenses?.some((license) => license.text === constraint.text)
359
+ )
354
360
  }
361
+ return result
355
362
  }
356
363
 
357
364
  getMappingFn(fieldName: string) {
@@ -26,12 +26,13 @@ export class Gn4MetadataMapper extends MetadataBaseMapper<Gn4Record> {
26
26
  recordUpdated: null,
27
27
  ownerOrganization: null,
28
28
  licenses: [],
29
+ legalConstraints: [],
30
+ securityConstraints: [],
31
+ otherConstraints: [],
29
32
  contacts: [],
30
33
  contactsForResource: [],
31
- accessConstraints: [],
32
34
  keywords: [],
33
- themes: [],
34
- useLimitations: [],
35
+ topics: [],
35
36
  spatialExtents: [],
36
37
  temporalExtents: [],
37
38
  overviews: [],
@@ -56,15 +56,13 @@ interface SpecificationConformance {
56
56
  pass: BooleanString
57
57
  }
58
58
 
59
- type Keyword = MultilingualField
60
- type Keywords = Keyword[]
61
59
  type ThesaurusName = string
62
- interface Thesaurus {
60
+ export interface Thesaurus {
63
61
  id?: string
64
62
  title?: string
65
63
  theme?: string
66
64
  link?: string
67
- keywords: Keywords
65
+ keywords: MultilingualField[]
68
66
  }
69
67
 
70
68
  export interface Link {
@@ -175,7 +173,7 @@ export type MetadataObject = Partial<{
175
173
  specificationConformance: MaybeArray<SpecificationConformance>
176
174
  standardNameObject: MultilingualField
177
175
  standardVersionObject: MultilingualField
178
- tag: Keywords
176
+ tag: MultilingualField[]
179
177
  tagNumber: string
180
178
  userSavedCount: string
181
179
  userinfo: string
@@ -0,0 +1,16 @@
1
+ import { KeywordType } from '../../../../../../../libs/common/domain/src/lib/model/record'
2
+
3
+ export function getKeywordTypeFromKeywordTypeCode(
4
+ typeCode: string
5
+ ): KeywordType {
6
+ if (!typeCode) return 'other'
7
+ switch (typeCode) {
8
+ case 'theme':
9
+ case 'place':
10
+ case 'temporal':
11
+ case 'other':
12
+ return typeCode
13
+ default:
14
+ return 'other'
15
+ }
16
+ }