-
Notifications
You must be signed in to change notification settings - Fork 0
/
Value.js
94 lines (88 loc) · 2.36 KB
/
Value.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
86
87
88
89
90
91
92
93
94
var nocr = require("NoCR"),
_ = require('util'),
log4js = require('log4js')(),
logger = log4js.getLogger("nocr-mongo.Value"),
wrapper = require('./wrapper.js'),
Value, valueproto;
valueproto = {
getValue: function() {
return this.value;
},
getType: function() {
return this.type;
},
getString: function() {
return this.value.toString();
}
};
function Value(data) {
var self = this, k;
function guessType(objvalue) {
if (typeof objvalue === "undefined") {
return 'UNDEFINED';
}
if (typeof objvalue === "boolean") {
return 'BOOLEAN';
}
if (typeof objvalue === "string") {
return 'STRING';
}
if (typeof objvalue === "number") {
return 'NUMBER';
}
if (typeof objvalue === "object") {
if (objvalue.constructor = Date) {
return 'DATE';
}
// TODO : handle more types, at least BINARY
throw new Error("Type error, incorrect value type");
}
}
function createValue(type) {
if (type === 'UNDEFINED') {
return;
}else if (type === 'BOOLEAN') {
return true;
} else if (type === 'STRING') {
return "";
} else if (type === 'NUMBER') {
return 0;
} else if (type === 'DATE') {
return new Date();
}
}
function checkIntegrity(data) {
var guess = guessType(data['property:value']),
compatibility = require('./utils/itemslookup.js').valueCompatibility;
logger.debug("Checking types integrity : " + data['property:type'] + " vs " + guess);
if (compatibility[guess].indexOf(data['property:type']) === -1 ) {
throw new Error("Incompatible type/value found");
}
}
if (typeof data === "undefined") {
throw new Error("Value cannot specify a value without parameter object");
}
if (typeof data !== "object" || data.constructor === Date ) {
data = {'property:value': data};
}
if (!('property:type' in data)) {
if ('property:value' in data) {
data['property:type'] = guessType(data['property:value']);
} else {
throw new Error("Value cannot specify a value without type nor value");
}
} else {
if (!('property:value' in data)) {
data['property:value'] = createValue(data['property:type']);
}
}
checkIntegrity(data);
this.type = data['property:type'];
this.value = data['property:value'];
for ( k in valueproto) {
self[k] = valueproto[k];
}
this.serialize = this.getString; //TODO : much better to do here, quick workaround
}
_.inherits(Value,nocr.Value);
module.exports = Value;