diff options
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/csv_export.rb | 26 | ||||
| -rw-r--r-- | app/models/export_task.rb | 186 | ||||
| -rw-r--r-- | app/models/gtfs_export.rb | 58 | ||||
| -rw-r--r-- | app/models/hub_export.rb | 67 | ||||
| -rw-r--r-- | app/models/kml_export.rb | 24 | ||||
| -rw-r--r-- | app/models/neptune_export.rb | 42 | ||||
| -rw-r--r-- | app/models/netex_export.rb | 22 | 
7 files changed, 199 insertions, 226 deletions
| diff --git a/app/models/csv_export.rb b/app/models/csv_export.rb index 9fff79be3..f7bbb7ed7 100644 --- a/app/models/csv_export.rb +++ b/app/models/csv_export.rb @@ -1,7 +1,23 @@ -# class CsvExport < Export +class CsvExport < ExportTask -#   def export_options -#     super.merge(:format => :csv) -#   end +  enumerize :references_type, in: %w( all network line company groupofline ) -# end +  def action_params +    { +      "parameters" => { +        "kml-export" => { +          "name" => name, +          "references_type" => references_type, +          "user_name" => user_name, +          "organisation_name" => organisation.name, +          "referential_name" => referential.name          +        } +      } +    } +  end +   +  def data_format +    "csv" +  end + +end diff --git a/app/models/export_task.rb b/app/models/export_task.rb index 4d439b58a..0ca3b49b3 100644 --- a/app/models/export_task.rb +++ b/app/models/export_task.rb @@ -1,164 +1,64 @@ -class ExportTask < ActiveRecord::Base -  attr_accessor :resources, :rule_parameter_set_id +class ExportTask +  extend Enumerize +  extend ActiveModel::Naming +  extend ActiveModel::Translation +  extend ActiveModel::Callbacks +  include ActiveModel::Validations +  include ActiveModel::Conversion -  belongs_to :referential +  define_model_callbacks :initialize, only: :after -  has_one :user -  has_one :compliance_check_task, :dependent => :delete - -  serialize :parameter_set, JSON -  serialize :result, JSON +  # TODO : Move in configuration +  @@root = "#{Rails.root}/tmp/exports" +  cattr_accessor :root +  enumerize :data_format, in: %w( neptune netex gtfs hub kml ) +  enumerize :references_type, in: %w( all network line company groupofline stoparea ) +  attr_accessor :referential_id, :user_id, :user_name, :references_type, :data_format, :name, :projection_type +      validates_presence_of :referential_id -  validates_presence_of :resources    validates_presence_of :user_id    validates_presence_of :user_name -  validates_inclusion_of :status, :in => %w{ pending processing completed failed } - -  def references_types -    [] +  validates_presence_of :name +  validates_presence_of :data_format +  validates_presence_of :references_type +   +  def initialize( params = {} ) +    params.each {|k,v| send("#{k}=",v)}    end -  protected - -  def self.option(name, type=nil) -    name = name.to_s - -    define_method(name) do -      self.parameter_set and self.parameter_set[name] -    end - -    if type.to_s == "boolean" -      define_method("#{name}=") do |prefix| -        (self.parameter_set ||= {})[name] = (prefix=="1" || prefix==true) -      end -    else -      define_method("#{name}=") do |prefix| -        (self.parameter_set ||= {})[name] = prefix -      end -    end -  end - -  public - -  def self.formats -    %w{Neptune Csv Gtfs Netex Hub} +  def referential +    Referential.find(referential_id)    end -  def self.format_label(format) -    I18n.t 'exchange.format.'+format.downcase +  def organisation +    referential.organisation    end -  def delayed_export -    delay.export -  end - -  protected - -  option :format -  option :file_path -  option :references_type - -   validates_inclusion_of :format, :in => self.formats - -  def chouette_command -    Chouette::Command.new(:schema => referential.slug) -  end - -  before_validation :define_default_attributes, :on => :create -  def define_default_attributes -    self.status ||= "pending" -  end - -  @@root = "#{Rails.root}/tmp/exports" -  cattr_accessor :root - -  def compliance_check_task_attributes -    {:referential_id => referential.id, -     :user_id => user_id, -     :user_name => user_name, -     :rule_parameter_set_id => rule_parameter_set_id} -  end - -  after_create :update_info, :save_resources -  def update_info -    self.file_path = saved_resources -    self.update_attribute :parameter_set, self.parameter_set - -    self.create_compliance_check_task( self.compliance_check_task_attributes) -  end - -  def save_resources -    FileUtils.mkdir_p root -    FileUtils.cp resources.path, saved_resources -  end - -  after_destroy :destroy_resources -  def destroy_resources -    FileUtils.rm file_path if File.exists? file_path -  end - -  def saved_resources -    raise Exception.new("Illegal call") if self.new_record? -    "#{root}/#{id}#{File.extname(resources.original_filename)}" -  end - -  def chouette_command_args -    {:c => "export", :id => id} -  end - -  public - -  def failed? -    status == "failed" -  end - -  def completed? -    status == "completed" -  end - -  def file_path_extension -    extension = File.extname( self.file_path ) -    if extension == ".xml" -      "xml" -    elsif extension == ".zip" -      "zip" -    else -      "basic" +  def save         +    # Call Iev Server +    begin  +      Ievkit.create_job( referential.name, "exporter", data_format, { +                          :file1 => action_params_io, +                        } )      +    rescue Exception => exception +      raise exception      end    end -  def name -    "#{ExportTask.model_name.human} #{self.format} #{self.id}" -  end - -  def full_name -    return name +  def self.formats +    self.data_format.values    end -  # Create ExportTask and ComplianceCheckTask associated and give export id to Chouette Loader -  def export -    return nil if self.new_record? -    begin -      chouette_command.run! chouette_command_args -      reload -      update_attribute :status, "completed" -      compliance_check_task.update_attribute :status, "completed" -    rescue => e -      Rails.logger.error "Export #{id} failed : #{e}, #{e.backtrace}" -      reload -      update_attribute :status, "failed" -      compliance_check_task.update_attribute :status, "failed" -    end +  def action_params +    { +      "parameters" => {} +    }    end - -  def self.new(attributes = {}, parameter_set = {}, &block) -    if self == ExportTask -      attributes[:format] = "Neptune" unless attributes[:format] -      Object.const_get( attributes[:format] + "Export").new(attributes, parameter_set) -    else -      super -    end +   +  def action_params_io +    file = StringIO.new( action_params.to_s ) +    Faraday::UploadIO.new(file, "application/json", "parameters.json")    end  end diff --git a/app/models/gtfs_export.rb b/app/models/gtfs_export.rb index 5f3364ef1..279cc62d7 100644 --- a/app/models/gtfs_export.rb +++ b/app/models/gtfs_export.rb @@ -1,28 +1,40 @@ -# class GtfsExport < Export +class GtfsExport < ExportTask -#   validates_presence_of :time_zone -#   option :time_zone -#   option :object_id_prefix +  validates_presence_of :time_zone +  attr_accessor :time_zone, :object_id_prefix + +  enumerize :references_type, in: %w( all network line company groupofline stoparea ) -#   after_initialize :init_params +  after_initialize :init_params -#   def references_types -#     [ Chouette::Line, Chouette::Network, Chouette::Company, Chouette::StopArea ] -#   end +  def init_params +    if time_zone.nil? +      self.time_zone = "Paris" +    end +  end -#   def init_params -#     if time_zone.nil? -#       self.time_zone = "Paris" -#     end -#   end -   -#   def export_options -#     opts = super.merge(:format => :gtfs, :time_zone => ActiveSupport::TimeZone.find_tzinfo(time_zone).name) -#     if object_id_prefix.present? -#       opts = opts.merge(:object_id_prefix => object_id_prefix) -#     end -#     puts opts.inspect -#     opts -#   end +  def time_zone=(time_zone) +    ActiveSupport::TimeZone.find_tzinfo(time_zone).name +  end + +  def action_params +    { +      "parameters" => { +        "gtfs-export" => { +          "name" => name, +          "references_type" => references_type, +          "user_name" => user_name, +          "organisation_name" => organisation.name, +          "referential_name" => referential.name, +          "time_zone" => time_zone, +          "object_id_prefix" => object_id_prefix +        } +      } +    } +  end + +  def data_format +    "gtfs" +  end -# end +end diff --git a/app/models/hub_export.rb b/app/models/hub_export.rb index 88c8e061c..8bd2e3a96 100644 --- a/app/models/hub_export.rb +++ b/app/models/hub_export.rb @@ -1,35 +1,42 @@ -# class HubExport < Export +class HubExport < ExportTask -#   option :start_date -#   option :end_date -   -#   after_initialize :init_period +  attr_accessor :start_date, :end_date +  enumerize :references_type, in: %w( all network line company groupofline ) + +  validates :start_date, presence: true , if: "end_date.present?"    +  validates :end_date, presence: true, if: "start_date.present?"  -#   def init_period -#     unless Chouette::TimeTable.start_validity_period.nil? -#       if start_date.nil? -#         self.start_date = Chouette::TimeTable.start_validity_period -#       end -#       if end_date.nil? -#         self.end_date = Chouette::TimeTable.end_validity_period -#       end -#     end -#   end +  after_initialize :init_period -#   def export_options -#     if (start_date.empty? && end_date.empty?) -#       super.merge(:format => :hub).except(:start_date).except(:end_date) -#     elsif start_date.empty? -#       super.merge(:format => :hub, :end_date => end_date).except(:start_date) -#     elsif end_date.empty? -#       super.merge(:format => :hub, :start_date => start_date).except(:end_date) -#     else -#       super.merge(:format => :hub, :start_date => start_date, :end_date => end_date) -#     end -#   end +  def init_period +    unless Chouette::TimeTable.start_validity_period.nil? +      if start_date.nil? +        self.start_date = Chouette::TimeTable.start_validity_period +      end +      if end_date.nil? +        self.end_date = Chouette::TimeTable.end_validity_period +      end +    end +  end + +  def action_params +    { +      "parameters" => { +        "hub-export" => { +          "name" => name, +          "references_type" => references_type, +          "user_name" => user_name, +          "organisation_name" => organisation.name, +          "referential_name" => referential.name, +          "start_date" => start_date, +          "end_date" => end_date +        } +      } +    } +  end -#   def exporter -#     exporter ||= ::Chouette::Hub::Exporter.new(referential, self) -#   end +  def data_format +    "hub" +  end  -# end +end diff --git a/app/models/kml_export.rb b/app/models/kml_export.rb index c450bd297..186108f6d 100644 --- a/app/models/kml_export.rb +++ b/app/models/kml_export.rb @@ -1,11 +1,23 @@ -class KmlExport < Export +class KmlExport < ExportTask -  def export_options -    super.merge(:format => :kml) -  end +  enumerize :references_type, in: %w( all network line company groupofline ) -  def exporter -    exporter ||= ::Chouette::Kml::Exporter.new(referential, self) +  def action_params +    { +      "parameters" => { +        "kml-export" => { +          "name" => name, +          "references_type" => references_type, +          "user_name" => user_name, +          "organisation_name" => organisation.name, +          "referential_name" => referential.name          +        } +      } +    } +  end +   +  def data_format +    "kml"    end  end diff --git a/app/models/neptune_export.rb b/app/models/neptune_export.rb index 566117b32..90ccc1389 100644 --- a/app/models/neptune_export.rb +++ b/app/models/neptune_export.rb @@ -1,20 +1,30 @@ -class NeptuneExport < Export +class NeptuneExport < ExportTask -#   option :start_date -#   option :end_date +  attr_accessor :start_date, :end_date, :extensions, :export_type +  enumerize :references_type, in: %w( all network line company groupofline ) + +  validates :start_date, presence: true , if: "end_date.present?"    +  validates :end_date, presence: true, if: "start_date.present?"  -#   def export_options -#     start_date ||= "" -#     end_date ||= "" -#     if (start_date.empty? && end_date.empty?) -#        super.merge(:format => :neptune).except(:start_date).except(:end_date) -#     elsif start_date.empty? -#        super.merge(:format => :neptune, :end_date => end_date).except(:start_date) -#     elsif end_date.empty? -#        super.merge(:format => :neptune, :start_date => start_date).except(:end_date) -#     else   -#        super.merge(:format => :neptune, :start_date => start_date, :end_date => end_date) -#     end -#   end +  def action_params +    { +      "parameters" => { +        "neptune-export" => { +          "name" => name, +          "references_type" => references_type, +          "user_name" => user_name, +          "organisation_name" => organisation.name, +          "referential_name" => referential.name, +          "projection_type" => projection_type || "", +          "start_date" => start_date, +          "end_date" => end_date +        } +      } +    } +  end + +  def data_format +    "neptune" +  end  end diff --git a/app/models/netex_export.rb b/app/models/netex_export.rb index c29ef2b45..65f9f5340 100644 --- a/app/models/netex_export.rb +++ b/app/models/netex_export.rb @@ -1,7 +1,23 @@ -class NetexExport < Export +class NetexExport < ExportTask -  def export_options -    super.merge(:format => :netex) +  enumerize :references_type, in: %w( all network line company groupofline ) + +  def action_params +    { +      "parameters" => { +        "netex-export" => { +          "name" => name, +          "references_type" => references_type, +          "user_name" => user_name, +          "organisation_name" => organisation.name, +          "referential_name" => referential.name, +        } +      } +    } +  end +   +  def data_format +    "netex"    end  end | 
