geonetwork-ui 2.3.0-dev.28c8df17 → 2.3.0-dev.376e0e90

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 (114) hide show
  1. package/esm2022/libs/api/metadata-converter/src/index.mjs +5 -5
  2. package/esm2022/libs/api/metadata-converter/src/lib/base.converter.mjs +14 -0
  3. package/esm2022/libs/api/metadata-converter/src/lib/find-converter.mjs +15 -0
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +3 -3
  5. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.converter.mjs +52 -0
  6. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +3 -3
  7. package/esm2022/libs/api/metadata-converter/src/lib/gn4/index.mjs +4 -0
  8. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/index.mjs +2 -0
  9. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.mjs +123 -0
  10. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +116 -0
  11. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +138 -0
  12. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/index.mjs +2 -0
  13. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +242 -0
  14. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +58 -62
  15. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.mjs +18 -0
  16. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.mjs +14 -0
  17. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/role.mapper.mjs +48 -0
  18. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.mjs +18 -0
  19. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.mjs +64 -0
  20. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +75 -58
  21. package/esm2022/libs/api/metadata-converter/src/lib/xml-utils.mjs +76 -14
  22. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +4 -4
  23. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  24. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +8 -8
  25. package/fesm2022/geonetwork-ui.mjs +822 -245
  26. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  27. package/libs/api/metadata-converter/src/index.d.ts +4 -4
  28. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  29. package/libs/api/metadata-converter/src/lib/{metadata-base.mapper.d.ts → base.converter.d.ts} +3 -3
  30. package/libs/api/metadata-converter/src/lib/base.converter.d.ts.map +1 -0
  31. package/libs/api/metadata-converter/src/lib/find-converter.d.ts +3 -0
  32. package/libs/api/metadata-converter/src/lib/find-converter.d.ts.map +1 -0
  33. package/libs/api/metadata-converter/src/lib/gn4/{gn4.metadata.mapper.d.ts → gn4.converter.d.ts} +5 -5
  34. package/libs/api/metadata-converter/src/lib/gn4/gn4.converter.d.ts.map +1 -0
  35. package/libs/api/metadata-converter/src/lib/gn4/index.d.ts +4 -0
  36. package/libs/api/metadata-converter/src/lib/gn4/index.d.ts.map +1 -0
  37. package/libs/api/metadata-converter/src/lib/iso19115-3/index.d.ts +2 -0
  38. package/libs/api/metadata-converter/src/lib/iso19115-3/index.d.ts.map +1 -0
  39. package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts +9 -0
  40. package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts.map +1 -0
  41. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +20 -0
  42. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -0
  43. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts +21 -0
  44. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -0
  45. package/libs/api/metadata-converter/src/lib/iso19139/index.d.ts +2 -0
  46. package/libs/api/metadata-converter/src/lib/iso19139/index.d.ts.map +1 -0
  47. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts +11 -0
  48. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -0
  49. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +34 -6
  50. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  51. package/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.d.ts +8 -0
  52. package/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.d.ts.map +1 -0
  53. package/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.d.ts.map +1 -0
  54. package/libs/api/metadata-converter/src/lib/iso19139/utils/role.mapper.d.ts.map +1 -0
  55. package/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.d.ts.map +1 -0
  56. package/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.d.ts.map +1 -0
  57. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +39 -3
  58. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  59. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts +14 -1
  60. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts.map +1 -1
  61. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +2 -2
  62. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  63. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +6 -4
  64. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  65. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  66. package/package.json +1 -1
  67. package/src/libs/api/metadata-converter/src/index.ts +4 -4
  68. package/src/libs/api/metadata-converter/src/lib/{metadata-base.mapper.ts → base.converter.ts} +2 -2
  69. package/src/libs/api/metadata-converter/src/lib/find-converter.ts +16 -0
  70. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +32 -5
  71. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +11 -4
  72. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +33 -7
  73. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +580 -0
  74. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +2 -2
  75. package/src/libs/api/metadata-converter/src/lib/gn4/{gn4.metadata.mapper.ts → gn4.converter.ts} +2 -2
  76. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +2 -2
  77. package/src/libs/api/metadata-converter/src/lib/gn4/index.ts +3 -0
  78. package/src/libs/api/metadata-converter/src/lib/iso19115-3/index.ts +1 -0
  79. package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +176 -0
  80. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +329 -0
  81. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +513 -0
  82. package/src/libs/api/metadata-converter/src/lib/iso19139/index.ts +1 -0
  83. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +327 -0
  84. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +121 -82
  85. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.ts +20 -0
  86. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +175 -95
  87. package/src/libs/api/metadata-converter/src/lib/xml-utils.ts +84 -16
  88. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +2 -2
  89. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +9 -4
  90. package/src/libs/feature/editor/src/lib/services/editor.service.ts +27 -16
  91. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +0 -52
  92. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +0 -14
  93. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/role.mapper.mjs +0 -48
  94. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/status.mapper.mjs +0 -18
  95. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/update-frequency.mapper.mjs +0 -64
  96. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +0 -130
  97. package/esm2022/libs/api/metadata-converter/src/lib/metadata-base.mapper.mjs +0 -14
  98. package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +0 -1
  99. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +0 -1
  100. package/libs/api/metadata-converter/src/lib/iso19139/codelists/role.mapper.d.ts.map +0 -1
  101. package/libs/api/metadata-converter/src/lib/iso19139/codelists/status.mapper.d.ts.map +0 -1
  102. package/libs/api/metadata-converter/src/lib/iso19139/codelists/update-frequency.mapper.d.ts.map +0 -1
  103. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts +0 -4
  104. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +0 -1
  105. package/libs/api/metadata-converter/src/lib/metadata-base.mapper.d.ts.map +0 -1
  106. package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +0 -196
  107. /package/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/keyword.mapper.d.ts +0 -0
  108. /package/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/role.mapper.d.ts +0 -0
  109. /package/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/status.mapper.d.ts +0 -0
  110. /package/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/update-frequency.mapper.d.ts +0 -0
  111. /package/src/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/keyword.mapper.ts +0 -0
  112. /package/src/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/role.mapper.ts +0 -0
  113. /package/src/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/status.mapper.ts +0 -0
  114. /package/src/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/update-frequency.mapper.ts +0 -0
