summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/ClientStore.cpp13
-rw-r--r--src/serialisation/Parser.cpp65
2 files changed, 30 insertions, 48 deletions
diff --git a/src/client/ClientStore.cpp b/src/client/ClientStore.cpp
index 010acb10..c5b09b8d 100644
--- a/src/client/ClientStore.cpp
+++ b/src/client/ClientStore.cpp
@@ -255,9 +255,7 @@ ClientStore::put(const URI& uri, const Resource::Properties& properties)
for (iterator i = properties.begin(); i != properties.end(); ++i)
LOG(info) << " " << i->first << " = " << i->second << " :: " << i->second.type() << endl;
LOG(info) << "}" << endl;*/
-
- bool is_meta = ResourceImpl::is_meta_uri(uri);
-
+
// Check if uri is a plugin
const Atom& type = properties.find(_uris->rdf_type)->second;
if (type.type() == Atom::URI) {
@@ -266,10 +264,11 @@ ClientStore::put(const URI& uri, const Resource::Properties& properties)
SharedPtr<PluginModel> p(new PluginModel(uris(), uri, type_uri, properties));
add_plugin(p);
return;
- } else {
}
}
+ bool is_meta = ResourceImpl::is_meta_uri(uri);
+
string path_str = is_meta ? (string("/") + uri.chop_start("#")) : uri.str();
if (!Path::is_valid(path_str)) {
LOG(error) << "Bad path: " << uri.str() << " - " << path_str << endl;
@@ -288,6 +287,10 @@ ClientStore::put(const URI& uri, const Resource::Properties& properties)
PortType data_type(PortType::UNKNOWN);
ResourceImpl::type(uris(), properties, is_patch, is_node, is_port, is_output, data_type);
+ if (path.is_root()) {
+ is_patch = true;
+ }
+
if (is_patch) {
SharedPtr<PatchModel> model(new PatchModel(uris(), path));
model->set_properties(properties);
@@ -307,7 +310,7 @@ ClientStore::put(const URI& uri, const Resource::Properties& properties)
n->set_properties(properties);
add_object(n);
} else {
- LOG(error) << "Plugin with no type" << endl;
+ LOG(warn) << "Node " << path << " has no plugin" << endl;
}
} else if (is_port) {
if (data_type != PortType::UNKNOWN) {
diff --git a/src/serialisation/Parser.cpp b/src/serialisation/Parser.cpp
index 57f54bc9..06922653 100644
--- a/src/serialisation/Parser.cpp
+++ b/src/serialisation/Parser.cpp
@@ -221,60 +221,39 @@ Parser::parse(Ingen::Shared::World* world,
subject = nil;
}
- std::string path_str = data_path ? data_path->chop_scheme() : "/";
+ Raul::Path path("/");
+ if (data_path) {
+ path = *data_path;
+ } else if (parent && symbol) {
+ path = parent->child(*symbol);
+ }
+
boost::optional<Path> ret;
boost::optional<Path> root_path;
-
for (Sord::Iter i = model.find(subject, rdf_type, nil); !i.end(); ++i) {
const Sord::Node& subject = i.get_subject();
const Sord::Node& rdf_class = i.get_object();
- if (!data_path)
- path_str = relative_uri(document_uri, subject.to_c_string(), true);
-
- const bool is_object = (rdf_class == patch_class)
- || (rdf_class == node_class)
- || (rdf_class == in_port_class)
- || (rdf_class == out_port_class);
-
- if (is_object) {
- if (path_str.empty() || path_str[0] != '/')
- path_str = "/" + path_str;
-
- if (!Path::is_valid(path_str)) {
- LOG(warn) << "Invalid path '" << path_str << "', object skipped" << endl;
- continue;
- }
-
- string path = (parent && symbol)
- ? parent->child(*symbol).str()
- : (parent ? *parent : Path("/")).child(path_str.substr(path_str.find("/")+1)).str();
-
- if (!Path::is_valid(path)) {
- LOG(warn) << "Invalid path '" << path << "' transformed to /" << endl;
- path = "/";
- }
-
- if (rdf_class == patch_class) {
- ret = parse_patch(world, target, model, subject, parent, symbol, data);
- } else if (rdf_class == node_class) {
- ret = parse_node(world, target, model, subject, path, data);
- } else if (rdf_class == in_port_class || rdf_class == out_port_class) {
- parse_properties(world, target, model, subject, path, data);
- ret = path;
- }
+ if (rdf_class == patch_class) {
+ ret = parse_patch(world, target, model, subject, parent, symbol, data);
+ } else if (rdf_class == node_class) {
+ ret = parse_node(world, target, model, subject, path, data);
+ } else if (rdf_class == in_port_class || rdf_class == out_port_class) {
+ parse_properties(world, target, model, subject, path, data);
+ ret = path;
+ }
- if (!ret) {
- LOG(error) << "Failed to parse object " << path << endl;
- return boost::optional<Path>();
- }
+ if (!ret) {
+ LOG(error) << "Failed to parse object " << path << endl;
+ return boost::optional<Path>();
+ }
- if (data_path && subject.to_string() == data_path->str())
- root_path = ret;
+ if (data_path && subject.to_string() == data_path->str()) {
+ root_path = ret;
}
}
- return boost::optional<Path>(Path(path_str));
+ return path;
}
boost::optional<Path>