[isidorus-cvs] r84 - in trunk/src: ajax/javascripts model rest_interface unit_tests

Lukas Giessmann lgiessmann at common-lisp.net
Fri Jul 3 21:21:49 UTC 2009


Author: lgiessmann
Date: Fri Jul  3 17:21:46 2009
New Revision: 84

Log:
json-server: fixed a problem with requesting the latest fragment of a given topic-psi -> now there will be searched or created REALLY the LATEST fragment

Modified:
   trunk/src/ajax/javascripts/edit.js
   trunk/src/ajax/javascripts/requests.js
   trunk/src/model/changes.lisp
   trunk/src/model/datamodel.lisp
   trunk/src/rest_interface/set-up-json-interface.lisp
   trunk/src/unit_tests/json_test.lisp

Modified: trunk/src/ajax/javascripts/edit.js
==============================================================================
--- trunk/src/ajax/javascripts/edit.js	(original)
+++ trunk/src/ajax/javascripts/edit.js	Fri Jul  3 17:21:46 2009
@@ -53,7 +53,7 @@
 		    liTopicSelect.insert({"bottom" : err});   
 		}
 		else {
-		    if(!psi || psi.strip().lenght === 0) psi = null;
+		    if(!psi || psi.strip().length === 0) psi = null;
 		    edit = new EditC(json.flatten().sort(), innerMakeFragment, psi);
 		    liTopicSelect.insert({"bottom" : edit.getFrame()});
 		}

Modified: trunk/src/ajax/javascripts/requests.js
==============================================================================
--- trunk/src/ajax/javascripts/requests.js	(original)
+++ trunk/src/ajax/javascripts/requests.js	Fri Jul  3 17:21:46 2009
@@ -161,7 +161,7 @@
 			else topicStubs.push(xhr.responseText);
 		    },
 		    "onFailure" : function(xhr){
-			alert("From getTopicStubs(): Could not equest topicStub information for \"" + xhr.request.url + "\"!!!");
+			alert("From getTopicStubs(): Could not request topicStub information for \"" + xhr.request.url + "\"!!!");
 			onFailureHandler();
 		    }});
 	    }

Modified: trunk/src/model/changes.lisp
==============================================================================
--- trunk/src/model/changes.lisp	(original)
+++ trunk/src/model/changes.lisp	Fri Jul  3 17:21:46 2009
@@ -270,29 +270,27 @@
         (find-associations-for-topic top)))
 
 
