diff --git a/plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb b/plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb index 280cfc5..8cba474 100644 --- a/plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb +++ b/plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb @@ -20,7 +20,7 @@ class VirtuosoPluginAdminController < AdminController redirect_to :action => :index end - def triple_management + def triples_management triples_management = VirtuosoPlugin::TriplesManagement.new(environment) @triples = [] if request.post? @@ -45,4 +45,36 @@ class VirtuosoPluginAdminController < AdminController redirect_to :action => :triple_management end + def add_triple + if request.post? + + triple = VirtuosoPlugin::Triple.new + triple.graph = params[:triple][:graph] + triple.subject = params[:triple][:subject] + triple.predicate = params[:triple][:predicate] + triple.object = params[:triple][:object] + + triples_management = VirtuosoPlugin::TriplesManagement.new(environment) + triples_management.add_triple(triple) + + @triples = [] + + session[:notice] = _('Triple succesfully added.') + render :action => :triple_management + end + end + + def remove_triple + triple = VirtuosoPlugin::Triple.new + triple.graph = params[:triple][:graph] + triple.subject = params[:triple][:subject] + triple.predicate = params[:triple][:predicate] + triple.object = params[:triple][:object] + + triples_management = VirtuosoPlugin::TriplesManagement.new(environment) + triples_management.remove_triple(triple) + + render json: { :ok => true, :message => _('Triple succesfully removed.') } + end + end diff --git a/plugins/virtuoso/lib/virtuoso_plugin/triple.rb b/plugins/virtuoso/lib/virtuoso_plugin/triple.rb new file mode 100644 index 0000000..b6a66bf --- /dev/null +++ b/plugins/virtuoso/lib/virtuoso_plugin/triple.rb @@ -0,0 +1,16 @@ +class VirtuosoPlugin::Triple + + attr_accessor :graph, :subject, :predicate, :object + + def object=(value) + @object = format_triple_term(value) + end + + protected + + def format_triple_term(term) + term =~ /^(http|https):\/\// ? "<#{term}>" : "'#{term}'" + end + +end + diff --git a/plugins/virtuoso/lib/virtuoso_plugin/triples_management.rb b/plugins/virtuoso/lib/virtuoso_plugin/triples_management.rb index cc11bc5..ebb30b6 100644 --- a/plugins/virtuoso/lib/virtuoso_plugin/triples_management.rb +++ b/plugins/virtuoso/lib/virtuoso_plugin/triples_management.rb @@ -29,6 +29,16 @@ class VirtuosoPlugin::TriplesManagement plugin.virtuoso_client.query(query) end + def add_triple(triple) + query = "WITH <#{triple.graph}> INSERT { <#{triple.subject}> <#{triple.predicate}> #{triple.object} }" + plugin.virtuoso_client.query(query) + end + + def remove_triple(triple) + query = "WITH <#{triple.graph}> DELETE { <#{triple.subject}> <#{triple.predicate}> #{triple.object} }" + plugin.virtuoso_client.query(query) + end + protected def format_triple_term(term) diff --git a/plugins/virtuoso/public/style.css b/plugins/virtuoso/public/style.css index d843f92..3629e90 100644 --- a/plugins/virtuoso/public/style.css +++ b/plugins/virtuoso/public/style.css @@ -25,3 +25,7 @@ margin-top: 20px; padding-top: 15px; } + +#virtuoso-triples-management #triples-list .triple-actions { + text-align: right; +} diff --git a/plugins/virtuoso/public/triples_management.js b/plugins/virtuoso/public/triples_management.js new file mode 100644 index 0000000..75b384a --- /dev/null +++ b/plugins/virtuoso/public/triples_management.js @@ -0,0 +1,37 @@ +function remove_triple(triple_id) { + graph = jQuery("input#graph_uri").val(); + subject = jQuery("input#triples_triple" + triple_id + "_from_subject").val(); + predicate = jQuery("input#triples_triple" + triple_id + "_from_predicate").val(); + object = jQuery("input#triples_triple" + triple_id + "_from_object").val(); + + var formData = { triple: { graph: graph, subject: subject, predicate: predicate, object: object } } + + jQuery.ajax({ + cache: false, + type: 'POST', + url: '/admin/plugin/virtuoso/remove_triple', + data: formData, + dataType: 'json', + success: function(data, status, ajax){ + if ( !data.ok ) { + display_notice(data.error.message); + } + else { + display_notice(data.message); + jQuery("li#triple-" + triple_id).fadeOut(700, function() { + if (jQuery("ul#triples-list > li").length == 1) { + jQuery("form#form-triples-edit").remove(); + } + else { + jQuery("li#triple-" + triple_id).remove(); + } + }); + } + }, + error: function(ajax, status, errorThrown) { + alert('Send request - HTTP '+status+': '+errorThrown); + } + }); + + return false; +} diff --git a/plugins/virtuoso/views/virtuoso_plugin_admin/add_triple.html.erb b/plugins/virtuoso/views/virtuoso_plugin_admin/add_triple.html.erb new file mode 100644 index 0000000..080879f --- /dev/null +++ b/plugins/virtuoso/views/virtuoso_plugin_admin/add_triple.html.erb @@ -0,0 +1,27 @@ +