Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1318 alexandre_ 1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
10
 
11
dojo.provide("dojo.data.old.Item");
12
dojo.require("dojo.data.old.Observable");
13
dojo.require("dojo.data.old.Value");
14
dojo.require("dojo.lang.common");
15
dojo.require("dojo.lang.assert");
16
dojo.data.old.Item = function (dataProvider) {
17
	dojo.lang.assertType(dataProvider, dojo.data.old.provider.Base, {optional:true});
18
	dojo.data.old.Observable.call(this);
19
	this._dataProvider = dataProvider;
20
	this._dictionaryOfAttributeValues = {};
21
};
22
dojo.inherits(dojo.data.old.Item, dojo.data.old.Observable);
23
dojo.data.old.Item.compare = function (itemOne, itemTwo) {
24
	dojo.lang.assertType(itemOne, dojo.data.old.Item);
25
	if (!dojo.lang.isOfType(itemTwo, dojo.data.old.Item)) {
26
		return -1;
27
	}
28
	var nameOne = itemOne.getName();
29
	var nameTwo = itemTwo.getName();
30
	if (nameOne == nameTwo) {
31
		var attributeArrayOne = itemOne.getAttributes();
32
		var attributeArrayTwo = itemTwo.getAttributes();
33
		if (attributeArrayOne.length != attributeArrayTwo.length) {
34
			if (attributeArrayOne.length > attributeArrayTwo.length) {
35
				return 1;
36
			} else {
37
				return -1;
38
			}
39
		}
40
		for (var i in attributeArrayOne) {
41
			var attribute = attributeArrayOne[i];
42
			var arrayOfValuesOne = itemOne.getValues(attribute);
43
			var arrayOfValuesTwo = itemTwo.getValues(attribute);
44
			dojo.lang.assert(arrayOfValuesOne && (arrayOfValuesOne.length > 0));
45
			if (!arrayOfValuesTwo) {
46
				return 1;
47
			}
48
			if (arrayOfValuesOne.length != arrayOfValuesTwo.length) {
49
				if (arrayOfValuesOne.length > arrayOfValuesTwo.length) {
50
					return 1;
51
				} else {
52
					return -1;
53
				}
54
			}
55
			for (var j in arrayOfValuesOne) {
56
				var value = arrayOfValuesOne[j];
57
				if (!itemTwo.hasAttributeValue(value)) {
58
					return 1;
59
				}
60
			}
61
			return 0;
62
		}
63
	} else {
64
		if (nameOne > nameTwo) {
65
			return 1;
66
		} else {
67
			return -1;
68
		}
69
	}
70
};
71
dojo.data.old.Item.prototype.toString = function () {
72
	var arrayOfStrings = [];
73
	var attributes = this.getAttributes();
74
	for (var i in attributes) {
75
		var attribute = attributes[i];
76
		var arrayOfValues = this.getValues(attribute);
77
		var valueString;
78
		if (arrayOfValues.length == 1) {
79
			valueString = arrayOfValues[0];
80
		} else {
81
			valueString = "[";
82
			valueString += arrayOfValues.join(", ");
83
			valueString += "]";
84
		}
85
		arrayOfStrings.push("  " + attribute + ": " + valueString);
86
	}
87
	var returnString = "{ ";
88
	returnString += arrayOfStrings.join(",\n");
89
	returnString += " }";
90
	return returnString;
91
};
92
dojo.data.old.Item.prototype.compare = function (otherItem) {
93
	return dojo.data.old.Item.compare(this, otherItem);
94
};
95
dojo.data.old.Item.prototype.isEqual = function (otherItem) {
96
	return (this.compare(otherItem) == 0);
97
};
98
dojo.data.old.Item.prototype.getName = function () {
99
	return this.get("name");
100
};
101
dojo.data.old.Item.prototype.get = function (attributeId) {
102
	var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId];
103
	if (dojo.lang.isUndefined(literalOrValueOrArray)) {
104
		return null;
105
	}
106
	if (literalOrValueOrArray instanceof dojo.data.old.Value) {
107
		return literalOrValueOrArray.getValue();
108
	}
109
	if (dojo.lang.isArray(literalOrValueOrArray)) {
110
		var dojoDataValue = literalOrValueOrArray[0];
111
		return dojoDataValue.getValue();
112
	}
113
	return literalOrValueOrArray;
114
};
115
dojo.data.old.Item.prototype.getValue = function (attributeId) {
116
	var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId];
117
	if (dojo.lang.isUndefined(literalOrValueOrArray)) {
118
		return null;
119
	}
