myexperiment-hackers
[Top][All Lists]
Advanced

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

[myexperiment-hackers] [2135] trunk: auto extract missing metadata, more


From: noreply
Subject: [myexperiment-hackers] [2135] trunk: auto extract missing metadata, more tagging API and / rest-access.xml
Date: Wed, 25 Mar 2009 18:26:02 -0400 (EDT)

Revision
2135
Author
dgc
Date
2009-03-25 18:26:02 -0400 (Wed, 25 Mar 2009)

Log Message

auto extract missing metadata, more tagging API and /rest-access.xml

Modified Paths

Diff

Modified: trunk/app/controllers/workflows_controller.rb (2134 => 2135)


--- trunk/app/controllers/workflows_controller.rb	2009-03-24 19:03:28 UTC (rev 2134)
+++ trunk/app/controllers/workflows_controller.rb	2009-03-25 22:26:02 UTC (rev 2135)
@@ -829,7 +829,8 @@
           # Set the internal unique name for this particular workflow (or workflow_version).
           workflow_to_set.set_unique_name
           
-          workflow_to_set.image, workflow_to_set.svg = processor_instance.get_preview_images if processor_class.can_generate_preview?
+          workflow_to_set.image = processor_instance.get_preview_image if processor_class.can_generate_preview_image?
+          workflow_to_set.svg   = processor_instance.get_preview_svg   if processor_class.can_generate_preview_svg?
         rescue Exception => ex
           worked = false
           err_msg = "ERROR: some processing failed in workflow processor '#{processor_class.to_s}'.\nEXCEPTION: #{ex}"

Modified: trunk/app/models/network.rb (2134 => 2135)


--- trunk/app/models/network.rb	2009-03-24 19:03:28 UTC (rev 2134)
+++ trunk/app/models/network.rb	2009-03-25 22:26:02 UTC (rev 2135)
@@ -51,6 +51,10 @@
              
   alias_method :contributor, :owner
 
+  def label
+    return title
+  end
+
   def owner?(userid)
     user_id.to_i == userid.to_i
   end

Modified: trunk/app/models/user.rb (2134 => 2135)


--- trunk/app/models/user.rb	2009-03-24 19:03:28 UTC (rev 2134)
+++ trunk/app/models/user.rb	2009-03-25 22:26:02 UTC (rev 2135)
@@ -24,6 +24,10 @@
   has_many :experiments, :as => :contributor,
               :conditions => ["contributor_type = ?", "User"]
 
+  def label
+    return name
+  end
+
   def self.most_recent(limit=5)
     self.find(:all,
               :order => "users.created_at DESC",

Modified: trunk/app/models/workflow.rb (2134 => 2135)


--- trunk/app/models/workflow.rb	2009-03-24 19:03:28 UTC (rev 2134)
+++ trunk/app/models/workflow.rb	2009-03-25 22:26:02 UTC (rev 2135)
@@ -29,6 +29,9 @@
                         wv.destroy
                       end }
 
+  before_validation :check_unique_name
+  before_validation :extract_metadata
+
   acts_as_contributable
   
   acts_as_bookmarkable
@@ -114,6 +117,10 @@
     return list
   end
   
+  def check_unique_name
+    set_unique_name if unique_name.nil?
+  end
+
   # Sets an internal unique name for this workflow.
   def set_unique_name
     salt = rand 1000000
@@ -125,6 +132,29 @@
     end
   end
   
+  # This method is called before save and attempts to pull out metadata if it
+  # hasn't been set
+  def extract_metadata
+
+    if !content_blob.nil? && processor_class
+
+      do_image = true if image.nil? && processor_class.can_generate_preview_image?
+      do_svg   = true if svg.nil?   && processor_class.can_generate_preview_svg?
+      do_title = true if title.nil?
+      do_desc  = true if body.nil?
+      
+      if do_image || do_svg || do_title || do_desc
+
+        processor = processor_class.new(content_blob.data)
+
+        self.image = processor.get_preview_image if do_image
+        self.svg   = processor.get_preview_svg   if do_svg
+        self.title = processor.get_title         if do_title
+        self.body  = processor.get_description   if do_desc
+      end
+    end
+  end
+
   def processor_class
     @processor_class ||= WorkflowTypesHandler.processor_class_for_content_type(self.content_type)
   end

Modified: trunk/config/tables.xml


(Binary files differ)

Modified: trunk/lib/rest.rb (2134 => 2135)


--- trunk/lib/rest.rb	2009-03-24 19:03:28 UTC (rev 2134)
+++ trunk/lib/rest.rb	2009-03-25 22:26:02 UTC (rev 2135)
@@ -415,6 +415,7 @@
 
     when 'Creditation';     return nil
     when 'Attribution';     return nil
