changeset 26:bff0ee472a7f classical-rdf

* another checkpoint... still some troubles here though
author Chris Cannam
date Fri, 26 Feb 2010 18:10:26 +0000
parents e856df83c57f
children e8160a2d8b28
files common/Objects.cpp common/Objects.h common/TypeRegistrar.cpp utilities/composer/composer.cpp utilities/composer/merges-to-do
diffstat 5 files changed, 76 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/common/Objects.cpp	Fri Feb 26 16:39:16 2010 +0000
+++ b/common/Objects.cpp	Fri Feb 26 18:10:26 2010 +0000
@@ -571,7 +571,14 @@
     m_nationality.unite(c->nationality());
     m_geonameURIs.unite(c->geonameURIs());
     m_otherURIs.unite(c->otherURIs());
-    m_pages.unite(c->pages());
+
+    foreach (Document *d, c->pages()) {
+        Document *dd = new Document;
+        dd->setUri(d->uri());
+        dd->setSiteName(dd->siteName());
+        dd->setTopic(this);
+        m_pages.insert(dd);
+    }
     
     if (m_period == "") m_period = c->period();
     if (m_remarks == "") m_remarks = c->remarks();
--- a/common/Objects.h	Fri Feb 26 16:39:16 2010 +0000
+++ b/common/Objects.h	Fri Feb 26 18:10:26 2010 +0000
@@ -20,6 +20,8 @@
 
 namespace ClassicalData {
 
+//!!! need to review ownership more carefully -- and use deletion notify signals?
+
 class Year
 {
 public:
@@ -141,7 +143,7 @@
     QString siteName() const { return m_siteName; }
     void setSiteName(QString n) { m_siteName = n; }
 
-    QObject *topic() const { return m_topic; }
+    QObject *topic() const { return m_topic; } // I don't own this
     void setTopic(QObject *t) { m_topic = t; }
     
 private:
@@ -163,6 +165,12 @@
 
 public:
     NamedEntity(QObject *parent = 0) : QObject(parent) { }
+    ~NamedEntity() {
+        for (QSet<Document *>::iterator i = m_pages.begin();
+             i != m_pages.end(); ++i) {
+            delete *i;
+        }
+    }
 
     QString name() const { return m_name; }
     virtual void setName(QString n) { m_name = n; }
@@ -176,7 +184,13 @@
 
     QSet<Document *> pages() const { return m_pages; }
     void addPage(Document *p) { m_pages.insert(p); }
-    void setPages(QSet<Document *> p) { m_pages = p; } //!!! destroy old ones? do we own?
+    void setPages(QSet<Document *> p) {
+        for (QSet<Document *>::iterator i = m_pages.begin();
+             i != m_pages.end(); ++i) {
+            delete *i;
+        }
+        m_pages = p;
+    }
 
     QSet<Dataquay::Uri> otherURIs() const { return m_otherURIs; }
     void addOtherURI(Dataquay::Uri u) { m_otherURIs.insert(u); }
@@ -186,7 +200,7 @@
     QString m_name;
     QString m_remarks;
     QSet<QString> m_aliases;
-    QSet<Document *> m_pages;
+    QSet<Document *> m_pages; // we own these
     QSet<Dataquay::Uri> m_otherURIs;
 };
 
--- a/common/TypeRegistrar.cpp	Fri Feb 26 16:39:16 2010 +0000
+++ b/common/TypeRegistrar.cpp	Fri Feb 26 18:10:26 2010 +0000
@@ -146,6 +146,7 @@
 	mapper->addPropertyMapping("ClassicalData::Composer", "death", "property:death");
 	mapper->addPropertyMapping("ClassicalData::Composer", "geonameURIs", "foaf:based_near");
 	mapper->addPropertyMapping("ClassicalData::Composer", "otherURIs", "owl:sameAs");
+	mapper->addPropertyMapping("ClassicalData::Composer", "gender", "foaf:gender");
 
 	mapper->addTypeMapping("ClassicalData::Birth", "bio:Birth");
 	mapper->addTypeMapping("ClassicalData::Death", "bio:Death");
--- a/utilities/composer/composer.cpp	Fri Feb 26 16:39:16 2010 +0000
+++ b/utilities/composer/composer.cpp	Fri Feb 26 18:10:26 2010 +0000
@@ -257,7 +257,7 @@
 }
 
 void
