# -*- encoding : utf-8 -*-  ## # Ladok3RestManager will handle REST requests to LADOK3 # class Ladok::Ladok3RestManager    def initialize()     @ladok_host = RestHost.new(Sisu::LADOK3_URL,                                Sisu::LADOK3_SSL_CERTIFICATE,                                Sisu::LADOK3_SSL_CERTIFICATE_PASSWORD)   end    ##   # Will execute a REST-request for UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS   # and return the response   #   # Parameters:   # utbildnings_kod : String   # organisation_uid : String   # studieordning_id : Integer   # utbildningstyp_id : Integer   #   # Returns:   # The response object   #   # Raises:   # StandardError, if something went wrong   def request_utbildningsinstans(utbildnings_kod, organisation_uid, studieordning_id, utbildningstyp_id)     return handle_request(LadokResources::UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS,                           :get, nil,                           {                               kod: utbildnings_kod,                               organisationUID: organisation_uid,                               studieordningID: studieordning_id,                               utbildningstypID: utbildningstyp_id                           }, nil)   end    ##   # Will execute a  GET REST-request for UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_HANTERA   # and return the response   #   # Parameters:   # utbildningsinstans_uid : String   #   # Returns:   # The response object   #   # Raises:   # StandardError, if something went wrong   def request_utbildningsinstans_by_uid(utbildningsinstans_uid)     return handle_request(LadokResources::UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_HANTERA,                           :get, nil, nil, {uid: utbildningsinstans_uid})   end    ##   # Will return true if a utbildningskod exists for any utbildningsinstans   #   # Parameters:   # utbildnings_kod : String   #   # Returns:   # True if the utbildningskod exists, false otherwise   #   # Raises:   # StandardError, if something went wrong   def utbildnings_kod_exist?(utbildnings_kod)     raise StandardError, 'Parameter was nil!' if utbildnings_kod.nil?      response = request_utbildningsinstans(utbildnings_kod, nil, nil, nil)     utbildningar_array = JSON.parse(response)['Utbildningar']      raise StandardError, 'Utbildningar array was nil!' if utbildningar_array == nil      return utbildningar_array.length > 0   end    ##   # Will return true if a utbildningsinstans exists   #   # Parameters:   # utbildnings_kod : String   # organisation_uid : String   # studieordning_id : Integer   # utbildningstyp_id : Integer   #   # Returns:   # True if the utbildningsinstans exists, false otherwise   #   # Raises:   # StandardError, if something went wrong   def utbildningsinstans_exist?(utbildnings_kod, organisation_uid, studieordning_id, utbildningstyp_id)     if utbildnings_kod.nil? || organisation_uid.nil? || studieordning_id.nil? || utbildningstyp_id.nil?       raise StandardError, 'Parameter was nil!'     end     response = request_utbildningsinstans(utbildnings_kod, organisation_uid, studieordning_id, utbildningstyp_id)     utbildningar_array = JSON.parse(response)['Utbildningar']     if utbildningar_array == nil       raise StandardError, 'Utbildningar array was nil!'     end     if utbildningar_array.length < 1       return false     end     if utbildningar_array.length > 1       raise StandardError, "Utbildningar array length mismatch!  Expected: 1  Got: '#{utbildningar_array.length}'"     end     utbildning = utbildningar_array[0]     if !utbildnings_kod.eql? utbildning['Utbildningskod']       raise StandardError, "Utbildnings kod mismatch!  Expected: #{utbildnings_kod}  Got: #{utbildning["Utbildningskod"]}"     end     if !organisation_uid.eql? utbildning['OrganisationUID']       raise StandardError, "Organisation uid mismatch!  Expected: #{organisation_uid}  Got: #{utbildning["OrganisationUID"]}"     end     if studieordning_id != utbildning['StudieordningID']       raise StandardError, "Studieordning id mismatch!  Expected: #{studieordning_id}  Got: #{utbildning["StudieordningID"]}"     end     if utbildningstyp_id != utbildning['UtbildningstypID']       raise StandardError, "Utbildningstyp id mismatch!  Expected: #{utbildningstyp_id}  Got: #{utbildning["UtbildningstypID"]}"     end      return true   end    ##   # Will execute a  POST REST-request for UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS,   # creating a new utbildningsinstans   #   # Parameters:   # avvecklad : Boolean   # utbildningskod : String   # utbildningskonfiguration_uid : String   # utbildningstyp_id : Integer   # benamning_sv : String   # benamning_en : String   # giltig_period_id : Integer   # omfattning : String, example '20.0'   # organistaion_uid : String   #   # Returns:   # The response object   #   # Raises:   # StandardError, if something went wrong   def create_utbildningsinstans(avvecklad, utbildningskod, utbildningskonfiguration_uid, utbildningstyp_id,                                 benamning_sv, benamning_en,  giltig_period_id, omfattning, organistaion_uid)     return modify_utbildningsinstans(LadokResources::UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS, :post, nil,                                      avvecklad, utbildningskod, utbildningskonfiguration_uid,                                      utbildningstyp_id, benamning_sv, benamning_en, giltig_period_id,                                      omfattning, organistaion_uid)   end    ##   # Will execute a  PUT REST-request for UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS,   # updating a existing utbildningsinstans   #   # Parameters:   # utbildningsinstans_uid : String   # avvecklad : Boolean   # utbildningskod : String   # utbildningskonfiguration_uid : String   # utbildningstyp_id : Integer   # benamning_sv : String   # benamning_en : String   # giltig_period_id : Integer   # omfattning : String, example '20.0'   # organistaion_uid : String   #   # Returns:   # The response object   #   # Raises:   # StandardError, if something went wrong   def update_utbildningsinstans(utbildningsinstans_uid, avvecklad, utbildningskod, utbildningskonfiguration_uid,                                 utbildningstyp_id, benamning_sv, benamning_en,  giltig_period_id,                                 omfattning, organistaion_uid)     return modify_utbildningsinstans(LadokResources::UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_HANTERA, :put,                                      utbildningsinstans_uid, avvecklad, utbildningskod,                                      utbildningskonfiguration_uid, utbildningstyp_id, benamning_sv, benamning_en,                                      giltig_period_id, omfattning, organistaion_uid)   end    ##   # Will execute a  POST REST-request for UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_UNDERLIGGANDE,   # creating a new "utbildningsinstans" that is "underliggande" to a already existing "utbildningsinstans"   #   # Parameters:   # parent_utbildningsinstans_uid : String   # avvecklad : Boolean   # utbildningskod : String   # utbildningskonfiguration_uid : String   # utbildningstyp_id : Integer   # benamning_sv : String   # benamning_en : String   # giltig_period_id : Integer   # omfattning : String, example '20.0'   #   # Returns:   # The response object   #   # Raises:   # StandardError, if something went wrong   def create_underliggande_utbildningsinstans(parent_utbildningsinstans_uid, avvecklad, utbildningskod,                                               utbildningskonfiguration_uid, utbildningstyp_id,                                               benamning_sv, benamning_en,  giltig_period_id, omfattning)     return modify_underliggande_utbildningsinstans(:post, parent_utbildningsinstans_uid, nil, avvecklad, utbildningskod,                                                    utbildningskonfiguration_uid, utbildningstyp_id,                                                    benamning_sv, benamning_en,  giltig_period_id, omfattning)   end    ##   # Will execute a  PUT REST-request for UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_UNDERLIGGANDE,   # updating a existing "utbildningsinstans" that is "underliggande" to another "utbildningsinstans"   #   # Parameters:   # parent_utbildningsinstans_uid : String   # utbildningsinstans_uid : String   # avvecklad : Boolean   # utbildningskod : String   # utbildningskonfiguration_uid : String   # utbildningstyp_id : Integer   # benamning_sv : String   # benamning_en : String   # giltig_period_id : Integer   # omfattning : String, example '20.0'   #   # Returns:   # The response object   #   # Raises:   # StandardError, if something went wrong   def update_underliggande_utbildningsinstans(parent_utbildningsinstans_uid, utbildningsinstans_uid, avvecklad, utbildningskod,                                               utbildningskonfiguration_uid, utbildningstyp_id,                                               benamning_sv, benamning_en,  giltig_period_id, omfattning)     return modify_underliggande_utbildningsinstans(:put, parent_utbildningsinstans_uid, utbildningsinstans_uid, avvecklad, utbildningskod,                                                    utbildningskonfiguration_uid, utbildningstyp_id,                                                    benamning_sv, benamning_en,  giltig_period_id, omfattning)   end    ##   # Will execute a  PUT REST-request for UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_STATUS2,   # changing the status of a "utbildningsinstans" to 2   #   # Parameters:   # utbildningsinstans_uid : String   #   # Returns:   # The response object   #   # Raises:   # StandardError, if something went wrong   def change_utbildningsinstans_status_to_2(utbildningsinstans_uid)     raise StandardError, 'Utbildningsinstans UID parameter was nil!' if utbildningsinstans_uid.nil?      return handle_request(LadokResources::UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_STATUS2,                           :put, nil, nil, {utbildningsinstansUID: utbildningsinstans_uid})   end    ##   # Will execute a  PUT REST-request for UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_STATUS3,   # changing the status of a "utbildningsinstans" to 3   #   # Parameters:   # utbildningsinstans_uid : String   #   # Returns:   # The response object   #   # Raises:   # StandardError, if something went wrong   def change_utbildningsinstans_status_to_3(utbildningsinstans_uid)     raise StandardError, 'Utbildningsinstans UID parameter was nil!' if utbildningsinstans_uid.nil?      return handle_request(LadokResources::UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_STATUS3,                           :put, nil, nil, {utbildningsinstansUID: utbildningsinstans_uid})   end    ##   # Will execute a REST-request for UTBILDNINGSINFORMATION_ORGANISATION   # and return the response   #   # Parameters:   # organisation_kod : String   #   # Returns:   # The response object   #   # Raises:   # StandardError, if something went wrong   def request_organisation(organisation_kod)     raise StandardError, 'Organisation code parameter was nil!' if organisation_kod.nil?      return handle_request(LadokResources::UTBILDNINGSINFORMATION_ORGANISATION,                           :get, nil,                           {                               kod: organisation_kod,                               orderby: 'kod'                           }, nil)   end    ##   # Will return the uid for a organisation   #   # Parameters:   # organisation_kod : String   #   # Returns:   # The uid as String   #   # Raises:   # StandardError, if something went wrong   def get_organisation_uid(organisation_kod)     response = request_organisation(organisation_kod)     organisation_array = JSON.parse(response)["Organisation"]     if organisation_array == nil       raise StandardError, 'Organisation array was nil!'     end     if organisation_array.length != 1       raise StandardError, "Organisation array length mismatch. Expected: 1  Got: #{organisation_array.length}"     end      organisation = organisation_array[0]     #Sanity check: organistaion kod must match     if organisation['Kod'] != organisation_kod       raise StandardError, "Organisation code mismatch. Expected: #{organisation_kod}  Got: #{organisation["Kod"]}"     end     organisation_uid = organisation['Uid']     if organisation_uid.blank?       raise StandardError, 'Organisation uid was nil or empty!'     end      return organisation_uid   end    ##   # Will execute a REST-request for UTBILDNINGSINFORMATION_GRUNDDATA_STUDIEORDNING   # and return the response   #   # Parameters:   # studieordning_kod : String   #   # Returns:   # The response object   #   # Raises:   # StandardError, if something went wrong   def request_studieordning(studieordning_kod)     raise StandardError, 'Studieordningskod parameter was nil!' if studieordning_kod.nil?      return handle_request(LadokResources::UTBILDNINGSINFORMATION_GRUNDDATA_STUDIEORDNING_KOD,                           :get, nil, nil,                           {                               studieordningskod: studieordning_kod,                           })   end    ##   # Will return the id for a studieordning   #   # Parameters:   # studieordning_kod : String   #   # Returns:   # The id as String   #   # Raises:   # StandardError, if something went wrong   def get_studieordning_id(studieordning_kod)     response = request_studieordning(studieordning_kod)     studie_ordning = JSON.parse(response)      #Sanity tests     if !studieordning_kod.eql? studie_ordning['Kod']       raise StandardError, "Studieordningskod mismatch. Expected: #{studieordning_kod}  Got: #{response['Kod']}"     end     if studie_ordning['ID'].blank?       raise StandardError, 'ID was nil or empty!'     end      return studie_ordning['ID']   end    ##   # Will execute a REST-request for UTBILDNINGSINFORMATION_UTBILDNINGSKONFIGURATION_LOKAL   # and return the response   #   # Parameters:   # utbildningstyp_id : Integer   # datum : String, example '2016-01-01'   #   # Returns:   # The response object   #   # Raises:   # StandardError, if something went wrong   def request_lokal_utbildningskonfiguration(utbildningstyp_id, datum)     return handle_request(LadokResources::UTBILDNINGSINFORMATION_UTBILDNINGSKONFIGURATION_LOKAL,                           :get, nil,                           {                               utbildningstypID: utbildningstyp_id,                               datum: datum                           }, nil)   end    ##   # Will return the UID for a "lokal utbildningskonfiguration"   #   # Parameters:   # utbildningstyp_id : Integer   # datum : String, example '2016-01-01'   #   # Returns:   # The uid as String   #   # Raises:   # StandardError, if something went wrong   def get_lokal_utbildningskonfiguration_uid(utbildningstyp_id, datum)     raise StandardError, 'Parameter was nil!' if utbildningstyp_id.nil? || datum.nil?      response = request_lokal_utbildningskonfiguration(utbildningstyp_id, datum)     utbildningskonfiguration = JSON.parse(response)      #Sanity tests     if utbildningstyp_id != utbildningskonfiguration['UtbildningstypID']       raise StandardError,             "Utbildnings typ mismatch!  Expected: #{utbildningstyp_id}  Got: #{utbildningskonfiguration['UtbildningstypID']}"     end     if utbildningskonfiguration['Uid'].blank?       raise StandardError, 'Uid was nil or empty!'     end      return utbildningskonfiguration['Uid']   end    #TODO   #For test purposes, will probably be removed later   def request_nivainomstudieordning()     return handle_request(LadokResources::KATALOGINFORMATION_GRUNDDATA_NIVAINOMSTUDIEORDNING,                           :get, nil, nil, nil)   end    #TODO   #For test purposes, will probably be removed later   def request_organisation_list()     return handle_request(LadokResources::KATALOGINFORMATION_ORGANISATION,                           :get, nil, nil, nil)   end    #TODO   #For test purposes, will probably be removed later   def request_studieordning_list()     return handle_request(LadokResources::KATALOGINFORMATION_GRUNDDATA_STUDIEORDNING,                           :get, nil, nil, nil)   end    #TODO   #For test purposes, will probably be removed later   def request_utbildningsform_list()     return handle_request(LadokResources::UTBILDNINGSINFORMATION_GRUNDDATA_UTBILDNINGSFORM,                           :get, nil, nil, nil)   end    #TODO   #For test purposes, will probably be removed later   def request_utbildningstyp_list()     return handle_request(LadokResources::UTBILDNINGSINFORMATION_GRUNDDATA_UTBILDNINGSTYP,                           :get, nil, nil, nil)   end    #TODO   #For test purposes, will probably be removed later   def request_period_list()     return handle_request(LadokResources::UTBILDNINGSINFORMATION_GRUNDDATA_PERIOD,                           :get, nil, nil, nil)   end    #Not used - find utbildningsinstansbox based on params:   #def get_utbildningsinstans_box(utbildningstyp_id, uid)   #  return handle_request(LadokResources::UTBILDNINGSINFORMATION_STRUKTUR_UTBILDNINGSINSTANSBOX,   #                        :get, nil, nil,   #                        {   #                            utbildningstypID: utbildningstyp_id,   #                            Uid: uid   #                        })   #end    #Skapa modul: #  def create_underliggande_utbildningsinstans(utbildning_uid, modul) #    return handle_request(LadokResources::UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_UID_UNDERLIGGANDE, #                          :post, #                         modul, #                          nil, #                          { #                              uid: utbildning_uid #                          }) # # #    #/utbildningsinformation/utbildningsinstans/{uid}/underliggande #  end  #  def update_underliggande_utbildningsinstans(utbildning_uid, modul) #    return handle_request(LadokResources::UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_UID_UNDERLIGGANDE, #                          :put, #                          modul, #                          nil, #                          { #                              uid: utbildning_uid #                          }) #  end    # Hitta Struktur:   def get_utbildningsinstans_struktur(uid)     return handle_request(LadokResources::UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_STRUKTUR,                           :get,                           nil,                           {                               utbildningsbasUID: uid                           },                           nil     )   end    private    # Class to hold attributes for a REST host   class RestHost      attr_reader :url, :ssl_certificate      def initialize(url, ssl_certificate_path, ssl_certificate_password)       @url = url       @ssl_certificate = OpenSSL::PKCS12.new(File.read(ssl_certificate_path), ssl_certificate_password)     end    end    # Class to hold different accept headers   class AcceptHeaders     KATALOGINFORMATION_JSON = 'application/vnd.ladok-kataloginformation+json'      UTBILDNINGSINFORMATION_JSON = 'application/vnd.ladok-utbildningsinformation+json'   end    #Class to hold resource request methods   class RequestMethod      attr_reader :method, :response_code, :accept_header, :content_type_header      def initialize(method, response_code, accept_header, content_type_header)       @method = method       @response_code = response_code       @accept_header = accept_header       @content_type_header = content_type_header     end    end    # Class to hold information about a REST resource   class RestResource      attr_reader :url, :method_map      def initialize(url, method_map)       @url = url       @method_map = method_map     end    end    # Class to hold LADOK REST resources   class LadokResources      UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS = RestResource.new(         '/utbildningsinformation/utbildningsinstans',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON),             post: RequestMethod.new(:post, 201,                                     AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                     AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_UNDERLIGGANDE = RestResource.new(         '/utbildningsinformation/utbildningsinstans/%{uid}/underliggande',         {             post: RequestMethod.new(:post, 201,                                     AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                     AcceptHeaders::UTBILDNINGSINFORMATION_JSON),             put: RequestMethod.new(:put, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_HANTERA = RestResource.new(         '/utbildningsinformation/utbildningsinstans/%{uid}',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON),             put: RequestMethod.new(:put, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_FILTRERA = RestResource.new(         '/utbildningsinformation/utbildningsinstans/filtrera',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_STATUS2 = RestResource.new(         '/utbildningsinformation/utbildningsinstans/status2/%{utbildningsinstansUID}',         {             put: RequestMethod.new(:put, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_STATUS3 = RestResource.new(         '/utbildningsinformation/utbildningsinstans/status3/%{utbildningsinstansUID}',         {             put: RequestMethod.new(:put, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_ORGANISATION = RestResource.new(         '/utbildningsinformation/organisation',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_GRUNDDATA_STUDIEORDNING_KOD = RestResource.new(         '/utbildningsinformation/grunddata/studieordning/kod/%{studieordningskod}',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_GRUNDDATA_UTBILDNINGSFORM = RestResource.new(         '/utbildningsinformation/grunddata/utbildningsform',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_GRUNDDATA_PERIOD = RestResource.new(         '/utbildningsinformation/grunddata/period',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_GRUNDDATA_UTBILDNINGSTYP= RestResource.new(         '/utbildningsinformation/grunddata/utbildningstyp',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_GRUNDDATA_UTBILDNINGSTYP_ID = RestResource.new(         '/utbildningsinformation/grunddata/utbildningstyp/kod/%{utbildningstypID}',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_UTBILDNINGSKONFIGURATION_LOKAL = RestResource.new(         '/utbildningsinformation/utbildningskonfiguration/lokal',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      KATALOGINFORMATION_ORGANISATION = RestResource.new(         '/kataloginformation/organisation',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::KATALOGINFORMATION_JSON,                                    AcceptHeaders::KATALOGINFORMATION_JSON)         })      KATALOGINFORMATION_GRUNDDATA_STUDIEORDNING = RestResource.new(         '/kataloginformation/grunddata/studieordning',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::KATALOGINFORMATION_JSON,                                    AcceptHeaders::KATALOGINFORMATION_JSON)         })      KATALOGINFORMATION_GRUNDDATA_NIVAINOMSTUDIEORDNING = RestResource.new(         '/kataloginformation/grunddata/nivainomstudieordning',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::KATALOGINFORMATION_JSON,                                    AcceptHeaders::KATALOGINFORMATION_JSON)         })      ## Not used     #UTBILDNINGSINFORMATION_STRUKTUR_UTBILDNINGSINSTANSBOX = RestResource.new(     #    '/utbildningsinformation/struktur/utbildningsinstansbox/%{utbildningstypID}/%{Uid}',     #    {     #        get: RequestMethod.new(:get, 200,     #                               AcceptHeaders::UTBILDNINGSINFORMATION_JSON,     #                               AcceptHeaders::UTBILDNINGSINFORMATION_JSON)     #    })      UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_UID_UNDERLIGGANDE = RestResource.new(         '/utbildningsinformation/utbildningsinstans/%{uid}/underliggande',         {             post: RequestMethod.new(:post, 201,                                     AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                     AcceptHeaders::UTBILDNINGSINFORMATION_JSON),             put: RequestMethod.new(:put, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })      UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_STRUKTUR = RestResource.new(         '/utbildningsinformation/struktur',         {             get: RequestMethod.new(:get, 200,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON,                                    AcceptHeaders::UTBILDNINGSINFORMATION_JSON)         })    end    def modify_utbildningsinstans(ladok_resource, request_method, utbildningsinstans_uid, avvecklad, utbildningskod, utbildningskonfiguration_uid,                                 utbildningstyp_id, benamning_sv, benamning_en,  giltig_period_id,                                 omfattning, organistaion_uid)     utbildningsinstans_uid_hash = nil     if !utbildningsinstans_uid.blank?       utbildningsinstans_uid_hash = {uid: utbildningsinstans_uid}     end     return handle_request(ladok_resource,                           request_method,                           {                               Uid: utbildningsinstans_uid,                               Avvecklad: avvecklad,                               Utbildningskod: utbildningskod,                               UtbildningskonfigurationUID: utbildningskonfiguration_uid,                               UtbildningstypID: utbildningstyp_id,                               Benamning: {                                   sv: benamning_sv,                                   en: benamning_en                               },                               Versionsinformation: {                                   GiltigFranPeriodID: {                                       value: giltig_period_id                                   }                               },                               Omfattning: omfattning,                               OrganisationUID: organistaion_uid                           },nil, utbildningsinstans_uid_hash)   end    def modify_underliggande_utbildningsinstans(request_method, parent_utbildningsinstans_uid, utbildningsinstans_uid,                                               avvecklad, utbildningskod, utbildningskonfiguration_uid, utbildningstyp_id,                                               benamning_sv, benamning_en, giltig_period_id, omfattning)     return handle_request(LadokResources::UTBILDNINGSINFORMATION_UTBILDNINGSINSTANS_UNDERLIGGANDE,                           request_method,                           {                               Uid: utbildningsinstans_uid,                               Avvecklad: avvecklad,                               Utbildningskod: utbildningskod,                               UtbildningskonfigurationUID: utbildningskonfiguration_uid,                               UtbildningstypID: utbildningstyp_id,                               Benamning: {                                   sv: benamning_sv,                                   en: benamning_en                               },                               Versionsinformation: {                                   GiltigFranPeriodID: {                                       value: giltig_period_id                                   }                               },                               Omfattning: omfattning                           },                           nil,                           {                               uid: parent_utbildningsinstans_uid                           })   end    def handle_request(resource, method, payload, header_parameter_map, url_parameter_map)     request_method = resource.method_map[method]     if request_method.nil?       raise ArgumentError, "Could not find request method '#{method}'."     end      response = execute_request(request_method.method,                                resource.url,                                payload,                                request_method.accept_header,                                request_method.content_type_header,                                header_parameter_map,                                url_parameter_map)      if response != nil       if response.code != request_method.response_code         raise StandardError, "Response code mismatch. Expected: #{request_method.response_code}  Got: #{response.code}"       end        return response     end      raise StandardError, 'Did not get a response.'   end    def execute_request(method, url, payload, accept_header, content_type_header, header_parameter_map, url_parameter_map)     payload_as_json = nil     if !payload.nil?       payload_as_json = payload.to_json     end      url_with_parameters = url     if !url_parameter_map.nil?       url_with_parameters = url % url_parameter_map       url_with_parameters = URI.encode(url_with_parameters)     end        return execute_request_raw(method, url_with_parameters, payload_as_json,                                {content_type: content_type_header, accept: accept_header, params: header_parameter_map})   end    def execute_request_raw(method, url_with_parameters, payload_as_json, header_map)     return RestClient::Request.execute(method: method,                                        url: @ladok_host.url + url_with_parameters,                                        payload: payload_as_json,                                        ssl_client_cert: @ladok_host.ssl_certificate.certificate,                                        ssl_client_key: @ladok_host.ssl_certificate.key,                                        headers: header_map)   end  end