myexperiment-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myexperiment-hackers] [2560] trunk: copied workflow processor extractio


From: noreply
Subject: [myexperiment-hackers] [2560] trunk: copied workflow processor extraction from biocat branch to trunk
Date: Mon, 21 Feb 2011 10:31:12 -0500 (EST)

Revision
2560
Author
dgc
Date
2011-02-21 10:31:11 -0500 (Mon, 21 Feb 2011)

Log Message

copied workflow processor extraction from biocat branch to trunk

Modified Paths

Added Paths

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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]