Avoid overlapping saves ...

This commit is contained in:
Paulo Gustavo Veiga 2012-11-12 21:45:08 -03:00
parent 90b584569b
commit 8de31d9edc

View File

@ -46,54 +46,71 @@ mindplot.RESTPersistenceManager = new Class({
query = query + (this.timestamp ? "&timestamp=" + this.timestamp : ""); query = query + (this.timestamp ? "&timestamp=" + this.timestamp : "");
query = query + (this.session ? "&session=" + this.session : ""); query = query + (this.session ? "&session=" + this.session : "");
var request = new Request({ if (!persistence.onSave) {
url:this.saveUrl.replace("{id}", mapId) + "?" + query,
method:'put',
async:!sync,
onSuccess:function (responseText, responseXML) { // Mark save in process and fire a event unlocking the save ...
events.onSuccess(); persistence.onSave = true;
persistence.timestamp = responseText; persistence.clearTimeout = setTimeout(function () {
}, persistence.clearTimeout = null;
persistence.onSave = false;
}, 10000);
onException:function (headerName, value) { var request = new Request({
console.log("onException...."); url:this.saveUrl.replace("{id}", mapId) + "?" + query,
method:'put',
async:!sync,
events.onError(persistence._buildError()); onSuccess:function (responseText, responseXML) {
}, persistence.timestamp = responseText;
events.onSuccess();
},
onFailure:function (xhr) { onException:function (headerName, value) {
events.onError(persistence._buildError());
},
var responseText = xhr.responseText; onComplete:function () {
var userMsg = {severity:"SEVERE", message:$msg('SAVE_COULD_NOT_BE_COMPLETED')}; // Clear event timeout ...
if (persistence.clearTimeout) {
var contentType = this.getHeader("Content-Type"); clearTimeout(persistence.clearTimeout);
if (contentType != null && contentType.indexOf("application/json") != -1) {
var serverMsg = null;
try {
serverMsg = JSON.decode(responseText);
serverMsg = serverMsg.globalSeverity ? serverMsg : null;
} catch (e) {
// Message could not be decoded ...
} }
userMsg = persistence._buildError(serverMsg); persistence.onSave = false;
},
} else { onFailure:function (xhr) {
if (this.status == 405) {
userMsg = {severity:"SEVERE", message:$msg('SESSION_EXPIRED')}; var responseText = xhr.responseText;
var userMsg = {severity:"SEVERE", message:$msg('SAVE_COULD_NOT_BE_COMPLETED')};
var contentType = this.getHeader("Content-Type");
if (contentType != null && contentType.indexOf("application/json") != -1) {
var serverMsg = null;
try {
serverMsg = JSON.decode(responseText);
serverMsg = serverMsg.globalSeverity ? serverMsg : null;
} catch (e) {
// Message could not be decoded ...
}
userMsg = persistence._buildError(serverMsg);
} else {
if (this.status == 405) {
userMsg = {severity:"SEVERE", message:$msg('SESSION_EXPIRED')};
}
} }
} events.onError(userMsg);
events.onError(userMsg);
// Only for debug. Remove. // @Todo: Only for debug. Remove.
throw new Error("responseText:" + responseText + ",status:" + this.status); persistence.onSave = false;
}, throw new Error("responseText:" + responseText + ",status:" + this.status);
},
headers:{"Content-Type":"application/json", "Accept":"application/json"}, headers:{"Content-Type":"application/json", "Accept":"application/json"},
emulation:false, emulation:false,
urlEncoded:false urlEncoded:false
}); });
request.put(JSON.encode(data)); request.put(JSON.encode(data));
}
}, },
discardChanges:function (mapId) { discardChanges:function (mapId) {