[Sv1-commits] SF.net SVN: sv1: [1123] sonic-visualiser/branches/rdf-import
Brought to you by:
cannam
From: <ca...@us...> - 2008-06-24 15:37:59
|
Revision: 1123 http://sv1.svn.sourceforge.net/sv1/?rev=1123&view=rev Author: cannam Date: 2008-06-24 08:32:37 -0700 (Tue, 24 Jun 2008) Log Message: ----------- * Fill out RDFTransformFactory -- it now basically works Modified Paths: -------------- sonic-visualiser/branches/rdf-import/rdf/PluginRDFIndexer.cpp sonic-visualiser/branches/rdf-import/rdf/RDFTransformFactory.cpp sonic-visualiser/branches/rdf-import/rdf/SimpleSPARQLQuery.cpp sonic-visualiser/branches/rdf-import/transform/TransformFactory.cpp Modified: sonic-visualiser/branches/rdf-import/rdf/PluginRDFIndexer.cpp =================================================================== --- sonic-visualiser/branches/rdf-import/rdf/PluginRDFIndexer.cpp 2008-06-24 14:19:14 UTC (rev 1122) +++ sonic-visualiser/branches/rdf-import/rdf/PluginRDFIndexer.cpp 2008-06-24 15:32:37 UTC (rev 1123) @@ -18,6 +18,7 @@ #include "SimpleSPARQLQuery.h" #include "data/fileio/FileSource.h" +#include "plugin/PluginIdentifier.h" #include <vamp-sdk/PluginHostAdapter.h> @@ -236,7 +237,8 @@ << "\" (uri <" << pluginUri.toStdString() << ">) is at url <" << urlString.toStdString() << ">" << endl; */ - QString pluginId = soname + ":" + identifier; + QString pluginId = PluginIdentifier::createIdentifier + ("vamp", soname, identifier); foundSomething = true; Modified: sonic-visualiser/branches/rdf-import/rdf/RDFTransformFactory.cpp =================================================================== --- sonic-visualiser/branches/rdf-import/rdf/RDFTransformFactory.cpp 2008-06-24 14:19:14 UTC (rev 1122) +++ sonic-visualiser/branches/rdf-import/rdf/RDFTransformFactory.cpp 2008-06-24 15:32:37 UTC (rev 1123) @@ -24,6 +24,8 @@ #include <iostream> #include <cmath> +#include "SimpleSPARQLQuery.h" +#include "PluginRDFIndexer.h" #include "base/ProgressReporter.h" #include "transform/TransformFactory.h" @@ -46,14 +48,8 @@ std::vector<Transform> getTransforms(ProgressReporter *); protected: - QString m_uristring; - librdf_world *m_world; - librdf_uri *m_uri; - librdf_storage *m_storage; - librdf_model *m_model; + QString m_urlString; QString m_errorString; - - //... }; @@ -91,16 +87,13 @@ return m_d->getTransforms(r); } -RDFTransformFactoryImpl::RDFTransformFactoryImpl(QString uri) : - m_uristring(uri) +RDFTransformFactoryImpl::RDFTransformFactoryImpl(QString url) : + m_urlString(url) { - //!!! fortunately this global stuff goes away in future rasqal versions - rasqal_init(); } RDFTransformFactoryImpl::~RDFTransformFactoryImpl() { - rasqal_finish(); } bool @@ -115,25 +108,151 @@ return m_errorString; } -static void -errorHandler(void *, - raptor_locator* locator, - const char *message) -{ - fprintf(stderr, "RDFTransformFactoryImpl: Error - "); - raptor_print_locator(stderr, locator); - fprintf(stderr, " - %s\n", message); -} - std::vector<Transform> RDFTransformFactoryImpl::getTransforms(ProgressReporter *reporter) { std::vector<Transform> transforms; - // and here we find the actual work! - //!!! + SimpleSPARQLQuery query + (QString + ( + " PREFIX vamp: <http://purl.org/ontology/vamp/> " + " SELECT ?transform ?plugin ?output ?program " + " ?step_size ?block_size ?window_type " + " ?sample_rate ?start ?duration " + " FROM <%1> " + + " WHERE { " + " ?transform a vamp:Transform ; " + " vamp:plugin ?plugin . " + " OPTIONAL { ?transform vamp:output ?output } . " + " OPTIONAL { ?transform vamp:program ?program } . " + " OPTIONAL { ?transform vamp:step_size ?step_size } . " + " OPTIONAL { ?transform vamp:block_size ?block_size } . " + " OPTIONAL { ?transform vamp:window_type ?window_type } . " + " OPTIONAL { ?transform vamp:sample_rate ?sample_rate } . " + " OPTIONAL { ?transform vamp:start ?start } . " + " OPTIONAL { ?transform vamp:duration ?duration } " + " } " + ) + .arg(m_urlString)); + + SimpleSPARQLQuery::ResultList results = query.execute(); + + if (!query.isOK()) { + m_errorString = query.getErrorString(); + return transforms; + } + + if (query.wasCancelled()) { + m_errorString = "Query cancelled"; + return transforms; + } + + PluginRDFIndexer *indexer = PluginRDFIndexer::getInstance(); + + for (int i = 0; i < results.size(); ++i) { + + SimpleSPARQLQuery::KeyValueMap &result = results[i]; + + QString transformUri = result["transform"].value; + QString pluginUri = result["plugin"].value; + + QString pluginId = indexer->getIdForPluginURI(pluginUri); + + if (pluginId == "") { + cerr << "RDFTransformFactory: WARNING: Unknown plugin <" + << pluginUri.toStdString() << "> for transform <" + << transformUri.toStdString() << ">" << endl; + continue; + } + + Transform transform; + transform.setPluginIdentifier(pluginId); + + if (result["output"].type == SimpleSPARQLQuery::LiteralValue) { + transform.setOutput(result["output"].value); + } + + if (result["program"].type == SimpleSPARQLQuery::LiteralValue) { + transform.setProgram(result["program"].value); + } + + if (result["step_size"].type == SimpleSPARQLQuery::LiteralValue) { + transform.setStepSize(result["step_size"].value.toUInt()); + } + + if (result["block_size"].type == SimpleSPARQLQuery::LiteralValue) { + transform.setBlockSize(result["block_size"].value.toUInt()); + } + + if (result["window_type"].type == SimpleSPARQLQuery::LiteralValue) { + cerr << "NOTE: can't handle window type yet (value is \"" + << result["window_type"].value.toStdString() << "\")" << endl; + } + + if (result["sample_rate"].type == SimpleSPARQLQuery::LiteralValue) { + transform.setStepSize(result["sample_rate"].value.toFloat()); + } + + if (result["start"].type == SimpleSPARQLQuery::LiteralValue) { + transform.setStartTime(RealTime::fromXsdDuration + (result["start"].value.toStdString())); + } + + if (result["duration"].type == SimpleSPARQLQuery::LiteralValue) { + transform.setDuration(RealTime::fromXsdDuration + (result["duration"].value.toStdString())); + } + + SimpleSPARQLQuery paramQuery + (QString + ( + " PREFIX vamp: <http://purl.org/ontology/vamp/> " + + " SELECT ?param_id ?param_value " + + " FROM <%1> " + + " WHERE { " + " <%2> vamp:parameter ?param . " + " ?param vamp:identifier ?param_id ; " + " vamp:value ?param_value " + " } " + ) + .arg(m_urlString) + .arg(transformUri)); + + SimpleSPARQLQuery::ResultList paramResults = paramQuery.execute(); + + if (!paramQuery.isOK()) { + m_errorString = paramQuery.getErrorString(); + return transforms; + } + + if (paramQuery.wasCancelled()) { + m_errorString = "Query cancelled"; + return transforms; + } + + for (int j = 0; j < paramResults.size(); ++j) { + + QString paramId = paramResults[j]["param_id"].value; + QString paramValue = paramResults[j]["param_value"].value; + + if (paramId == "" || paramValue == "") continue; + + transform.setParameter(paramId, paramValue.toFloat()); + } + + cerr << "RDFTransformFactory: NOTE: Transform is: " << endl; + cerr << transform.toXmlString().toStdString() << endl; + + transforms.push_back(transform); + } + return transforms; } Modified: sonic-visualiser/branches/rdf-import/rdf/SimpleSPARQLQuery.cpp =================================================================== --- sonic-visualiser/branches/rdf-import/rdf/SimpleSPARQLQuery.cpp 2008-06-24 14:19:14 UTC (rev 1122) +++ sonic-visualiser/branches/rdf-import/rdf/SimpleSPARQLQuery.cpp 2008-06-24 15:32:37 UTC (rev 1123) @@ -40,6 +40,8 @@ protected: static void errorHandler(void *, raptor_locator *, const char *); + static bool m_initialised; + QString m_query; QString m_errorString; ProgressReporter *m_reporter; @@ -84,18 +86,23 @@ return m_impl->getErrorString(); } +bool +SimpleSPARQLQuery::Impl::m_initialised = false; + SimpleSPARQLQuery::Impl::Impl(QString query) : m_query(query), m_reporter(0), m_cancelled(false) { //!!! fortunately this global stuff goes away in future rasqal versions - rasqal_init(); + if (!m_initialised) { + rasqal_init(); + } } SimpleSPARQLQuery::Impl::~Impl() { - rasqal_finish(); +//!!! rasqal_finish(); } bool Modified: sonic-visualiser/branches/rdf-import/transform/TransformFactory.cpp =================================================================== --- sonic-visualiser/branches/rdf-import/transform/TransformFactory.cpp 2008-06-24 14:19:14 UTC (rev 1122) +++ sonic-visualiser/branches/rdf-import/transform/TransformFactory.cpp 2008-06-24 15:32:37 UTC (rev 1123) @@ -484,14 +484,18 @@ FeatureExtractionPluginFactory *factory = FeatureExtractionPluginFactory::instanceFor(pluginId); - plugin = factory->instantiatePlugin(pluginId, rate); + if (factory) { + plugin = factory->instantiatePlugin(pluginId, rate); + } } else { RealTimePluginFactory *factory = RealTimePluginFactory::instanceFor(pluginId); - - plugin = factory->instantiatePlugin(pluginId, 0, 0, rate, 1024, 1); + + if (factory) { + plugin = factory->instantiatePlugin(pluginId, 0, 0, rate, 1024, 1); + } } return plugin; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |