Diff
Modified: trunk/Rakefile (2559 => 2560)
--- trunk/Rakefile 2011-02-12 15:34:49 UTC (rev 2559)
+++ trunk/Rakefile 2011-02-21 15:31:11 UTC (rev 2560)
@@ -62,3 +62,16 @@
LoadVocabulary::load_vocabulary
end
+desc 'Refresh workflow metadata'
+task "myexp:refresh:workflows" do
+ require File.dirname(__FILE__) + '/config/environment'
+
+ conn = ActiveRecord::Base.connection
+
+ conn.execute('TRUNCATE workflow_processors')
+
+ Workflow.find(:all).each do |w|
+ w.extract_metadata
+ end
+end
+
Modified: trunk/app/controllers/workflows_controller.rb (2559 => 2560)
--- trunk/app/controllers/workflows_controller.rb 2011-02-12 15:34:49 UTC (rev 2559)
+++ trunk/app/controllers/workflows_controller.rb 2011-02-21 15:31:11 UTC (rev 2560)
@@ -194,6 +194,14 @@
@viewing = Viewing.create(:contribution => @workflow.contribution, :user => (logged_in? ? current_user : nil), :user_agent => request.env['HTTP_USER_AGENT'], :accessed_from_site => accessed_from_website?())
end
+ @contributions_with_similar_services = @workflow.workflows_with_similar_services.select do |w|
+ Authorization.is_authorized?('view', nil, w, current_user)
+ end.map do |w|
+ w.contribution
+ end
+
+ @similar_services_limit = 10
+
respond_to do |format|
format.html {
@@ -291,6 +299,11 @@
@workflow.solr_save if Conf.solr_enable
end
+ begin
+ @workflow.extract_metadata
+ rescue
+ end
+
policy_err_msg = update_policy(@workflow, params)
# Credits and Attributions:
@@ -394,6 +407,16 @@
# TODO: wrap this in a transaction!
@workflow.content_blob_id = ContentBlob.create(:data ="" file.read).id
if @workflow.save_as_new_version(params[:new_workflow][:rev_comments])
+
+ # Extract workflow metadata using a Workflow object that includes the
+ # newly created version.
+
+ begin
+ @workflow.reload
+ @workflow.extract_metadata
+ rescue
+ end
+
respond_to do |format|
flash[:notice] = 'New workflow version successfully created.'
format.html {
Modified: trunk/app/models/workflow.rb (2559 => 2560)
--- trunk/app/models/workflow.rb 2011-02-12 15:34:49 UTC (rev 2559)
+++ trunk/app/models/workflow.rb 2011-02-21 15:31:11 UTC (rev 2560)
@@ -303,4 +303,47 @@
true
end
end
+
+ def delete_metadata
+ if processor_class
+ WorkflowProcessor.destroy_all(["workflow_id = ?", id])
+ end
+ end
+
+ def extract_metadata
+ if processor_class
+ delete_metadata
+ begin
+ processor_class.new(content_blob.data).extract_metadata(id)
+ rescue
+ end
+ end
+ end
+
+ def workflows_with_similar_services
+
+ # Get the WSDL URIs that this workflow uses
+
+ workflow_wps = WorkflowProcessor.find(:all,
+ :select => 'DISTINCT workflow_id, wsdl',
+ :conditions => ['workflow_id = ? AND wsdl IS NOT NULL', id])
+
+ return [] if workflow_wps.empty?
+
+ wsdls = workflow_wps.map do |wp| wp.wsdl end
+
+ # Get all the related workflows
+
+ related_wps = WorkflowProcessor.find(:all,
+ :select => 'DISTINCT workflow_id, wsdl',
+ :conditions => ['workflow_id != ? AND (' + ((1..wsdls.length).map do "wsdl = ?" end).join(" OR ") + ')', id] + wsdls)
+
+ related_workflows = related_wps.group_by do |wp| wp.workflow end
+
+ # Sort results based on the number of matching services with the original workflow
+
+ related_workflows = related_workflows.sort do |a, b| b[1].length <=> a[1].length end
+
+ related_workflows.map do |result| result[0] end
+ end
end
Copied: trunk/config/schema.d/workflows.xml (from rev 2559, branches/biocat/config/schema.d/workflows.xml) (0 => 2560)
--- trunk/config/schema.d/workflows.xml (rev 0)
+++ trunk/config/schema.d/workflows.xml 2011-02-21 15:31:11 UTC (rev 2560)
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<schema>
+
+ <table name="workflow_processors">
+
+ <column type="integer" name="workflow_id"/>
+
+ <column type="string" name="name"/>
+ <column type="string" name="wsdl"/>
+ <column type="string" name="wsdl_operation"/>
+
+ <belongs-to target="workflows"/>
+
+ </table>
+
+</schema>
+
Modified: trunk/lib/workflow_processors/interface.rb (2559 => 2560)
--- trunk/lib/workflow_processors/interface.rb 2011-02-12 15:34:49 UTC (rev 2559)
+++ trunk/lib/workflow_processors/interface.rb 2011-02-21 15:31:11 UTC (rev 2560)
@@ -105,6 +105,9 @@
XML::Node.new("components")
end
+ def extract_metadata(workflow_id)
+ end
+
# End Instance Methods
end
Modified: trunk/lib/workflow_processors/taverna2.rb (2559 => 2560)
--- trunk/lib/workflow_processors/taverna2.rb 2011-02-12 15:34:49 UTC (rev 2559)
+++ trunk/lib/workflow_processors/taverna2.rb 2011-02-21 15:31:11 UTC (rev 2560)
@@ -362,6 +362,16 @@
aux(@t2flow_model, @t2flow_model, 'components')
end
+ def extract_metadata(workflow_id)
+
+ @t2flow_model.all_processors.each do |processor|
+ WorkflowProcessor.create(:workflow_id => workflow_id,
+ :name => processor.name,
+ :wsdl => processor.wsdl,
+ :wsdl_operation => processor.wsdl)
+ end
+ end
+
# End Instance Methods
end
end
Modified: trunk/lib/workflow_processors/taverna_scufl.rb (2559 => 2560)
--- trunk/lib/workflow_processors/taverna_scufl.rb 2011-02-12 15:34:49 UTC (rev 2559)
+++ trunk/lib/workflow_processors/taverna_scufl.rb 2011-02-21 15:31:11 UTC (rev 2560)
@@ -281,6 +281,16 @@
aux(@scufl_model, 'components')
end
+ def extract_metadata(workflow_id)
+
+ @scufl_model.all_processors.each do |processor|
+ WorkflowProcessor.create(:workflow_id => workflow_id,
+ :name => processor.name,
+ :wsdl => processor.wsdl,
+ :wsdl_operation => processor.wsdl_operation)
+ end
+ end
+
# End Instance Methods
end
end