class GeoserverMigrations::APIConnector

Public Class Methods

new() click to toggle source
# File lib/geoserver_migrations/api_connector.rb, line 4
def initialize
  # initialise geoserver-client
  GeoserverClient.api_root = ::GEOSERVER_MIGRATIONS_CONFIG[:geoserver_base]
  GeoserverClient.api_user = ::GEOSERVER_MIGRATIONS_CONFIG[:api][:user]
  GeoserverClient.api_password = ::GEOSERVER_MIGRATIONS_CONFIG[:api][:password]

  GeoserverClient.workspace    = GEOSERVER_MIGRATIONS_CONFIG[:workspace]
  GeoserverClient.datastore    = GEOSERVER_MIGRATIONS_CONFIG[:datastore]
  # if Rails.present?
  #   GeoserverClient.logger = Rails.logger
  # end
  GeoserverClient.logger = :stdout 
end

Public Instance Methods

execute(ordered_actions, direction = :up, options={}) click to toggle source
# File lib/geoserver_migrations/api_connector.rb, line 18
def execute(ordered_actions, direction = :up, options={})
  if direction != :up
    ordered_actions = ordered_actions.reverse
  end

  ordered_actions.each do |action_to_complete|
    case action_to_complete[:action]
      when :add_resource
        file_name = action_to_complete[:params][:name]
        if direction == :up
          GeoserverClient.create_resource file_name
        else
          GeoserverClient.delete_resource file_name
        end
      when :create_layer
        layer_name = action_to_complete[:params][:name]
        layer_config = action_to_complete[:params][:layer_config]
        if direction == :up
          # explicitly create style if sld given
          if !layer_config.sld.nil?
            puts " -- Create style #{layer_config.style_name}"

            GeoserverClient.create_style layer_config.style_name, sld: layer_config.sld
          end

          puts " -- Create layer #{layer_config.layer_name} [native_name = #{layer_config.feature_name}]"
          GeoserverClient.create_featuretype layer_name, native_name: layer_config.feature_name
          GeoserverClient.set_layer_style layer_name, layer_config.style_name
        else
          puts " -- delete layer #{layer_config.layer_name}"
          GeoserverClient.delete_featuretype layer_name

          if !layer_config.sld.nil?
            puts " -- delete style #{layer_config.style_name}"

            GeoserverClient.delete_style layer_config.style_name
          end

        end
      when :delete_layer
        if direction == :up
          layer_name = action_to_complete[:params][:name]
          puts " -- Delete layer #{layer_name}"
          GeoserverClient.delete_featuretype layer_name
        else
          # do nothing??
          # we should save the layer-definition in the :up direction so we can
          # restore it if needed?
        end
      when :delete_style
        if direction == :up
          style_name = action_to_complete[:params][:name]
          puts " -- Delete style #{style_name}"
          GeoserverClient.delete_style style_name
        end
      when :update_style
        if direction == :up
          style_name = action_to_complete[:params][:name]
          layer_config = action_to_complete[:params][:layer_config]
          puts " -- Updating style #{style_name}"
          GeoserverClient.update_style style_name, sld: layer_config.sld
        end
      when :create_layergroup
        layer_name = action_to_complete[:params][:name]
        layer_config = action_to_complete[:params][:layer_config]
        if direction == :up
          GeoserverClient.create_layergroup layer_name, layer_config.layers
        else
          puts " -- delete layergroup #{layer_config.layer_name}"
          GeoserverClient.delete_layergroup layer_name
        end
      when :delete_layergroup
        if direction == :up
          layer_name = action_to_complete[:params][:name]
          puts " -- Delete layergroup #{layer_name}"
          GeoserverClient.delete_layergroup layer_name
        else
          # do nothing??
          # we should save the layer-definition in the :up direction so we can
          # restore it if needed?
        end

     end
  end
end
test() click to toggle source
# File lib/geoserver_migrations/api_connector.rb, line 104
def test
  layers = GeoserverClient.layers
  layers["featureTypes"]["featureType"].map{|l| l["name"]}
end