[isidorus-cvs] r643 - trunk/src/model

lgiessmann at common-lisp.net lgiessmann at common-lisp.net
Tue Jul 19 08:01:13 UTC 2011


Author: lgiessmann
Date: Tue Jul 19 01:01:12 2011
New Revision: 643

Log:
trunk: changed the behavior of deleting topics => all constructs that are typed or scoped by a topic that is getting to be marked-as-deleted are marked-as-deleted as well. If a typed or scoped role is getting deleted, the entire parental association is marked-as-deleted; fixed a bug when deleting scoped and typed constructs.

Modified:
   trunk/src/model/datamodel.lisp

Modified: trunk/src/model/datamodel.lisp
==============================================================================
--- trunk/src/model/datamodel.lisp	Mon Jul 18 13:30:16 2011	(r642)
+++ trunk/src/model/datamodel.lisp	Tue Jul 19 01:01:12 2011	(r643)
@@ -1577,22 +1577,72 @@
 		       (psis top :revision 0))))
     (mapc (lambda(psi)(mark-as-deleted psi :revision revision
 				       :source-locator source-locator))
-	  (psis top :revision 0))
+	  (psis top :revision revision))
     (mapc (lambda(sl)(mark-as-deleted sl :revision revision
 				      :source-locator source-locator))
-	  (locators top :revision 0))
+	  (locators top :revision revision))
+    (mapc (lambda(ii)(mark-as-deleted ii :revision revision
+				      :source-locator source-locator))
+	  (item-identifiers top :revision revision))
     (mapc (lambda (name) (mark-as-deleted name :revision revision
 					  :source-locator source-locator))
-          (names top :revision 0))
+          (names top :revision revision))
     (mapc (lambda (occ) (mark-as-deleted occ :revision revision
 					 :source-locator source-locator))
-          (occurrences top :revision 0))
+          (occurrences top :revision revision))
     (mapc (lambda (ass) (mark-as-deleted ass :revision revision
 					 :source-locator source-locator))
 	  (find-all-associations top :revision 0))
+    (let ((ref (reified-construct top :revision revision)))
+      (when ref
+	(private-delete-reified-construct top ref :revision revision)))
+    (dolist (typable (used-as-type top :revision revision))
+      (private-delete-typable typable :source-locator source-locator
+			      :revision revision))
+    (dolist (scopable (used-as-theme top :revision revision))
+      (private-delete-scopable scopable :source-locator source-locator
+			       :revision revision))
     (call-next-method)))
 
 
+(defgeneric private-delete-scopable (construct &key source-locator revision)
+  (:documentation "This method should be called when a topic that is used
+                   as a theme for the passed construct is getting
+                   marked-as-deleted, i.e. all scopable constructs, scoped
+                   by the deleted topic are marked-as-deleted as well.
+                   If the passed construct is a role the entire parent
+                   association is deleted, otherwise only the construct itself.")
+  (:method ((construct ScopableC) &key source-locator revision)
+    (if (typep construct 'RoleC)
+	(let ((assoc (parent construct :revision revision)))
+	  (if assoc
+	      (mark-as-deleted assoc :source-locator source-locator
+			       :revision revision)
+	      (mark-as-deleted construct :source-locator source-locator
+			       :revision revision)))
+	(mark-as-deleted construct :source-locator source-locator
+			 :revision revision))))
+
+
+(defgeneric private-delete-typable (construct &key source-locator revision)
+  (:documentation "This method should be called when a topic that is used
+                   as a type for the passed construct is getting
+                   marked-as-deleted, i.e. all typable constructs, typed
+                   by the deleted topic are marked-as-deleted as well.
+                   If the passed construct is a role the entire parent
+                   association is deleted, otherwise only the construct itself.")
+  (:method ((construct TypableC) &key source-locator revision)
+    (if (typep construct 'RoleC)
+	(let ((assoc (parent construct :revision revision)))
+	  (if assoc
+	      (mark-as-deleted assoc :source-locator source-locator
+			       :revision revision)
+	      (mark-as-deleted construct :source-locator source-locator
+			       :revision revision)))
+	(mark-as-deleted construct :source-locator source-locator
+			 :revision revision))))
+
+
 (defmethod equivalent-constructs ((construct-1 TopicC) (construct-2 TopicC)
 				  &key (revision *TM-REVISION*))
   (declare (integer revision))
@@ -2350,9 +2400,14 @@
   "Marks the last active relation between a characteristic and its parent topic
    as deleted."
   (declare (ignorable source-locator))
-  (let ((owner (parent construct :revision 0)))
+  (let ((owner (parent construct :revision revision))
+	(type-top (instance-of construct :revision revision)))
     (when owner
-      (private-delete-characteristic owner construct :revision revision))))
+      (private-delete-characteristic owner construct :revision revision))
+    (when type-top
+      (private-delete-type construct type-top :revision revision))
+    (dolist (theme (themes construct :revision revision))
+      (private-delete-theme construct theme :revision revision))))
 
 
 (defmethod marked-as-deleted-p ((construct CharacteristicC))
@@ -2640,6 +2695,15 @@
     (map 'list #'characteristic (slot-p parent-construct 'variants))))
 
 
+(defmethod mark-as-deleted ((construct NameC) &key source-locator revision)
+  "Marks the last active relation between a characteristic and its parent topic
+   as deleted."
+  (declare (ignorable source-locator))
+  (dolist (variant (variants construct :revision revision))
+    (private-delete-variant construct variant :revision revision))
+  (call-next-method))
+
+
 (defgeneric NameC-p (class-symbol)
   (:documentation "Returns t if the passed symbol is equal to Name.")
   (:method ((class-symbol symbol))




More information about the Isidorus-cvs mailing list