-(defun get-latest-fragment-of-topic (topic-psi)
+(defun create-latest-fragment-of-topic (topic-psi)
   "returns the latest fragment of the passed topic-psi"
   (declare (string topic-psi))
-  (let ((topic-psi topic-psi))
-    (let ((psi
-           (elephant:get-instance-by-value 'PersistentIdC 'uri topic-psi)))
-      (when psi
-        (let ((topic
-               (identified-construct psi)))
-          (when topic
-            (loop for current-revision in (versions topic)
-               do (get-fragments (start-revision current-revision)))
-            (let ((fragments
-                   (elephant:get-instances-by-value 'FragmentC 'topic topic)))
-              ;; maybe there are more fragments of this topic in different revisions,
-              ;; so we need to search the fragment with a certain revision
-              (let ((found-fragment 
-		     (if fragments
-			 (first (sort fragments #'> :key 'revision))
-			 ;; if there exist a topic but always no fragment, there will be generated a new fragment of the latest version for the searched topic
-			 (make-instance 'FragmentC
-					:revision (first (sort (versions topic) #'> :key 'start-revision))
-					:associations (find-associations-for-topic topic)
-					:referenced-topics (find-referenced-topics topic)
-					:topic topic))))
-		found-fragment))))))))
\ No newline at end of file
+  (let ((topic
+	 (get-item-by-psi topic-psi)))
+    (when topic
+      (let ((start-revision
+	     (start-revision
+	      (find-if #'(lambda(x)
+			   (when (= 0 (end-revision x))
+			     t))
+		       (versions topic)))))
+	(let ((existing-fragment
+	       (find-if #'(lambda(x)
+			    (when (eq topic (topic x))
+			      t))
+			(get-fragments start-revision))))
+	  (if existing-fragment
+	      existing-fragment
+	      (make-instance 'FragmentC
+			     :revision start-revision
+			     :associations (find-associations-for-topic topic)
+			     :referenced-topics (find-referenced-topics topic)
+			     :topic topic)))))))
\ No newline at end of file

Modified: trunk/src/model/datamodel.lisp
==============================================================================
--- trunk/src/model/datamodel.lisp	(original)
+++ trunk/src/model/datamodel.lisp	Fri Jul  3 17:21:46 2009
@@ -99,7 +99,7 @@
 	   :used-as-theme
 	   :variants
 	   :xor
-           :get-latest-fragment-of-topic
+           :create-latest-fragment-of-topic
 
            :*current-xtm* ;; special variables
            :*TM-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	Fri Jul  3 17:21:46 2009
@@ -216,7 +216,7 @@
 	(let ((identifier (string-replace psi "%23" "#")))
 	  (setf (hunchentoot:content-type*) "application/json") ;RFC 4627
 	  (let ((fragment
-		 (get-latest-fragment-of-topic identifier)))
+		 (create-latest-fragment-of-topic identifier)))
 	    (if fragment
 		(handler-case (to-json-string fragment)
 		  (condition (err)

Modified: trunk/src/unit_tests/json_test.lisp
==============================================================================
--- trunk/src/unit_tests/json_test.lisp	(original)
+++ trunk/src/unit_tests/json_test.lisp	Fri Jul  3 17:21:46 2009
@@ -131,10 +131,10 @@
 
       (elephant:open-store (xml-importer:get-store-spec dir))
       (let ((frag-t100
-	     (get-latest-fragment-of-topic
+	     (create-latest-fragment-of-topic
 	      "http://psi.egovpt.org/standard/ISO+19115%3A+Geographic+Information+-+Metadata"))
 	    (frag-topic
-	     (get-latest-fragment-of-topic "http://www.topicmaps.org/xtm/1.0/core.xtm#topic")))
+	     (create-latest-fragment-of-topic "http://www.topicmaps.org/xtm/1.0/core.xtm#topic")))
 	(let ((frag-t100-string
 	       (concatenate 'string "{\"topic\":{\"id\":\"" (d:topicid (d:topic frag-t100)) "\",\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t100\"],\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/standard/ISO+19115%3A+Geographic+Information+-+Metadata\"],\"instanceOfs\":[[\"http://psi.egovpt.org/types/semanticstandard\"]],\"names\":[{\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t100_n1\"],\"type\":null,\"scopes\":null,\"value\":\"ISO 19115\",\"variants\":[{\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t100_n1_v1\"],\"scopes\":[[\"http://www.topicmaps.org/xtm/1.0/core.xtm#display\"]],\"resourceRef\":null,\"resourceData\":{\"datatype\":\"http://www.w3.org/2001/XMLSchema#string\",\"value\":\"Geographic Information - Metadata\"}},{\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t100_n1_v2\"],\"scopes\":[[\"http://www.topicmaps.org/xtm/1.0/core.xtm#sort\"]],\"resourceRef\":null,\"resourceData\":{\"datatype\":\"http://www.w3.org/2001/XMLSchema#string\",\"value\":\"ISO-19115\"}}]}],\"occurrences\":[{\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t100_o1\"],\"type\":[\"http://psi.egovpt.org/types/standardHasStatus\"],\"scopes\":null,\"resourceRef\":\"http://www.budabe.de/\",\"resourceData\":null},{\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t100_o2\"],\"type\":[\"http://psi.egovpt.org/types/description\"],\"scopes\":null,\"resourceRef\":null,\"resourceData\":{\"datatype\":\"http://www.w3.org/2001/XMLSchema#string\",\"value\":\"The ISO 19115 standard ...\"}},{\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t100_o3\"],\"type\":[\"http://psi.egovpt.org/types/standardValidFromDate\"],\"scopes\":null,\"resourceRef\":null,\"resourceData\":{\"datatype\":\"http://www.w3.org/2001/XMLSchema#date\",\"value\":\"2003-01-01\"}},{\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t100_o4\"],\"type\":[\"http://psi.egovpt.org/types/links\"],\"scopes\":null,\"resourceRef\":\"http://www.editeur.org/standards/ISO19115.pdf\",\"resourceData\":null}]},\"topicStubs\":[{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 0)) "\",\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t3a\"],\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/types/semanticstandard\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 1)) "\",\"itemIdentities\":null,\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://www.topicmaps.org/xtm/1.0/core.xtm#display\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 2)) "\",\"itemIdentities\":null,\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://www.topicmaps.org/xtm/1.0/core.xtm#sort\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 3)) "\",\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t51\"],\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/types/standardHasStatus\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 4)) "\",\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t53\"],\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/types/description\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 5)) "\",\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t54\"],\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/types/standardValidFromDate\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 6)) "\",\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t55\"],\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/types/links\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 7)) "\",\"itemIdentities\":null,\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/subject/GeoData\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 8)) "\",\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t60\"],\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/types/standardIsAboutSubject\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 9)) "\",\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t61\"],\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/types/SubjectRoleType\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 10)) "\",\"itemIdentities\":null,\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/subject/Semantic+Description\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 11)) "\",\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t64\"],\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/types/serviceUsesStandard\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 12)) "\",\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t63\"],\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/types/ServiceRoleType\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 13)) "\",\"itemIdentities\":null,\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/service/Google+Maps\",\"http://maps.google.com\"]},{\"id\":\"" (topicid (elt (referenced-topics frag-t100) 14)) "\",\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#t62\"],\"subjectLocators\":null,\"subjectIdentifiers\":[\"http://psi.egovpt.org/types/StandardRoleType\"]}],\"associations\":[{\"itemIdentities\":null,\"type\":[\"http://psi.egovpt.org/types/standardIsAboutSubject\"],\"scopes\":null,\"roles\":[{\"itemIdentities\":null,\"type\":[\"http://psi.egovpt.org/types/StandardRoleType\"],\"topicRef\":[\"http://psi.egovpt.org/standard/ISO+19115%3A+Geographic+Information+-+Metadata\"]},{\"itemIdentities\":null,\"type\":[\"http://psi.egovpt.org/types/SubjectRoleType\"],\"topicRef\":[\"http://psi.egovpt.org/subject/GeoData\"]}]},{\"itemIdentities\":null,\"type\":[\"http://psi.egovpt.org/types/standardIsAboutSubject\"],\"scopes\":null,\"roles\":[{\"itemIdentities\":null,\"type\":[\"http://psi.egovpt.org/types/StandardRoleType\"],\"topicRef\":[\"http://psi.egovpt.org/standard/ISO+19115%3A+Geographic+Information+-+Metadata\"]},{\"itemIdentities\":null,\"type\":[\"http://psi.egovpt.org/types/SubjectRoleType\"],\"topicRef\":[\"http://psi.egovpt.org/subject/Semantic+Description\"]}]},{\"itemIdentities\":[\"http://psi.egovpt.org/itemIdentifiers#assoc_7\"],\"type\":[\"http://psi.egovpt.org/types/serviceUsesStandard\"],\"scopes\":null,\"roles\":[{\"itemIdentities\":null,\"type\":[\"http://psi.egovpt.org/types/ServiceRoleType\"],\"topicRef\":[\"http://psi.egovpt.org/service/Google+Maps\",\"http://maps.google.com\"]},{\"itemIdentities\":null,\"type\":[\"http://psi.egovpt.org/types/StandardRoleType\"],\"topicRef\":[\"http://psi.egovpt.org/standard/ISO+19115%3A+Geographic+Information+-+Metadata\"]}]}],\"tmIds\":[\"http://www.isidor.us/unittests/testtm\"]}"))
 	      (frag-topic-string
@@ -155,7 +155,7 @@
       (elephant:open-store (xml-importer:get-store-spec dir))
       (let ((json-fragment
 	     (let ((fragment-obj
-		    (get-latest-fragment-of-topic "http://psi.egovpt.org/standard/Topic+Maps+2002")))
+		    (create-latest-fragment-of-topic "http://psi.egovpt.org/standard/Topic+Maps+2002")))
 	       (to-json-string fragment-obj))))
 	(let ((fragment-list
 	       (json-importer::get-fragment-values-from-json-list




More information about the Isidorus-cvs mailing list