]> git.proxmox.com Git - proxmox-widget-toolkit.git/blob - data/reader/JsonObject.js
tree-wide trailing whitespace cleanup
[proxmox-widget-toolkit.git] / data / reader / JsonObject.js
1 /* A reader to store a single JSON Object (hash) into a storage.
2 * Also accepts an array containing a single hash.
3 *
4 * So it can read:
5 *
6 * example1: {data1: "xyz", data2: "abc"}
7 * returns [{key: "data1", value: "xyz"}, {key: "data2", value: "abc"}]
8 *
9 * example2: [ {data1: "xyz", data2: "abc"} ]
10 * returns [{key: "data1", value: "xyz"}, {key: "data2", value: "abc"}]
11 *
12 * If you set 'readArray', the reader expexts the object as array:
13 *
14 * example3: [ { key: "data1", value: "xyz", p2: "cde" }, { key: "data2", value: "abc", p2: "efg" }]
15 * returns [{key: "data1", value: "xyz", p2: "cde}, {key: "data2", value: "abc", p2: "efg"}]
16 *
17 * Note: The records can contain additional properties (like 'p2' above) when you use 'readArray'
18 *
19 * Additional feature: specify allowed properties with default values with 'rows' object
20 *
21 * var rows = {
22 * memory: {
23 * required: true,
24 * defaultValue: 512
25 * }
26 * }
27 *
28 */
29
30 Ext.define('Proxmox.data.reader.JsonObject', {
31 extend: 'Ext.data.reader.Json',
32 alias : 'reader.jsonobject',
33
34 readArray: false,
35
36 rows: undefined,
37
38 constructor: function(config) {
39 var me = this;
40
41 Ext.apply(me, config || {});
42
43 me.callParent([config]);
44 },
45
46 getResponseData: function(response) {
47 var me = this;
48
49 var data = [];
50 try {
51 var result = Ext.decode(response.responseText);
52 // get our data items inside the server response
53 var root = result[me.getRootProperty()];
54
55 if (me.readArray) {
56
57 var rec_hash = {};
58 Ext.Array.each(root, function(rec) {
59 if (Ext.isDefined(rec.key)) {
60 rec_hash[rec.key] = rec;
61 }
62 });
63
64 if (me.rows) {
65 Ext.Object.each(me.rows, function(key, rowdef) {
66 var rec = rec_hash[key];
67 if (Ext.isDefined(rec)) {
68 if (!Ext.isDefined(rec.value)) {
69 rec.value = rowdef.defaultValue;
70 }
71 data.push(rec);
72 } else if (Ext.isDefined(rowdef.defaultValue)) {
73 data.push({key: key, value: rowdef.defaultValue} );
74 } else if (rowdef.required) {
75 data.push({key: key, value: undefined });
76 }
77 });
78 } else {
79 Ext.Array.each(root, function(rec) {
80 if (Ext.isDefined(rec.key)) {
81 data.push(rec);
82 }
83 });
84 }
85
86 } else {
87
88 var org_root = root;
89
90 if (Ext.isArray(org_root)) {
91 if (root.length == 1) {
92 root = org_root[0];
93 } else {
94 root = {};
95 }
96 }
97
98 if (me.rows) {
99 Ext.Object.each(me.rows, function(key, rowdef) {
100 if (Ext.isDefined(root[key])) {
101 data.push({key: key, value: root[key]});
102 } else if (Ext.isDefined(rowdef.defaultValue)) {
103 data.push({key: key, value: rowdef.defaultValue});
104 } else if (rowdef.required) {
105 data.push({key: key, value: undefined});
106 }
107 });
108 } else {
109 Ext.Object.each(root, function(key, value) {
110 data.push({key: key, value: value });
111 });
112 }
113 }
114 }
115 catch (ex) {
116 Ext.Error.raise({
117 response: response,
118 json: response.responseText,
119 parseError: ex,
120 msg: 'Unable to parse the JSON returned by the server: ' + ex.toString()
121 });
122 }
123
124 return data;
125 }
126 });
127