Ignore:
Timestamp:
06/27/10 11:30:32 (15 years ago)
Author:
lgiessmann
Message:

new-datamodel: fixed bugs in get-latest-topic-by-psi, find-all-associations-for-topic, find-associations-for-topic, changed-p, with-tm; adapted the json-unit-tests to the new datamodel

Location:
branches/new-datamodel/src/model
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified branches/new-datamodel/src/model/changes.lisp

    r305 r306  
    2929       (tops-and-assocs (when tm (union (topics tm) (associations tm))))
    3030       (revision-set nil))
    31     ;(format t "tops-and-assocs: ~a~&" (mapcan #'versions tops-and-assocs))
    3231    (dolist (vi (mapcan #'versions tops-and-assocs))
    33       ;(format t "(start-revision vi): ~a~&" (start-revision vi))
    3432      (pushnew (start-revision vi) revision-set))
    3533    (sort revision-set #'<)))
    3634
    3735
    38 (defun find-all-associations-for-topic (top &key (revision *TM-REVISION*))
    39   "Finds all associations for a topic."
    40   (remove-duplicates
    41    (map 'list #'(lambda(role)
    42                   (parent role :revision revision))
    43         (player-in-roles top :revision revision))))
    44 
    45 
    46 (defun find-associations-for-topic (top &key (revision *TM-REVISION*))
    47   "Finds all associations of this topic except type-instance-associations."
    48   (let
    49       ((type-instance-topic
    50         (d:identified-construct
    51          (elephant:get-instance-by-value 'PersistentIdC
    52                                          'uri
    53                                          constants:*type-instance-psi*))))
    54     (remove-if
    55      #'(lambda(assoc)
    56          (when (eql (instance-of assoc :revision revision)
    57                     type-instance-topic)
    58            t))
    59      (find-all-associations-for-topic top :revision revision))))
     36(defgeneric find-all-associations (instance &key revision)
     37  (:documentation "Finds all associations for a topic.")
     38  (:method ((instance TopicC) &key (revision *TM-REVISION*))
     39    (declare (type (or integer null) revision))
     40    (remove-duplicates
     41     (map 'list #'(lambda(role)
     42                    (parent role :revision revision))
     43          (player-in-roles instance :revision revision)))))
     44
     45
     46(defgeneric find-associations (instance &key revision)
     47  (:documentation "Finds all associations of this topic except
     48                   type-instance-associations.")
     49  (:method ((instance TopicC) &key (revision *TM-REVISION*))
     50    (declare (type (or integer null) revision))
     51    (let ((type-instance-topic
     52           (d:identified-construct
     53            (elephant:get-instance-by-value
     54             'PersistentIdC 'uri *type-instance-psi*))))
     55      (remove-if
     56       #'(lambda(assoc)
     57           (eql (instance-of assoc :revision revision)
     58                type-instance-topic))
     59       (find-all-associations instance :revision revision)))))
    6060 
    6161
     
    128128     (mapcan #'(lambda(assoc)
    129129                 (find-referenced-topics assoc :revision revision))
    130              (find-associations-for-topic top :revision revision))))))
     130             (find-associations top :revision revision))))))
    131131   
    132132
     
    155155        (remove-if-not
    156156         (lambda (association)
    157            (eq (player (first (roles association)))
     157           (eq (player (first (roles association :revision revision))
     158                       :revision revision)
    158159               topic))
    159          (find-associations-for-topic topic)))
     160         (find-associations topic :revision revision)))
    160161       (all-constructs
    161162        (union
    162          (get-all-identifiers-of-construct topic)
     163         (get-all-identifiers-of-construct topic :revision revision)
    163164         (union
    164           (names topic)
     165          (names topic :revision revision)
    165166          (union
    166            (occurrences topic)
     167           (occurrences topic :revision revision)
    167168           first-player-in-associations)))))
    168169    (some
     
    217218        (remove
    218219         nil
    219          (map 'list
    220               (lambda (top)
    221                 (when (changed-p top revision)
    222                   (make-instance 'FragmentC
    223                                  :revision revision
    224                                  :associations (find-associations-for-topic top :revision revision) ;TODO: this quite probably introduces code duplication with query: Check!
    225                                  :referenced-topics (find-referenced-topics top :revision revision)
    226                                  :topic top)))
    227               (get-all-topics revision))))))
     220         (map
     221          'list
     222          (lambda (top)
     223            (when (changed-p top revision)
     224              (make-instance 'FragmentC
     225                             :revision revision
     226                             :associations (find-associations
     227                                            top :revision revision)
     228                                        ;TODO: this quite probably introduces
     229                                        ;code duplication with query: Check!
     230                             :referenced-topics (find-referenced-topics
     231                                                 top :revision revision)
     232                             :topic top)))
     233          (get-all-topics revision))))))
    228234
    229235(defun get-fragment (unique-id)
     
    257263  ;do not need to add an extra item identifier to them. However, we
    258264  ;need to do that for all their characteristics + associations
    259   (mapc (lambda (name) (add-source-locator name :revision revision :source-locator source-locator))
     265  (mapc (lambda (name)
     266          (add-source-locator name :revision revision
     267                              :source-locator source-locator))
    260268        (names top :revision revision))
    261   (mapc (lambda (occ) (add-source-locator occ :revision revision :source-locator source-locator))
     269  (mapc (lambda (occ)
     270          (add-source-locator occ :revision revision
     271                              :source-locator source-locator))
    262272        (occurrences top :revision revision))
    263   (mapc (lambda (ass) (add-source-locator ass :revision revision :source-locator source-locator))
    264         (find-associations-for-topic top :revision revision)))
     273  (mapc (lambda (ass)
     274          (add-source-locator ass :revision revision
     275                              :source-locator source-locator))
     276        (find-associations top :revision revision)))
    265277
    266278
     
    285297              (make-instance 'FragmentC
    286298                             :revision start-revision
    287                              :associations (find-associations-for-topic topic)
    288                              :referenced-topics (find-referenced-topics topic)
     299                             :associations (find-associations
     300                                            topic :revision start-revision)
     301                             :referenced-topics (find-referenced-topics
     302                                                 topic :revision start-revision)
    289303                             :topic topic)))))))
    290304
  • TabularUnified branches/new-datamodel/src/model/datamodel.lisp

    r305 r306  
    686686           (get-most-recent-versioned-assoc
    687687            psi-inst 'identified-construct)))
    688       (when latest-va
     688      (when (and latest-va (versions latest-va))
    689689        (identified-construct
    690          psi-inst :revision (start-revision latest-va))))))
     690         psi-inst :revision (start-revision (first (versions latest-va))))))))
    691691
    692692
     
    15011501    (mapc (lambda (ass) (mark-as-deleted ass :revision revision
    15021502                                         :source-locator source-locator))
    1503           (find-all-associations-for-topic top :revision 0))
     1503          (find-all-associations top :revision 0))
    15041504    (call-next-method)))
    15051505
Note: See TracChangeset for help on using the changeset viewer.