120
	if (literalOrValueOrArray instanceof dojo.data.old.Value) {
121
		return literalOrValueOrArray;
122
	}
123
	if (dojo.lang.isArray(literalOrValueOrArray)) {
124
		var dojoDataValue = literalOrValueOrArray[0];
125
		return dojoDataValue;
126
	}
127
	var literal = literalOrValueOrArray;
128
	dojoDataValue = new dojo.data.old.Value(literal);
129
	this._dictionaryOfAttributeValues[attributeId] = dojoDataValue;
130
	return dojoDataValue;
131
};
132
dojo.data.old.Item.prototype.getValues = function (attributeId) {
133
	var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId];
134
	if (dojo.lang.isUndefined(literalOrValueOrArray)) {
135
		return null;
136
	}
137
	if (literalOrValueOrArray instanceof dojo.data.old.Value) {
138
		var array = [literalOrValueOrArray];
139
		this._dictionaryOfAttributeValues[attributeId] = array;
140
		return array;
141
	}
142
	if (dojo.lang.isArray(literalOrValueOrArray)) {
143
		return literalOrValueOrArray;
144
	}
145
	var literal = literalOrValueOrArray;
146
	var dojoDataValue = new dojo.data.old.Value(literal);
147
	array = [dojoDataValue];
148
	this._dictionaryOfAttributeValues[attributeId] = array;
149
	return array;
150
};
151
dojo.data.old.Item.prototype.load = function (attributeId, value) {
152
	this._dataProvider.registerAttribute(attributeId);
153
	var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId];
154
	if (dojo.lang.isUndefined(literalOrValueOrArray)) {
155
		this._dictionaryOfAttributeValues[attributeId] = value;
156
		return;
157
	}
158
	if (!(value instanceof dojo.data.old.Value)) {
159
		value = new dojo.data.old.Value(value);
160
	}
161
	if (literalOrValueOrArray instanceof dojo.data.old.Value) {
162
		var array = [literalOrValueOrArray, value];
163
		this._dictionaryOfAttributeValues[attributeId] = array;
164
		return;
165
	}
166
	if (dojo.lang.isArray(literalOrValueOrArray)) {
167
		literalOrValueOrArray.push(value);
168
		return;
169
	}
170
	var literal = literalOrValueOrArray;
171
	var dojoDataValue = new dojo.data.old.Value(literal);
172
	array = [dojoDataValue, value];
173
	this._dictionaryOfAttributeValues[attributeId] = array;
174
};
175
dojo.data.old.Item.prototype.set = function (attributeId, value) {
176
	this._dataProvider.registerAttribute(attributeId);
177
	this._dictionaryOfAttributeValues[attributeId] = value;
178
	this._dataProvider.noteChange(this, attributeId, value);
179
};
180
dojo.data.old.Item.prototype.setValue = function (attributeId, value) {
181
	this.set(attributeId, value);
182
};
183
dojo.data.old.Item.prototype.addValue = function (attributeId, value) {
184
	this.load(attributeId, value);
185
	this._dataProvider.noteChange(this, attributeId, value);
186
};
187
dojo.data.old.Item.prototype.setValues = function (attributeId, arrayOfValues) {
188
	dojo.lang.assertType(arrayOfValues, Array);
189
	this._dataProvider.registerAttribute(attributeId);
190
	var finalArray = [];
191
	this._dictionaryOfAttributeValues[attributeId] = finalArray;
192
	for (var i in arrayOfValues) {
193
		var value = arrayOfValues[i];
194
		if (!(value instanceof dojo.data.old.Value)) {
195
			value = new dojo.data.old.Value(value);
196
		}
197
		finalArray.push(value);
198
		this._dataProvider.noteChange(this, attributeId, value);
199
	}
200
};
201
dojo.data.old.Item.prototype.getAttributes = function () {
202
	var arrayOfAttributes = [];
203
	for (var key in this._dictionaryOfAttributeValues) {
204
		arrayOfAttributes.push(this._dataProvider.getAttribute(key));
205
	}
206
	return arrayOfAttributes;
207
};
208
dojo.data.old.Item.prototype.hasAttribute = function (attributeId) {
209
	return (attributeId in this._dictionaryOfAttributeValues);
210
};
211
dojo.data.old.Item.prototype.hasAttributeValue = function (attributeId, value) {
212
	var arrayOfValues = this.getValues(attributeId);
213
	for (var i in arrayOfValues) {
214
		var candidateValue = arrayOfValues[i];
215
		if (candidateValue.isEqual(value)) {
216
			return true;
217
		}
218
	}
219
	return false;
220
};
221