Author: lgiessmann
Date: Thu Oct 14 12:07:24 2010
New Revision: 327
Log:
adapted the "mark-as-deleted" functions of the UI to the latest update of the backend; fixed a bug in "json_tmcl_validation" when iterating marked-as-deleted assocations; fixed a bug in the UI that appeared after committing delete-messages to the backend --> ticket #74
Modified:
trunk/src/ajax/javascripts/datamodel.js
trunk/src/ajax/javascripts/requests.js
trunk/src/json/json_tmcl_validation.lisp
trunk/src/model/datamodel.lisp
trunk/src/rest_interface/set-up-json-interface.lisp
Modified: trunk/src/ajax/javascripts/datamodel.js
==============================================================================
--- trunk/src/ajax/javascripts/datamodel.js (original)
+++ trunk/src/ajax/javascripts/datamodel.js Thu Oct 14 12:07:24 2010
@@ -4355,58 +4355,69 @@
if(type !== "Occurrence" && type !== "Name" && type !== "Variant"
&& type !== "Topic" && type !== "Association"){
throw "From makeRemoveObject(): type must be: \"Occurrence\" || \"Name\" " +
- "|| \"Variant\" || \"Topic\" || \"Association\" but is " + type;
+ "|| \"Topic\" but is " + type;
}
if (!objectToDelete){
throw "From makeRemoveObject(): objectToDelete must be set";
}
- var parentTopic = "null";
- if(type === "Occurrence" || type === "Name"){
- var psiFrame = objectToDelete.getFrame().parentNode.parentNode.parentNode.parentNode.select("tr." + CLASSES.subjectIdentifierFrame())[0];
+ // --- Returns a JSON-object that corresponds to a topicStub
+ function makeJsonTopicStub(topicFrame){
+ var topPSIs = "null";
+ var psiFrame = topicFrame.select("tr." + CLASSES.subjectIdentifierFrame())[0];
var psiFields = psiFrame.select("input");
- for(i = 0; psiFields && i !== psiFields.length; ++i){
+ for(var i = 0; psiFields && i !== psiFields.length; ++i){
var psiValue = psiFields[i].value;
if(psiValue.strip().length !== 0){
- parentTopic = psiValue.strip().toJSON();
+ topPSIs = new Array(psiValue.strip()).toJSON();
break;
}
}
- }
-
- var topics = "null";
- if (type === "Topic"){
- var psiFrame = objectToDelete.getFrame().select("tr." + CLASSES.subjectIdentifierFrame())[0];
- var psiFields = psiFrame.select("input");
- for(i = 0; psiFields && i !== psiFields.length; ++i){
- var psiValue = psiFields[i].value;
- if(psiValue.strip().length !== 0){
- topics = new Array(psiValue.strip()).toJSON();
+ var topIIs = "null";
+ var iiFrame = topicFrame.select("tr." + CLASSES.itemIdentityFrame())[0];
+ var iiFields = iiFrame.select("input");
+ for(var i = 0; iiFields && i !== iiFields.length; ++i){
+ var iiValue = iiFields[i].value;
+ if(iiValue.strip().length !== 0){
+ topIIs = new Array(iiValue.strip()).toJSON();
break;
}
}
+ var topSLs = "null";
+ var slFrame = topicFrame.select("tr." + CLASSES.subjectLocatorFrame())[0];
+ var slFields = slFrame.select("input");
+ for(var i = 0; slFields && i !== slFields.length; ++i){
+ var slValue = slFields[i].value;
+ if(slValue.strip().length !== 0){
+ topSLs = new Array(slValue.strip()).toJSON();
+ break;
+ }
+ }
+ return "{\"id\":\"null\",\"itemIdentities\":" + topIIs +
+ ",\"subjectLocators\":" + topSLs + ",\"subjectIdentifiers\":" + topPSIs +
+ ",\"instanceOfs\":\"null\",\"names\":\"null\",\"occurrences\":\"null\"}";
}
- var deletedObjects = null;
- if(type === "Topic"){ deletedObjects = topics; }
- else { deletedObjects = "[" + objectToDelete.toJSON() + "]"; }
+ var delMessage = "null";
- var jsonData = "{\"type\":\"" + type + "\"," +
- "\"topics\":" + topics + "," +
- "\"associations\":" + "null" + "," +
- "\"parentTopic\":" + parentTopic + "," +
- "\"parentName\":" + "null" + "," +
- "\"names\":" + (type === "Name" ? deletedObjects : "null") + "," +
- "\"variants\":" + "null" + "," +
- "\"occurrences\":" + (type === "Occurrence" ? deletedObjects : "null") + "," +
- "\"parentAssociation\":" + "null" + "," +
- "\"roles\":" + "null" + "}";
+ switch(type){
+ case "Topic":
+ delMessage = "{\"type\":\"Topic\",\"delete\":" + makeJsonTopicStub(objectToDelete.getFrame()) + "}";
+ break;
+ case "Name":
+ case "Occurrence":
+ delMessage = "{\"type\":\"" + type + "\",\"parent\":" +
+ makeJsonTopicStub(objectToDelete.getFrame().parentNode.parentNode.parentNode.parentNode) +
+ ",\"delete\":" + objectToDelete.toJSON() + "}";
+ break;
+ }
- commitDeletedObject(jsonData, function(xhr){
+ commitDeletedObject(delMessage, function(xhr){
alert("Objected deleted");
if(type === "Topic"){
$(CLASSES.subPage()).update();
- makeHome();
+ setNaviClasses($(PAGES.home));
+ makePage(PAGES.home, "");
}
else if (type === "Occurrence" || type === "Name"){
if(objectToDelete.__owner__.__frames__.length > objectToDelete.__max__
Modified: trunk/src/ajax/javascripts/requests.js
==============================================================================
--- trunk/src/ajax/javascripts/requests.js (original)
+++ trunk/src/ajax/javascripts/requests.js Thu Oct 14 12:07:24 2010
@@ -219,7 +219,7 @@
}
-// --- Sends a POST-Message to the server. The sent message enables the server
+// --- Sends a DELETE-Message to the server. The sent message enables the server
// --- to find the spcified object and mark it as deleted
function commitDeletedObject(json, onSuccessHandler, onFailureHandler)
{
@@ -227,9 +227,8 @@
try{
var onFailure = onFailureHandler ? onFailureHandler : defaultFailureHandler;
var timeFun = setAjaxTimeout(TIMEOUT, COMMIT_URL);
-
new Ajax.Request(MARK_AS_DELETED_URL, {
- "method" : "post",
+ "method" : "delete",
"postBody" : json,
"onSuccess" : createXHRHandler(onSuccessHandler, timeFun),
"onFailure" : createXHRHandler(onFailure, timeFun)});
Modified: trunk/src/json/json_tmcl_validation.lisp
==============================================================================
--- trunk/src/json/json_tmcl_validation.lisp (original)
+++ trunk/src/json/json_tmcl_validation.lisp Thu Oct 14 12:07:24 2010
@@ -202,7 +202,8 @@
(type (get-item-by-psi *type-psi* :revision revision)))
(let ((topic-types
(loop for role in (player-in-roles topic-instance :revision revision)
- when (eq instance (instance-of role :revision revision))
+ when (and (eq instance (instance-of role :revision revision))
+ (parent role :revision revision))
collect (loop for other-role in
(roles (parent role :revision revision) :revision revision)
when (and (not (eq role other-role))
@@ -228,7 +229,8 @@
(type (get-item-by-psi *type-psi* :revision revision)))
(let ((topic-instances
(loop for role in (player-in-roles topic-instance :revision revision)
- when (eq type (instance-of role :revision revision))
+ when (and (eql type (instance-of role :revision revision))
+ (parent role :revision revision))
collect (loop for other-role in (roles (parent role :revision revision)
:revision revision)
when (and (not (eq role other-role))
@@ -254,7 +256,8 @@
(subtype (get-item-by-psi *subtype-psi* :revision revision)))
(let ((supertypes
(loop for role in (player-in-roles topic-instance :revision revision)
- when (eq subtype (instance-of role :revision revision))
+ when (and (eq subtype (instance-of role :revision revision))
+ (parent role :revision revision))
append (loop for other-role in (roles (parent role :revision revision)
:revision revision)
when (and (not (eq role other-role))
@@ -281,7 +284,8 @@
(subtype (get-item-by-psi *subtype-psi* :revision revision)))
(let ((subtypes
(loop for role in (player-in-roles topic-instance :revision revision)
- when (eq supertype (instance-of role :revision revision))
+ when (and (eq supertype (instance-of role :revision revision))
+ (parent role :revision revision))
append (loop for other-role in (roles (parent role :revision revision)
:revision revision)
when (and (not (eq role other-role))
@@ -318,7 +322,8 @@
:revision revision))
(current-valid-subtypes (append valid-subtypes (list topic-instance))))
(loop for role in (player-in-roles topic-instance :revision revision)
- when (and (eq supertype (instance-of role :revision revision))
+ when (and (parent role :revision revision)
+ (eq supertype (instance-of role :revision revision))
(eq supertype-subtype
(instance-of (parent role :revision revision)
:revision revision)))
@@ -357,7 +362,8 @@
(loop for subtype-of-this in all-subtypes-of-this
append (loop for role in (player-in-roles subtype-of-this
:revision revision)
- when (and (eq type (instance-of role :revision revision))
+ when (and (parent role :revision revision)
+ (eq type (instance-of role :revision revision))
(eq type-instance
(instance-of (parent role :revision revision)
:revision revision)))
Modified: trunk/src/model/datamodel.lisp
==============================================================================
--- trunk/src/model/datamodel.lisp (original)
+++ trunk/src/model/datamodel.lisp Thu Oct 14 12:07:24 2010
@@ -2770,6 +2770,8 @@
(declare (ignorable source-locator))
(let ((owner (parent construct :revision 0)))
(when owner
+ ;(private-delete-player construct (player construct :revision revision)
+ ;:revision revision)
(private-delete-role owner construct :revision revision))))
Modified: trunk/src/rest_interface/set-up-json-interface.lisp
==============================================================================
--- trunk/src/rest_interface/set-up-json-interface.lisp (original)
+++ trunk/src/rest_interface/set-up-json-interface.lisp Thu Oct 14 12:07:24 2010
@@ -387,7 +387,8 @@
"Marks the corresponding elem as deleted."
(declare (ignorable param)) ;param is currently not used
(let ((http-method (hunchentoot:request-method*)))
- (if (eq http-method :DELETE)
+ (if (or (eq http-method :DELETE)
+ (eq http-method :Post)) ;not nice - but the current ui-library can't send http-delete messages
(let ((external-format (flexi-streams:make-external-format :UTF-8 :eol-style :LF)))
(let ((json-data (hunchentoot:raw-post-data :external-format external-format :force-text t)))
(handler-case