From 0a2b497f3eb552e8d17f7eb69e7bc9cf71d286f6 Mon Sep 17 00:00:00 2001 From: Marcelo JĂșnior Date: Mon, 17 Nov 2014 18:09:19 -0300 Subject: [PATCH] virtuoso: add options for insert / remove triple individually --- plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb | 34 +++++++++++++++++++++++++++++++++- plugins/virtuoso/lib/virtuoso_plugin/triple.rb | 16 ++++++++++++++++ plugins/virtuoso/lib/virtuoso_plugin/triples_management.rb | 10 ++++++++++ plugins/virtuoso/public/style.css | 4 ++++ plugins/virtuoso/public/triples_management.js | 37 +++++++++++++++++++++++++++++++++++++ plugins/virtuoso/views/virtuoso_plugin_admin/add_triple.html.erb | 27 +++++++++++++++++++++++++++ plugins/virtuoso/views/virtuoso_plugin_admin/index.html.erb | 2 +- plugins/virtuoso/views/virtuoso_plugin_admin/triple_management.html.erb | 16 +++++++++++----- 8 files changed, 139 insertions(+), 7 deletions(-) create mode 100644 plugins/virtuoso/lib/virtuoso_plugin/triple.rb create mode 100644 plugins/virtuoso/public/triples_management.js create mode 100644 plugins/virtuoso/views/virtuoso_plugin_admin/add_triple.html.erb 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 @@ +
+

<%= _('Virtuoso settings » Triples Management » Add Triple')%>

+ + <%= form_tag('/admin/plugin/virtuoso/add_triple', :method => 'post') do %> + + + + <% button_bar do %> + <%= submit_button(:save, _('Save')) %> + <% end %> + + <% end %> + +
diff --git a/plugins/virtuoso/views/virtuoso_plugin_admin/index.html.erb b/plugins/virtuoso/views/virtuoso_plugin_admin/index.html.erb index 24ef897..e0fe3c5 100644 --- a/plugins/virtuoso/views/virtuoso_plugin_admin/index.html.erb +++ b/plugins/virtuoso/views/virtuoso_plugin_admin/index.html.erb @@ -39,7 +39,7 @@
- <%= button :edit, _('Triple management'), :action => :triple_management %> + <%= button :edit, _('Triples management'), :action => :triples_management %> <%= button :edit, _('Custom Queries'), :action => :index, :controller => 'virtuoso_plugin_custom_queries' %>
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 f0c6370..598bc96 100644 --- a/plugins/virtuoso/views/virtuoso_plugin_admin/triple_management.html.erb +++ b/plugins/virtuoso/views/virtuoso_plugin_admin/triple_management.html.erb @@ -1,17 +1,18 @@

<%= _('Virtuoso settings » Triples Management')%>

- <%= form_tag('/admin/plugin/virtuoso/triple_management', :method => 'post') do %> - <%= labelled_form_field(_('Default Graph IRI:'), text_field_tag(:graph_uri, @graph_uri) ) %> + <%= form_tag('/admin/plugin/virtuoso/triples_management', :method => 'post') do %> + <%= labelled_form_field(_('Graph URI:'), text_field_tag(:graph_uri, @graph_uri) ) %> <%= labelled_form_field(_('Query SPARQL:'), text_area_tag(:query, @query, :rows => 7)) %> <% button_bar do %> - <%= submit_button(:search, _('Search')) %> + <%= submit_button(:search, _('Search triples')) %> + <%= button :add, _('Add triple'), :action => :add_triple %> <% end %> <% end %> <% unless @triples.empty? %> - <%= form_tag('/admin/plugin/virtuoso/triple_update', :method => 'post') do %> + <%= form_tag('/admin/plugin/virtuoso/triple_update', :method => 'post', :id => 'form-triples-edit') do %> <%= hidden_field_tag(:graph_uri, @graph_uri) %>
+ +<%= javascript_include_tag '/plugins/virtuoso/triples_management.js' %> -- libgit2 0.21.2