diff --git a/plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb b/plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb index af973af..eeae7ff 100644 --- a/plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb +++ b/plugins/virtuoso/controllers/virtuoso_plugin_admin_controller.rb @@ -20,4 +20,31 @@ class VirtuosoPluginAdminController < AdminController redirect_to :action => :index end + def triple_management + triples_management = VirtuosoPlugin::TriplesManagement.new(environment) + @triples = [] + if request.post? + @query = params[:query] + @graph_uri = params[:graph_uri] + @triples = triples_management.search_triples(@graph_uri, @query) + end + render :action => 'triple_management' + end + + def triple_update + graph_uri = params[:graph_uri] + triples = params[:triples] + + triples_management = VirtuosoPlugin::TriplesManagement.new(environment) + + triples.each { |triple| + from_triple = triple[:from] + to_triple = triple[:to] + triples_management.update_triple(graph_uri, from_triple, to_triple) + } + + session[:notice] = _('Triple(s) succesfully updated.') + redirect_to :action => :triple_management + end + end diff --git a/plugins/virtuoso/lib/virtuoso_plugin/triples_management.rb b/plugins/virtuoso/lib/virtuoso_plugin/triples_management.rb new file mode 100644 index 0000000..5140c9c --- /dev/null +++ b/plugins/virtuoso/lib/virtuoso_plugin/triples_management.rb @@ -0,0 +1,32 @@ +class VirtuosoPlugin::TriplesManagement + + def initialize(environment) + @environment = environment + end + + attr_reader :environment + + def plugin + @plugin ||= VirtuosoPlugin.new(self) + end + + def search_triples(graph_uri, query_sparql) + query = "WITH <#{graph_uri}> #{query_sparql}" + 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 = from_triple[:object] + + to_subject = to_triple[:subject] + to_predicate = to_triple[:predicate] + to_object = to_triple[:object] + + query = "WITH <#{graph_uri}> DELETE { <#{from_subject}> <#{from_predicate}> '#{from_object}' } INSERT { <#{to_subject}> <#{to_predicate}> '#{to_object}' }" + + plugin.virtuoso_client.query(query) + 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 6bc8e70..3386b68 100644 --- a/plugins/virtuoso/views/virtuoso_plugin_admin/index.html.erb +++ b/plugins/virtuoso/views/virtuoso_plugin_admin/index.html.erb @@ -23,7 +23,6 @@ <%= time_ago_as_sentence @settings.last_harvest %> <% end %> -
<% if @harvest_running %> <%= _('Running...') %> @@ -33,3 +32,11 @@ <% end %>
+ +
+ +
+
+ <%= button :edit, _('Triple management'), :action => :triple_management %> +
+
diff --git a/plugins/virtuoso/views/virtuoso_plugin_admin/triple_management.html.erb b/plugins/virtuoso/views/virtuoso_plugin_admin/triple_management.html.erb new file mode 100644 index 0000000..e72d0b3 --- /dev/null +++ b/plugins/virtuoso/views/virtuoso_plugin_admin/triple_management.html.erb @@ -0,0 +1,63 @@ +

<%= _('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, :style => 'width: 100%' ) ) %> + + <%= labelled_form_field(_('Query SPARQL:'), text_area_tag(:query, @query, { :rows => 7, :style => 'width: 99%' } )) %> + + <% button_bar do %> + <%= submit_button(:search, _('Search')) %> + <% end %> + +<% end %> + + + +<% unless @triples.empty? %> + +
+ + <%= form_tag('/admin/plugin/virtuoso/triple_update', :method => 'post') do %> + + <%= hidden_field_tag(:graph_uri, @graph_uri) %> + + <% @triples.each { |triple| %> + +
+ +
+ + <%= hidden_field_tag('triples[][from[subject]]', triple[:s].to_s) %> + <%= text_field_tag('triples[][to[subject]]', triple[:s].to_s, :style => 'width: 99%;') %> +
+ +
+ + <%= hidden_field_tag('triples[][from[predicate]]', triple[:p].to_s) %> + <%= text_field_tag('triples[][to[predicate]]', triple[:p].to_s, :style => 'width: 99%;') %> +
+ +
+ + <%= hidden_field_tag('triples[][from[object]]', triple[:o].to_s) %> + <%= text_field_tag('triples[][to[object]]', triple[:o].to_s, :style => 'width: 99%;') %> +
+ +
+ + <% } %> + + <% button_bar do %> + <%= submit_button(:save, _('Save')) %> + <% end %> + + <% end %> + +<% end %> -- libgit2 0.21.2