-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathasset-mapping.js
67 lines (54 loc) · 2.07 KB
/
asset-mapping.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
'use strict';
const assert = require('assert');
const config = require('collections-online/lib/config');
var fields = config.types && config.types.asset && config.types.asset.fields;
function transform(metadata) {
var result = {};
assert.ok(fields, 'Missing config.types.asset.fields');
for (var i = 0; i < fields.length; ++i) {
if (fields[i].cumulusKey in metadata) {
result[fields[i].short] = metadata[fields[i].cumulusKey];
}
}
return result;
}
function extendMetadata(subAssetMetadata, masterAssetMetadata) {
// Overwrite where the original asset has no value.
for (var f in subAssetMetadata) {
var originalValue = subAssetMetadata[f];
var masterValue = masterAssetMetadata[f];
if (originalValue === null && masterValue !== null) {
// Overwrite with the master assets value.
subAssetMetadata[f] = masterValue;
}
}
return subAssetMetadata;
}
// This expects that the related_master_assets has been parsed using the
// services/natmus-cip's parseBinaryRelations
function extendFromMaster(cip, metadata) {
// We expect the formatted metadata to contain a binary field with related
// master asset ids.
var relatedMasterAssets = metadata.related_master_assets;
if (!relatedMasterAssets ||
relatedMasterAssets.length === 0) {
return metadata;
}
// We expect only one master asset.
if (relatedMasterAssets.length !== 1) {
// Compile a textual representation of the master asset id's.
var masterAssetSummary = JSON.stringify(relatedMasterAssets);
throw new Error('Expected exactly one master asset, received ' +
relatedMasterAssets.length + ': ' + masterAssetSummary);
}
// Deriving the single master asset id.
var masterAssetId = relatedMasterAssets[0].id;
return cip.getAsset(metadata.catalog, masterAssetId, true)
.then(function(masterAsset) {
var masterAssetMetadata = transform(masterAsset.fields);
return extendMetadata(metadata, masterAssetMetadata);
});
}
exports.transform = transform;
exports.extendMetadata = extendMetadata;
exports.extendFromMaster = extendFromMaster;