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