summaryrefslogtreecommitdiffstats
path: root/src/serialisation
diff options
context:
space:
mode:
Diffstat (limited to 'src/serialisation')
-rw-r--r--src/serialisation/Parser.cpp2
-rw-r--r--src/serialisation/Serialiser.cpp55
2 files changed, 22 insertions, 35 deletions
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<Shared::Patch> 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<Shared::Node> 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<GraphObject> 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);
@@ -480,42 +485,24 @@ Serialiser::serialise_connection(SharedPtr<GraphObject> 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;
}
}
}