+    when 'Tagging';         return nil
 
     when 'Workflow::Version'; return "#{rest_resource_uri(ob.workflow)}?version=#{ob.version}"
   end
@@ -448,6 +449,7 @@
     when 'Download';               return "#{base}/download.xml?id=#{ob.id}"
     when 'PackContributableEntry'; return "#{base}/internal-pack-item.xml?id=#{ob.id}"
     when 'PackRemoteEntry';        return "#{base}/external-pack-item.xml?id=#{ob.id}"
+    when 'Tagging';                return "#{base}/tagging.xml?id=#{ob.id}"
 
     when 'Creditation';     return nil
     when 'Attribution';     return nil
@@ -470,6 +472,7 @@
     when 'Citation';               return 'citation'
     when 'Announcement';           return 'announcement'
     when 'Tag';                    return 'tag'
+    when 'Tagging';                return 'tagging'
     when 'Pack';                   return 'pack'
     when 'Experiment';             return 'experiment'
     when 'Download';               return 'download'
@@ -493,6 +496,7 @@
     when 'Citation';               return ob.title
     when 'Announcement';           return ob.title
     when 'Tag';                    return ob.name
+    when 'Tagging';                return ob.tag.name
     when 'Pack';                   return ob.title
     when 'Experiment';             return ob.title
     when 'Download';               return ''
@@ -592,14 +596,21 @@
   resource
 end
 
-def get_rest_uri(req_uri, rules, user, query)
+def rest_access_redirect(req_uri, rules, user, query)
 
   return rest_response(400) if query['resource'].nil?
 
-  obs = (obs.select do |c| c.respond_to?('contribution') == false or Authorization.is_authorized?("index", nil, c, user) end)
-  doc = REXML::Document.new("<?xml version=\"1.0\" encoding=\"UTF-8\"?><rest-uri/>")
+  bits = parse_resource_uri(query['resource'])
 
-  "bing"
+  return rest_response(404) if bits.nil?
+
+  ob = eval(bits[0]).find_by_id(bits[1])
+
+  return rest_response(404) if ob.nil?
+
+  return rest_response(401) if !Authorization.is_authorized?('view', nil, ob, user)
+
+  rest_response(307, :location => rest_access_uri(ob))
 end
 
 def create_default_policy(user)
@@ -645,16 +656,8 @@
     workflow.image = image
 
     image.close
-
-  elsif content and workflow.processor_class and workflow.processor_class.can_generate_preview?
-
-    processor = workflow.processor_class.new(content)
-    workflow.image, workflow.svg = processor.get_preview_images
-
   end
 
-  workflow.set_unique_name
-
   if not workflow.save
     return rest_response(400, :object => workflow)
   end
@@ -853,7 +856,7 @@
   render(:xml => doc.to_s)
 end
 
-def whoami(req_uri, rules, user, query)
+def whoami_redirect(req_uri, rules, user, query)
   if user.class == User
     rest_response(307, :location => rest_access_uri(user))
   else

Modified: trunk/lib/workflow_processors/interface.rb (2134 => 2135)


--- trunk/lib/workflow_processors/interface.rb	2009-03-24 19:03:28 UTC (rev 2134)
+++ trunk/lib/workflow_processors/interface.rb	2009-03-25 22:26:02 UTC (rev 2135)
@@ -46,10 +46,14 @@
       false
     end
     
-    def self.can_generate_preview?
+    def self.can_generate_preview_image?
       false
     end
     
+    def self.can_generate_preview_svg?
+      false
+    end
+    
     # End Class Methods
 
 
@@ -74,10 +78,14 @@
       nil
     end
     
-    def get_preview_images
+    def get_preview_image
       nil
     end
     
+    def get_preview_svg
+      nil
+    end
+    
     def get_workflow_model_object
       nil
     end

Modified: trunk/lib/workflow_processors/taverna2_beta.rb (2134 => 2135)


--- trunk/lib/workflow_processors/taverna2_beta.rb	2009-03-24 19:03:28 UTC (rev 2134)
+++ trunk/lib/workflow_processors/taverna2_beta.rb	2009-03-25 22:26:02 UTC (rev 2135)
@@ -45,10 +45,14 @@
       false
     end
     
-    def self.can_generate_preview?
+    def self.can_generate_preview_image?
       false
     end
     
+    def self.can_generate_preview_svg?
+      false
+    end
+    
     # End Class Methods
     
     
@@ -69,4 +73,4 @@
     
     # End Instance Methods
   end
-end
\ No newline at end of file
+end

Modified: trunk/lib/workflow_processors/taverna_scufl.rb (2134 => 2135)


--- trunk/lib/workflow_processors/taverna_scufl.rb	2009-03-24 19:03:28 UTC (rev 2134)
+++ trunk/lib/workflow_processors/taverna_scufl.rb	2009-03-25 22:26:02 UTC (rev 2135)
@@ -63,10 +63,14 @@
       true
     end
     
