diff utilities/widgettest/widgettest.cpp @ 30:8bed05455706

* Make classical code build
author Chris Cannam
date Tue, 16 Mar 2010 17:36:28 +0000
parents 7d8a6167febb
children 07efb25d24d6
line wrap: on
line diff
--- a/utilities/widgettest/widgettest.cpp	Mon Mar 01 16:55:27 2010 +0000
+++ b/utilities/widgettest/widgettest.cpp	Tue Mar 16 17:36:28 2010 +0000
@@ -1,17 +1,104 @@
 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
 
 #include "TypingSelectWidget.h"
+#include "TypeRegistrar.h"
+#include "Objects.h"
+#include "Matcher.h"
+
+#include <dataquay/BasicStore.h>
+#include <dataquay/Debug.h>
+#include <dataquay/Uri.h>
+#include <dataquay/RDFException.h>
+#include <dataquay/objectmapper/ObjectLoader.h>
+#include <dataquay/objectmapper/TypeMapping.h>
 
 #include <QApplication>
 
+#include <iostream>
+
 using namespace ClassicalData;
+using namespace Dataquay;
+using namespace std;
+
+ostream &operator<<(ostream &target, const QString &str)
+{
+    return target << str.toLocal8Bit().data();
+}
+
+ostream &operator<<(ostream &target, const QUrl &u)
+{
+    return target << "<" << u.toString() << ">";
+}
+
+void
+usage(const char *name)
+{
+    int s = 0;
+    for (int i = 0; name[i]; ++i) if (name[i] == '/') s = i + 1;
+    name = name + s;
+    cerr << "Usage:" << endl;
+    cerr << "  " << name << " <input-rdf-file>" << endl;
+    exit(2);
+}
+
+bool
+load(BasicStore *store, QString fileName)
+{
+    QUrl url = QUrl::fromLocalFile(fileName);
+
+    cerr << "Importing from URL " << url << " ...";
+    try {
+	store->import(url, BasicStore::ImportPermitDuplicates);
+    } catch (RDFException e) {
+        cerr << " retrying with explicit ntriples type...";
+        try {
+            store->import(url, BasicStore::ImportPermitDuplicates, "ntriples");
+        } catch (RDFException e) {
+            cerr << "failed" << endl;
+            cerr << "Import failed: " << e.what() << endl;
+            return false;
+        }
+    }
+
+    cerr << " done" << endl;
+    return true;
+}
 
 int
 main(int argc, char **argv)
 {
     QApplication app(argc, argv);
 
+    if (argc != 2) usage(argv[0]);
+    QString inFileName = argv[1];
+
+    BasicStore *store = new BasicStore();
+    store->setBaseUri(Uri("http://dbtune.org/classical/resource/"));
+    ObjectLoader *loader = new ObjectLoader(store);
+
+    TypeMapping tm;
+
+    TypeRegistrar::registerTypes();
+    TypeRegistrar::addMappings(store, &tm);
+
+    loader->setTypeMapping(tm);
+
+    if (!load(store, inFileName)) {
+	cerr << "Failed to load data source" << endl;
+	return 1;
+    }
+
+    cerr << "Imported RDF data, mapping to objects...";
+    QObject *root = loader->loadAllObjects(0);
+    cerr << " done" << endl;
+
+    delete loader;
+
+    QList<Composer *> composers = root->findChildren<Composer *>();
+    ComposerTypingThoroughMatcher matcher(composers);
+
     TypingSelectWidget *w = new TypingSelectWidget();
+    w->addMatcher(&matcher);
     
     w->show();