aboutsummaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/csv_export.rb26
-rw-r--r--app/models/export_task.rb186
-rw-r--r--app/models/gtfs_export.rb58
-rw-r--r--app/models/hub_export.rb67
-rw-r--r--app/models/kml_export.rb24
-rw-r--r--app/models/neptune_export.rb42
-rw-r--r--app/models/netex_export.rb22
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