0a827edbdec2b7c1053abed9153a728ee9f56151
[aai/esr-gui.git] /
1 "use strict";
2
3 var f = require('util').format,
4   require_optional = require('require_optional');
5
6 // Set property function
7 var setProperty = function(obj, prop, flag, values) {
8   Object.defineProperty(obj, prop.name, {
9       enumerable:true,
10       set: function(value) {
11         if(typeof value != 'boolean') throw new Error(f("%s required a boolean", prop.name));
12         // Flip the bit to 1
13         if(value == true) values.flags |= flag;
14         // Flip the bit to 0 if it's set, otherwise ignore
15         if(value == false && (values.flags & flag) == flag) values.flags ^= flag;
16         prop.value = value;
17       }
18     , get: function() { return prop.value; }
19   });
20 }
21
22 // Set property function
23 var getProperty = function(obj, propName, fieldName, values, func) {
24   Object.defineProperty(obj, propName, {
25     enumerable:true,
26     get: function() {
27       // Not parsed yet, parse it
28       if(values[fieldName] == null && obj.isParsed && !obj.isParsed()) {
29         obj.parse();
30       }
31
32       // Do we have a post processing function
33       if(typeof func == 'function') return func(values[fieldName]);
34       // Return raw value
35       return values[fieldName];
36     }
37   });
38 }
39
40 // Set simple property
41 var getSingleProperty = function(obj, name, value) {
42   Object.defineProperty(obj, name, {
43     enumerable:true,
44     get: function() {
45       return value
46     }
47   });
48 }
49
50 // Shallow copy
51 var copy = function(fObj, tObj) {
52   tObj = tObj || {};
53   for(var name in fObj) tObj[name] = fObj[name];
54   return tObj;
55 }
56
57 var debugOptions = function(debugFields, options) {
58   var finaloptions = {};
59   debugFields.forEach(function(n) {
60     finaloptions[n] = options[n];
61   });
62
63   return finaloptions;
64 }
65
66 var retrieveBSON = function() {
67   var BSON = require('bson');
68   BSON.native = false;
69
70   try {
71     try {
72       BSON = require('bson-ext');
73       BSON.native = true;
74     } catch(err) {
75       var optionalBSON = require_optional('bson-ext');
76       if(optionalBSON) {
77         optionalBSON.native = true;
78         return optionalBSON;
79       }
80     }
81   } catch(err) {}
82
83   return BSON;
84 }
85
86 exports.setProperty = setProperty;
87 exports.getProperty = getProperty;
88 exports.getSingleProperty = getSingleProperty;
89 exports.copy = copy;
90 exports.debugOptions = debugOptions;
91 exports.retrieveBSON = retrieveBSON;