diff options
| author | Marc Florisson | 2013-07-12 16:28:48 +0200 |
|---|---|---|
| committer | Marc Florisson | 2013-07-12 16:28:48 +0200 |
| commit | 2bccbc4d0c4e732a2af744d975f35c9d8f7bfd28 (patch) | |
| tree | 9444bb0b785b83b77191a08846465329edb59208 | |
| parent | 33db1788b37784c54e3db0be9fccdeed384ede89 (diff) | |
| download | chouette-core-2bccbc4d0c4e732a2af744d975f35c9d8f7bfd28.tar.bz2 | |
add kml export reporting, add journey_patterns in kml export
| -rw-r--r-- | Gemfile | 4 | ||||
| -rw-r--r-- | Gemfile.lock | 17 | ||||
| -rw-r--r-- | app/exporters/chouette/kml/access_link_exporter.rb | 14 | ||||
| -rw-r--r-- | app/exporters/chouette/kml/access_point_exporter.rb | 14 | ||||
| -rw-r--r-- | app/exporters/chouette/kml/connection_link_exporter.rb | 14 | ||||
| -rw-r--r-- | app/exporters/chouette/kml/exporter.rb | 53 | ||||
| -rw-r--r-- | app/exporters/chouette/kml/journey_pattern_exporter.rb | 33 | ||||
| -rw-r--r-- | app/exporters/chouette/kml/line_exporter.rb | 16 | ||||
| -rw-r--r-- | app/exporters/chouette/kml/route_exporter.rb | 16 | ||||
| -rw-r--r-- | app/exporters/chouette/kml/stop_area_exporter.rb | 7 | ||||
| -rw-r--r-- | app/models/export.rb | 6 | ||||
| -rw-r--r-- | app/models/kml_export.rb | 2 | ||||
| -rw-r--r-- | app/views/api/kml/journey_patterns/show.kml.erb | 42 | ||||
| -rw-r--r-- | config/locales/exports.yml | 20 | ||||
| -rw-r--r-- | spec/exporters/chouette/kml/exporter_spec.rb | 3 | ||||
| -rw-r--r-- | spec/factories.rb | 4 |
16 files changed, 202 insertions, 63 deletions
@@ -47,8 +47,8 @@ gem 'inherited_resources' gem 'will_paginate', '~> 3.0' gem 'ransack' gem 'squeel' -gem 'ninoxe', :git => 'git://github.com/dryade/ninoxe.git' -#gem 'ninoxe', '0.1.2' +#gem 'ninoxe', :git => 'git://github.com/dryade/ninoxe.git' +gem 'ninoxe', '0.1.3' gem 'acts_as_list', '0.1.6' gem "acts_as_tree-1.8", '1.1.0', :require => "acts_as_tree" diff --git a/Gemfile.lock b/Gemfile.lock index 9e68bc916..889847519 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -13,16 +13,6 @@ GIT nokogiri (= 1.5.10) rgeo (= 0.3.20) -GIT - remote: git://github.com/dryade/ninoxe.git - revision: ae8291fe90073bf5f00fe26526c3aa0abc0b602b - specs: - ninoxe (0.1.2) - activerecord (~> 3.1) - acts_as_list (~> 0.1.6) - foreigner (= 1.4.0) - georuby-ext (= 0.0.2) - GEM remote: http://rubygems.org/ specs: @@ -196,6 +186,11 @@ GEM net-ssh (2.6.2) net-ssh-gateway (1.1.0) net-ssh (>= 1.99.1) + ninoxe (0.1.3) + activerecord (~> 3.1) + acts_as_list (~> 0.1.6) + foreigner (= 1.4.0) + georuby-ext (= 0.0.2) nokogiri (1.5.10) nokogiri (1.5.10-java) open4 (1.3.0) @@ -360,7 +355,7 @@ DEPENDENCIES launchy map_layers (= 0.0.4) modernizr-rails (~> 2.0.6) - ninoxe! + ninoxe (= 0.1.3) pg (~> 0.11.0) rabl rails (= 3.2.6) diff --git a/app/exporters/chouette/kml/access_link_exporter.rb b/app/exporters/chouette/kml/access_link_exporter.rb index 0a02443df..1cd9b5bbd 100644 --- a/app/exporters/chouette/kml/access_link_exporter.rb +++ b/app/exporters/chouette/kml/access_link_exporter.rb @@ -1,9 +1,10 @@ class Chouette::Kml::AccessLinkExporter include ERB::Util - attr_accessor :access_links, :template + attr_accessor :access_links, :directory, :template - def initialize(access_links) + def initialize(access_links,directory) @access_links = access_links + @directory = directory @template = File.open('app/views/api/kml/access_links/index.kml.erb' ){ |f| f.read } end @@ -19,7 +20,14 @@ class Chouette::Kml::AccessLinkExporter ".kml" end - def save(directory, name = nil) + def self.save( models, directory, kml_export) + self.new( models, directory).tap do |specific_exporter| + specific_exporter.save + end + kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|ACCES_LINK_COUNT", :arguments => {"0" => models.size}) + end + + def save( name = nil) File.open(directory + "/" + (name || kml_name) + file_extension, "w+") do |f| f.write(render) end if access_links.present? diff --git a/app/exporters/chouette/kml/access_point_exporter.rb b/app/exporters/chouette/kml/access_point_exporter.rb index 17791f95f..cc761f250 100644 --- a/app/exporters/chouette/kml/access_point_exporter.rb +++ b/app/exporters/chouette/kml/access_point_exporter.rb @@ -1,9 +1,10 @@ class Chouette::Kml::AccessPointExporter include ERB::Util - attr_accessor :access_points, :template + attr_accessor :access_points, :directory, :template - def initialize(access_points) + def initialize(access_points,directory) @access_points = access_points + @directory = directory @template = File.open('app/views/api/kml/access_points/index.kml.erb' ){ |f| f.read } end @@ -19,7 +20,14 @@ class Chouette::Kml::AccessPointExporter ".kml" end - def save(directory, name = nil) + def self.save( models, directory, kml_export) + self.new( models, directory).tap do |specific_exporter| + specific_exporter.save + end + kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|ACCES_POINT_COUNT", :arguments => {"0" => models.size}) + end + + def save( name = nil) File.open(directory + "/" + (name || kml_name) + file_extension, "w+") do |f| f.write(render) end if access_points.present? diff --git a/app/exporters/chouette/kml/connection_link_exporter.rb b/app/exporters/chouette/kml/connection_link_exporter.rb index dba998a21..16a93e5e3 100644 --- a/app/exporters/chouette/kml/connection_link_exporter.rb +++ b/app/exporters/chouette/kml/connection_link_exporter.rb @@ -1,9 +1,10 @@ class Chouette::Kml::ConnectionLinkExporter include ERB::Util - attr_accessor :connection_links, :template + attr_accessor :connection_links, :directory, :template - def initialize(connection_links) + def initialize(connection_links,directory) @connection_links = connection_links + @directory = directory @template = File.open('app/views/api/kml/connection_links/index.kml.erb' ){ |f| f.read } end @@ -19,7 +20,14 @@ class Chouette::Kml::ConnectionLinkExporter ".kml" end - def save(directory, name = nil) + def self.save( models, directory, kml_export) + self.new( models, directory).tap do |specific_exporter| + specific_exporter.save + end + kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|CONNECTION_LINK_COUNT", :arguments => {"0" => models.size}) + end + + def save( name = nil) File.open(directory + "/" + (name || kml_name) + file_extension, "w+") do |f| f.write(render) end if connection_links.present? diff --git a/app/exporters/chouette/kml/exporter.rb b/app/exporters/chouette/kml/exporter.rb index 2f1ca2cf3..5c488883c 100644 --- a/app/exporters/chouette/kml/exporter.rb +++ b/app/exporters/chouette/kml/exporter.rb @@ -1,9 +1,11 @@ class Chouette::Kml::Exporter attr_reader :referential + attr_reader :kml_export - def initialize(referential) + def initialize(referential, kml_export) @referential = referential + @kml_export = kml_export end def lines(object, ids) @@ -24,57 +26,52 @@ class Chouette::Kml::Exporter FileUtils.rm(zip_file_path) if File.exists? zip_file_path + kml_export.log_messages.create( :severity => "ok", :key => "EXPORT", :arguments => {"0" => "KML"}) + Dir.mktmpdir(nil, "/tmp"){ |temp_dir| lines_collected = lines( options[:o], options[:id] ) - lines_collected.each do |line| - Chouette::Kml::LineExporter.new( line ).tap do |line_exporter| - line_exporter.save(temp_dir) - end - end + Chouette::Kml::LineExporter.save( lines_collected, temp_dir, kml_export) routes = lines_collected.collect(&:routes).flatten.uniq - routes.each do |route| - Chouette::Kml::RouteExporter.new( route ).tap do |route_exporter| - route_exporter.save(temp_dir) - end - end + Chouette::Kml::RouteExporter.save( routes, temp_dir, kml_export) + + journey_patterns = routes.map { |r| r.journey_patterns}.flatten + Chouette::Kml::JourneyPatternExporter.save( journey_patterns, temp_dir, kml_export) stop_areas = lines_collected.collect(&:stop_areas).flatten.uniq - Chouette::Kml::StopAreaExporter.new( stop_areas ).tap do |stop_area_exporter| - stop_area_exporter.save(temp_dir, "stop_areas") + Chouette::Kml::StopAreaExporter.new( stop_areas, temp_dir ).tap do |stop_area_exporter| + stop_area_exporter.save( "stop_areas") end + kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|QUAY_AND_BOARDING_POSITION_COUNT", :arguments => {"0" => stop_areas.size}) commercial_stop_areas = lines_collected.collect(&:commercial_stop_areas).flatten.uniq - Chouette::Kml::StopAreaExporter.new( commercial_stop_areas ).tap do |stop_area_exporter| - stop_area_exporter.save(temp_dir, "commercial_stop_areas") + Chouette::Kml::StopAreaExporter.new( commercial_stop_areas, temp_dir ).tap do |stop_area_exporter| + stop_area_exporter.save( "commercial_stop_areas") end + kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|COMMERCIAL_COUNT", :arguments => {"0" => commercial_stop_areas.size}) if(options[:o].present?) # Add all objects stop_places = referential.stop_areas.stop_place - Chouette::Kml::StopAreaExporter.new( stop_places ).tap do |stop_area_exporter| - stop_area_exporter.save(temp_dir, "stop_places") + Chouette::Kml::StopAreaExporter.new( stop_places, temp_dir ).tap do |stop_area_exporter| + stop_area_exporter.save( "stop_places") end + kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|STOP_PLACE_COUNT", :arguments => {"0" => stop_places.size}) itls = referential.stop_areas.itl - Chouette::Kml::StopAreaExporter.new( itls ).tap do |stop_area_exporter| - stop_area_exporter.save(temp_dir, "itls") + Chouette::Kml::StopAreaExporter.new( itls, temp_dir ).tap do |stop_area_exporter| + stop_area_exporter.save( "itls") end + kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|ITL_COUNT", :arguments => {"0" => itls.size}) connection_links = referential.connection_links - Chouette::Kml::ConnectionLinkExporter.new( connection_links ).tap do |connection_link_exporter| - connection_link_exporter.save(temp_dir) - end + Chouette::Kml::ConnectionLinkExporter.save( connection_links, temp_dir, kml_export) access_links = referential.access_links - Chouette::Kml::AccessLinkExporter.new( access_links ).tap do |access_link_exporter| - access_link_exporter.save(temp_dir) - end + Chouette::Kml::AccessLinkExporter.save(access_links, temp_dir, kml_export) access_points = referential.access_points - Chouette::Kml::AccessPointExporter.new( access_points ).tap do |access_point_exporter| - access_point_exporter.save(temp_dir) - end + Chouette::Kml::AccessPointExporter.save(access_points, temp_dir, kml_export) end diff --git a/app/exporters/chouette/kml/journey_pattern_exporter.rb b/app/exporters/chouette/kml/journey_pattern_exporter.rb new file mode 100644 index 000000000..f5addc4bc --- /dev/null +++ b/app/exporters/chouette/kml/journey_pattern_exporter.rb @@ -0,0 +1,33 @@ +class Chouette::Kml::JourneyPatternExporter + include ERB::Util + attr_accessor :journey_pattern, :template + + def initialize(journey_pattern) + @journey_pattern = journey_pattern + @template = File.open('app/views/api/kml/journey_patterns/show.kml.erb' ){ |f| f.read } + end + + def render() + ERB.new(@template).result(binding) + end + + def kml_name + "/line_#{journey_pattern.route.line_id}_route_#{journey_pattern.route.id}_journey_attern_#{journey_pattern.id}.kml" + end + + def self.save( journey_patterns, directory, kml_export) + journey_patterns.each do |journey_pattern| + self.new( journey_pattern ).tap do |specific_exporter| + specific_exporter.save(directory) + end + end + kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|JOURNEY_PATTERN_COUNT", :arguments => {"0" => journey_patterns.size}) + end + + def save(directory) + File.open(directory + kml_name , "w+") do |f| + f.write(render) + end if journey_pattern.present? + end +end + diff --git a/app/exporters/chouette/kml/line_exporter.rb b/app/exporters/chouette/kml/line_exporter.rb index 2359bb072..2e4eb5e47 100644 --- a/app/exporters/chouette/kml/line_exporter.rb +++ b/app/exporters/chouette/kml/line_exporter.rb @@ -1,9 +1,10 @@ class Chouette::Kml::LineExporter include ERB::Util - attr_accessor :line, :template + attr_accessor :line, :directory, :template - def initialize(line) + def initialize(line,directory) @line = line + @directory = directory @template = File.open('app/views/api/kml/lines/show.kml.erb' ){ |f| f.read } end @@ -15,7 +16,16 @@ class Chouette::Kml::LineExporter "/line_#{line.id}.kml" end - def save(directory) + def self.save( lines, directory, kml_export) + lines.each do |line| + self.new( line, directory).tap do |specific_exporter| + specific_exporter.save + end + end + kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|LINE_COUNT", :arguments => {"0" => lines.size}) + end + + def save File.open(directory + kml_name , "w+") do |f| f.write(render) end if line.present? diff --git a/app/exporters/chouette/kml/route_exporter.rb b/app/exporters/chouette/kml/route_exporter.rb index 44327f8c8..b1a74da5a 100644 --- a/app/exporters/chouette/kml/route_exporter.rb +++ b/app/exporters/chouette/kml/route_exporter.rb @@ -1,9 +1,10 @@ class Chouette::Kml::RouteExporter include ERB::Util - attr_accessor :route, :template + attr_accessor :route, :directory, :template - def initialize(route) + def initialize(route,directory) @route = route + @directory = directory @template = File.open('app/views/api/kml/routes/show.kml.erb' ){ |f| f.read } end @@ -15,7 +16,16 @@ class Chouette::Kml::RouteExporter "/line_#{route.line_id}_route_#{route.id}.kml" end - def save(directory) + def self.save( routes, directory, kml_export) + routes.each do |route| + self.new( route, directory).tap do |specific_exporter| + specific_exporter.save + end + end + kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|ROUTE_COUNT", :arguments => {"0" => routes.size}) + end + + def save File.open(directory + kml_name , "w+") do |f| f.write(render) end if route.present? diff --git a/app/exporters/chouette/kml/stop_area_exporter.rb b/app/exporters/chouette/kml/stop_area_exporter.rb index 990e18c32..246fc114c 100644 --- a/app/exporters/chouette/kml/stop_area_exporter.rb +++ b/app/exporters/chouette/kml/stop_area_exporter.rb @@ -1,9 +1,10 @@ class Chouette::Kml::StopAreaExporter include ERB::Util - attr_accessor :stop_areas, :template + attr_accessor :stop_areas, :directory, :template - def initialize(stop_areas) + def initialize(stop_areas,directory) @stop_areas = stop_areas + @directory = directory @template = File.open('app/views/api/kml/stop_areas/index.kml.erb' ){ |f| f.read } end @@ -19,7 +20,7 @@ class Chouette::Kml::StopAreaExporter ".kml" end - def save(directory, name = nil) + def save( name = nil) File.open(directory + "/" + (name || kml_name) + file_extension, "w+") do |f| f.write(render) end if stop_areas.present? diff --git a/app/models/export.rb b/app/models/export.rb index 0c2f24cde..342e55738 100644 --- a/app/models/export.rb +++ b/app/models/export.rb @@ -69,12 +69,13 @@ class Export < ActiveRecord::Base end def export + result_severity = "ok" FileUtils.mkdir_p root begin # delayed job may repeat call ExportLogMessage.where(:export_id => self.id).delete_all - log_messages.create :key => :started + log_messages.create :severity => "ok", :key => :started exporter.export file, export_options @@ -82,9 +83,10 @@ class Export < ActiveRecord::Base rescue => e Rails.logger.error "Export #{id} failed : #{e}, #{e.backtrace}" update_attribute :status, "failed" + result_severity = "error" end - log_messages.create :key => status + log_messages.create :severity => result_severity, :key => status end @@references_types = [ Chouette::Line, Chouette::Network, Chouette::Company ] diff --git a/app/models/kml_export.rb b/app/models/kml_export.rb index 418c2ccc1..c450bd297 100644 --- a/app/models/kml_export.rb +++ b/app/models/kml_export.rb @@ -5,7 +5,7 @@ class KmlExport < Export end def exporter - exporter ||= ::Chouette::Kml::Exporter.new(referential) + exporter ||= ::Chouette::Kml::Exporter.new(referential, self) end end diff --git a/app/views/api/kml/journey_patterns/show.kml.erb b/app/views/api/kml/journey_patterns/show.kml.erb new file mode 100644 index 000000000..cbce3627a --- /dev/null +++ b/app/views/api/kml/journey_patterns/show.kml.erb @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<kml xmlns="http://www.opengis.net/kml/2.2"> + <Document> + <name><%= h(@journey_pattern.name) %></name> + <ExtendedData> + <% [:objectid, :object_version, :creation_time, :creator_id, :name, :comment, :registration_number, :published_name].each do |prop| %> + <Data name="<%= prop.to_s %>"> + <value><%= h(@journey_pattern.send( prop)) %></value> + </Data> + <% end %> + <Data name="route_objectid"> + <value><%= h(@journey_pattern.route.object_id) %></value> + </Data> + </ExtendedData> + <% @journey_pattern.route.stop_points.each_with_index do |stop_point, index| %> + <% stop_area = stop_point.stop_area %> + <% if stop_area.geometry %> + <Placemark id="<%= stop_area.objectid %>" > + <name><%= h(stop_area.name) %></name> + <ExtendedData> + <% [ :objectid, :object_version, :creation_time, :creator_id, :name, :comment, :area_type, :registration_number, :nearest_topic_name, :fare_code, :longitude, :latitude, :long_lat_type, :country_code, :street_name, :mobility_restricted_suitability, :stairs_availability, :lift_availability, :int_user_needs].each do |prop| %> + <Data name="<%= prop.to_s %>"> + <value><%= h(stop_area.send( prop)) %></value> + </Data> + <% end %> + <% if stop_area.parent %> + <Data name="parent_objectid"> + <value><%= h(stop_area.parent.object_id) %></value> + </Data> + <% end %> + <Data name="stop"> + <value><%= @journey_pattern.stop_points.include?( stop_point) ? "true" : "false" %></value> + </Data> + </ExtendedData> + + <%= stop_area.geometry_presenter.geometry.kml_representation.html_safe %> + </Placemark> + <% end %> + <% end %> + </Document> +</kml> + diff --git a/config/locales/exports.yml b/config/locales/exports.yml index 688d5ddb6..18eb461da 100644 --- a/config/locales/exports.yml +++ b/config/locales/exports.yml @@ -23,6 +23,16 @@ en: completed: "Completed export" failed: "Failed export" undefined: "%{key} undefined" + LINE_COUNT: "Exported line count : %{0}" + ROUTE_COUNT: "Route count : %{0}" + JOURNEY_PATTERN_COUNT: "Journey pattern count : %{0}" + QUAY_AND_BOARDING_POSITION_COUNT: "Quays and Boarding positions count : %{0}" + COMMERCIAL_COUNT: "Commercial stop points count : %{0}" + STOP_PLACE_COUNT: "Stop places count : %{0}" + ITL_COUNT: "ITL count : %{0}" + CONNECTION_LINK_COUNT: "Connection link count : %{0}" + ACCES_LINK_COUNT: "Access Link count : %{0}" + ACCES_POINT_COUNT: "Access Point count : %{0}" EXPORT: "%{0} Export" EXPORTED_LINE: "Line %{0} (%{1}) exported" EMPTY_LINE: "Line without valid vehicle journey : not exported" @@ -112,6 +122,16 @@ fr: completed: "Export achevé avec succès" failed: "Export interrompu" undefined: "%{key} non défini" + LINE_COUNT: "Nombre de lignes exportées : %{0}" + ROUTE_COUNT: "Nombre de séquences d'arrêts exportées : %{0}" + QUAY_AND_BOARDING_POSITION_COUNT: "Nombre d'arrêts physiques exportés : %{0}" + COMMERCIAL_COUNT: "Nombre d'arrêts commerciaux exportés : %{0}" + STOP_PLACE_COUNT: "Nombres de pôles d'échange exportés : %{0}" + ITL_COUNT: "Nombre d'ITL exportées : %{0}" + JOURNEY_PATTERN_COUNT: "Nombre de missions exportées : %{0}" + CONNECTION_LINK_COUNT: "Nombre de correspondances exportées : %{0}" + ACCES_LINK_COUNT: "Nombre de liaison d'accès exportées : %{0}" + ACCES_POINT_COUNT: "Nombre de points d'accès exportés : %{0}" EXPORT: "Export %{0}" EXPORTED_LINE: "Ligne %{0} (%{1}) exportée" EMPTY_LINE: "Ligne sans course valide : non exportée" diff --git a/spec/exporters/chouette/kml/exporter_spec.rb b/spec/exporters/chouette/kml/exporter_spec.rb index 53e485cd7..dd7c44327 100644 --- a/spec/exporters/chouette/kml/exporter_spec.rb +++ b/spec/exporters/chouette/kml/exporter_spec.rb @@ -10,7 +10,8 @@ describe Chouette::Kml::Exporter do # referential.switch # Factory(:line_with_stop_areas_having_parent) } - subject { Chouette::Kml::Exporter.new(first_referential) } + let(:kml_export){ Factory(:kml_export)} + subject { Chouette::Kml::Exporter.new(first_referential, kml_export) } let(:tmp_path) { File.join( Rails.root, "tmp")} let(:exports_path) { File.join( tmp_path, "exports")} diff --git a/spec/factories.rb b/spec/factories.rb index 7ae087de0..681400443 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -31,6 +31,10 @@ FactoryGirl.define do f.sequence(:key) { "key_#{n}" } end + factory :kml_export do |f| + f.referential { Referential.find_by_slug("first") } + end + factory :export do |f| f.referential { Referential.find_by_slug("first") } end |
