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
|