Author: lgiessmann Date: Sat Oct 2 05:20:25 2010 New Revision: 319
Log: new-datamodel: changed "changed-p", so a ReifiableConstructC also changed when an ItemIdentifierC or a reifier was marked-as-deleted one revision ago; a NameC changed also when a variant was marked-as-deleted one revsion ago; a TopicC changed when any identifier or CharacteristicC was marked-as-deleted one revision ago; an AssociationC changed also when a RoleC was marked-as-deleted one revision ago
Modified: branches/new-datamodel/src/model/changes.lisp branches/new-datamodel/src/unit_tests/versions_test.lisp branches/new-datamodel/src/xml/rdf/exporter.lisp
Modified: branches/new-datamodel/src/model/changes.lisp ============================================================================== --- branches/new-datamodel/src/model/changes.lisp (original) +++ branches/new-datamodel/src/model/changes.lisp Sat Oct 2 05:20:25 2010 @@ -151,6 +151,7 @@ (:documentation "Has the topic map construct changed in a given revision? 'Changed' can mean: * newly created + * deletion of an element * modified through the addition or removal of identifiers * (for associations) modified through the addition or removal of identifiers in the association or one of its roles @@ -210,15 +211,36 @@ (initial-version-p version-info)))))
+(defgeneric end-revision-p (construct revision) + (:documentation "A helper function for changed-p. It returns the latest + version-info if the passed versioned-construct was + marked-as-deleted in the version that is given.") + (:method ((construct VersionedConstructC) (revision integer)) + (let ((version-info (find revision (versions construct) + :key #'end-revision :test #'=))) + (when (and version-info + (not + (find-if + #'(lambda(vi) + (or (> (end-revision vi) (end-revision version-info)) + (= (end-revision vi) 0))) + (versions construct)))) + version-info)))) + + (defmethod changed-p ((construct ReifiableConstructC) (revision integer)) "Returns t if a ReifiableConstructC changed in the given version, i.e. an item-identifier or reifier was added to the construct itself." - (some #'(lambda(vc) - (changed-p vc revision)) - (union (item-identifiers construct :revision revision) - (let ((reifier-top (reifier construct :revision revision))) - (when reifier-top - (list reifier-top)))))) + (or (some #'(lambda(vc) + (changed-p vc revision)) + (union (item-identifiers construct :revision revision) + (let ((reifier-top (reifier construct :revision revision))) + (when reifier-top + (list reifier-top))))) + (some #'(lambda(vc) + (end-revision-p vc revision)) + (union (slot-p construct 'item-identifiers) + (slot-p construct 'reifier)))))
(defmethod changed-p ((construct NameC) (revision integer)) @@ -227,7 +249,10 @@ (or (call-next-method) (some #'(lambda(var) (changed-p var revision)) - (variants construct :revision revision)))) + (variants construct :revision revision)) + (some #'(lambda(vc) + (end-revision-p vc revision)) + (slot-p construct 'variants))))
(defmethod changed-p ((construct TopicC) (revision integer)) @@ -254,7 +279,15 @@ (let ((ra (find-if #'(lambda(reifier-assoc) (eql (reifiable-construct reifier-assoc) rc)) (slot-p construct 'reified-construct)))) - (changed-p ra revision)))))) + (changed-p ra revision)))) + (some #'(lambda(vc) + (end-revision-p vc revision)) + (union (union (union (slot-p construct 'psis) + (slot-p construct 'locators)) + (union (slot-p construct 'names) + (slot-p construct 'occurrences))) + (slot-p construct 'reified-construct))))) +
(defmethod changed-p ((construct AssociationC) (revision integer)) @@ -263,7 +296,10 @@ (or (call-next-method) (some #'(lambda(role) (changed-p role revision)) - (roles construct :revision revision)))) + (roles construct :revision revision)) + (some #'(lambda(vc) + (end-revision-p vc revision)) + (slot-p construct 'roles))))
(defpclass FragmentC ()
Modified: branches/new-datamodel/src/unit_tests/versions_test.lisp ============================================================================== --- branches/new-datamodel/src/unit_tests/versions_test.lisp (original) +++ branches/new-datamodel/src/unit_tests/versions_test.lisp Sat Oct 2 05:20:25 2010 @@ -331,8 +331,9 @@ (is-false (changed-p subject-geodata-assoc fixtures::revision3)) (is-true (changed-p norwegian-curriculum-assoc fixtures::revision1)) (is-true (changed-p norwegian-curriculum-assoc fixtures::revision2)) - ))) - ;(is-true (changed-p norwegian-curriculum-assoc fixtures::revision3))))) + (is-true (changed-p norwegian-curriculum-assoc fixtures::revision3)) + (delete-name service-topic service-name :revision fixtures::revision3) + (is-true (changed-p service-topic fixtures::revision3)))))
(test test-mark-as-deleted ()
Modified: branches/new-datamodel/src/xml/rdf/exporter.lisp ============================================================================== --- branches/new-datamodel/src/xml/rdf/exporter.lisp (original) +++ branches/new-datamodel/src/xml/rdf/exporter.lisp Sat Oct 2 05:20:25 2010 @@ -60,7 +60,7 @@
(defun init-*ns-map* () - "Initializes the variable *ns-map* woith some prefixes and corresponding + "Initializes the variable *ns-map* with some prefixes and corresponding namepsaces. So the predifend namespaces are not contain ed twice." (setf *ns-map* (list (list :prefix "isi"