+ */
+
+ var action, msg, row, status, button = '';
+
+ switch(data.state) {
+ case STATE_VALUE:
+ switch(data.op) {
+ // XXX other events missing !!
+ case STATE_VALUE_CHANGE_PENDING:
+ action = 'UPDATE';
+ break;
+ }
+ break;
+
+ case STATE_SET:
+ switch(data.op) {
+ case STATE_SET_IN_PENDING:
+ action = 'ADD';
+ msg = 'PENDING';
+ button = "<span class='glyphicon glyphicon-remove ResourceSelectedClose' id='" + data.key + "'/>";
+ break;
+
+ case STATE_SET_OUT_PENDING:
+ action = 'REMOVE';
+ msg = 'PENDING';
+ button = "<span class='glyphicon glyphicon-remove ResourceSelectedClose' id='" + data.key + "'/>";
+ break;
+
+ case STATE_SET_IN:
+ case STATE_SET_OUT:
+ // find line and delete it
+ row = this.find_row(data.value);
+ if (row)
+ this.table.fnDeleteRow(row.nTr);
+ return;
+
+ case STATE_SET_IN_SUCCESS:
+ case STATE_SET_OUT_SUCCESS:
+ msg = 'SUCCESS';
+ break;
+
+ case STATE_SET_IN_FAILURE:
+ case STATE_SET_OUT_FAILURE:
+ msg = 'FAILURE';
+ break;
+
+ }
+ break;
+
+ default:
+ return;
+ }
+
+ status = msg + status;
+
+ // find line
+ // if no, create it, else replace it
+ // XXX it's not just about adding lines, but sometimes removing some
+ // XXX how do we handle status reset ?
+
+ // Jordan : I don't understand this. I added this test otherwise we have string = ""..."" double quoted twice.
+ if (typeof(data.value) !== "string")
+ data.value = JSON.stringify(data.value);
+ data.selected_resources = this.selected_resources;
+ row = this.find_row(data.value);
+ newline = [action, data.key, data.value, msg, button];
+ if (!row) {
+ // XXX second parameter refresh = false can improve performance. todo in querytable also
+ this.table.fnAddData(newline);
+ row = this.find_row(data.value);
+ } else {
+ // Update row text...
+ this.table.fnUpdate(newline, row.nTr);
+ }
+
+ // Change cell color according to status
+ if (row) {
+ $(row.nTr).removeClass('add remove')
+ var cls = action.toLowerCase();
+ if (cls)
+ $(row.nTr).addClass(cls);
+ }