wisemapping-open-source/mindplot/src/main/javascript/RestPersistenceManager.js

190 lines
6.9 KiB
JavaScript
Raw Normal View History

2012-02-21 15:37:15 -03:00
/*
2012-10-04 20:48:01 -03:00
* Copyright [2012] [wisemapping]
2012-02-21 15:37:15 -03:00
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
2014-07-27 18:25:52 -03:00
//FIXME: remove Request class
2012-02-21 15:37:15 -03:00
mindplot.RESTPersistenceManager = new Class({
Extends:mindplot.PersistenceManager,
initialize:function (options) {
2012-02-21 15:37:15 -03:00
this.parent();
2013-01-31 22:50:21 -03:00
$assert(options.documentUrl, "documentUrl can not be null");
$assert(options.revertUrl, "revertUrl can not be null");
$assert(options.lockUrl, "lockUrl can not be null");
$assert(options.session, "session can not be null");
$assert(options.timestamp, "timestamp can not be null");
2013-01-31 22:50:21 -03:00
this.documentUrl = options.documentUrl;
this.revertUrl = options.revertUrl;
this.lockUrl = options.lockUrl;
this.timestamp = options.timestamp;
this.session = options.session;
2012-02-21 15:37:15 -03:00
},
2012-09-30 17:15:01 -03:00
saveMapXml:function (mapId, mapXml, pref, saveHistory, events, sync) {
2012-02-21 15:37:15 -03:00
var data = {
id:mapId,
2012-07-04 02:15:55 -03:00
xml:mapXml,
properties:pref
2012-02-21 15:37:15 -03:00
};
2012-09-30 17:15:01 -03:00
var persistence = this;
var query = "minor=" + !saveHistory;
2012-11-13 21:01:04 -03:00
query = query + "&timestamp=" + this.timestamp;
query = query + "&session=" + this.session;
2012-09-30 17:15:01 -03:00
2012-11-12 21:45:08 -03:00
if (!persistence.onSave) {
// Mark save in process and fire a event unlocking the save ...
persistence.onSave = true;
persistence.clearTimeout = setTimeout(function () {
persistence.clearTimeout = null;
persistence.onSave = false;
}, 10000);
var request = new Request({
2013-01-31 22:50:21 -03:00
url:this.documentUrl.replace("{id}", mapId) + "?" + query,
2012-11-12 21:45:08 -03:00
method:'put',
async:!sync,
onSuccess:function (responseText, responseXML) {
persistence.timestamp = responseText;
events.onSuccess();
},
onException:function (headerName, value) {
events.onError(persistence._buildError());
},
onComplete:function () {
// Clear event timeout ...
if (persistence.clearTimeout) {
clearTimeout(persistence.clearTimeout);
}
2012-11-12 21:45:08 -03:00
persistence.onSave = false;
},
onFailure:function (xhr) {
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')};
}
}
2012-11-12 21:45:08 -03:00
events.onError(userMsg);
persistence.onSave = false;
},
2013-03-07 23:46:07 -03:00
headers:{"Content-Type":"application/json; charset=utf-8", "Accept":"application/json"},
2012-11-12 21:45:08 -03:00
emulation:false,
urlEncoded:false
});
request.put(JSON.encode(data));
}
2012-07-04 02:15:55 -03:00
},
discardChanges:function (mapId) {
var request = new Request({
url:this.revertUrl.replace("{id}", mapId),
async:false,
method:'post',
onSuccess:function () {
},
onException:function () {
},
onFailure:function () {
},
2013-03-07 23:46:07 -03:00
headers:{"Content-Type":"application/json; charset=utf-8", "Accept":"application/json"},
2012-07-04 02:15:55 -03:00
emulation:false,
urlEncoded:false
});
request.post();
2012-09-30 17:15:01 -03:00
},
unlockMap:function (mindmap) {
var mapId = mindmap.getId();
var request = new Request({
url:this.lockUrl.replace("{id}", mapId),
async:false,
method:'put',
onSuccess:function () {
2012-07-04 02:15:55 -03:00
2012-09-30 17:15:01 -03:00
},
onException:function () {
},
onFailure:function () {
},
headers:{"Content-Type":"text/plain"},
emulation:false,
urlEncoded:false
});
request.put("false");
2012-10-05 20:05:33 -03:00
},
_buildError:function (jsonSeverResponse) {
var message = jsonSeverResponse ? jsonSeverResponse.globalErrors[0] : null;
var severity = jsonSeverResponse ? jsonSeverResponse.globalSeverity : null;
if (!message) {
message = $msg('SAVE_COULD_NOT_BE_COMPLETED');
}
if (!severity) {
severity = "INFO";
}
return {severity:severity, message:message};
2013-01-31 22:50:21 -03:00
},
loadMapDom:function (mapId) {
// Let's try to open one from the local directory ...
var xml;
2014-03-16 16:56:44 -03:00
$.ajax({
2013-01-31 22:50:21 -03:00
url:this.documentUrl.replace("{id}", mapId) + "/xml",
method:'get',
async:false,
headers:{"Content-Type":"text/plain","Accept":"application/xml"},
2014-03-16 16:56:44 -03:00
success:function (responseText) {
2013-01-31 22:50:21 -03:00
xml = responseText;
}
});
// If I could not load it from a file, hard code one.
if (xml == null) {
throw new Error("Map could not be loaded");
}
2014-03-16 16:56:44 -03:00
return xml;
2012-09-30 17:15:01 -03:00
}
2012-02-21 15:37:15 -03:00
}
);