From 9e2a757e026abf79d0cdcf12a18796fa89973356 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 11 Dec 2006 22:32:31 +0000 Subject: Serialization of patch ports. git-svn-id: http://svn.drobilla.net/lad/ingen@216 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/client/Loader.cpp | 54 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 8 deletions(-) (limited to 'src/libs/client/Loader.cpp') diff --git a/src/libs/client/Loader.cpp b/src/libs/client/Loader.cpp index ac661e58..fe1af795 100644 --- a/src/libs/client/Loader.cpp +++ b/src/libs/client/Loader.cpp @@ -31,6 +31,7 @@ Loader::Loader(SharedPtr engine, SharedPtr nam _namespaces = SharedPtr(new Namespaces()); // FIXME: hack + _namespaces->add("ingen", "http://codeson.net/ns/ingen#"); _namespaces->add("ingenuity", "http://codeson.net/ns/ingenuity#"); } @@ -47,14 +48,16 @@ Loader::load(const Glib::ustring& filename, { std::map created; + + /* Load nodes */ + RDFQuery query(Glib::ustring( "SELECT DISTINCT ?name ?plugin ?floatkey ?floatval FROM <") + filename + "> WHERE {\n" "?patch ingen:node ?node .\n" "?node ingen:name ?name ;\n" " ingen:plugin ?plugin ;\n" - "OPTIONAL { ?node ?floatkey ?floatval . \n" - " FILTER ( datatype(?floatval) = xsd:decimal )\n" - " }\n" + "OPTIONAL { ?node ?floatkey ?floatval . \n" + " FILTER ( datatype(?floatval) = xsd:decimal ) }\n" "}"); RDFQuery::Results nodes = query.run(filename); @@ -64,7 +67,6 @@ Loader::load(const Glib::ustring& filename, const Glib::ustring& plugin = (*i)["plugin"]; if (created.find(name) == created.end()) { - cerr << "CREATING " << name << endl; _engine->create_node(parent.base() + name, plugin, false); created[name] = true; } @@ -72,13 +74,49 @@ Loader::load(const Glib::ustring& filename, Glib::ustring floatkey = _namespaces->qualify((*i)["floatkey"]); Glib::ustring floatval = (*i)["floatval"]; - float val = atof(floatval.c_str()); + if (floatkey != "" && floatval != "") { + const float val = atof(floatval.c_str()); + _engine->set_metadata(parent.base() + name, floatkey, Atom(val)); + } + } + + created.clear(); - cerr << floatkey << " = " << val << endl; - _engine->set_metadata(parent.base() + name, floatkey, Atom(val)); - } + /* Load patch ports */ + query = RDFQuery(Glib::ustring( + "SELECT DISTINCT ?port ?type ?name ?datatype ?floatkey ?floatval FROM <") + filename + "> WHERE {\n" + "?patch ingen:port ?port .\n" + "?port a ?type ;\n" + " ingen:name ?name ;\n" + " ingen:dataType ?datatype .\n" + "OPTIONAL { ?port ?floatkey ?floatval . \n" + " FILTER ( datatype(?floatval) = xsd:decimal ) }\n" + "}"); + + RDFQuery::Results ports = query.run(filename); + + for (RDFQuery::Results::iterator i = ports.begin(); i != ports.end(); ++i) { + const Glib::ustring& name = (*i)["name"]; + const Glib::ustring& type = _namespaces->qualify((*i)["type"]); + const Glib::ustring& datatype = (*i)["datatype"]; + + if (created.find(name) == created.end()) { + cerr << "TYPE: " << type << endl; + bool is_output = (type == "ingen:OutputPort"); // FIXME: check validity + _engine->create_port(parent.base() + name, datatype, is_output); + created[name] = true; + } + + Glib::ustring floatkey = _namespaces->qualify((*i)["floatkey"]); + Glib::ustring floatval = (*i)["floatval"]; + + if (floatkey != "" && floatval != "") { + const float val = atof(floatval.c_str()); + _engine->set_metadata(parent.base() + name, floatkey, Atom(val)); + } + } } -- cgit v1.2.1