myexperiment-hackers
[Top][All Lists]
Advanced

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

[myexperiment-hackers] [2327] trunk: First version of the blog2 template


From: noreply
Subject: [myexperiment-hackers] [2327] trunk: First version of the blog2 template processor.
Date: Tue, 9 Feb 2010 09:39:31 -0500 (EST)

Revision
2327
Author
dtm
Date
2010-02-09 09:39:31 -0500 (Tue, 09 Feb 2010)

Log Message

First version of the blog2 template processor.

Added Paths

Diff

Added: trunk/app/views/workflows/blog2_template/_internals.rhtml ( => )


Added: trunk/app/views/workflows/blog2_template/_run_options.rhtml
===================================================================

Added: trunk/lib/workflow_processors/blog2_template.rb (0 => 2327)


--- trunk/lib/workflow_processors/blog2_template.rb	                        (rev 0)
+++ trunk/lib/workflow_processors/blog2_template.rb	2010-02-09 14:39:31 UTC (rev 2327)
@@ -0,0 +1,162 @@
+# myExperiment: lib/workflow_processors/interface.rb
+#
+# Copyright (c) 2008 University of Manchester and the University of Southampton.
+# See license.txt for details.
+
+# Defines an interface that all workflow type processors need to adhere to.
+module WorkflowProcessors
+  require 'file_upload'
+  class Blog2Template < Interface
+    
+    # Begin Class Methods
+    
+    # These: 
+    # - provide information about the Workflow Type supported by this processor,
+    # - provide information about the processor's capabilites, and
+    # - provide any general functionality.
+    
+    # MUST be unique across all processors
+    def self.display_name
+      "Blog2 Template"
+    end
+    
+    def self.display_data_format
+      "XML"
+    end
+    
+    # All the file extensions supported by this workflow processor.
+    # Must be all in lowercase.
+    def self.file_extensions_supported
+      ["xml"]
+    end
+    
+    def self.can_determine_type_from_file?
+      true
+    end
+    
+    def self.recognised?(file)
+      begin
+        file.rewind
+        blog_model=WorkflowProcessors::Blog2TemplateLib::Parser.parse(file.read)
+        file.rewind
+        return !blog_model.nil?
+      rescue
+        return false
+      end
+    end
+    
+    def self.can_infer_metadata?
+      true
+    end
+    
+    def self.can_generate_preview_image?
+      true
+    end
+    
+    def self.can_generate_preview_svg?
+      false
+    end
+    
+    # End Class Methods
+
+
+    # Begin Object Initializer
+
+    def initialize(workflow_definition)
+      super(workflow_definition)
+      @blog_model = WorkflowProcessors::Blog2TemplateLib::Parser.parse(workflow_definition)
+    end
+
+    # End Object Initializer
+    
+    
+    # Begin Instance Methods
+    
+    # These provide more specific functionality for a given workflow definition, such as parsing for metadata and image generation.
+    
+    def get_title
+      return nil if @blog_model.nil?
+      return (@blog_model.title.blank? ? "[untitled]" : @blog_model.title)
+    end
+    
+    def get_description
+      nil
+    end
+    
+    def get_preview_image
+      return nil if @blog_model.nil?
+
+      img=Tempfile.new('image')
+      img.write(@blog_model.image)
+      img.rewind
+
+      img.extend FileUpload
+      img.original_filename="preview.png"
+      img.content_type="image/png"
+
+      img
+    end
+    
+    def get_preview_svg
+      nil
+    end
+    
+    def get_workflow_model_object
+      @blog_model
+    end
+    
+    def get_workflow_model_input_ports
+      
+    end
+    
+    def get_search_terms
+      ""
+    end
+
+    def get_components
+      nil
+    end
+
+    # End Instance Methods
+    
+  end
+  module Blog2TemplateLib
+    class Model
+      attr_accessor :title
+      attr_accessor :author
+      attr_accessor :image
+      attr_accessor :content
+    end
+    module Parser
+      require 'xml/libxml'
+      require 'base64'
+      def self.parse(xml)
+        parser=LibXML::XML::Parser.string(xml)
+        document=parser.parse
+        post=document.find_first('/posts/post')
+
+        return nil if post.nil?
+
+        return create_model(post)
+      end
+      def self.create_model(element)
+        content=element.find_first('content')
+        title=element.find_first('title')
+        author=element.find_first('author/name')
+
+        return nil if (content.nil? || title.nil? || author.nil?)
+
+        model=Blog2TemplateLib::Model.new
+
+        model.title=title.content
+        model.author=author.content
+        model.content=content.content
+
+        encoded=element.find_first("formats/address@hidden'image/png']")
+        model.image=Base64.decode64(encoded.content) unless encoded.nil?
+
+        return model
+      end
+    end
+  end
+end

reply via email to

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