-    def self.can_generate_preview?
+    def self.can_generate_preview_image?
       true
     end
     
+    def self.can_generate_preview_svg?
+      true
+    end
+    
     # End Class Methods
     
     
@@ -94,30 +98,42 @@
       return @scufl_model.description.description
     end
     
-    def get_preview_images
-      return nil if @scufl_model.nil?
+    def get_preview_image
+      return nil if @scufl_model.nil? || RUBY_PLATFORM =~ /mswin32/
+
+      title = @scufl_model.description.title.blank? ? "untitled" : @scufl_model.description.title
+      filename = title.gsub(/[^\w\.\-]/,'_').downcase
       
-      if RUBY_PLATFORM =~ /mswin32/
-        return nil
-      else
-        title = @scufl_model.description.title.blank? ? "untitled" : @scufl_model.description.title
-        filename = title.gsub(/[^\w\.\-]/,'_').downcase
-        
-        i = Tempfile.new("image")
-        Scufl::Dot.new.write_dot(i, @scufl_model)
-        i.close(false)
-        img = StringIO.new(`dot -Tpng #{i.path}`)
-        svg = StringIO.new(`dot -Tsvg #{i.path}`)
-        img.extend FileUpload
-        img.original_filename = "#{filename}.png"
-        img.content_type = "image/png"
-        svg.extend FileUpload
-        svg.original_filename = "#{filename}.svg"
-        svg.content_type = "image/svg+xml"
-        return [img, svg]
-      end
+      i = Tempfile.new("image")
+      Scufl::Dot.new.write_dot(i, @scufl_model)
+      i.close(false)
+
+      img = StringIO.new(`dot -Tpng #{i.path}`)
+      img.extend FileUpload
+      img.original_filename = "#{filename}.png"
+      img.content_type = "image/png"
+
+      img
     end
-    
+
+    def get_preview_svg
+      return nil if @scufl_model.nil? || RUBY_PLATFORM =~ /mswin32/
+
+      title = @scufl_model.description.title.blank? ? "untitled" : @scufl_model.description.title
+      filename = title.gsub(/[^\w\.\-]/,'_').downcase
+      
+      i = Tempfile.new("image")
+      Scufl::Dot.new.write_dot(i, @scufl_model)
+      i.close(false)
+
+      svg = StringIO.new(`dot -Tsvg #{i.path}`)
+      svg.extend FileUpload
+      svg.original_filename = "#{filename}.svg"
+      svg.content_type = "image/svg+xml"
+
+      svg
+    end
+
     def get_workflow_model_object
       @scufl_model
     end

Modified: trunk/lib/workflow_processors/trident_opc.rb (2134 => 2135)


--- trunk/lib/workflow_processors/trident_opc.rb	2009-03-24 19:03:28 UTC (rev 2134)
+++ trunk/lib/workflow_processors/trident_opc.rb	2009-03-25 22:26:02 UTC (rev 2135)
@@ -45,10 +45,14 @@
       false
     end
     
-    def self.can_generate_preview?
+    def self.can_generate_preview_image?
       false
     end
     
+    def self.can_generate_preview_svg?
+      false
+    end
+    
     # End Class Methods
     
     
@@ -69,4 +73,4 @@
     
     # End Instance Methods
   end
-end
\ No newline at end of file
+end

Modified: trunk/lib/workflow_processors/trident_xoml.rb (2134 => 2135)


--- trunk/lib/workflow_processors/trident_xoml.rb	2009-03-24 19:03:28 UTC (rev 2134)
+++ trunk/lib/workflow_processors/trident_xoml.rb	2009-03-25 22:26:02 UTC (rev 2135)
@@ -45,10 +45,14 @@
       false
     end
     
-    def self.can_generate_preview?
+    def self.can_generate_preview_image?
       false
     end
     
+    def self.can_generate_preview_svg?
+      false
+    end
+    
     # End Class Methods
     
     
@@ -69,4 +73,4 @@
     
     # End Instance Methods
   end
-end
\ No newline at end of file
+end

Modified: trunk/vendor/plugins/acts_as_taggable_redux/lib/tagging.rb (2134 => 2135)


--- trunk/vendor/plugins/acts_as_taggable_redux/lib/tagging.rb	2009-03-24 19:03:28 UTC (rev 2134)
+++ trunk/vendor/plugins/acts_as_taggable_redux/lib/tagging.rb	2009-03-25 22:26:02 UTC (rev 2135)
@@ -10,4 +10,8 @@
               :order => "created_at DESC",
               :limit => limit)
   end
-end
\ No newline at end of file
+
+  def label
+    return tag.name if tag
+  end
+end

reply via email to

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