diff --git a/plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb b/plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb index 0c5c1a0..652de5d 100644 --- a/plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb +++ b/plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb @@ -34,18 +34,25 @@ class VirtuosoPluginAdminController < AdminController render :action => 'triple_management' end - def triple_update - graph_uri = params[:graph_uri] - triples = params[:triples] + def update_triple + if request.post? + from_triple = VirtuosoPlugin::Triple.new + from_triple.graph = params[:from_triple][:graph] + from_triple.subject = params[:from_triple][:subject] + from_triple.predicate = params[:from_triple][:predicate] + from_triple.object = params[:from_triple][:object] - triples_management = VirtuosoPlugin::TriplesManagement.new(environment) + to_triple = VirtuosoPlugin::Triple.new + to_triple.graph = params[:to_triple][:graph] + to_triple.subject = params[:to_triple][:subject] + to_triple.predicate = params[:to_triple][:predicate] + to_triple.object = params[:to_triple][:object] - triples.each { |triple_key, triple_content| - triples_management.update_triple(graph_uri, triple_content[:from], triple_content[:to]) - } + triples_management = VirtuosoPlugin::TriplesManagement.new(environment) + triples_management.update_triple(from_triple, to_triple) - session[:notice] = _('Triple(s) succesfully updated.') - redirect_to :action => :triple_management + render json: { :ok => true, :message => _('Triple succesfully updated.') } + end end def add_triple @@ -65,16 +72,18 @@ class VirtuosoPluginAdminController < AdminController 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] + 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.remove_triple(triple) + triples_management = VirtuosoPlugin::TriplesManagement.new(environment) + triples_management.remove_triple(triple) - render json: { :ok => true, :message => _('Triple succesfully removed.') } + render json: { :ok => true, :message => _('Triple succesfully removed.') } + end end end diff --git a/plugins/virtuoso/lib/virtuoso_plugin/triples_management.rb b/plugins/virtuoso/lib/virtuoso_plugin/triples_management.rb index ebb30b6..a8375bb 100644 --- a/plugins/virtuoso/lib/virtuoso_plugin/triples_management.rb +++ b/plugins/virtuoso/lib/virtuoso_plugin/triples_management.rb @@ -15,16 +15,8 @@ class VirtuosoPlugin::TriplesManagement plugin.virtuoso_client.query(query) end - def update_triple(graph_uri, from_triple, to_triple) - from_subject = from_triple[:subject] - from_predicate = from_triple[:predicate] - from_object = format_triple_term(from_triple[:object]) - - to_subject = to_triple[:subject] - to_predicate = to_triple[:predicate] - to_object = format_triple_term(to_triple[:object]) - - query = "WITH <#{graph_uri}> DELETE { <#{from_subject}> <#{from_predicate}> #{from_object} } INSERT { <#{to_subject}> <#{to_predicate}> #{to_object} }" + def update_triple(from_triple, to_triple) + query = "WITH <#{from_triple.graph}> DELETE { <#{from_triple.subject}> <#{from_triple.predicate}> #{from_triple.object} } INSERT { <#{to_triple.subject}> <#{to_triple.predicate}> #{to_triple.object} }" plugin.virtuoso_client.query(query) end @@ -39,10 +31,4 @@ class VirtuosoPlugin::TriplesManagement plugin.virtuoso_client.query(query) end - protected - - def format_triple_term(term) - term =~ /^(http|https):\/\// ? "<#{term}>" : "'#{term}'" - end - end diff --git a/plugins/virtuoso/public/triples_management.js b/plugins/virtuoso/public/triples_management.js index 9e0c93c..e3c7464 100644 --- a/plugins/virtuoso/public/triples_management.js +++ b/plugins/virtuoso/public/triples_management.js @@ -1,3 +1,41 @@ +function update_triple(triple_id) { + graph = jQuery("input#graph_uri").val(); + + from_subject = jQuery("input#triples_triple" + triple_id + "_from_subject").val(); + from_predicate = jQuery("input#triples_triple" + triple_id + "_from_predicate").val(); + from_object = jQuery("input#triples_triple" + triple_id + "_from_object").val(); + + to_subject = jQuery("input#triples_triple" + triple_id + "_to_subject").val(); + to_predicate = jQuery("input#triples_triple" + triple_id + "_to_predicate").val(); + to_object = jQuery("input#triples_triple" + triple_id + "_to_object").val(); + + var formData = { + from_triple: { graph: graph, subject: from_subject, predicate: from_predicate, object: from_object }, + to_triple: { graph: graph, subject: to_subject, predicate: to_predicate, object: to_object } + } + + jQuery.ajax({ + cache: false, + type: 'POST', + url: '/admin/plugin/virtuoso/update_triple', + data: formData, + dataType: 'json', + success: function(data, status, ajax){ + if ( !data.ok ) { + display_notice(data.error.message); + } + else { + display_notice(data.message); + jQuery("input#triples_triple" + triple_id + "_from_object").val(jQuery("input#triples_triple" + triple_id + "_to_object").val()); + } + }, + error: function(ajax, status, errorThrown) { + alert('Send request - HTTP '+status+': '+errorThrown); + } + }); + +} + function add_triple() { graph = jQuery("input#triple_graph").val(); subject = jQuery("input#triple_subject").val(); diff --git a/plugins/virtuoso/views/virtuoso_plugin_admin/triple_management.html.erb b/plugins/virtuoso/views/virtuoso_plugin_admin/triple_management.html.erb index 2096d97..9393ad4 100644 --- a/plugins/virtuoso/views/virtuoso_plugin_admin/triple_management.html.erb +++ b/plugins/virtuoso/views/virtuoso_plugin_admin/triple_management.html.erb @@ -36,6 +36,7 @@ <%= labelled_form_field(_('Object:'), text_field_tag("triples[triple#{triple_counter}[to][object]]", triple[:o].to_s) ) %>