view 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
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */

#include <dataquay/Uri.h>

#include "TypingSelectWidget.h"
#include "TypeRegistrar.h"
#include "Objects.h"
#include "Matcher.h"

#include <dataquay/BasicStore.h>
#include <dataquay/Debug.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...";
    QObjectList objects = loader->loadAll();
    cerr << " done" << endl;

    delete loader;

    QList<Composer *> composers;
    foreach (QObject *o, objects) {
        Composer *c = qobject_cast<Composer *>(o);
        if (c) composers.push_back(c);
    }
    ComposerTypingThoroughMatcher matcher(composers);

    TypingSelectWidget *w = new TypingSelectWidget();
    w->addMatcher(&matcher);
    
    w->show();
    
    app.exec();
}