geonetwork-ui 2.3.0-dev.376e0e90 → 2.3.0-dev.f736344f
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.
- package/esm2022/libs/api/metadata-converter/src/index.mjs +5 -5
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +3 -3
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +3 -3
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +52 -0
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +14 -0
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/role.mapper.mjs +48 -0
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/status.mapper.mjs +18 -0
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/update-frequency.mapper.mjs +64 -0
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +130 -0
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +62 -58
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +58 -75
- package/esm2022/libs/api/metadata-converter/src/lib/metadata-base.mapper.mjs +14 -0
- package/esm2022/libs/api/metadata-converter/src/lib/xml-utils.mjs +14 -76
- package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +4 -4
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +8 -8
- package/fesm2022/geonetwork-ui.mjs +245 -822
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/index.d.ts +4 -4
- package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/{gn4.converter.d.ts → gn4.metadata.mapper.d.ts} +5 -5
- package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -0
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +1 -0
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/role.mapper.d.ts.map +1 -0
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/status.mapper.d.ts.map +1 -0
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/update-frequency.mapper.d.ts.map +1 -0
- package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts +4 -0
- package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -0
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +6 -34
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +3 -39
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/{base.converter.d.ts → metadata-base.mapper.d.ts} +3 -3
- package/libs/api/metadata-converter/src/lib/metadata-base.mapper.d.ts.map +1 -0
- package/libs/api/metadata-converter/src/lib/xml-utils.d.ts +1 -14
- package/libs/api/metadata-converter/src/lib/xml-utils.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +2 -2
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +4 -6
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/libs/api/metadata-converter/src/index.ts +4 -4
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +5 -32
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +4 -11
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +7 -33
- package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +2 -2
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +2 -2
- package/src/libs/api/metadata-converter/src/lib/gn4/{gn4.converter.ts → gn4.metadata.mapper.ts} +2 -2
- package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +196 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +82 -121
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +95 -175
- package/src/libs/api/metadata-converter/src/lib/{base.converter.ts → metadata-base.mapper.ts} +2 -2
- package/src/libs/api/metadata-converter/src/lib/xml-utils.ts +16 -84
- package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +2 -2
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +4 -9
- package/src/libs/feature/editor/src/lib/services/editor.service.ts +16 -27
- package/esm2022/libs/api/metadata-converter/src/lib/base.converter.mjs +0 -14
- package/esm2022/libs/api/metadata-converter/src/lib/find-converter.mjs +0 -15
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.converter.mjs +0 -52
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/index.mjs +0 -4
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/index.mjs +0 -2
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.mjs +0 -123
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +0 -116
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +0 -138
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/index.mjs +0 -2
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +0 -242
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.mjs +0 -18
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.mjs +0 -14
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/role.mapper.mjs +0 -48
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.mjs +0 -18
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.mjs +0 -64
- package/libs/api/metadata-converter/src/lib/base.converter.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/find-converter.d.ts +0 -3
- package/libs/api/metadata-converter/src/lib/find-converter.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.converter.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/gn4/index.d.ts +0 -4
- package/libs/api/metadata-converter/src/lib/gn4/index.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/index.d.ts +0 -2
- package/libs/api/metadata-converter/src/lib/iso19115-3/index.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts +0 -9
- package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +0 -20
- package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts +0 -21
- package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/iso19139/index.d.ts +0 -2
- package/libs/api/metadata-converter/src/lib/iso19139/index.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts +0 -11
- package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.d.ts +0 -8
- package/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/iso19139/utils/role.mapper.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.d.ts.map +0 -1
- package/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.d.ts.map +0 -1
- package/src/libs/api/metadata-converter/src/lib/find-converter.ts +0 -16
- package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +0 -580
- package/src/libs/api/metadata-converter/src/lib/gn4/index.ts +0 -3
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/index.ts +0 -1
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +0 -176
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +0 -329
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +0 -513
- package/src/libs/api/metadata-converter/src/lib/iso19139/index.ts +0 -1
- package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +0 -327
- package/src/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.ts +0 -20
- /package/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/keyword.mapper.d.ts +0 -0
- /package/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/role.mapper.d.ts +0 -0
- /package/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/status.mapper.d.ts +0 -0
- /package/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/update-frequency.mapper.d.ts +0 -0
- /package/src/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/keyword.mapper.ts +0 -0
- /package/src/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/role.mapper.ts +0 -0
- /package/src/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/status.mapper.ts +0 -0
- /package/src/libs/api/metadata-converter/src/lib/iso19139/{utils → codelists}/update-frequency.mapper.ts +0 -0
|
@@ -36,7 +36,6 @@ import {
|
|
|
36
36
|
} from '../xml-utils'
|
|
37
37
|
import {
|
|
38
38
|
ChainableFunction,
|
|
39
|
-
combine,
|
|
40
39
|
fallback,
|
|
41
40
|
filterArray,
|
|
42
41
|
getAtIndex,
|
|
@@ -48,9 +47,8 @@ import {
|
|
|
48
47
|
} from '../function-utils'
|
|
49
48
|
import format from 'date-fns/format'
|
|
50
49
|
import { readKind } from './read-parts'
|
|
51
|
-
import { namePartsToFull } from './utils/individual-name'
|
|
52
50
|
|
|
53
|
-
|
|
51
|
+
function writeCharacterString(
|
|
54
52
|
text: string
|
|
55
53
|
): ChainableFunction<XmlElement, XmlElement> {
|
|
56
54
|
return tap(
|
|
@@ -58,9 +56,7 @@ export function writeCharacterString(
|
|
|
58
56
|
)
|
|
59
57
|
}
|
|
60
58
|
|
|
61
|
-
|
|
62
|
-
url: URL
|
|
63
|
-
): ChainableFunction<XmlElement, XmlElement> {
|
|
59
|
+
function writeLinkage(url: URL): ChainableFunction<XmlElement, XmlElement> {
|
|
64
60
|
return tap(
|
|
65
61
|
pipe(
|
|
66
62
|
findNestedChildOrCreate('gmd:linkage', 'gmd:URL'),
|
|
@@ -69,7 +65,7 @@ export function writeLinkage(
|
|
|
69
65
|
)
|
|
70
66
|
}
|
|
71
67
|
|
|
72
|
-
|
|
68
|
+
function writeAnchor(
|
|
73
69
|
url: URL,
|
|
74
70
|
text?: string
|
|
75
71
|
): ChainableFunction<XmlElement, XmlElement> {
|
|
@@ -82,9 +78,7 @@ export function writeAnchor(
|
|
|
82
78
|
)
|
|
83
79
|
}
|
|
84
80
|
|
|
85
|
-
|
|
86
|
-
date: Date
|
|
87
|
-
): ChainableFunction<XmlElement, XmlElement> {
|
|
81
|
+
function writeDateTime(date: Date): ChainableFunction<XmlElement, XmlElement> {
|
|
88
82
|
return tap(
|
|
89
83
|
pipe(
|
|
90
84
|
findChildOrCreate('gco:DateTime'),
|
|
@@ -93,9 +87,7 @@ export function writeDateTime(
|
|
|
93
87
|
)
|
|
94
88
|
}
|
|
95
89
|
|
|
96
|
-
|
|
97
|
-
date: Date
|
|
98
|
-
): ChainableFunction<XmlElement, XmlElement> {
|
|
90
|
+
function writeDate(date: Date): ChainableFunction<XmlElement, XmlElement> {
|
|
99
91
|
return tap(
|
|
100
92
|
pipe(
|
|
101
93
|
findChildOrCreate('gco:Date'),
|
|
@@ -104,7 +96,7 @@ export function writeDate(
|
|
|
104
96
|
)
|
|
105
97
|
}
|
|
106
98
|
|
|
107
|
-
|
|
99
|
+
function getProgressCode(status: RecordStatus): string {
|
|
108
100
|
switch (status) {
|
|
109
101
|
case 'completed':
|
|
110
102
|
return 'completed'
|
|
@@ -123,7 +115,7 @@ export function getProgressCode(status: RecordStatus): string {
|
|
|
123
115
|
}
|
|
124
116
|
}
|
|
125
117
|
|
|
126
|
-
|
|
118
|
+
function getRoleCode(role: Role): string {
|
|
127
119
|
switch (role) {
|
|
128
120
|
case 'author':
|
|
129
121
|
return 'author'
|
|
@@ -172,7 +164,7 @@ export function getRoleCode(role: Role): string {
|
|
|
172
164
|
}
|
|
173
165
|
}
|
|
174
166
|
|
|
175
|
-
|
|
167
|
+
function getDistributionProtocol(
|
|
176
168
|
distribution: DatasetServiceDistribution
|
|
177
169
|
): string {
|
|
178
170
|
switch (distribution.accessServiceProtocol.toLowerCase()) {
|
|
@@ -187,7 +179,7 @@ export function getDistributionProtocol(
|
|
|
187
179
|
}
|
|
188
180
|
}
|
|
189
181
|
|
|
190
|
-
|
|
182
|
+
function getMaintenanceFrequencyCode(
|
|
191
183
|
updateFrequency: UpdateFrequencyCode
|
|
192
184
|
): string | null {
|
|
193
185
|
switch (updateFrequency) {
|
|
@@ -206,7 +198,7 @@ export function getMaintenanceFrequencyCode(
|
|
|
206
198
|
}
|
|
207
199
|
}
|
|
208
200
|
|
|
209
|
-
|
|
201
|
+
function getISODuration(updateFrequency: UpdateFrequencyCustom): string {
|
|
210
202
|
const duration = {
|
|
211
203
|
years: 0,
|
|
212
204
|
months: 0,
|
|
@@ -235,61 +227,19 @@ export function getISODuration(updateFrequency: UpdateFrequencyCustom): string {
|
|
|
235
227
|
return `P${duration.years}Y${duration.months}M${duration.days}D${hours}`
|
|
236
228
|
}
|
|
237
229
|
|
|
238
|
-
|
|
239
|
-
const
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
createChild('gmd:CI_Address'),
|
|
244
|
-
appendChildren(
|
|
245
|
-
pipe(
|
|
246
|
-
createElement('gmd:electronicMailAddress'),
|
|
247
|
-
writeCharacterString(contact.email)
|
|
248
|
-
)
|
|
249
|
-
),
|
|
250
|
-
contact.address
|
|
251
|
-
? appendChildren(
|
|
252
|
-
pipe(
|
|
253
|
-
createElement('gmd:deliveryPoint'),
|
|
254
|
-
writeCharacterString(contact.address)
|
|
255
|
-
)
|
|
256
|
-
)
|
|
257
|
-
: noop
|
|
258
|
-
)
|
|
259
|
-
|
|
260
|
-
const createContact = pipe(
|
|
261
|
-
createElement('gmd:contactInfo'),
|
|
262
|
-
createChild('gmd:CI_Contact'),
|
|
263
|
-
contact.phone
|
|
264
|
-
? appendChildren(
|
|
265
|
-
pipe(
|
|
266
|
-
createElement('gmd:phone'),
|
|
267
|
-
createChild('gmd:CI_Telephone'),
|
|
268
|
-
createChild('gmd:voice'),
|
|
269
|
-
writeCharacterString(contact.phone)
|
|
270
|
-
)
|
|
271
|
-
)
|
|
272
|
-
: noop,
|
|
273
|
-
appendChildren(createAddress),
|
|
274
|
-
'website' in contact.organization
|
|
275
|
-
? appendChildren(
|
|
276
|
-
pipe(
|
|
277
|
-
createElement('gmd:onlineResource'),
|
|
278
|
-
createChild('gmd:CI_OnlineResource'),
|
|
279
|
-
writeLinkage(contact.organization.website)
|
|
280
|
-
)
|
|
281
|
-
)
|
|
282
|
-
: noop
|
|
283
|
-
)
|
|
284
|
-
|
|
230
|
+
function appendResponsibleParty(contact: Individual) {
|
|
231
|
+
const name =
|
|
232
|
+
contact.lastName && contact.firstName
|
|
233
|
+
? `${contact.firstName} ${contact.lastName}`
|
|
234
|
+
: contact.lastName || contact.firstName || null
|
|
285
235
|
return appendChildren(
|
|
286
236
|
pipe(
|
|
287
237
|
createElement('gmd:CI_ResponsibleParty'),
|
|
288
|
-
|
|
238
|
+
name
|
|
289
239
|
? appendChildren(
|
|
290
240
|
pipe(
|
|
291
241
|
createElement('gmd:individualName'),
|
|
292
|
-
writeCharacterString(
|
|
242
|
+
writeCharacterString(name)
|
|
293
243
|
)
|
|
294
244
|
)
|
|
295
245
|
: noop,
|
|
@@ -306,7 +256,27 @@ export function appendResponsibleParty(contact: Individual) {
|
|
|
306
256
|
createElement('gmd:organisationName'),
|
|
307
257
|
writeCharacterString(contact.organization.name)
|
|
308
258
|
),
|
|
309
|
-
|
|
259
|
+
pipe(
|
|
260
|
+
createElement('gmd:contactInfo'),
|
|
261
|
+
createChild('gmd:CI_Contact'),
|
|
262
|
+
appendChildren(
|
|
263
|
+
pipe(
|
|
264
|
+
createElement('gmd:address'),
|
|
265
|
+
createChild('gmd:CI_Address'),
|
|
266
|
+
createChild('gmd:electronicMailAddress'),
|
|
267
|
+
writeCharacterString(contact.email)
|
|
268
|
+
)
|
|
269
|
+
),
|
|
270
|
+
'website' in contact.organization
|
|
271
|
+
? appendChildren(
|
|
272
|
+
pipe(
|
|
273
|
+
createElement('gmd:onlineResource'),
|
|
274
|
+
createChild('gmd:CI_OnlineResource'),
|
|
275
|
+
writeLinkage(contact.organization.website)
|
|
276
|
+
)
|
|
277
|
+
)
|
|
278
|
+
: noop
|
|
279
|
+
),
|
|
310
280
|
pipe(
|
|
311
281
|
createElement('gmd:role'),
|
|
312
282
|
createChild('gmd:CI_RoleCode'),
|
|
@@ -321,7 +291,7 @@ export function appendResponsibleParty(contact: Individual) {
|
|
|
321
291
|
)
|
|
322
292
|
}
|
|
323
293
|
|
|
324
|
-
|
|
294
|
+
function updateCitationDate(
|
|
325
295
|
date: Date,
|
|
326
296
|
type: 'revision' | 'creation' | 'publication'
|
|
327
297
|
) {
|
|
@@ -341,8 +311,8 @@ export function updateCitationDate(
|
|
|
341
311
|
)
|
|
342
312
|
}
|
|
343
313
|
|
|
344
|
-
|
|
345
|
-
date
|
|
314
|
+
function appendCitationDate(
|
|
315
|
+
date,
|
|
346
316
|
type: 'revision' | 'creation' | 'publication'
|
|
347
317
|
) {
|
|
348
318
|
return appendChildren(
|
|
@@ -365,12 +335,12 @@ export function appendCitationDate(
|
|
|
365
335
|
)
|
|
366
336
|
}
|
|
367
337
|
|
|
368
|
-
|
|
338
|
+
function removeKeywords() {
|
|
369
339
|
return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')))
|
|
370
340
|
}
|
|
371
341
|
|
|
372
342
|
// returns a <gmd:thesaurusName> element
|
|
373
|
-
|
|
343
|
+
function createThesaurus(thesaurus: KeywordThesaurus) {
|
|
374
344
|
return pipe(
|
|
375
345
|
createElement('gmd:thesaurusName'),
|
|
376
346
|
createChild('gmd:CI_Citation'),
|
|
@@ -395,15 +365,14 @@ export function createThesaurus(thesaurus: KeywordThesaurus) {
|
|
|
395
365
|
)
|
|
396
366
|
}
|
|
397
367
|
|
|
398
|
-
|
|
399
|
-
// keywords are grouped by thesaurus if they have one, otherwise by type
|
|
368
|
+
function appendKeywords(keywords: Keyword[]) {
|
|
400
369
|
const keywordsByThesaurus: Keyword[][] = keywords.reduce((acc, keyword) => {
|
|
401
370
|
const thesaurusId = keyword.thesaurus?.id
|
|
402
371
|
const type = keyword.type
|
|
403
372
|
let existingGroup = acc.find((group) =>
|
|
404
|
-
|
|
405
|
-
? group[0].thesaurus
|
|
406
|
-
: group[0].type === type
|
|
373
|
+
group[0].thesaurus
|
|
374
|
+
? group[0].thesaurus.id === thesaurusId
|
|
375
|
+
: group[0].type === type
|
|
407
376
|
)
|
|
408
377
|
if (!existingGroup) {
|
|
409
378
|
existingGroup = []
|
|
@@ -444,7 +413,7 @@ export function appendKeywords(keywords: Keyword[]) {
|
|
|
444
413
|
)
|
|
445
414
|
}
|
|
446
415
|
|
|
447
|
-
|
|
416
|
+
function createConstraint(
|
|
448
417
|
constraint: Constraint,
|
|
449
418
|
type: 'legal' | 'security' | 'other'
|
|
450
419
|
) {
|
|
@@ -502,7 +471,7 @@ export function createConstraint(
|
|
|
502
471
|
)
|
|
503
472
|
}
|
|
504
473
|
|
|
505
|
-
|
|
474
|
+
function removeOtherConstraints() {
|
|
506
475
|
return removeChildren(
|
|
507
476
|
pipe(
|
|
508
477
|
findChildrenElement('gmd:resourceConstraints'),
|
|
@@ -516,7 +485,7 @@ export function removeOtherConstraints() {
|
|
|
516
485
|
)
|
|
517
486
|
}
|
|
518
487
|
|
|
519
|
-
|
|
488
|
+
function removeSecurityConstraints() {
|
|
520
489
|
return removeChildren(
|
|
521
490
|
pipe(
|
|
522
491
|
findChildrenElement('gmd:resourceConstraints'),
|
|
@@ -530,7 +499,7 @@ export function removeSecurityConstraints() {
|
|
|
530
499
|
)
|
|
531
500
|
}
|
|
532
501
|
|
|
533
|
-
|
|
502
|
+
function removeLegalConstraints() {
|
|
534
503
|
return removeChildren(
|
|
535
504
|
pipe(
|
|
536
505
|
findChildrenElement('gmd:resourceConstraints'),
|
|
@@ -550,7 +519,7 @@ export function removeLegalConstraints() {
|
|
|
550
519
|
)
|
|
551
520
|
}
|
|
552
521
|
|
|
553
|
-
|
|
522
|
+
function removeLicenses() {
|
|
554
523
|
return removeChildren(
|
|
555
524
|
pipe(
|
|
556
525
|
findChildrenElement('gmd:resourceConstraints'),
|
|
@@ -570,7 +539,7 @@ export function removeLicenses() {
|
|
|
570
539
|
)
|
|
571
540
|
}
|
|
572
541
|
|
|
573
|
-
|
|
542
|
+
function createLicense(license: Constraint) {
|
|
574
543
|
return pipe(
|
|
575
544
|
createElement('gmd:resourceConstraints'),
|
|
576
545
|
createChild('gmd:MD_LegalConstraints'),
|
|
@@ -603,52 +572,44 @@ export function createLicense(license: Constraint) {
|
|
|
603
572
|
)
|
|
604
573
|
}
|
|
605
574
|
|
|
606
|
-
|
|
575
|
+
function removeDistributions() {
|
|
607
576
|
return pipe(removeChildrenByName('gmd:distributionInfo'))
|
|
608
577
|
}
|
|
609
578
|
|
|
610
|
-
function
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
579
|
+
function createDistribution(distribution: DatasetDistribution) {
|
|
580
|
+
const appendDistributionFormat =
|
|
581
|
+
'mimeType' in distribution
|
|
582
|
+
? appendChildren(
|
|
583
|
+
pipe(
|
|
584
|
+
createElement('gmd:distributionFormat'),
|
|
585
|
+
createChild('gmd:MD_Format'),
|
|
586
|
+
appendChildren(
|
|
587
|
+
pipe(
|
|
588
|
+
createElement('gmd:name'),
|
|
589
|
+
writeCharacterString(distribution.mimeType)
|
|
590
|
+
),
|
|
591
|
+
pipe(
|
|
592
|
+
createElement('gmd:version'),
|
|
593
|
+
writeCharacterString('1.0') // hardcoding this as it most likely won't be used but is mandatory
|
|
594
|
+
)
|
|
595
|
+
)
|
|
596
|
+
)
|
|
620
597
|
)
|
|
621
|
-
|
|
622
|
-
)
|
|
623
|
-
)
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
export function createDistributionInfo() {
|
|
627
|
-
return pipe(
|
|
628
|
-
createElement('gmd:distributionInfo'),
|
|
629
|
-
createChild('gmd:MD_Distribution')
|
|
630
|
-
)
|
|
631
|
-
}
|
|
598
|
+
: noop
|
|
632
599
|
|
|
633
|
-
|
|
634
|
-
export function appendDistribution(
|
|
635
|
-
distribution: DatasetDistribution,
|
|
636
|
-
appendFormatFn: (
|
|
637
|
-
mimeType: string
|
|
638
|
-
) => ChainableFunction<XmlElement, XmlElement>
|
|
639
|
-
) {
|
|
640
|
-
let name: string
|
|
641
|
-
let functionCode: string
|
|
642
|
-
let protocol: string
|
|
600
|
+
let linkageUrl, name, functionCode, protocol
|
|
643
601
|
if (distribution.type === 'service') {
|
|
602
|
+
linkageUrl = distribution.url.toString()
|
|
644
603
|
name = distribution.identifierInService // this is for GeoNetwork to know the layer name
|
|
645
604
|
functionCode = 'download'
|
|
646
605
|
protocol = getDistributionProtocol(distribution)
|
|
647
606
|
} else if (distribution.type === 'download') {
|
|
607
|
+
linkageUrl = distribution.url.toString()
|
|
648
608
|
name = distribution.name
|
|
649
609
|
functionCode = 'download'
|
|
650
610
|
protocol = 'WWW:DOWNLOAD'
|
|
651
611
|
} else {
|
|
612
|
+
linkageUrl = distribution.url.toString()
|
|
652
613
|
name = distribution.name
|
|
653
614
|
functionCode = 'information'
|
|
654
615
|
protocol = 'WWW:LINK'
|
|
@@ -659,7 +620,7 @@ export function appendDistribution(
|
|
|
659
620
|
createChild('gmd:MD_DigitalTransferOptions'),
|
|
660
621
|
createChild('gmd:onLine'),
|
|
661
622
|
createChild('gmd:CI_OnlineResource'),
|
|
662
|
-
writeLinkage(
|
|
623
|
+
writeLinkage(linkageUrl),
|
|
663
624
|
'description' in distribution
|
|
664
625
|
? appendChildren(
|
|
665
626
|
pipe(
|
|
@@ -688,7 +649,9 @@ export function appendDistribution(
|
|
|
688
649
|
)
|
|
689
650
|
)
|
|
690
651
|
return pipe(
|
|
691
|
-
'
|
|
652
|
+
createElement('gmd:distributionInfo'),
|
|
653
|
+
createChild('gmd:MD_Distribution'),
|
|
654
|
+
appendDistributionFormat,
|
|
692
655
|
appendTransferOptions
|
|
693
656
|
)
|
|
694
657
|
}
|
|
@@ -697,7 +660,7 @@ export function appendDistribution(
|
|
|
697
660
|
* Looks for srv:SV_ServiceIdentification or gmd:MD_DataIdentification element
|
|
698
661
|
* depending on record type, create if missing
|
|
699
662
|
*/
|
|
700
|
-
|
|
663
|
+
function findOrCreateIdentification() {
|
|
701
664
|
return (rootEl: XmlElement) => {
|
|
702
665
|
const kind = readKind(rootEl)
|
|
703
666
|
let eltName = 'gmd:MD_DataIdentification'
|
|
@@ -706,7 +669,7 @@ export function findOrCreateIdentification() {
|
|
|
706
669
|
}
|
|
707
670
|
}
|
|
708
671
|
|
|
709
|
-
|
|
672
|
+
function findOrCreateDistribution() {
|
|
710
673
|
return (rootEl: XmlElement) => {
|
|
711
674
|
return findNestedChildOrCreate(
|
|
712
675
|
'gmd:distributionInfo',
|
|
@@ -800,26 +763,11 @@ export function writeStatus(record: DatasetRecord, rootEl: XmlElement) {
|
|
|
800
763
|
}
|
|
801
764
|
|
|
802
765
|
export function writeContacts(record: CatalogRecord, rootEl: XmlElement) {
|
|
803
|
-
pipe(
|
|
804
|
-
removeChildrenByName('gmd:contact'),
|
|
805
|
-
appendChildren(
|
|
806
|
-
...record.contacts.map((contact) =>
|
|
807
|
-
pipe(createElement('gmd:contact'), appendResponsibleParty(contact))
|
|
808
|
-
)
|
|
809
|
-
)
|
|
810
|
-
)(rootEl)
|
|
811
|
-
}
|
|
812
|
-
|
|
813
|
-
export function writeContactsForResource(
|
|
814
|
-
record: CatalogRecord,
|
|
815
|
-
rootEl: XmlElement
|
|
816
|
-
) {
|
|
817
766
|
pipe(
|
|
818
767
|
findOrCreateIdentification(),
|
|
819
768
|
removeChildrenByName('gmd:pointOfContact'),
|
|
820
|
-
removeChildrenByName('gmd:contact'),
|
|
821
769
|
appendChildren(
|
|
822
|
-
...record.
|
|
770
|
+
...record.contacts.map((contact) =>
|
|
823
771
|
pipe(
|
|
824
772
|
createElement('gmd:pointOfContact'),
|
|
825
773
|
appendResponsibleParty(contact)
|
|
@@ -930,47 +878,26 @@ export function writeUpdateFrequency(
|
|
|
930
878
|
)(rootEl)
|
|
931
879
|
}
|
|
932
880
|
|
|
933
|
-
export function
|
|
934
|
-
record
|
|
935
|
-
rootEl: XmlElement
|
|
936
|
-
) {
|
|
937
|
-
if (!('resourceCreated' in record)) return
|
|
881
|
+
export function writeDatasetCreated(record: DatasetRecord, rootEl: XmlElement) {
|
|
882
|
+
if (!('datasetCreated' in record)) return
|
|
938
883
|
pipe(
|
|
939
884
|
findOrCreateIdentification(),
|
|
940
885
|
findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation'),
|
|
941
886
|
fallback(
|
|
942
|
-
updateCitationDate(record.
|
|
943
|
-
appendCitationDate(record.
|
|
887
|
+
updateCitationDate(record.datasetCreated, 'creation'),
|
|
888
|
+
appendCitationDate(record.datasetCreated, 'creation')
|
|
944
889
|
)
|
|
945
890
|
)(rootEl)
|
|
946
891
|
}
|
|
947
892
|
|
|
948
|
-
export function
|
|
949
|
-
record
|
|
950
|
-
rootEl: XmlElement
|
|
951
|
-
) {
|
|
952
|
-
if (!('resourceUpdated' in record)) return
|
|
893
|
+
export function writeDatasetUpdated(record: DatasetRecord, rootEl: XmlElement) {
|
|
894
|
+
if (!('datasetUpdated' in record)) return
|
|
953
895
|
pipe(
|
|
954
896
|
findOrCreateIdentification(),
|
|
955
897
|
findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation'),
|
|
956
898
|
fallback(
|
|
957
|
-
updateCitationDate(record.
|
|
958
|
-
appendCitationDate(record.
|
|
959
|
-
)
|
|
960
|
-
)(rootEl)
|
|
961
|
-
}
|
|
962
|
-
|
|
963
|
-
export function writeResourcePublished(
|
|
964
|
-
record: DatasetRecord,
|
|
965
|
-
rootEl: XmlElement
|
|
966
|
-
) {
|
|
967
|
-
if (!('resourcePublished' in record)) return
|
|
968
|
-
pipe(
|
|
969
|
-
findOrCreateIdentification(),
|
|
970
|
-
findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation'),
|
|
971
|
-
fallback(
|
|
972
|
-
updateCitationDate(record.resourcePublished, 'publication'),
|
|
973
|
-
appendCitationDate(record.resourcePublished, 'publication')
|
|
899
|
+
updateCitationDate(record.datasetUpdated, 'revision'),
|
|
900
|
+
appendCitationDate(record.datasetUpdated, 'revision')
|
|
974
901
|
)
|
|
975
902
|
)(rootEl)
|
|
976
903
|
}
|
|
@@ -1028,14 +955,7 @@ export function writeGraphicOverviews(
|
|
|
1028
955
|
export function writeDistributions(record: DatasetRecord, rootEl: XmlElement) {
|
|
1029
956
|
pipe(
|
|
1030
957
|
removeDistributions(),
|
|
1031
|
-
appendChildren(
|
|
1032
|
-
...record.distributions.map((d) =>
|
|
1033
|
-
pipe(
|
|
1034
|
-
createDistributionInfo(),
|
|
1035
|
-
appendDistribution(d, appendDistributionFormat)
|
|
1036
|
-
)
|
|
1037
|
-
)
|
|
1038
|
-
)
|
|
958
|
+
appendChildren(...record.distributions.map(createDistribution))
|
|
1039
959
|
)(rootEl)
|
|
1040
960
|
}
|
|
1041
961
|
|
|
@@ -1052,7 +972,7 @@ export function writeLineage(record: DatasetRecord, rootEl: XmlElement) {
|
|
|
1052
972
|
)(rootEl)
|
|
1053
973
|
}
|
|
1054
974
|
|
|
1055
|
-
|
|
975
|
+
function getServiceEndpointProtocol(endpoint: ServiceEndpoint): string {
|
|
1056
976
|
switch (endpoint.protocol.toLowerCase()) {
|
|
1057
977
|
case 'wfs':
|
|
1058
978
|
return 'OGC:WFS'
|
|
@@ -1065,7 +985,7 @@ export function getServiceEndpointProtocol(endpoint: ServiceEndpoint): string {
|
|
|
1065
985
|
}
|
|
1066
986
|
}
|
|
1067
987
|
|
|
1068
|
-
|
|
988
|
+
function createOnlineResource(onlineResource: ServiceOnlineResource) {
|
|
1069
989
|
let linkageUrl, functionCode, protocol
|
|
1070
990
|
if (onlineResource.type === 'endpoint') {
|
|
1071
991
|
linkageUrl = onlineResource.endpointUrl.toString()
|
package/src/libs/api/metadata-converter/src/lib/{base.converter.ts → metadata-base.mapper.ts}
RENAMED
|
@@ -7,13 +7,13 @@ export class MetadataMapperContext {
|
|
|
7
7
|
readonly location?
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
export abstract class
|
|
10
|
+
export abstract class MetadataBaseMapper<F> {
|
|
11
11
|
constructor(
|
|
12
12
|
protected ctx: MetadataMapperContext = new MetadataMapperContext()
|
|
13
13
|
) {}
|
|
14
14
|
|
|
15
15
|
abstract readRecord(document: F): Promise<CatalogRecord>
|
|
16
|
-
abstract writeRecord(record: CatalogRecord
|
|
16
|
+
abstract writeRecord(record: CatalogRecord): Promise<F>
|
|
17
17
|
readRecords(documents: F[]): Promise<CatalogRecord[]> {
|
|
18
18
|
return Promise.all(documents.map((doc) => this.readRecord(doc)))
|
|
19
19
|
}
|