diff rdf/RDFImporter.cpp @ 510:af7b6e55895b

* Ensure text models are exported with text properties in RDF, and imported back into text models again (instead of time/value models)
author Chris Cannam
date Mon, 08 Dec 2008 11:53:10 +0000
parents 1b8c748fd7ea
children e340b2fb9471
line wrap: on
line diff
--- a/rdf/RDFImporter.cpp	Mon Dec 08 11:15:13 2008 +0000
+++ b/rdf/RDFImporter.cpp	Mon Dec 08 11:53:10 2008 +0000
@@ -30,6 +30,7 @@
 #include "data/model/SparseTimeValueModel.h"
 #include "data/model/EditableDenseThreeDimensionalModel.h"
 #include "data/model/NoteModel.h"
+#include "data/model/TextModel.h"
 #include "data/model/RegionModel.h"
 #include "data/model/WaveFileModel.h"
 
@@ -566,6 +567,15 @@
 
         ).arg(m_uristring);
 
+    QString textQueryString = prefixes + QString(
+        
+        " SELECT ?label FROM <%1> "
+        " WHERE { "
+        "   <%2> af:text ?label . "
+        " } "
+
+        ).arg(m_uristring);
+
     SimpleSPARQLQuery query(s, queryString);
     query.setProgressReporter(reporter);
 
@@ -626,8 +636,18 @@
         bool haveTime = false;
         bool haveDuration = false;
 
-        QString label = SimpleSPARQLQuery::singleResultQuery
-            (s, labelQueryString.arg(thinguri), "label").value;
+        QString label = "";
+        bool text = (type.contains("Text") || type.contains("text")); // Ha, ha
+
+        if (text) {
+            label = SimpleSPARQLQuery::singleResultQuery
+                (s, textQueryString.arg(thinguri), "label").value;
+        }
+
+        if (label == "") {
+            label = SimpleSPARQLQuery::singleResultQuery
+                (s, labelQueryString.arg(thinguri), "label").value;
+        }
 
         SimpleSPARQLQuery rangeQuery(s, rangeQueryString.arg(thinguri));
         SimpleSPARQLQuery::ResultList rangeResults = rangeQuery.execute();
@@ -682,13 +702,25 @@
 
                 if (dimensions == 1) {
 
-//                    std::cerr << "SparseOneDimensionalModel" << std::endl;
-                    model = new SparseOneDimensionalModel(m_sampleRate, 1, false);
+                    if (text) {
+                        
+                        model = new TextModel(m_sampleRate, 1, false);
+
+                    } else {
+
+                        model = new SparseOneDimensionalModel(m_sampleRate, 1, false);
+                    }
 
                 } else if (dimensions == 2) {
 
-//                    std::cerr << "SparseTimeValueModel" << std::endl;
-                    model = new SparseTimeValueModel(m_sampleRate, 1, false);
+                    if (text) {
+
+                        model = new TextModel(m_sampleRate, 1, false);
+
+                    } else {
+
+                        model = new SparseTimeValueModel(m_sampleRate, 1, false);
+                    }
 
                 } else {
 
@@ -699,7 +731,6 @@
                     // but it's hard to apply it because we don't have
                     // all the necessary timing data yet... hmm
 
-//                    std::cerr << "NoteModel" << std::endl;
                     model = new NoteModel(m_sampleRate, 1, false);
                 }
 
@@ -710,7 +741,6 @@
                     // If our units are frequency or midi pitch, we
                     // should be using a note model... hm
                     
-//                    std::cerr << "RegionModel" << std::endl;
                     model = new RegionModel(m_sampleRate, 1, false);
 
                 } else {
@@ -722,7 +752,6 @@
                     // but it's hard to apply it because we don't have
                     // all the necessary timing data yet... hmm
 
-//                    std::cerr << "NoteModel" << std::endl;
                     model = new NoteModel(m_sampleRate, 1, false);
                 }
             }
@@ -777,6 +806,17 @@
         return;
     }
 
+    TextModel *tm =
+        dynamic_cast<TextModel *>(model);
+    if (tm) {
+        TextModel::Point point
+            (ftime,
+             values.empty() ? 0.5f : values[0] < 0.f ? 0.f : values[0] > 1.f ? 1.f : values[0], // I was young and feckless once too
+             label);
+        tm->addPoint(point);
+        return;
+    }
+
     SparseTimeValueModel *stvm =
         dynamic_cast<SparseTimeValueModel *>(model);
     if (stvm) {