From c9a25fcc6150290790457f837355735b513b7239 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 28 May 2009 01:38:34 +0000 Subject: Fix QNAMEs being serialised as URIs. Remove vestigial variable stuff. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2017 a436a847-0d15-0410-975c-d299462d15a1 --- src/client/NodeModel.cpp | 4 +-- src/client/ObjectModel.cpp | 34 +++------------------ src/client/ObjectModel.hpp | 8 ++--- src/client/PatchModel.cpp | 2 +- src/client/PortModel.cpp | 2 +- src/engine/Engine.cpp | 6 ++-- src/engine/HTTPClientSender.cpp | 6 ++-- src/engine/events/CreatePatchEvent.cpp | 2 +- src/gui/NewSubpatchWindow.cpp | 2 +- src/gui/NodeModule.cpp | 2 +- src/gui/PatchPortModule.cpp | 8 ++--- src/gui/PatchView.cpp | 8 ++--- src/gui/PatchWindow.cpp | 17 +++++------ src/gui/UploadPatchWindow.cpp | 2 +- src/ingen/main.cpp | 1 - src/serialisation/Parser.cpp | 2 +- src/serialisation/Serialiser.cpp | 55 +++++++++++++--------------------- src/shared/ResourceImpl.cpp | 2 +- 18 files changed, 58 insertions(+), 105 deletions(-) diff --git a/src/client/NodeModel.cpp b/src/client/NodeModel.cpp index 3f5773b0..c4ddbbaf 100644 --- a/src/client/NodeModel.cpp +++ b/src/client/NodeModel.cpp @@ -199,8 +199,8 @@ NodeModel::port_value_range(SharedPtr port, float& min, float& max) c #endif // Possibly overriden - const Atom& min_atom = port->get_variable("lv2:minimum"); - const Atom& max_atom = port->get_variable("lv2:maximum"); + const Atom& min_atom = port->get_property("lv2:minimum"); + const Atom& max_atom = port->get_property("lv2:maximum"); if (min_atom.type() == Atom::FLOAT) min = min_atom.get_float(); if (max_atom.type() == Atom::FLOAT) diff --git a/src/client/ObjectModel.cpp b/src/client/ObjectModel.cpp index 367237c0..af0473a9 100644 --- a/src/client/ObjectModel.cpp +++ b/src/client/ObjectModel.cpp @@ -40,44 +40,18 @@ ObjectModel::~ObjectModel() } -/** Get a variable for this object. - * - * @return Metadata value with key @a key, empty string otherwise. - */ const Atom& -ObjectModel::get_variable(const URI& key) const -{ - static const Atom null_atom; - - Properties::const_iterator i = _variables.find(key); - if (i != _variables.end()) - return i->second; - else - return null_atom; -} - - -/** Get a variable for this object. - * - * @return Metadata value with key @a key, empty string otherwise. - */ -Atom& -ObjectModel::get_variable(URI& key) +ObjectModel::get_property(const Raul::URI& key) const { - static Atom null_atom; - - Properties::iterator i = _variables.find(key); - if (i != _variables.end()) - return i->second; - else - return null_atom; + Resource::Properties::const_iterator i = properties().find(key); + return (i != properties().end()) ? i->second : _meta.get_property(key); } bool ObjectModel::polyphonic() const { - const Raul::Atom& polyphonic = get_variable("ingen:polyphonic"); + const Raul::Atom& polyphonic = get_property("ingen:polyphonic"); return (polyphonic.is_valid() && polyphonic.get_bool()); } diff --git a/src/client/ObjectModel.hpp b/src/client/ObjectModel.hpp index 321555fd..5029f024 100644 --- a/src/client/ObjectModel.hpp +++ b/src/client/ObjectModel.hpp @@ -54,8 +54,7 @@ class ObjectModel : virtual public Ingen::Shared::GraphObject public: virtual ~ObjectModel(); - const Raul::Atom& get_variable(const Raul::URI& key) const; - Raul::Atom& get_variable(Raul::URI& key); + const Raul::Atom& get_property(const Raul::URI& key) const; virtual void set_property(const Raul::URI& key, const Raul::Atom& value) { ResourceImpl::set_property(key, value); @@ -69,8 +68,7 @@ public: Resource& meta() { return _meta; } const Resource& meta() const { return _meta; } - const Properties& variables() const { return _variables; } - Properties& variables() { return _variables; } + const Raul::URI meta_uri() const { return _meta.uri(); } const Raul::Path path() const { return _path; } const Raul::Symbol symbol() const { return _path.name(); } SharedPtr parent() const { return _parent; } @@ -100,8 +98,6 @@ protected: ResourceImpl _meta; Raul::Path _path; SharedPtr _parent; - - Properties _variables; }; diff --git a/src/client/PatchModel.cpp b/src/client/PatchModel.cpp index b64b9e50..baaa36ba 100644 --- a/src/client/PatchModel.cpp +++ b/src/client/PatchModel.cpp @@ -164,7 +164,7 @@ PatchModel::remove_connection(const Path& src_port_path, const Path& dst_port_pa bool PatchModel::enabled() const { - const Raul::Atom& enabled = get_variable("ingen:enabled"); + const Raul::Atom& enabled = get_property("ingen:enabled"); return (enabled.is_valid() && enabled.get_bool()); } diff --git a/src/client/PortModel.cpp b/src/client/PortModel.cpp index 4fc6654b..9d63c863 100644 --- a/src/client/PortModel.cpp +++ b/src/client/PortModel.cpp @@ -24,7 +24,7 @@ namespace Client { bool PortModel::has_hint(const std::string& qname) const { - const Raul::Atom& hint = get_variable(qname); + const Raul::Atom& hint = get_property(qname); return (hint.is_valid() && hint.get_bool() > 0); } diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp index 4d697b5e..120433fb 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -190,9 +190,9 @@ Engine::activate(size_t parallelism) if (!root_patch) { root_patch = new PatchImpl(*this, "", 1, NULL, _audio_driver->sample_rate(), _audio_driver->buffer_size(), 1); - root_patch->add_property("rdf:type", Raul::Atom(Raul::Atom::URI, "ingen:Patch")); - root_patch->add_property("rdf:type", Raul::Atom(Raul::Atom::URI, "ingen:Node")); - root_patch->set_property("ingen:polyphony", Raul::Atom(int32_t(1))); + root_patch->meta().set_property("rdf:type", Raul::Atom(Raul::Atom::URI, "ingen:Patch")); + root_patch->meta().set_property("ingen:polyphony", Raul::Atom(int32_t(1))); + root_patch->set_property("rdf:type", Raul::Atom(Raul::Atom::URI, "ingen:Node")); root_patch->activate(); _world->store->add(root_patch); root_patch->compiled_patch(root_patch->compile()); diff --git a/src/engine/HTTPClientSender.cpp b/src/engine/HTTPClientSender.cpp index fa6421b9..41f517cb 100644 --- a/src/engine/HTTPClientSender.cpp +++ b/src/engine/HTTPClientSender.cpp @@ -77,8 +77,7 @@ HTTPClientSender::connect(const Path& src_path, const Path& dst_path) { const string msg = string( "@prefix rdf: .\n" - "@prefix ingen: .\n" - "@prefix lv2var: .\n\n<").append( + "@prefix ingen: .\n").append( "<> ingen:connection [\n" "\tingen:destination <").append(dst_path.str()).append("> ;\n" "\tingen:source <").append(src_path.str()).append(">\n] .\n"); @@ -100,8 +99,7 @@ HTTPClientSender::set_property(const URI& subject, const URI& key, const Atom& v const string msg = string( "@prefix rdf: .\n" "@prefix ingen: .\n" - "@prefix ingenuity: .\n" - "@prefix lv2var: .\n\n<").append( + "@prefix ingenuity: .\n").append( subject.str()).append("> ingen:property [\n" "rdf:predicate ").append(key.str()).append(" ;\n" "rdf:value ").append(node.to_string()).append("\n] .\n"); diff --git a/src/engine/events/CreatePatchEvent.cpp b/src/engine/events/CreatePatchEvent.cpp index 16f749a3..ccb4f887 100644 --- a/src/engine/events/CreatePatchEvent.cpp +++ b/src/engine/events/CreatePatchEvent.cpp @@ -84,8 +84,8 @@ CreatePatchEvent::pre_process() _patch = new PatchImpl(_engine, path.name(), poly, _parent, _engine.audio_driver()->sample_rate(), _engine.audio_driver()->buffer_size(), _poly); _patch->meta().properties().insert(_properties.begin(), _properties.end()); + _patch->meta().set_property("rdf:type", Atom(Atom::URI, "ingen:Patch")); _patch->set_property("rdf:type", Atom(Atom::URI, "ingen:Node")); - _patch->set_property("rdf:instanceOf", Atom(Atom::URI, _patch->meta_uri().str())); if (_parent != NULL) { _parent->add_node(new PatchImpl::Nodes::Node(_patch)); diff --git a/src/gui/NewSubpatchWindow.cpp b/src/gui/NewSubpatchWindow.cpp index 0a0f11f5..3c697d81 100644 --- a/src/gui/NewSubpatchWindow.cpp +++ b/src/gui/NewSubpatchWindow.cpp @@ -97,7 +97,7 @@ NewSubpatchWindow::ok_clicked() Resource::Properties props; props.insert(make_pair("rdf:type", Atom(Atom::URI, "ingen:Patch"))); props.insert(make_pair("ingen:polyphony", Atom(int32_t(poly)))); - App::instance().engine()->put(path, props); + App::instance().engine()->put(ResourceImpl::meta_uri(Path::root_uri, path), props); for (GraphObject::Properties::const_iterator i = _initial_data.begin(); i != _initial_data.end(); ++i) App::instance().engine()->set_property(path, i->first, i->second); diff --git a/src/gui/NodeModule.cpp b/src/gui/NodeModule.cpp index b507bba7..b330ab8d 100644 --- a/src/gui/NodeModule.cpp +++ b/src/gui/NodeModule.cpp @@ -92,7 +92,7 @@ NodeModule::create(boost::shared_ptr canvas, SharedPtr n else ret = boost::shared_ptr(new NodeModule(canvas, node)); - for (GraphObject::Properties::const_iterator m = node->variables().begin(); m != node->variables().end(); ++m) + for (GraphObject::Properties::const_iterator m = node->meta().properties().begin(); m != node->meta().properties().end(); ++m) ret->set_property(m->first, m->second); for (GraphObject::Properties::const_iterator m = node->properties().begin(); m != node->properties().end(); ++m) diff --git a/src/gui/PatchPortModule.cpp b/src/gui/PatchPortModule.cpp index bdd93f63..6ceea483 100644 --- a/src/gui/PatchPortModule.cpp +++ b/src/gui/PatchPortModule.cpp @@ -62,8 +62,8 @@ PatchPortModule::create(boost::shared_ptr canvas, SharedPtrset_port(port); ret->set_menu(port->menu()); - for (GraphObject::Properties::const_iterator m = model->variables().begin(); - m != model->variables().end(); ++m) + for (GraphObject::Properties::const_iterator m = model->meta().properties().begin(); + m != model->meta().properties().end(); ++m) ret->set_property(m->first, m->second); for (GraphObject::Properties::const_iterator m = model->properties().begin(); @@ -101,8 +101,8 @@ PatchPortModule::store_location() if (existing_x.type() != Atom::FLOAT || existing_y.type() != Atom::FLOAT || existing_x.get_float() != x || existing_y.get_float() != y) { - App::instance().engine()->set_property(_model->path(), "ingenuity:canvas-x", Atom(x)); - App::instance().engine()->set_property(_model->path(), "ingenuity:canvas-y", Atom(y)); + App::instance().engine()->set_property(_model->meta_uri(), "ingenuity:canvas-x", Atom(x)); + App::instance().engine()->set_property(_model->meta_uri(), "ingenuity:canvas-y", Atom(y)); } } diff --git a/src/gui/PatchView.cpp b/src/gui/PatchView.cpp index 812c3115..ad62d43e 100644 --- a/src/gui/PatchView.cpp +++ b/src/gui/PatchView.cpp @@ -81,12 +81,12 @@ PatchView::set_patch(SharedPtr patch) _poly_spin->set_value(patch->poly()); - for (GraphObject::Properties::const_iterator i = patch->properties().begin(); - i != patch->properties().end(); ++i) + for (GraphObject::Properties::const_iterator i = patch->meta().properties().begin(); + i != patch->meta().properties().end(); ++i) property_changed(i->first, i->second); - for (GraphObject::Properties::const_iterator i = patch->variables().begin(); - i != patch->variables().end(); ++i) + for (GraphObject::Properties::const_iterator i = patch->properties().begin(); + i != patch->properties().end(); ++i) property_changed(i->first, i->second); // Connect model signals to track state diff --git a/src/gui/PatchWindow.cpp b/src/gui/PatchWindow.cpp index 3984c9be..3b5c3f9b 100644 --- a/src/gui/PatchWindow.cpp +++ b/src/gui/PatchWindow.cpp @@ -396,14 +396,13 @@ PatchWindow::event_import_location() void PatchWindow::event_save() { - GraphObject::Properties::const_iterator doc = _patch->variables().find("ingen:document"); - if (doc == _patch->variables().end()) { + const Raul::Atom& document = _patch->get_property("ingen:document"); + if (!document.is_valid() || document.type() != Raul::Atom::URI) { event_save_as(); } else { - const Glib::ustring& document_uri = doc->second.get_string(); - App::instance().loader()->save_patch(_patch, document_uri); + App::instance().loader()->save_patch(_patch, document.get_uri()); _status_bar->push( - (boost::format("Wrote %1% to %2%") % _patch->path() % document_uri).str(), + (boost::format("Wrote %1% to %2%") % _patch->path() % document.get_uri()).str(), STATUS_CONTEXT_PATCH); } } @@ -427,9 +426,9 @@ PatchWindow::event_save_as() dialog.set_filter(filt); // Set current folder to most sensible default - GraphObject::Properties::const_iterator doc = _patch->variables().find("ingen:document"); - if (doc != _patch->variables().end()) - dialog.set_uri(doc->second.get_string()); + const Raul::Atom& document = _patch->get_property("ingen:document"); + if (document.type() == Raul::Atom::URI) + dialog.set_uri(document.get_uri()); else if (App::instance().configuration()->patch_folder().length() > 0) dialog.set_current_folder(App::instance().configuration()->patch_folder()); @@ -477,7 +476,7 @@ PatchWindow::event_save_as() if (confirm) { const Glib::ustring uri = Glib::filename_to_uri(filename); App::instance().loader()->save_patch(_patch, uri); - _patch->set_property("ingen:document", Atom(uri.c_str())); + _patch->set_property("ingen:document", Atom(Atom::URI, uri.c_str())); _status_bar->push( (boost::format("Wrote %1% to %2%") % _patch->path() % uri).str(), STATUS_CONTEXT_PATCH); diff --git a/src/gui/UploadPatchWindow.cpp b/src/gui/UploadPatchWindow.cpp index 0057ec18..1d930cb5 100644 --- a/src/gui/UploadPatchWindow.cpp +++ b/src/gui/UploadPatchWindow.cpp @@ -79,7 +79,7 @@ UploadPatchWindow::on_show() if (atom.is_valid()) _symbol_entry->set_text(atom.get_string()); - atom = _patch->get_variable("doap:name"); + atom = _patch->get_property("doap:name"); if (atom.is_valid()) _short_name_entry->set_text(atom.get_string()); } diff --git a/src/ingen/main.cpp b/src/ingen/main.cpp index c49ae668..d3f6d8f0 100644 --- a/src/ingen/main.cpp +++ b/src/ingen/main.cpp @@ -114,7 +114,6 @@ main(int argc, char** argv) world->rdf_world->add_prefix("ingenuity", "http://drobilla.net/ns/ingenuity#"); world->rdf_world->add_prefix("lv2", "http://lv2plug.in/ns/lv2core#"); world->rdf_world->add_prefix("lv2ev", "http://lv2plug.in/ns/ext/event#"); - world->rdf_world->add_prefix("lv2var", "http://lv2plug.in/ns/ext/instance-var#"); world->rdf_world->add_prefix("lv2midi", "http://lv2plug.in/ns/ext/midi"); world->rdf_world->add_prefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#"); world->rdf_world->add_prefix("owl", "http://www.w3.org/2002/07/owl#"); diff --git a/src/serialisation/Parser.cpp b/src/serialisation/Parser.cpp index d1e16664..647c90be 100644 --- a/src/serialisation/Parser.cpp +++ b/src/serialisation/Parser.cpp @@ -158,7 +158,7 @@ Parser::parse_document( = parse(world, target, model, document_uri, data_path, parent, symbol, data); if (parsed_path) { - target->set_property(*parsed_path, "ingen:document", Atom(document_uri.c_str())); + target->set_property(*parsed_path, "ingen:document", Atom(Atom::URI, document_uri.c_str())); } else { cerr << "WARNING: document URI lost" << endl; } diff --git a/src/serialisation/Serialiser.cpp b/src/serialisation/Serialiser.cpp index 231d19fa..239ce22c 100644 --- a/src/serialisation/Serialiser.cpp +++ b/src/serialisation/Serialiser.cpp @@ -316,7 +316,7 @@ Serialiser::serialise_patch(SharedPtr patch, const Redland::Node& cerr << "WARNING: Patch has no lv2:symbol" << endl; } - serialise_meta_properties(patch_id, patch->properties()); + serialise_properties(patch_id, patch->meta().properties()); for (GraphObject::const_iterator n = _store->children_begin(patch); n != _store->children_end(patch); ++n) { @@ -387,14 +387,14 @@ Serialiser::serialise_node(SharedPtr node, _model->add_statement(node_id, "lv2:symbol", Redland::Literal(_model->world(), node->path().name())); + serialise_properties(node_id, node->properties()); + for (uint32_t i=0; i < node->num_ports(); ++i) { Port* p = node->port(i); const Redland::Node port_id = instance_rdf_node(p->path()); serialise_port(p, port_id); _model->add_statement(node_id, "lv2:port", port_id); } - - serialise_properties(node_id, node->properties()); } @@ -452,7 +452,7 @@ Serialiser::serialise_port_meta(const Port* port, const Redland::Node& port_id) } } - serialise_meta_properties(port_id, port->properties()); + serialise_properties(port_id, port->meta().properties()); } @@ -463,8 +463,13 @@ Serialiser::serialise_connection(SharedPtr parent, if (!_model) throw std::logic_error("serialise_connection called without serialization in progress"); - const Redland::Node src_node = class_rdf_node(connection->src_port_path()); - const Redland::Node dst_node = class_rdf_node(connection->dst_port_path()); + bool top = (parent->path() == _root_path); + const Redland::Node src_node = top + ? instance_rdf_node(connection->src_port_path()) + : class_rdf_node(connection->src_port_path()); + const Redland::Node dst_node = top + ? instance_rdf_node(connection->dst_port_path()) + : class_rdf_node(connection->dst_port_path()); const Redland::Node connection_node = _world.blank_id(); _model->add_statement(connection_node, "ingen:source", src_node); @@ -479,43 +484,25 @@ Serialiser::serialise_connection(SharedPtr parent, } -void -Serialiser::serialise_meta_properties( - Redland::Node subject, - const GraphObject::Properties& properties) -{ - for (GraphObject::Properties::const_iterator v = properties.begin(); v != properties.end(); ++v) { - if (v->first.find(":") && v->second.is_valid()) { - const Redland::Node value = AtomRDF::atom_to_node(_model->world(), v->second); - _model->add_statement(subject, v->first.str(), value); - } else { - cerr << "Warning: unable to serialize property \'" << v->first << "\'" << endl; - } - } -} - - void Serialiser::serialise_properties( Redland::Node subject, const GraphObject::Properties& properties) { for (GraphObject::Properties::const_iterator v = properties.begin(); v != properties.end(); ++v) { - if (v->first.find(":") && v->first.str() != "ingen:document") { - if (v->second.is_valid()) { - const Redland::Resource key(_model->world(), v->first.str()); - const Redland::Node value = AtomRDF::atom_to_node(_model->world(), v->second); - if (value.is_valid()) { - _model->add_statement(subject, key, value); - } else { - cerr << "WARNING: can not serialise variable '" << v->first << "' :: " - << (int)v->second.type() << endl; - } + if (v->second.is_valid()) { + const Redland::Resource key(_model->world(), v->first.str()); + const Redland::Node value = AtomRDF::atom_to_node(_model->world(), v->second); + if (value.is_valid()) { + cerr << "serialise property '" << v->first << "' = " << value << " :: " + << (int)v->second.type() << endl; + _model->add_statement(subject, key, value); } else { - cerr << "WARNING: variable '" << v->first << "' has no value" << endl; + cerr << "WARNING: can not serialise variable '" << v->first << "' :: " + << (int)v->second.type() << endl; } } else { - cerr << "Not serialising special variable '" << v->first << "'" << endl; + cerr << "WARNING: property '" << v->first << "' has no value" << endl; } } } diff --git a/src/shared/ResourceImpl.cpp b/src/shared/ResourceImpl.cpp index 69d294a4..784c82b8 100644 --- a/src/shared/ResourceImpl.cpp +++ b/src/shared/ResourceImpl.cpp @@ -28,7 +28,7 @@ namespace Shared { const Raul::URI ResourceImpl::meta_uri(const Raul::URI& base, const Raul::URI& uri) { - return string("#") + uri.chop_start("/"); + return string("meta:#") + uri.chop_start("/"); } -- cgit v1.2.1