class EWorld::ControllerWriter
Constants
- METHODS
- PACKAGE_NAME
- ROOT_PATH
Public Class Methods
write(api_project, ui_project, controllers)
click to toggle source
Responsible for writing all the spring boot @RestController classes. @return void
# File lib/writers/controller_writer.rb, line 12 def self.write(api_project, ui_project, controllers) raise RuntimeError, "Expected project type to be: #{Blufin::Projects::TYPE_API_SIMPLE}, instead got: #{api_project[Blufin::Projects::TYPE]}" unless api_project[Blufin::Projects::TYPE] == Blufin::Projects::TYPE_API_SIMPLE raise RuntimeError, "Expected project type to be: #{Blufin::Projects::TYPE_QUASAR}, instead got: #{ui_project[Blufin::Projects::TYPE]}" unless ui_project[Blufin::Projects::TYPE] == Blufin::Projects::TYPE_QUASAR @generated = [] @overwritten = [] @project_path = Blufin::Projects::get_project_path(api_project[Blufin::Projects::PROJECT_ID]) @project_path_api = Blufin::Projects::get_project_path(api_project[Blufin::Projects::PROJECT_ID], true) @project_path_ui = Blufin::Projects::get_project_path(ui_project[Blufin::Projects::PROJECT_ID], true) @transient_data_api = api_project[Blufin::Projects::TRANSIENT_DATA] @transient_data_ui = ui_project[Blufin::Projects::TRANSIENT_DATA] @controller_path = "#{EWorld::BaseWriter::get_java_path_for(@project_path, @transient_data_api['ControllerPath'])}/#{PACKAGE_NAME}" # Loop controllers. controllers.each { |clazz, data| write_controller(clazz, data) } # TODO - REMOVE # puts @transient_data_api.to_yaml # puts @transient_data_ui.to_yaml # puts # puts "\x1B[38;5;154m#{controllers.to_yaml}\x1B[0m" return @generated, @overwritten end
Private Class Methods
write_controller(clazz, data)
click to toggle source
Write controllers. @return void
# File lib/writers/controller_writer.rb, line 41 def self.write_controller(clazz, data) content = <<TEMPLATE package #{PACKAGE}.api.#{PACKAGE_NAME}; import #{PACKAGE}.api.system.auth.Secured; import #{PACKAGE}.api.system.auth.data.Permission; import #{PACKAGE}.api.system.rest.AbstractController; import #{PACKAGE}.lib.constants.Constants; import #{PACKAGE}.lib.exceptions.ClientErrorException; import #{PACKAGE}.lib.exceptions.NotImplementedException; import #{PACKAGE}.lib.exceptions.ServerErrorException; import #{PACKAGE}.lib.rest.data.ClientData; import #{PACKAGE}.lib.rest.response.ApiResponseBuilder; import #{PACKAGE}.core.#{EWorld::ServiceWriter::PACKAGE_NAME}.#{CLASS}Service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.DeleteMapping; import java.io.IOException; import java.util.Arrays; import java.util.List; @RestController @RequestMapping("#{ROOT_PATH}") public class #{CLASS}Controller extends AbstractController { @Autowired #{CLASS}Service #{CLASS_LOWER}Service;#{METHODS}} TEMPLATE methods_output = '' # Add all the end-points. if data.has_key?('EndPoints') && data['EndPoints'].is_a?(Array) methods_output = "\n" data['EndPoints'].each do |end_point| method = end_point['Method'].downcase method = method[0].upcase + method[1..-1] path = end_point['Path'].downcase camel_case = Blufin::Strings::snake_case_to_camel_case(path.gsub('-', '_')) method_title = "#{method.downcase}#{camel_case}" methods_output += <<TEMPLATE @Secured @#{method}Mapping("#{Blufin::Strings::remove_surrounding_slashes(path)}") public ResponseEntity #{method_title}() { return ApiResponseBuilder.ok(#{CLASS_LOWER}Service.#{method_title}()); } TEMPLATE end end content = content.gsub(METHODS, methods_output) content = content.gsub(PACKAGE, @transient_data_api['Package']) content = content.gsub(CLASS, clazz) content = content.gsub(CLASS_LOWER, clazz[0].downcase + clazz[1..-1]) content = content.gsub(ROOT_PATH, data['RootPath']) file = "#{@controller_path}/#{clazz}Controller.java" Blufin::Files::write_file_java(file, Blufin::Arrays::convert_string_to_line_array(content), nil, false) end