source: main/trunk/greenstone2/web/script/gsajaxapi.js@ 24072

Last change on this file since 24072 was 24072, checked in by davidb, 13 years ago

Introduction of GS API calls that take an array of items (e.g. an array of OIDs or filenames). In adding in this ability, we have started to make use of JSON.

Also ability to control building using a manifest file (its fields passed in using JSON). Also the ability to delete files in the archives directory (i.e. when a collection is beeing used in an 'onlyadd' way). (Still needs to the more general case to be implemented.)

File size: 9.7 KB
Line 
1
2function GSAjaxAPI(gwcgi,collect)
3{
4 var gwcgi_ = gwcgi;
5 var collect_ = collect;
6
7
8 this.fullDomainURL = function(localURL)
9 {
10 return window.location.protocol+'//'+window.location.host+localURL;
11 }
12
13 this.apiURL = function(apiProg)
14 {
15 //get the location of the cgi program
16 splitpos = gwcgi_.lastIndexOf("/");
17
18 var mdserver;
19 if (splitpos >= 0) {
20 mdserver = gwcgi.substring(0,(splitpos+1)) + apiProg;
21 }
22 else {
23 mdserver = apiProg;
24 }
25
26 return mdserver;
27 }
28
29 this.metadataserverURL = function()
30 {
31 return this.apiURL("metadata-server.pl");
32 }
33
34 this.indexserverURL = function()
35 {
36 return this.apiURL("index-server.pl");
37 }
38
39 this.buildserverURL = function()
40 {
41 return this.apiURL("build-server.pl");
42 }
43
44 this.explodeserverURL = function()
45 {
46 return this.apiURL("explode-server.pl");
47 }
48
49 this.myspaceserverURL = function()
50 {
51 return this.apiURL("myspace-server.pl");
52 }
53
54
55 this.urlGetAsync = function(url,callback)
56 {
57 var xmlHttp;
58 try {
59 // Firefox, Opera 8.0+, Safari
60 xmlHttp=new XMLHttpRequest();
61 }
62 catch (e) {
63 // Internet Explorer
64 try {
65 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
66 }
67 catch (e) {
68 try {
69 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
70 }
71 catch (e) {
72 alert("Your browser does not support AJAX!");
73 return false;
74 }
75 }
76 }
77
78 var typeof_callback = typeof(callback);
79 if ((typeof_callback == "string") || (typeof_callback == "number") || (typeof_callback == "boolean")) {
80 var locid = callback;
81
82 xmlHttp.onreadystatechange=function() {
83 if(xmlHttp.readyState==4) {
84 if (locelem != null) {
85 var locelem = document.getElementById(locid);
86
87 locelem.innerHTML = xmlHttp.responseText;
88 }
89 }
90 }
91 }
92 else if (typeof_callback == "function") {
93 xmlHttp.onreadystatechange=function() {
94 if(xmlHttp.readyState==4) {
95 callback(xmlHttp);
96 }
97 }
98 }
99 else {
100 alert("Unrecognized type of callback value: " + typeof_callback);
101 }
102
103 xmlHttp.open("GET",url,true);
104 xmlHttp.send(null);
105 }
106
107
108 this.urlGetSync = function(url)
109 {
110 // alert("url = " + url);
111
112 var xmlHttp;
113 try {
114 // Firefox, Opera 8.0+, Safari
115 xmlHttp=new XMLHttpRequest();
116 }
117 catch (e) {
118 // Internet Explorer
119 try {
120 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
121 }
122 catch (e) {
123 try {
124 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
125 }
126 catch (e) {
127 alert("Your browser does not support AJAX!");
128 return false;
129 }
130 }
131 }
132
133 xmlHttp.open("GET",url,false);
134 xmlHttp.send(null);
135
136 // alert("response = '" + xmlHttp.responseText + "'");
137
138 return xmlHttp.responseText;
139 }
140
141
142
143
144
145 this.setLiveMetadata = function(id,metaname,metavalue)
146 {
147 var mdserver = this.metadataserverURL();
148
149 var url = mdserver + "?a=set-live-metadata";
150 url += "&c="+collect_;
151 url += "&d="+id;
152 url += "&metaname=" + metaname;
153 url += "&metavalue=" + metavalue;
154
155 this.urlGetSync(url);
156 }
157
158 this._setMetadata = function(mode,docid,metaname,metapos,metavalue,metamode)
159 {
160 var mdserver = this.metadataserverURL();
161
162 var params = "a=set" + mode + "-metadata";
163 params += "&c="+collect_;
164 params += "&d="+docid;
165 params += "&metaname=" + metaname;
166 if (metapos!=null) {
167 params += "&metapos=" + metapos;
168 }
169 params += "&metavalue=" + metavalue;
170 if (metamode!=null) {
171 params += "&metamode=" + metamode;
172 }
173
174 this.urlGetSync(mdserver + "?" + params);
175 //this.urlPostSync(mdserver,params);
176 }
177
178
179 this._setDocumentArrayMetadata = function(mode,docArray,metamode)
180 {
181 docArrayJSON = JSON.stringify(docArray);
182
183 var mdserver = this.metadataserverURL();
184
185 var params = "a=set" + mode + "-metadata-array";
186 params += "&c="+collect_;
187 params += "&json="+docArrayJSON;
188
189 if (metamode!=null) {
190 params += "&metamode=" + metamode;
191 }
192
193 this.urlGetSync(mdserver + "?" + params);
194
195 }
196
197
198 this.setDocumentMetadata = function(docid,metaname,metapos,metavalue)
199 {
200 // Allow for three param call to function, where metapos is missed out
201 if (metavalue==null) {
202 // 4 param case
203 metavalue = metapos;
204 metapos = null;
205 }
206
207 this._setMetadata("",docid,metaname,metapos,metavalue);
208 this._setMetadata("-archives",docid,metaname,metapos,metavalue,"override");
209
210 }
211
212 this.setDocumentArrayMetadata = function(docArray,metamode)
213 {
214 //showDialog('Greenstone Javascript API','This sequence of changes has been commited into the system.','success', 2);
215
216 this._setDocumentArrayMetadata("",docArray,metamode);
217 this._setDocumentArrayMetadata("-archives",docArray,metamode);
218 }
219
220 this.setNewDocumentMetadata = function(docid,metaname,metavalue)
221 {
222 this._setMetadata("",docid,metaname,null,metavalue);
223 this._setMetadata("-archives",docid,metaname,null,metavalue,"accumulate");
224 }
225
226 this.setImportMetadata = function(docid,metaname,metapos,metavalue)
227 {
228 this._setMetadata("-import",docid,metaname,metapos,metavalue,"override");
229 }
230
231
232 this.explodeDocument = function(docid)
233 {
234 var exserver = this.explodeserverURL();
235
236 var url = exserver + "?a=explode-document";
237 url += "&c="+collect_;
238 url += "&d="+docid;
239
240 this.urlGetSync(url);
241 }
242
243 this.deleteDocument = function(docid,onlyAdd)
244 {
245 var exserver = this.explodeserverURL();
246
247 var url = exserver + "?a=delete-document";
248 url += "&c="+collect_;
249 params += "&onlyadd="+onlyAdd;
250 url += "&d="+docid;
251
252 this.urlGetSync(url);
253 }
254
255 this.deleteDocumentArray = function(docArray,onlyAdd)
256 {
257 docArrayJSON = JSON.stringify(docArray);
258
259 var exserver = this.explodeserverURL();
260
261 var params = "a=delete-document-array";
262 params += "&c="+collect_;
263 params += "&onlyadd="+onlyAdd;
264 params += "&json="+docArrayJSON;
265
266 this.urlGetSync(exserver + "?" + params);
267
268 }
269
270
271 this.cloneDocument = function(docid,toCollect)
272 {
273 var msserver = this.myspaceserverURL();
274
275 var url = msserver + "?a=clone";
276 url += "&c="+collect_;
277 url += "&d="+docid;
278 url += "&toCollect="+toCollect;
279
280 this.urlGetSync(url);
281 }
282
283 // consider name change to reindexDocument
284 this.documentReindex = function(docid)
285 {
286 var mdserver = this.metadataserverURL();
287
288 var url = mdserver + "?a=reindex-document";
289 url += "&c="+collect_;
290 url += "&d="+docid;
291
292 this.urlGetSync(url);
293 }
294
295
296 this.reindexCollection = function(mode,callback)
297 {
298 if (mode==null) {
299 mode = "incremental";
300 }
301
302 var idserver = this.indexserverURL();
303
304 var url = idserver + "?a=" + mode + "-rebuild";
305 url += "&c="+collect_;
306
307 this.urlGetAsync(url,callback);
308 }
309
310
311 this.buildByManifestGeneral = function(hashargs)
312 {
313 var idserver = this.buildserverURL();
314
315 var url = idserver + "?a=build-by-manifest";
316 url += "&c="+collect_;
317
318 if (hashargs["index-files"] != undefined) {
319 url += "&index-files=" + JSON.stringify(hashargs["index-files"]);
320 }
321
322 if (hashargs["reindex-files"] != undefined) {
323 url += "&reindex-files=" + JSON.stringify(hashargs["reindex-files"]);
324 }
325 if (hashargs["delete-OIDs"] != undefined) {
326 url += "&delete-OIDs=" + JSON.stringify(hashargs["delete-OIDs"]);
327 }
328
329 this.urlGetSync(url);
330 }
331
332 this.indexByManifest = function(docidArray)
333 {
334 var hashargs = {};
335 hashargs["index-files"] = docidArray;
336 this.buildByManifestGeneral(hashargs);
337 }
338
339 this.reindexByManifest = function(docidArray)
340 {
341 var hashargs = {};
342 hashargs["reindex-files"] = docidArray;
343 this.buildByManifestGeneral(hashargs);
344 }
345 this.deleteByManifest = function(docidArray)
346 {
347 var hashargs = {};
348 hashargs["delete-OIDs"] = docidArray;
349 this.buildByManifestGeneral(hashargs);
350 }
351
352 this.getLiveMetadata = function(id,metaname)
353 {
354 var mdserver = this.metadataserverURL();
355
356 var url = mdserver + "?a=get-live-metadata";
357 url += "&c="+collect_;
358 url += "&d="+id;
359 url += "&metaname=" + metaname;
360
361 var metavalue = this.urlGetSync(url);
362
363 return metavalue;
364 }
365
366 this.getDocumentMetadata = function(docoid,metaname,metapos)
367 {
368 var mdserver = this.metadataserverURL();
369
370 var url = mdserver + "?a=get-metadata";
371 url += "&c="+collect_;
372 url += "&d="+docoid;
373 url += "&metaname=" + metaname;
374 if (metapos!=null) {
375 url += "&metapos=" + metapos;
376 }
377
378 return this.urlGetSync(url);
379 }
380
381 this.removeLiveMetadata = function(id,metaname)
382 {
383 var mdserver = this.metadataserverURL();
384
385 var url = mdserver + "?a=remove-live-metadata";
386 url += "&c="+collect_;
387 url += "&d="+id;
388 url += "&metaname=" + metaname;
389
390 this.urlGetSync(url);
391 }
392
393 this.removeDocumentMetadata = function(docid,metaname,metapos)
394 {
395 var mdserver = this.metadataserverURL();
396
397 var url = mdserver + "?a=remove-metadata";
398 url += "&c="+collect_;
399 url += "&d="+docid;
400 url += "&metaname=" + metaname;
401 if (metapos!=null) {
402 url += "&metapos=" + metapos;
403 }
404
405 this.urlGetSync(url);
406 }
407
408 return true;
409
410}
Note: See TracBrowser for help on using the repository browser.