Rev 1318 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*Copyright (c) 2004-2006, The Dojo FoundationAll Rights Reserved.Licensed under the Academic Free License version 2.1 or above OR themodified BSD license. For more information on Dojo licensing, see:http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.collections.Store");dojo.require("dojo.lang.common");dojo.collections.Store = function (jsonArray) {var data = [];var items = {};this.keyField = "Id";this.get = function () {return data;};this.getByKey = function (key) {return items[key];};this.getByIndex = function (idx) {return data[idx];};this.getIndexOf = function (key) {for (var i = 0; i < data.length; i++) {if (data[i].key == key) {return i;}}return -1;};this.getData = function () {var arr = [];for (var i = 0; i < data.length; i++) {arr.push(data[i].src);}return arr;};this.getDataByKey = function (key) {if (items[key] != null) {return items[key].src;}return null;};this.getIndexOfData = function (obj) {for (var i = 0; i < data.length; i++) {if (data[i].src == obj) {return i;}}return -1;};this.getDataByIndex = function (idx) {if (data[idx]) {return data[idx].src;}return null;};this.update = function (obj, fieldPath, val, bDontFire) {var parts = fieldPath.split("."), i = 0, o = obj, field;if (parts.length > 1) {field = parts.pop();do {if (parts[i].indexOf("()") > -1) {var temp = parts[i++].split("()")[0];if (!o[temp]) {dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");} else {o = o[temp]();}} else {o = o[parts[i++]];}} while (i < parts.length && o != null);} else {field = parts[0];}obj[field] = val;if (!bDontFire) {this.onUpdateField(obj, fieldPath, val);}};this.forEach = function (fn) {if (Array.forEach) {Array.forEach(data, fn, this);} else {for (var i = 0; i < data.length; i++) {fn.call(this, data[i]);}}};this.forEachData = function (fn) {if (Array.forEach) {Array.forEach(this.getData(), fn, this);} else {var a = this.getData();for (var i = 0; i < a.length; i++) {fn.call(this, a[i]);}}};this.setData = function (arr, bDontFire) {data = [];for (var i = 0; i < arr.length; i++) {var o = {key:arr[i][this.keyField], src:arr[i]};data.push(o);items[o.key] = o;}if (!bDontFire) {this.onSetData();}};this.clearData = function (bDontFire) {data = [];items = {};if (!bDontFire) {this.onClearData();}};this.addData = function (obj, key, bDontFire) {var k = key || obj[this.keyField];if (items[k] != null) {var o = items[k];o.src = obj;} else {var o = {key:k, src:obj};data.push(o);items[o.key] = o;}if (!bDontFire) {this.onAddData(o);}};this.addDataRange = function (arr, bDontFire) {var objects = [];for (var i = 0; i < arr.length; i++) {var k = arr[i][this.keyField];if (items[k] != null) {var o = items[k];o.src = arr[i];} else {var o = {key:k, src:arr[i]};data.push(o);items[k] = o;}objects.push(o);}if (!bDontFire) {this.onAddDataRange(objects);}};this.addDataByIndex = function (obj, idx, key, bDontFire) {var k = key || obj[this.keyField];if (items[k] != null) {var i = this.getIndexOf(k);var o = data.splice(i, 1);o.src = obj;} else {var o = {key:k, src:obj};items[k] = o;}data.splice(idx, 0, o);if (!bDontFire) {this.onAddData(o);}};this.addDataRangeByIndex = function (arr, idx, bDontFire) {var objects = [];for (var i = 0; i < arr.length; i++) {var k = arr[i][this.keyField];if (items[k] != null) {var j = this.getIndexOf(k);var o = data.splice(j, 1);o.src = arr[i];} else {var o = {key:k, src:arr[i]};items[k] = o;}objects.push(o);}data.splice(idx, 0, objects);if (!bDontFire) {this.onAddDataRange(objects);}};this.removeData = function (obj, bDontFire) {var idx = -1;var o = null;for (var i = 0; i < data.length; i++) {if (data[i].src == obj) {idx = i;o = data[i];break;}}if (!bDontFire) {this.onRemoveData(o);}if (idx > -1) {data.splice(idx, 1);delete items[o.key];}};this.removeDataRange = function (idx, range, bDontFire) {var ret = data.splice(idx, range);for (var i = 0; i < ret.length; i++) {delete items[ret[i].key];}if (!bDontFire) {this.onRemoveDataRange(ret);}return ret;};this.removeDataByKey = function (key, bDontFire) {this.removeData(this.getDataByKey(key), bDontFire);};this.removeDataByIndex = function (idx, bDontFire) {this.removeData(this.getDataByIndex(idx), bDontFire);};if (jsonArray && jsonArray.length && jsonArray[0]) {this.setData(jsonArray, true);}};dojo.extend(dojo.collections.Store, {getField:function (obj, field) {var parts = field.split("."), i = 0, o = obj;do {if (parts[i].indexOf("()") > -1) {var temp = parts[i++].split("()")[0];if (!o[temp]) {dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");} else {o = o[temp]();}} else {o = o[parts[i++]];}} while (i < parts.length && o != null);if (i < parts.length) {dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + field + "' is not a property of the passed object.");}return o;}, getFromHtml:function (meta, body, fnMod) {var rows = body.rows;var ctor = function (row) {var obj = {};for (var i = 0; i < meta.length; i++) {var o = obj;var data = row.cells[i].innerHTML;var p = meta[i].getField();if (p.indexOf(".") > -1) {p = p.split(".");while (p.length > 1) {var pr = p.shift();o[pr] = {};o = o[pr];}p = p[0];}var type = meta[i].getType();if (type == String) {o[p] = data;} else {if (data) {o[p] = new type(data);} else {o[p] = new type();}}}return obj;};var arr = [];for (var i = 0; i < rows.length; i++) {var o = ctor(rows[i]);if (fnMod) {fnMod(o, rows[i]);}arr.push(o);}return arr;}, onSetData:function () {}, onClearData:function () {}, onAddData:function (obj) {}, onAddDataRange:function (arr) {}, onRemoveData:function (obj) {}, onRemoveDataRange:function (arr) {}, onUpdateField:function (obj, field, val) {}});