Author: lgiessmann Date: Wed Sep 14 00:29:19 2011 New Revision: 895
Log: jtm-delete-interface: changed the implementation of the delete interface => not the constructs that will be deleted won't instantiated before te actual delete operation is invoked
Modified: branches/gdl-frontend/src/json/JTM/jtm_delete_interface.lisp branches/gdl-frontend/src/model/datamodel.lisp
Modified: branches/gdl-frontend/src/json/JTM/jtm_delete_interface.lisp ============================================================================== --- branches/gdl-frontend/src/json/JTM/jtm_delete_interface.lisp Tue Sep 13 22:56:28 2011 (r894) +++ branches/gdl-frontend/src/json/JTM/jtm_delete_interface.lisp Wed Sep 14 00:29:19 2011 (r895) @@ -13,7 +13,6 @@
(in-package :jtm-delete-interface)
- (defun mark-as-deleted-from-jtm (jtm-data &key (revision *TM-REVISION*)) "Marks an object that is specified by the given JSON data as deleted." (declare (string jtm-data) (integer revision)) @@ -64,15 +63,58 @@ "Deletes the passed role object and returns t otherwise this function returns nil." (declare (list jtm-decoded-list) (integer revision)) - (let* ((role-to-delete - (import-construct-from-jtm-decoded-list - jtm-decoded-list :revision revision)) - (parent-assoc - (when role-to-delete - (parent role-to-delete :revision revision)))) - (when parent-assoc - (d:delete-role parent-assoc role-to-delete :revision revision) - role-to-delete))) + (let* ((prefs (jtm::make-prefix-list-from-jtm-list + (jtm::get-item :PREFIXES jtm-decoded-list))) + (ii + (let ((curies (jtm::get-item :ITEM--IDENTIFIERS jtm-decoded-list))) + (when curies + (jtm::compute-uri-from-jtm-identifier (first curies) prefs)))) + (type + (let ((curie (jtm::get-item :TYPE jtm-decoded-list))) + (when curie + (jtm::get-item-from-jtm-reference curie :revision revision + :prefixes prefs)))) + (reifier + (let ((curie (jtm::get-item :REIFIER jtm-decoded-list))) + (when curie + (jtm::get-item-from-jtm-reference + curie :revision revision :prefixes prefs)))) + (parent + (let* ((curies (jtm::get-item :PARENT jtm-decoded-list)) + (parents (jtm::get-items-from-jtm-references + curies :revision revision :prefixes prefs))) + (when parents + (first parents)))) + (player-top + (let ((curie (jtm::get-item :PLAYER jtm-decoded-list))) + (when curie + (jtm::get-item-from-jtm-reference curie :revision revision + :prefixes prefs))))) + (let ((role-to-delete + (cond (ii + (identified-construct ii :revision revision)) + (reifier + (reified-construct reifier :revision revision)) + (parent + (let ((found-roles + (tools:remove-null + (map 'list (lambda(role) + (when (d::equivalent-construct + role :start-revision revision + :player player-top + :instance-of type) + role)) + (roles parent :revision revision))))) + (when found-roles + (first found-roles)))) + (t + (error "when deleting a role, there must be an item-identifier, reifier or parent set!"))))) + (when role-to-delete + (delete-role (parent role-to-delete :revision revision) + role-to-delete :revision revision) + role-to-delete)))) + +
(defun delete-association-from-jtm (jtm-decoded-list &key @@ -80,12 +122,50 @@ "Deletes the passed association object and returns t otherwise this function returns nil." (declare (list jtm-decoded-list) (integer revision)) - (let ((assoc - (import-construct-from-jtm-decoded-list - jtm-decoded-list :revision revision))) - (when assoc - (d:mark-as-deleted assoc :revision revision :source-locator nil) - assoc))) + (let* ((prefs (jtm::make-prefix-list-from-jtm-list + (jtm::get-item :PREFIXES jtm-decoded-list))) + (ii + (let ((curies (jtm::get-item :ITEM--IDENTIFIERS jtm-decoded-list))) + (when curies + (jtm::compute-uri-from-jtm-identifier (first curies) prefs)))) + (scope + (let ((curies (jtm::get-item :SCOPE jtm-decoded-list))) + (jtm::get-items-from-jtm-references + curies :revision revision :prefixes prefs))) + (type + (let ((curie (jtm::get-item :TYPE jtm-decoded-list))) + (when curie + (jtm::get-item-from-jtm-reference curie :revision revision + :prefixes prefs)))) + (reifier + (let ((curie (jtm::get-item :REIFIER jtm-decoded-list))) + (when curie + (jtm::get-item-from-jtm-reference + curie :revision revision :prefixes prefs)))) + (roles + (map 'list (lambda(jtm-role) + (jtm::make-plist-of-jtm-role + jtm-role :revision revision :prefixes prefs)) + (jtm::get-item :ROLES jtm-decoded-list)))) + (let ((assoc-to-delete + (cond (ii + (identified-construct ii :revision revision)) + (reifier + (reified-construct reifier :revision revision)) + (t + (let ((found-assocs + (tools:remove-null + (map 'list (lambda(assoc) + (d::equivalent-construct + assoc :start-revision revision + :roles roles :instance-of type + :themes scope)) + (get-all-associations revision))))) + (when found-assocs + (first found-assocs))))))) + (when assoc-to-delete + (mark-as-deleted assoc-to-delete :revision revision) + assoc-to-delete))))
(defun delete-variant-from-jtm (jtm-decoded-list @@ -93,16 +173,52 @@ "Deletes the passed variant from the given name and returns t if the operation succeeded." (declare (list jtm-decoded-list) (integer revision)) - (let* ((variant-to-delete - (import-construct-from-jtm-decoded-list - jtm-decoded-list :revision revision)) - (parent-name - (when variant-to-delete - (parent variant-to-delete :revision revision)))) - (when parent-name - (d:delete-variant parent-name variant-to-delete :revision revision) - variant-to-delete))) - + (let* ((prefs (jtm::make-prefix-list-from-jtm-list + (jtm::get-item :PREFIXES jtm-decoded-list))) + (ii + (let ((curies (jtm::get-item :ITEM--IDENTIFIERS jtm-decoded-list))) + (when curies + (jtm::compute-uri-from-jtm-identifier (first curies) prefs)))) + (value (jtm::get-item :VALUE jtm-decoded-list)) + (datatype (jtm::get-item :DATATYPE jtm-decoded-list)) + (scope + (let ((curies (jtm::get-item :SCOPE jtm-decoded-list))) + (jtm::get-items-from-jtm-references + curies :revision revision :prefixes prefs))) + (parent + (let* ((curies (jtm::get-item :PARENT jtm-decoded-list)) + (parents (jtm::get-items-from-jtm-references + curies :revision revision :prefixes prefs))) + (when parents + (first parents)))) + (reifier + (let ((curie (jtm::get-item :REIFIER jtm-decoded-list))) + (when curie + (jtm::get-item-from-jtm-reference + curie :revision revision :prefixes prefs))))) + (let ((var-to-delete + (cond (ii + (identified-construct ii :revision revision)) + (reifier + (reified-construct reifier :revision revision)) + (parent + (let ((found-vars + (tools:remove-null + (map 'list (lambda(var) + (when (d::equivalent-construct + var :start-revision revision + :charvalue value :themes scope + :datatype datatype) + var)) + (variants parent :revision revision))))) + (when found-vars + (first found-vars)))) + (t + (error "when deleting a variant, there must be an item-identifier, reifier or parent set!"))))) + (when var-to-delete + (delete-variant (parent var-to-delete :revision revision) + var-to-delete :revision revision) + var-to-delete))))
(defun delete-occurrence-from-jtm (jtm-decoded-list @@ -110,29 +226,114 @@ "Deletes the passed occurrence from the given topic and returns t if the operation succeeded." (declare (list jtm-decoded-list) (integer revision)) - (let* ((occurrence-to-delete - (import-construct-from-jtm-decoded-list - jtm-decoded-list :revision revision)) - (parent-topic - (when occurrence-to-delete - (parent occurrence-to-delete :revision revision)))) - (when parent-topic - (d:delete-occurrence parent-topic occurrence-to-delete :revision revision) - occurrence-to-delete))) + (let* ((prefs (jtm::make-prefix-list-from-jtm-list + (jtm::get-item :PREFIXES jtm-decoded-list))) + (ii + (let ((curies (jtm::get-item :ITEM--IDENTIFIERS jtm-decoded-list))) + (when curies + (jtm::compute-uri-from-jtm-identifier (first curies) prefs)))) + (value (jtm::get-item :VALUE jtm-decoded-list)) + (datatype (jtm::get-item :DATATYPE jtm-decoded-list)) + (type + (let ((curie (jtm::get-item :TYPE jtm-decoded-list))) + (when curie + (jtm::get-item-from-jtm-reference curie :revision revision + :prefixes prefs)))) + (scope + (let ((curies (jtm::get-item :SCOPE jtm-decoded-list))) + (jtm::get-items-from-jtm-references + curies :revision revision :prefixes prefs))) + (parent + (let* ((curies (jtm::get-item :PARENT jtm-decoded-list)) + (parents (jtm::get-items-from-jtm-references + curies :revision revision :prefixes prefs))) + (when parents + (first parents)))) + (reifier + (let ((curie (jtm::get-item :REIFIER jtm-decoded-list))) + (when curie + (jtm::get-item-from-jtm-reference + curie :revision revision :prefixes prefs))))) + (let ((occ-to-delete + (cond (ii + (identified-construct ii :revision revision)) + (reifier + (reified-construct reifier :revision revision)) + (parent + (let ((found-occs + (tools:remove-null + (map 'list (lambda(occ) + (when (d::equivalent-construct + occ :start-revision revision + :charvalue value :themes scope + :instance-of type :datatype datatype) + occ)) + (occurrences parent :revision revision))))) + (when found-occs + (first found-occs)))) + (t + (error "when deleting an occurrence, there must be an item-identifier, reifier or parent set!"))))) + (when occ-to-delete + (delete-occurrence (parent occ-to-delete :revision revision) + occ-to-delete :revision revision) + occ-to-delete))))
(defun delete-name-from-jtm (jtm-decoded-list &key (revision *TM-REVISION*)) (declare (list jtm-decoded-list) (integer revision)) - (let* ((name-to-delete - (import-construct-from-jtm-decoded-list - jtm-decoded-list :revision revision)) - (parent-topic - (when name-to-delete - (parent name-to-delete :revision revision)))) - (when parent-topic - (d:delete-name parent-topic name-to-delete :revision revision) - name-to-delete))) + (let* ((prefs (jtm::make-prefix-list-from-jtm-list + (jtm::get-item :PREFIXES jtm-decoded-list))) + (ii + (let ((curies (jtm::get-item :ITEM--IDENTIFIERS jtm-decoded-list))) + (when curies + (jtm::compute-uri-from-jtm-identifier (first curies) prefs)))) + (value (jtm::get-item :VALUE jtm-decoded-list)) + (type + (let ((curie (jtm::get-item :TYPE jtm-decoded-list))) + (if curie + (jtm::get-item-from-jtm-reference curie :revision revision + :prefixes prefs) + (get-item-by-psi constants:*topic-name-psi* + :revision revision :error-if-nil t)))) + (scope + (let ((curies (jtm::get-item :SCOPE jtm-decoded-list))) + (jtm::get-items-from-jtm-references + curies :revision revision :prefixes prefs))) + (parent + (let* ((curies (jtm::get-item :PARENT jtm-decoded-list)) + (parents (jtm::get-items-from-jtm-references + curies :revision revision :prefixes prefs))) + (when parents + (first parents)))) + (reifier + (let ((curie (jtm::get-item :REIFIER jtm-decoded-list))) + (when curie + (jtm::get-item-from-jtm-reference + curie :revision revision :prefixes prefs))))) + (let ((name-to-delete + (cond (ii + (identified-construct ii :revision revision)) + (reifier + (reified-construct reifier :revision revision)) + (parent + (let ((found-names + (tools:remove-null + (map 'list (lambda(name) + (when (d::equivalent-construct + name :start-revision revision + :charvalue value :themes scope + :instance-of type) + name)) + (names parent :revision revision))))) + (when found-names + (first found-names)))) + (t + (error "when deleting a name, there must be an item-identifier, reifier or parent set!"))))) + (when name-to-delete + (delete-name (parent name-to-delete :revision revision) + name-to-delete :revision revision) + name-to-delete))))
(defun delete-identifier-from-json (uri class delete-function @@ -155,12 +356,21 @@ "Searches for a topic corresponding to the given identifiers. Returns t if there was deleted an item otherweise it returns nil." (declare (list jtm-decoded-list) (integer revision)) - (let ((top-to-delete - (import-construct-from-jtm-decoded-list - jtm-decoded-list :revision revision))) - (when top-to-delete - (mark-as-deleted top-to-delete :source-locator nil :revision revision) - top-to-delete))) + + (let* ((prefs + (jtm::make-prefix-list-from-jtm-list + (jtm::get-item :PREFIXES jtm-decoded-list))) + (ids (append + (jtm::get-item :SUBJECT--IDENTIFIERS jtm-decoded-list) + (jtm::get-item :ITEM--IDENTIFIERS jtm-decoded-list) + (jtm::get-item :SUBJECT--LOCATORS jtm-decoded-list))) + (uri (if (null ids) + (error (make-condition 'exceptions::JTM-error :message (format nil "From merge-topic-from-jtm-list(): the passed topic has to own at least one identifier: ~a" jtm-decoded-list))) + (jtm::compute-uri-from-jtm-identifier (first ids) prefs)))) + (let ((top-to-delete (get-item-by-any-id uri :revision revision))) + (when top-to-delete + (mark-as-deleted top-to-delete :source-locator uri :revision revision) + top-to-delete))))
(defun delete-identifier-from-jtm (uri class delete-function @@ -170,10 +380,7 @@ (declare (string uri) (integer revision) (symbol class)) (let ((id (elephant:get-instance-by-value class 'd:uri uri))) - (if (and id (typep id class)) - (progn - (apply delete-function - (list (d:identified-construct id :revision revision) - id :revision revision)) - id) - nil))) \ No newline at end of file + (when (and id (typep id class)) + (apply delete-function + (list (d:identified-construct id :revision revision) + id :revision revision))))) \ No newline at end of file
Modified: branches/gdl-frontend/src/model/datamodel.lisp ============================================================================== --- branches/gdl-frontend/src/model/datamodel.lisp Tue Sep 13 22:56:28 2011 (r894) +++ branches/gdl-frontend/src/model/datamodel.lisp Wed Sep 14 00:29:19 2011 (r895) @@ -1583,10 +1583,10 @@ (locators top :revision 0)) (mapc (lambda (name) (mark-as-deleted name :revision revision :source-locator source-locator)) - (names top :revision 0)) + (names top :revision 0)) (mapc (lambda (occ) (mark-as-deleted occ :revision revision :source-locator source-locator)) - (occurrences top :revision 0)) + (occurrences top :revision 0)) (mapc (lambda (ass) (mark-as-deleted ass :revision revision :source-locator source-locator)) (find-all-associations top :revision 0))