annotate utilities/widgettest/widgettest.cpp @ 42:add3570c6035

* Add new "write" option to composer utility * Default year transcodes to empty string instead of zero
author Chris Cannam
date Tue, 20 Apr 2010 15:21:32 +0100
parents 07efb25d24d6
children bcea875d8d2f
rev   line source
Chris@28 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@28 2
Chris@42 3 #include <dataquay/Uri.h>
Chris@42 4
Chris@28 5 #include "TypingSelectWidget.h"
Chris@30 6 #include "TypeRegistrar.h"
Chris@30 7 #include "Objects.h"
Chris@30 8 #include "Matcher.h"
Chris@30 9
Chris@30 10 #include <dataquay/BasicStore.h>
Chris@30 11 #include <dataquay/Debug.h>
Chris@30 12 #include <dataquay/RDFException.h>
Chris@30 13 #include <dataquay/objectmapper/ObjectLoader.h>
Chris@30 14 #include <dataquay/objectmapper/TypeMapping.h>
Chris@28 15
Chris@28 16 #include <QApplication>
Chris@28 17
Chris@30 18 #include <iostream>
Chris@30 19
Chris@28 20 using namespace ClassicalData;
Chris@30 21 using namespace Dataquay;
Chris@30 22 using namespace std;
Chris@30 23
Chris@30 24 ostream &operator<<(ostream &target, const QString &str)
Chris@30 25 {
Chris@30 26 return target << str.toLocal8Bit().data();
Chris@30 27 }
Chris@30 28
Chris@30 29 ostream &operator<<(ostream &target, const QUrl &u)
Chris@30 30 {
Chris@30 31 return target << "<" << u.toString() << ">";
Chris@30 32 }
Chris@30 33
Chris@30 34 void
Chris@30 35 usage(const char *name)
Chris@30 36 {
Chris@30 37 int s = 0;
Chris@30 38 for (int i = 0; name[i]; ++i) if (name[i] == '/') s = i + 1;
Chris@30 39 name = name + s;
Chris@30 40 cerr << "Usage:" << endl;
Chris@30 41 cerr << " " << name << " <input-rdf-file>" << endl;
Chris@30 42 exit(2);
Chris@30 43 }
Chris@30 44
Chris@30 45 bool
Chris@30 46 load(BasicStore *store, QString fileName)
Chris@30 47 {
Chris@30 48 QUrl url = QUrl::fromLocalFile(fileName);
Chris@30 49
Chris@30 50 cerr << "Importing from URL " << url << " ...";
Chris@30 51 try {
Chris@30 52 store->import(url, BasicStore::ImportPermitDuplicates);
Chris@30 53 } catch (RDFException e) {
Chris@30 54 cerr << " retrying with explicit ntriples type...";
Chris@30 55 try {
Chris@30 56 store->import(url, BasicStore::ImportPermitDuplicates, "ntriples");
Chris@30 57 } catch (RDFException e) {
Chris@30 58 cerr << "failed" << endl;
Chris@30 59 cerr << "Import failed: " << e.what() << endl;
Chris@30 60 return false;
Chris@30 61 }
Chris@30 62 }
Chris@30 63
Chris@30 64 cerr << " done" << endl;
Chris@30 65 return true;
Chris@30 66 }
Chris@28 67
Chris@28 68 int
Chris@28 69 main(int argc, char **argv)
Chris@28 70 {
Chris@28 71 QApplication app(argc, argv);
Chris@28 72
Chris@30 73 if (argc != 2) usage(argv[0]);
Chris@30 74 QString inFileName = argv[1];
Chris@30 75
Chris@30 76 BasicStore *store = new BasicStore();
Chris@30 77 store->setBaseUri(Uri("http://dbtune.org/classical/resource/"));
Chris@30 78 ObjectLoader *loader = new ObjectLoader(store);
Chris@30 79
Chris@30 80 TypeMapping tm;
Chris@30 81
Chris@30 82 TypeRegistrar::registerTypes();
Chris@30 83 TypeRegistrar::addMappings(store, &tm);
Chris@30 84
Chris@30 85 loader->setTypeMapping(tm);
Chris@30 86
Chris@30 87 if (!load(store, inFileName)) {
Chris@31 88 cerr << "Failed to load data source" << endl;
Chris@31 89 return 1;
Chris@30 90 }
Chris@30 91
Chris@30 92 cerr << "Imported RDF data, mapping to objects...";
Chris@31 93 QObjectList objects = loader->loadAll();
Chris@30 94 cerr << " done" << endl;
Chris@30 95
Chris@30 96 delete loader;
Chris@30 97
Chris@31 98 QList<Composer *> composers;
Chris@31 99 foreach (QObject *o, objects) {
Chris@31 100 Composer *c = qobject_cast<Composer *>(o);
Chris@31 101 if (c) composers.push_back(c);
Chris@31 102 }
Chris@30 103 ComposerTypingThoroughMatcher matcher(composers);
Chris@30 104
Chris@28 105 TypingSelectWidget *w = new TypingSelectWidget();
Chris@30 106 w->addMatcher(&matcher);
Chris@28 107
Chris@28 108 w->show();
Chris@28 109
Chris@28 110 app.exec();
Chris@28 111 }
Chris@28 112