/
Loader.js
85 lines (67 loc) · 2.91 KB
/
Loader.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
const validateAndPrepareObject = require('./helpers/objectValidator');
const _ = require('../../lodash');
const timeSeries = require('./timeSeries');
const {error} = require('./Error');
/**
* @method K3D.Loader
* @description K3D objects objectProvider
* @memberof K3D
* @param {K3D.Core} K3D A K3D instance to load objects into
* @param {Object} data K3D JSON with objects
*/
function loader(K3D, data) {
let objectProvider;
let startTime;
const objectsPromieses = [];
let K3DObjectPromise;
try {
data.objects.forEach((json, i) => {
K3DObjectPromise = false;
validateAndPrepareObject(K3D, json);
objectProvider = json && K3D.Provider.Objects[json.type];
if (typeof (objectProvider) === 'undefined') {
error('Loader Error', `Unsupported object type ${json.type}`);
return;
}
startTime = new Date().getTime();
const interpolated = timeSeries.interpolateTimeSeries(json, K3D.parameters.time);
const changes = (data.changes && data.changes[i]) || interpolated.changes || {};
if (objectProvider.update && !_.isEmpty(changes)) {
const obj = K3D.getObjectById(interpolated.json.id);
if (typeof (obj) !== 'undefined') {
K3DObjectPromise = objectProvider.update(json, changes, obj, K3D);
}
}
if (!K3DObjectPromise) {
Object.keys(changes).forEach((key) => {
if (changes[key] === null || !changes[key].timeSeries) {
interpolated.json[key] = changes[key];
}
});
K3DObjectPromise = objectProvider.create(interpolated.json, K3D)
.then((K3DObject) => {
K3DObject.visible = interpolated.json.visible;
const objectNumber = K3D.addOrUpdateObject(json, K3DObject);
K3DObject.K3DIdentifier = json.id || (`K3DAutoIncrement_${objectNumber}`);
json.id = K3DObject.K3DIdentifier;
console.log(
`K3D: Object type "${json.type}" loaded in: `,
(new Date().getTime() - startTime) / 1000,
's',
);
return {json, obj: K3DObject};
})
.catch((err) => {
console.error(err);
error('Loader Error', `Object of type "${json.type}" was not loaded.`);
});
}
objectsPromieses.push(K3DObjectPromise);
});
return Promise.all(objectsPromieses);
} catch (e) {
error('Loader Error', 'K3D Loader failed, please consult browser error console!', false);
throw e;
}
}
module.exports = loader;