X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fupdater%2Fupdater.js;h=7ac0fc7b9f6c410f0f56fa9e2cb8a8bfa5b69a3b;hb=9e6b289bad3042093d0414ed90a336aaa5bfa09a;hp=7c587e90c1a7cb921382a61e69f98b9fd8519b34;hpb=9e5052263621b5e05e17dec4eba08b69efb611af;p=myslice.git diff --git a/plugins/updater/updater.js b/plugins/updater/updater.js index 7c587e90..7ac0fc7b 100644 --- a/plugins/updater/updater.js +++ b/plugins/updater/updater.js @@ -4,8 +4,13 @@ * License: GPLv3 */ +// xxx this is ongoing work, very rough, and not working at all yet + ( function ( $ ) { + var debug=false; +// debug=true + $.fn.Updater = function ( method ) { /* Method calling logic */ if ( methods[method] ) { @@ -23,10 +28,12 @@ var $this = $(this); var updater = new Updater (options); $this.data('Updater',updater); - /* Subscribe to query updates */ + // xxx not tested yet var results_channel = '/results/' + options.query_uuid + '/changed'; - $.subscribe(results_channel, function (e,rows) { updater.update_slice (e,rows); } ); - updater.arm_button(); + $.subscribe(results_channel, function (e,rows) { updater.query_completed (e,rows); } ); + // under test.. + var failed_channel = '/results/' + options.query_uuid + '/failed'; + $.subscribe(failed_channel, $this, function (e,code,output) { updater.query_failed (e, code, output); } ); }); }, destroy : function( ) { @@ -52,97 +59,109 @@ var query=manifold.find_query (options.query_uuid); // very rough way of filling this for now this.update_query = - new ManifoldQuery ("update", query.subject, null, query.filters, + new ManifoldQuery ("update", query.object, null, query.filters, {}, // params query.fields, undefined, /* unique */ - query.query_uuid, /* tmp */ + Math.uuid(32,16), undefined, undefined /* maybe some day I'll get that one */); + manifold.insert_query (this.update_query); + // arm button once document is loaded + (function(updater) {$(document).ready(function(){updater.arm_button()})})(this); this.arm_button = function () { $('#updater-' + this.options.plugin_uuid).click(this, this.submit_update_request); }, this.submit_update_request = function (e) { + var query_uuid = e.data.options.query_uuid; var update_query = e.data.update_query; - $.publish("messages:debug","Updater.submit_update_request " + update_query.__repr()); - // xxx here - we need a valid query_uuid so the results will make it - manifold.asynchroneous_exec ( [ {'query_uuid': xxx, 'id': null}]); - // looks like a previous attempt to disable the button while the query is flying - //$('#updateslice-' + options.plugin_uuid).prop('disabled', true); - } - }; + if (debug) messages.debug("Updater.submit_update_request " + update_query.__repr()); + // actually send the Update query, but publish results as if coming from the original query + manifold.asynchroneous_exec ( [ {'query_uuid': update_query.query_uuid, 'publish_uuid' : query_uuid} ], false); + // disable button while the query is flying + $('#updater-' + e.data.options.plugin_uuid).attr('disabled', 'disabled'); + }, - /* Private methods */ + this.query_failed = function (e, code, output) { + var plugindiv=e.data; + var updater=plugindiv.data('Updater'); + $('#updater-' + updater.options.plugin_uuid).removeAttr('disabled'); + // just as a means to deom how to retrieve the stuff passed on the channel + if (debug) messages.debug("retrieved error code " + code + " and output " + output); + } + + this.update_resources = function (e, resources, change) { + data = e.data.instance.data().Slices; - function update_resources(e, resources, change) { - data = e.data.instance.data().Slices; + data.update_query.params['resource'] = resources + $.publish('/update/' + data.options.query_uuid, [data.update_query, true]); + }, - data.update_query.params['resource'] = resources - $.publish('/update/' + data.options.query_uuid, [data.update_query, true]); - } + this.update_leases = function (e, leases, change) { + data = e.data.instance.data().Slices; + + data.update_query.params['lease'] = leases + $.publish('/update/' + data.options.query_uuid, [data.update_query, true]); + }, + + this.query_completed = function (e, rows, query) { - function update_leases(e, leases, change) { - data = e.data.instance.data().Slices; - - data.update_query.params['lease'] = leases - $.publish('/update/' + data.options.query_uuid, [data.update_query, true]); - } - - function update_slice(e, rows, query) { - /* This function is called twice : get and update */ + /* This function is called twice : get and update */ + messages.info("updater.query_completed - not implemented yet"); + return; - var data = e.data.instance.data().Slices; + var data = e.data.instance.data().Slices; - /* Update placeholders and trigger subqueries updates */ - if (rows.length == 0) { - alert("no result"); - return; - } - var slice = rows[0]; + /* Update placeholders and trigger subqueries updates */ + if (rows.length == 0) { + alert("no result"); + return; + } + var slice = rows[0]; - /* for get */ - if (data.update_query == null) { - data.update_query = new Query('update','slice', 'now', query.filter, {"resource": null, "lease": null}, query.fields, 0, data.options.query_uuid); - } - /* In case of update the list of resources and leases should be updated accordingly */ + /* for get */ + if (data.update_query == null) { + data.update_query = new Query('update','slice', 'now', query.filter, {"resource": null, "lease": null}, query.fields, 0, data.options.query_uuid); + } + /* In case of update the list of resources and leases should be updated accordingly */ - /* only for get ? */ - $.each(slice, function(key, value) { - if (typeof value == 'string') { - $('#myslice__' + key).html(value); - } - }); - - /* TODO avoid repetitions + made this code generic and plugin-independent */ + /* only for get ? */ + $.each(slice, function(key, value) { + if (typeof value == 'string') { + $('#myslice__' + key).html(value); + } + }); - if (query.method == 'update') { - // XXX NON, les uuid doivent etre les memes que dans la query Get, cet appel devrait etre fait avant. - query.analyzed_subqueries(); - } + /* TODO avoid repetitions + made this code generic and plugin-independent */ + + if (query.method == 'update') { + // XXX NON, les uuid doivent etre les memes que dans la query Get, cet appel devrait etre fait avant. + query.analyzed_subqueries(); + } - /* NOTE: Dans le cadre d'un update, on n'a pas besoin de refaire tout - * le query plan et obtenir toutes les infos, par contre on ne peut pas - * savoir d'avance quels parametres ont été accordés, changés, etc. - * Dans le cas général, ca pourrait affecter le query plan... - * Par contre on n'a pas d'information sur toutes les resources, mais - * uniquement celles dans la liste. Comment gérer ? - */ - - /* Inform child plugins about their respective parts of the results */ - /* Only for get */ - var r_subq = query.analyzed_query.subqueries['resource']; - var l_subq = query.analyzed_query.subqueries['lease']; - $.publish('/results/' + r_subq.uuid + '/changed', [slice['resource'], r_subq]); - $.publish('/results/' + l_subq.uuid + '/changed', [slice['lease'], l_subq]); - - /* Subscribe to get notifications from child plugins */ - if (!data.child_subscribe) { - $.subscribe('/update-set/' + r_subq.uuid, {instance: e.data.instance}, update_resources); - $.subscribe('/update-set/' + l_subq.uuid, {instance: e.data.instance}, update_leases); - data.child_subscribe = true - } - + /* NOTE: Dans le cadre d'un update, on n'a pas besoin de refaire tout + * le query plan et obtenir toutes les infos, par contre on ne peut pas + * savoir d'avance quels parametres ont été accordés, changés, etc. + * Dans le cas général, ca pourrait affecter le query plan... + * Par contre on n'a pas d'information sur toutes les resources, mais + * uniquement celles dans la liste. Comment gérer ? + */ + + /* Inform child plugins about their respective parts of the results */ + /* Only for get */ + var r_subq = query.analyzed_query.subqueries['resource']; + var l_subq = query.analyzed_query.subqueries['lease']; + $.publish('/results/' + r_subq.uuid + '/changed', [slice['resource'], r_subq]); + $.publish('/results/' + l_subq.uuid + '/changed', [slice['lease'], l_subq]); + + /* Subscribe to get notifications from child plugins */ + if (!data.child_subscribe) { + $.subscribe('/update-set/' + r_subq.uuid, {instance: e.data.instance}, update_resources); + $.subscribe('/update-set/' + l_subq.uuid, {instance: e.data.instance}, update_leases); + data.child_subscribe = true + } + + } } - })( jQuery );