-merge(Composer *target, QList<Composer *> sources)
+merge(Composer *target, QList<Composer *> sources, BasicStore *store)
 {
     cout << "Merging into this composer record:" << endl << endl;
     show(target);
@@ -266,6 +266,41 @@
         cout << endl;
         show(c);
         target->mergeFrom(c);
+
+        QSet<Work *> works = worksMap[c];
+        foreach (Work *w, works) {
+            w->composition()->setComposer(target);
+        }
+        worksMap[target].unite(works);
+        worksMap.remove(c);
+
+        // rub out the old composer -- we don't have a neat way to do this yet
+        if (store) {
+            if (c->birth()) {
+                Triple bt(c->birth()->property("uri").value<Uri>(), Node(), Node());
+                if (bt.a.value != "") {
+                    cout << "removing for " << bt.a.value.toStdString() << endl;
+                    store->remove(bt);
+                }
+            }
+            if (c->death()) {
+                Triple dt(c->death()->property("uri").value<Uri>(), Node(), Node());
+                if (dt.a.value != "") {
+                    cout << "removing for " << dt.a.value.toStdString() << endl;
+                    store->remove(dt);
+                }
+            }
+            Triple t(c->property("uri").value<Uri>(), Node(), Node());
+            if (t.a.value != "") {
+                cout << "removing for " << t.a.value.toStdString() << endl;
+                store->remove(t);
+            }
+        }
+        delete c->birth();
+        delete c->death();
+        delete c;
+
+        //!!! and composition events!
     }
     cout << endl << "Result after merging:" << endl << endl;;
     show(target);
@@ -344,7 +379,7 @@
                 if (!c) return 1;
                 sources.push_back(c);
             }
-            merge(target, sources);
+            merge(target, sources, store);
             write = true;
         }
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utilities/composer/merges-to-do	Fri Feb 26 18:10:26 2010 +0000
@@ -0,0 +1,13 @@
+./merge.sh http://dbtune.org/classical/resource/composer/muffat_georg http://dbtune.org/classical/resource/composer/muffat_george
+./merge.sh http://dbtune.org/classical/resource/composer/morthenson_jan_w http://dbtune.org/classical/resource/composer/mortheson_jan
+./merge.sh http://dbtune.org/classical/resource/composer/moscheles_ignaz http://dbtune.org/classical/resource/composer/moscheles_ignace
+./merge.sh http://dbtune.org/classical/resource/composer/paderewski_ignace_jan http://dbtune.org/classical/resource/composer/paderewski_ignacy
+./merge.sh http://dbtune.org/classical/resource/composer/paladino_giovanni_paolo http://dbtune.org/classical/resource/composer/paladini_giovanni_paolo
+./merge.sh http://dbtune.org/classical/resource/composer/paradisi_pietro_domenico http://dbtune.org/classical/resource/composer/paradies_domenico
+./merge.sh http://dbtune.org/classical/resource/composer/nascimbeni_maria_francesca http://dbtune.org/classical/resource/composer/nascinbeni_maria_francesca
+./merge.sh http://dbtune.org/classical/resource/composer/neusiedler_hans http://dbtune.org/classical/resource/composer/neusidler_hans
+./merge.sh http://dbtune.org/classical/resource/composer/nin_y_castellanos_joaquin http://dbtune.org/classical/resource/composer/nin_joaquin
+./merge.sh http://dbtune.org/classical/resource/composer/nola_giovanni_domenico_da http://dbtune.org/classical/resource/composer/da_nola_giovanni
+./merge.sh http://dbtune.org/classical/resource/composer/nrgard_per http://dbtune.org/classical/resource/composer/norgard_per
+./merge.sh http://dbtune.org/classical/resource/composer/novak_vitezslav__2 http://dbtune.org/classical/resource/composer/novak_vitezslav
+./merge.sh http://dbtune.org/classical/resource/composer/nrholm_ib__2 http://dbtune.org/classical/resource/composer/nrholm_ib