Subversion Repositories Applications.papyrus

Rev

Rev 1318 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1318 Rev 1422
1
/*
1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
3
	All Rights Reserved.
4
 
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
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:
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
9
*/
-
 
10
 
-
 
11
 
10
 
12
 
11
dojo.provide("dojo.data.RdfStore");
13
dojo.provide("dojo.data.RdfStore");
12
dojo.provide("dojo.data.RhizomeStore");
14
dojo.provide("dojo.data.RhizomeStore");
13
dojo.require("dojo.lang.declare");
15
dojo.require("dojo.lang.declare");
14
dojo.require("dojo.data.core.RemoteStore");
16
dojo.require("dojo.data.core.RemoteStore");
15
dojo.require("dojo.experimental");
17
dojo.require("dojo.experimental");
16
dojo.data.RdfDatatypeSerializer = function (type, convertFunc, uri) {
18
dojo.data.RdfDatatypeSerializer = function (type, convertFunc, uri) {
17
	this.type = type;
19
	this.type = type;
18
	this._converter = convertFunc;
20
	this._converter = convertFunc;
19
	this.uri = uri;
21
	this.uri = uri;
20
	this.serialize = function (value) {
22
	this.serialize = function (value) {
21
		return this._converter.call(value, value);
23
		return this._converter.call(value, value);
22
	};
24
	};
23
};
25
};
24
dojo.declare("dojo.data.RdfStore", dojo.data.core.RemoteStore, {_datatypeMap:{literal:function (value) {
26
dojo.declare("dojo.data.RdfStore", dojo.data.core.RemoteStore, {_datatypeMap:{literal:function (value) {
25
	var literal = value.value;
27
	var literal = value.value;
26
	if (value["xml:lang"]) {
28
	if (value["xml:lang"]) {
27
		literal.lang = value["xml:lang"];
29
		literal.lang = value["xml:lang"];
28
	}
30
	}
29
	return literal;
31
	return literal;
30
}, uri:function (value) {
32
}, uri:function (value) {
31
	return {id:value.value};
33
	return {id:value.value};
32
}, bnode:function (value) {
34
}, bnode:function (value) {
33
	return {id:"_:" + value.value};
35
	return {id:"_:" + value.value};
34
}, "http://www.w3.org/2001/XMLSchema#int":function (value) {
36
}, "http://www.w3.org/2001/XMLSchema#int":function (value) {
35
	return parseInt(value.value);
37
	return parseInt(value.value);
36
}, "http://www.w3.org/2001/XMLSchema#integer":function (value) {
38
}, "http://www.w3.org/2001/XMLSchema#integer":function (value) {
37
	return parseInt(value.value);
39
	return parseInt(value.value);
38
}, "http://www.w3.org/2001/XMLSchema#long":function (value) {
40
}, "http://www.w3.org/2001/XMLSchema#long":function (value) {
39
	return parseInt(value.value);
41
	return parseInt(value.value);
40
}, "http://www.w3.org/2001/XMLSchema#float":function (value) {
42
}, "http://www.w3.org/2001/XMLSchema#float":function (value) {
41
	return parseFloat(value.value);
43
	return parseFloat(value.value);
42
}, "http://www.w3.org/2001/XMLSchema#double":function (value) {
44
}, "http://www.w3.org/2001/XMLSchema#double":function (value) {
43
	return parseFloat(value.value);
45
	return parseFloat(value.value);
44
}, "http://www.w3.org/2001/XMLSchema#boolean":function (value) {
46
}, "http://www.w3.org/2001/XMLSchema#boolean":function (value) {
45
	return !value || value == "false" || value == "0" ? false : true;
47
	return !value || value == "false" || value == "0" ? false : true;
46
}}, _datatypeSerializers:[new dojo.data.RdfDatatypeSerializer(Number, Number.toString, "http://www.w3.org/2001/XMLSchema#float"), new dojo.data.RdfDatatypeSerializer(Boolean, Boolean.toString, "http://www.w3.org/2001/XMLSchema#boolean")], _findDatatypeSerializer:function (value) {
48
}}, _datatypeSerializers:[new dojo.data.RdfDatatypeSerializer(Number, Number.toString, "http://www.w3.org/2001/XMLSchema#float"), new dojo.data.RdfDatatypeSerializer(Boolean, Boolean.toString, "http://www.w3.org/2001/XMLSchema#boolean")], _findDatatypeSerializer:function (value) {
47
	var length = this._datatypeSerializers.length;
49
	var length = this._datatypeSerializers.length;
48
	for (var i = 0; i < length; i++) {
50
	for (var i = 0; i < length; i++) {
49
		var datatype = this._datatypeSerializers[i];
51
		var datatype = this._datatypeSerializers[i];
50
		if (value instanceof datatype.type) {
52
		if (value instanceof datatype.type) {
51
			return datatype;
53
			return datatype;
52
		}
54
		}
53
	}
55
	}
54
}, _toRDFValue:function (value) {
56
}, _toRDFValue:function (value) {
55
	var rdfvalue = {};
57
	var rdfvalue = {};
56
	if (value.id) {
58
	if (value.id) {
57
		if (value.id.slice(0, 2) == "_:") {
59
		if (value.id.slice(0, 2) == "_:") {
58
			rdfvalue.type = "bnode";
60
			rdfvalue.type = "bnode";
59
			rdfvalue.value = value.id.substring(2);
61
			rdfvalue.value = value.id.substring(2);
60
		} else {
62
		} else {
61
			rdfvalue.type = "uri";
63
			rdfvalue.type = "uri";
62
			rdfvalue.value = value.id;
64
			rdfvalue.value = value.id;
63
		}
65
		}
64
	} else {
66
	} else {
65
		if (typeof value == "string" || value instanceof String) {
67
		if (typeof value == "string" || value instanceof String) {
66
			rdfvalue.type = "literal";
68
			rdfvalue.type = "literal";
67
			rdfvalue.value = value;
69
			rdfvalue.value = value;
68
			if (value.lang) {
70
			if (value.lang) {
69
				rdfvalue["xml:lang"] = value.lang;
71
				rdfvalue["xml:lang"] = value.lang;
70
			}
72
			}
71
		} else {
73
		} else {
72
			if (typeof value == "number") {
74
			if (typeof value == "number") {
73
				value = new Number(value);
75
				value = new Number(value);
74
			} else {
76
			} else {
75
				if (typeof value == "boolean") {
77
				if (typeof value == "boolean") {
76
					value = new Boolean(value);
78
					value = new Boolean(value);
77
				}
79
				}
78
			}
80
			}
79
			var datatype = this._findDatatypeSerializer(value);
81
			var datatype = this._findDatatypeSerializer(value);
80
			if (datatype) {
82
			if (datatype) {
81
				rdfvalue = {"type":"typed-literal", "datatype":datatype.uri, "value":value.toString()};
83
				rdfvalue = {"type":"typed-literal", "datatype":datatype.uri, "value":value.toString()};
82
			} else {
84
			} else {
83
				rdfvalue = {"type":"literal", "value":value.toString()};
85
				rdfvalue = {"type":"literal", "value":value.toString()};
84
			}
86
			}
85
		}
87
		}
86
	}
88
	}
87
	return rdfvalue;
89
	return rdfvalue;
88
}, _setupSaveRequest:function (saveKeywordArgs, requestKw) {
90
}, _setupSaveRequest:function (saveKeywordArgs, requestKw) {
89
	var rdfResult = {"head":{"vars":["s", "p", "o"]}, "results":{"bindings":[]}};
91
	var rdfResult = {"head":{"vars":["s", "p", "o"]}, "results":{"bindings":[]}};
90
	var resources = [];
92
	var resources = [];
91
	for (var key in this._deleted) {
93
	for (var key in this._deleted) {
92
		resources.push(key);
94
		resources.push(key);
93
	}
95
	}
94
	rdfResult.results.deleted = resources;
96
	rdfResult.results.deleted = resources;
95
	for (key in this._changed) {
97
	for (key in this._changed) {
96
		var subject = this._toRDFValue(this.getIdentity(key));
98
		var subject = this._toRDFValue(this.getIdentity(key));
97
		var attributes = this._changed[key];
99
		var attributes = this._changed[key];
98
		for (var attr in attributes) {
100
		for (var attr in attributes) {
99
			var predicate = {type:"uri", value:attr};
101
			var predicate = {type:"uri", value:attr};
100
			var values = attributes[attr];
102
			var values = attributes[attr];
101
			if (!values.length) {
103
			if (!values.length) {
102
				continue;
104
				continue;
103
			}
105
			}
104
			var rdfvalues = [];
106
			var rdfvalues = [];
105
			for (var i = 0; i < values.length; i++) {
107
			for (var i = 0; i < values.length; i++) {
106
				var rdfvalue = this._toRDFValue(values[i]);
108
				var rdfvalue = this._toRDFValue(values[i]);
107
				rdfResult.results.bindings.push({s:subject, p:predicate, o:rdfvalue});
109
				rdfResult.results.bindings.push({s:subject, p:predicate, o:rdfvalue});
108
			}
110
			}
109
		}
111
		}
110
	}
112
	}
111
	var oldRegistry = dojo.json.jsonRegistry;
113
	var oldRegistry = dojo.json.jsonRegistry;
112
	dojo.json.jsonRegistry = this._jsonRegistry;
114
	dojo.json.jsonRegistry = this._jsonRegistry;
113
	var jsonString = dojo.json.serialize(rdfResult);
115
	var jsonString = dojo.json.serialize(rdfResult);
114
	dojo.json.jsonRegistry = oldRegistry;
116
	dojo.json.jsonRegistry = oldRegistry;
115
	requestKw.postContent = jsonString;
117
	requestKw.postContent = jsonString;
116
}, _resultToQueryMetadata:function (json) {
118
}, _resultToQueryMetadata:function (json) {
117
	return json.head;
119
	return json.head;
118
}, _resultToQueryData:function (json) {
120
}, _resultToQueryData:function (json) {
119
	var items = {};
121
	var items = {};
120
	var stmts = json.results.bindings;
122
	var stmts = json.results.bindings;
121
	for (var i = 0; i < stmts.length; i++) {
123
	for (var i = 0; i < stmts.length; i++) {
122
		var stmt = stmts[i];
124
		var stmt = stmts[i];
123
		var subject = stmt.s.value;
125
		var subject = stmt.s.value;
124
		if (stmt.s.type == "bnode") {
126
		if (stmt.s.type == "bnode") {
125
			subject = "_:" + subject;
127
			subject = "_:" + subject;
126
		}
128
		}
127
		var attributes = data[subject];
129
		var attributes = data[subject];
128
		if (!attributes) {
130
		if (!attributes) {
129
			attributes = {};
131
			attributes = {};
130
			data[stmt.s] = attributes;
132
			data[stmt.s] = attributes;
131
		}
133
		}
132
		var attr = attributes[stmt.p.value];
134
		var attr = attributes[stmt.p.value];
133
		if (!attr) {
135
		if (!attr) {
134
			attributes[stmt.p.value] = [stmt.o];
136
			attributes[stmt.p.value] = [stmt.o];
135
		} else {
137
		} else {
136
			attr.push(stmt.o);
138
			attr.push(stmt.o);
137
		}
139
		}
138
	}
140
	}
139
	return items;
141
	return items;
140
}});
142
}});
141
dojo.declare("dojo.data.RhizomeStore", dojo.data.RdfStore, {initializer:function (kwArgs) {
143
dojo.declare("dojo.data.RhizomeStore", dojo.data.RdfStore, {initializer:function (kwArgs) {
142
	this._serverQueryUrl = kwArgs.baseUrl + "search?view=json&searchType=RxPath&search=";
144
	this._serverQueryUrl = kwArgs.baseUrl + "search?view=json&searchType=RxPath&search=";
143
	this._serverSaveUrl = kwArgs.baseUrl + "save-metadata";
145
	this._serverSaveUrl = kwArgs.baseUrl + "save-metadata";
144
}, _resultToQueryMetadata:function (json) {
146
}, _resultToQueryMetadata:function (json) {
145
	return json;
147
	return json;
146
}, _resultToQueryData:function (json) {
148
}, _resultToQueryData:function (json) {
147
	return json;
149
	return json;
148
}, _setupSaveRequest:function (saveKeywordArgs, requestKw) {
150
}, _setupSaveRequest:function (saveKeywordArgs, requestKw) {
149
	requestKw.url = this._serverSaveUrl;
151
	requestKw.url = this._serverSaveUrl;
150
	requestKw.method = "post";
152
	requestKw.method = "post";
151
	requestKw.mimetype = "text/plain";
153
	requestKw.mimetype = "text/plain";
152
	var resources = [];
154
	var resources = [];
153
	for (var key in this._deleted) {
155
	for (var key in this._deleted) {
154
		resources.push(key);
156
		resources.push(key);
155
	}
157
	}
156
	var changes = {};
158
	var changes = {};
157
	for (key in this._changed) {
159
	for (key in this._changed) {
158
		if (!this._added[key]) {
160
		if (!this._added[key]) {
159
			resources.push(key);
161
			resources.push(key);
160
		}
162
		}
161
		var attributes = this._changed[key];
163
		var attributes = this._changed[key];
162
		var rdfattributes = {};
164
		var rdfattributes = {};
163
		for (var attr in attributes) {
165
		for (var attr in attributes) {
164
			var values = attributes[attr];
166
			var values = attributes[attr];
165
			if (!values.length) {
167
			if (!values.length) {
166
				continue;
168
				continue;
167
			}
169
			}
168
			var rdfvalues = [];
170
			var rdfvalues = [];
169
			for (var i = 0; i < values.length; i++) {
171
			for (var i = 0; i < values.length; i++) {
170
				var rdfvalue = this._toRDFValue(values[i]);
172
				var rdfvalue = this._toRDFValue(values[i]);
171
				rdfvalues.push(rdfvalue);
173
				rdfvalues.push(rdfvalue);
172
			}
174
			}
173
			rdfattributes[attr] = rdfvalues;
175
			rdfattributes[attr] = rdfvalues;
174
		}
176
		}
175
		changes[key] = rdfattributes;
177
		changes[key] = rdfattributes;
176
	}
178
	}
177
	var oldRegistry = dojo.json.jsonRegistry;
179
	var oldRegistry = dojo.json.jsonRegistry;
178
	dojo.json.jsonRegistry = this._jsonRegistry;
180
	dojo.json.jsonRegistry = this._jsonRegistry;
179
	var jsonString = dojo.json.serialize(changes);
181
	var jsonString = dojo.json.serialize(changes);
180
	dojo.json.jsonRegistry = oldRegistry;
182
	dojo.json.jsonRegistry = oldRegistry;
181
	requestKw.content = {rdfFormat:"json", resource:resources, metadata:jsonString};
183
	requestKw.content = {rdfFormat:"json", resource:resources, metadata:jsonString};
182
}});
184
}});
183
 
185