@@ -0,0 +1,327 @@
1
+ import {
2
+ CatalogRecord,
3
+ CatalogRecordKeys,
4
+ DatasetRecord,
5
+ ServiceRecord,
6
+ } from '../../../../../../libs/common/domain/src/lib/model/record'
7
+ import {
8
+ createDocument,
9
+ createElement,
10
+ getRootElement,
11
+ parseXmlString,
12
+ xmlToString,
13
+ } from '../xml-utils'
14
+ import {
15
+ writeAbstract,
16
+ writeContacts,
17
+ writeContactsForResource,
18
+ writeDistributions,
19
+ writeGraphicOverviews,
20
+ writeKeywords,
21
+ writeKind,
22
+ writeLegalConstraints,
23
+ writeLicenses,
24
+ writeLineage,
25
+ writeOnlineResources,
26
+ writeOtherConstraints,
27
+ writeOwnerOrganization,
28
+ writeRecordUpdated,
29
+ writeResourceCreated,
30
+ writeResourcePublished,
31
+ writeResourceUpdated,
32
+ writeSecurityConstraints,
33
+ writeSpatialRepresentation,
34
+ writeStatus,
35
+ writeTitle,
36
+ writeTopics,
37
+ writeUniqueIdentifier,
38
+ writeUpdateFrequency,
39
+ } from './write-parts'
40
+ import {
41
+ readAbstract,
42
+ readContacts,
43
+ readContactsForResource,
44
+ readDistributions,
45
+ readIsoTopics,
46
+ readKeywords,
47
+ readKind,
48
+ readLegalConstraints,
49
+ readLicenses,
50
+ readLineage,
51
+ readOnlineResources,
52
+ readOtherConstraints,
53
+ readOverviews,
54
+ readOwnerOrganization,
55
+ readRecordUpdated,
56
+ readResourceCreated,
57
+ readResourcePublished,
58
+ readResourceUpdated,
59
+ readSecurityConstraints,
60
+ readSpatialRepresentation,
61
+ readStatus,
62
+ readTitle,
63
+ readUniqueIdentifier,
64
+ readUpdateFrequency,
65
+ } from './read-parts'
66
+ import { isEqual } from '../convert-utils'
67
+ import { BaseConverter } from '../base.converter'
68
+ import { XmlElement } from '@rgrove/parse-xml'
69
+
70
+ export class Iso19139Converter extends BaseConverter<string> {
71
+ protected readers: Record<
72
+ CatalogRecordKeys,
73
+ (rootEl: XmlElement) => unknown
74
+ > = {
75
+ uniqueIdentifier: readUniqueIdentifier,
76
+ kind: readKind,
77
+ ownerOrganization: readOwnerOrganization,
78
+ recordUpdated: readRecordUpdated,
79
+ recordCreated: () => undefined, // not supported in ISO19139
80
+ recordPublished: () => undefined, // not supported in ISO19139
81
+ resourceUpdated: readResourceUpdated,
82
+ resourceCreated: readResourceCreated,
83
+ resourcePublished: readResourcePublished,
84
+ title: readTitle,
85
+ abstract: readAbstract,
86
+ contacts: readContacts,
87
+ contactsForResource: readContactsForResource,
88
+ keywords: readKeywords,
89
+ topics: readIsoTopics,
90
+ licenses: readLicenses,
91
+ legalConstraints: readLegalConstraints,
92
+ securityConstraints: readSecurityConstraints,
93
+ otherConstraints: readOtherConstraints,
94
+ status: readStatus,
95
+ updateFrequency: readUpdateFrequency,
96
+ spatialRepresentation: readSpatialRepresentation,
97
+ overviews: readOverviews,
98
+ lineage: readLineage,
99
+ distributions: readDistributions,
100
+ onlineResources: readOnlineResources,
101
+ // TODO
102
+ spatialExtents: () => [],
103
+ temporalExtents: () => [],
104
+ extras: () => undefined,
105
+ landingPage: () => undefined,
106
+ languages: () => [],
107
+ }
108
+
109
+ protected writers: Record<
110
+ CatalogRecordKeys,
111
+ (record: CatalogRecord, rootEl: XmlElement) => void
112
+ > = {
113
+ uniqueIdentifier: writeUniqueIdentifier,
114
+ kind: writeKind,
115
+ ownerOrganization: writeOwnerOrganization,
116
+ recordUpdated: writeRecordUpdated,
117
+ recordCreated: () => undefined, // not supported in ISO19139
118
+ recordPublished: () => undefined, // not supported in ISO19139
119
+ resourceUpdated: writeResourceUpdated,
120
+ resourceCreated: writeResourceCreated,
121
+ resourcePublished: writeResourcePublished,
122
+ title: writeTitle,
123
+ abstract: writeAbstract,
124
+ contacts: writeContacts,
125
+ contactsForResource: writeContactsForResource,
126
+ keywords: writeKeywords,
127
+ topics: writeTopics,
128
+ licenses: writeLicenses,
129
+ legalConstraints: writeLegalConstraints,
130
+ securityConstraints: writeSecurityConstraints,
131
+ otherConstraints: writeOtherConstraints,
132
+ status: writeStatus,
133
+ updateFrequency: writeUpdateFrequency,
134
+ spatialRepresentation: writeSpatialRepresentation,
135
+ overviews: writeGraphicOverviews,
136
+ lineage: writeLineage,
137
+ distributions: writeDistributions,
138
+ onlineResources: writeOnlineResources,
139
+ // TODO
140
+ spatialExtents: () => undefined,
141
+ temporalExtents: () => undefined,
142
+ extras: () => undefined,
143
+ landingPage: () => undefined,
144
+ languages: () => undefined,
145
+ }
146
+
147
+ protected beforeDocumentCreation(rootElement: XmlElement) {
148
+ // to override
149
+ }
150
+
151
+ async readRecord(document: string): Promise<CatalogRecord> {
152
+ const doc = parseXmlString(document)
153
+ const rootEl = getRootElement(doc)
154
+
155
+ const uniqueIdentifier = this.readers['uniqueIdentifier'](rootEl)
156
+ const kind = this.readers['kind'](rootEl)
157
+ const ownerOrganization = this.readers['ownerOrganization'](rootEl)
158
+ const title = this.readers['title'](rootEl)
159
+ const abstract = this.readers['abstract'](rootEl)
160
+ const contacts = this.readers['contacts'](rootEl)
161
+ const contactsForResource = this.readers['contactsForResource'](rootEl)
162
+ const recordUpdated = this.readers['recordUpdated'](rootEl)
163
+ const recordCreated = this.readers['recordCreated'](rootEl)
164
+ const recordPublished = this.readers['recordPublished'](rootEl)
165
+ const resourceCreated = this.readers['resourceCreated'](rootEl)
166
+ const resourceUpdated = this.readers['resourceUpdated'](rootEl)
167
+ const resourcePublished = this.readers['resourcePublished'](rootEl)
168
+ const keywords = this.readers['keywords'](rootEl)
169
+ const topics = this.readers['topics'](rootEl)
170
+ const legalConstraints = this.readers['legalConstraints'](rootEl)
171
+ const otherConstraints = this.readers['otherConstraints'](rootEl)
172
+ const securityConstraints = this.readers['securityConstraints'](rootEl)
173
+ const licenses = this.readers['licenses'](rootEl)
174
+ const overviews = this.readers['overviews'](rootEl)
175
+ const landingPage = this.readers['landingPage'](rootEl)
176
+
177
+ if (kind === 'dataset') {
178
+ const status = this.readers['status'](rootEl)
179
+ const spatialRepresentation =
180
+ this.readers['spatialRepresentation'](rootEl)
181
+ const spatialExtents = this.readers['spatialExtents'](rootEl)
182
+ const temporalExtents = this.readers['temporalExtents'](rootEl)
183
+ const lineage = this.readers['lineage'](rootEl)
184
+ const distributions = this.readers['distributions'](rootEl)
185
+ const updateFrequency = this.readers['updateFrequency'](rootEl)
186
+
187
+ return {
188
+ uniqueIdentifier,
189
+ kind,
190
+ languages: [],
191
+ ...(recordCreated && { recordCreated }),
192
+ ...(recordPublished && { recordPublished }),
193
+ recordUpdated,
194
+ ...(resourceCreated && { resourceCreated }),
195
+ ...(resourceUpdated && { resourceUpdated }),
196
+ ...(resourcePublished && { resourcePublished }),
197
+ status,
198
+ title,
199
+ abstract,
200
+ ownerOrganization,
201
+ contacts,
202
+ contactsForResource,
203
+ keywords,
204
+ topics,
205
+ licenses,
206
+ legalConstraints,
207
+ securityConstraints,
208
+ otherConstraints,
209
+ lineage,
210
+ ...(spatialRepresentation && { spatialRepresentation }),
211
+ overviews,
212
+ spatialExtents,
213
+ temporalExtents,
214
+ distributions,
215
+ updateFrequency,
216
+ ...(landingPage && { landingPage }),
217
+ } as DatasetRecord
218
+ } else {
219
+ const onlineResources = this.readers['onlineResources'](rootEl)
220
+ return {
221
+ uniqueIdentifier,
222
+ kind,
223
+ languages: [],
224
+ ...(recordCreated && { recordCreated }),
225
+ ...(recordPublished && { recordPublished }),
226
+ recordUpdated,
227
+ ...(resourceCreated && { resourceCreated }),
228
+ ...(resourceUpdated && { resourceUpdated }),
229
+ ...(resourcePublished && { resourcePublished }),
230
+ title,
231
+ abstract,
232
+ ownerOrganization,
233
+ contacts,
234
+ contactsForResource,
235
+ keywords,
236
+ topics,
237
+ licenses,
238
+ legalConstraints,
239
+ securityConstraints,
240
+ otherConstraints,
241
+ overviews,
242
+ onlineResources,
243
+ ...(landingPage && { landingPage }),
244
+ } as ServiceRecord
245
+ }
246
+ }
247
+
248
+ async writeRecord(
249
+ record: CatalogRecord,
250
+ reference?: string
251
+ ): Promise<string> {
252
+ let rootEl: XmlElement
253
+ let fieldChanged: (name: string) => boolean
254
+ if (reference) {
255
+ const originalDoc = parseXmlString(reference)
256
+ const originalRecord = await this.readRecord(reference)
257
+ rootEl = getRootElement(originalDoc)
258
+
259
+ fieldChanged = (name: string) => {
260
+ return originalRecord !== null
261
+ ? !isEqual(record[name], originalRecord[name])
262
+ : true
263
+ }
264
+ } else {
265
+ rootEl = createElement('gmd:MD_Metadata')()
266
+ fieldChanged = () => true
267
+ }
268
+
269
+ fieldChanged('uniqueIdentifier') &&
270
+ this.writers['uniqueIdentifier'](record, rootEl)
271
+ fieldChanged('kind') && this.writers['kind'](record, rootEl)
272
+
273
+ fieldChanged('contacts') && this.writers['contacts'](record, rootEl)
274
+ fieldChanged('ownerOrganization') &&
275
+ this.writers['ownerOrganization'](record, rootEl)
276
+
277
+ fieldChanged('recordUpdated') &&
278
+ this.writers['recordUpdated'](record, rootEl)
279
+ fieldChanged('recordCreated') &&
280
+ this.writers['recordCreated'](record, rootEl)
281
+ fieldChanged('recordPublished') &&
282
+ this.writers['recordPublished'](record, rootEl)
283
+
284
+ fieldChanged('title') && this.writers['title'](record, rootEl)
285
+ fieldChanged('abstract') && this.writers['abstract'](record, rootEl)
286
+
287
+ fieldChanged('resourceCreated') &&
288
+ this.writers['resourceCreated'](record, rootEl)
289
+ fieldChanged('resourcePublished') &&
290
+ this.writers['resourcePublished'](record, rootEl)
291
+ fieldChanged('resourceUpdated') &&
292
+ this.writers['resourceUpdated'](record, rootEl)
293
+
294
+ fieldChanged('contactsForResource') &&
295
+ this.writers['contactsForResource'](record, rootEl)
296
+
297
+ fieldChanged('keywords') && this.writers['keywords'](record, rootEl)
298
+ fieldChanged('topics') && this.writers['topics'](record, rootEl)
299
+ fieldChanged('legalConstraints') &&
300
+ this.writers['legalConstraints'](record, rootEl)
301
+ fieldChanged('securityConstraints') &&
302
+ this.writers['securityConstraints'](record, rootEl)
303
+ fieldChanged('licenses') && this.writers['licenses'](record, rootEl)
304
+ fieldChanged('otherConstraints') &&
305
+ this.writers['otherConstraints'](record, rootEl)
306
+
307
+ if (record.kind === 'dataset') {
308
+ fieldChanged('status') && this.writers['status'](record, rootEl)
309
+ fieldChanged('updateFrequency') &&
310
+ this.writers['updateFrequency'](record, rootEl)
311
+ fieldChanged('spatialRepresentation') &&
312
+ this.writers['spatialRepresentation'](record, rootEl)
313
+ fieldChanged('overviews') && this.writers['overviews'](record, rootEl)
314
+ fieldChanged('distributions') &&
315
+ this.writers['distributions'](record, rootEl)
316
+ fieldChanged('lineage') && this.writers['lineage'](record, rootEl)
317
+ } else {
318
+ fieldChanged('onlineResources') &&
319
+ this.writers['onlineResources'](record, rootEl)
320
+ }
321
+
322
+ this.beforeDocumentCreation(rootEl)
323
+
324
+ const newDocument = createDocument(rootEl)
325
+ return xmlToString(newDocument)
326
+ }
327
+ }