class AppCommand::GenerateApi

Public Instance Methods

execute() click to toggle source
# File lib/routes/generate/generate_api.rb, line 5
def execute

    begin

        @opts = command_options
        @args = arguments

        @generate_java = false

        opts_validate
        opts_routing

        Blufin::Terminal::custom(Blufin::SiteResolver::get_site_title(@site), 89, 'All files generated successfully.')

    rescue => e

        Blufin::Terminal::print_exception(e)

    end

end
opts_routing() click to toggle source
# File lib/routes/generate/generate_api.rb, line 75
def opts_routing

    cache_data_hashes

    @threads = []

    # Write the Java POMs.
    @threads << Thread.new {
        yml_java_pom_writer = Blufin::YmlJavaPomWriter.new(@yml_maven.data_blufin, @yml_maven.data_app, @site)
        yml_java_pom_writer.write_poms_blufin
        yml_java_pom_writer.write_poms_app
        Blufin::Terminal::output('Java POMs...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java Embedded Objects.
    @threads << Thread.new {
        yml_java_embedded_object_writer = Blufin::YmlJavaEmbeddedObjectWriter.new(@site, @yml_schema.get_schema_resources)
        yml_java_embedded_object_writer.write
        Blufin::Terminal::output('Embedded Objects...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java (API) Resource Data.
    @threads << Thread.new {
        yml_java_resource_data_writer = Blufin::YmlJavaResourceDataWriter.new(@site, @yml_schema.get_schema_resources.dup)
        yml_java_resource_data_writer.write
        Blufin::Terminal::output('API Resource Data...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java DTOs.
    @threads << Thread.new {
        yml_java_dto_writer = Blufin::YmlJavaDtoWriter.new(@site, @yml_schema.get_schema_data.dup, @yml_schema.get_schema_resources.dup)
        yml_java_dto_writer.write
        Blufin::Terminal::output('DTOs...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java ENUMs.
    @threads << Thread.new {
        yml_java_enum_writer = Blufin::YmlJavaEnumWriter.new(@site, @yml_schema.get_schema_data.dup)
        yml_java_enum_writer.write
        Blufin::Terminal::output('Enums...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java MetaData Classes.
    @threads << Thread.new {
        yml_java_meta_writer = Blufin::YmlJavaMetaWriter.new(@site, @yml_schema.get_schema_data.dup, @yml_schema.get_schema_resources.dup)
        yml_java_meta_writer.write
        Blufin::Terminal::output('MetaData classes...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java DAOs.
    @threads << Thread.new {
        yml_java_dao_writer = Blufin::YmlJavaDaoWriter.new(@site, @yml_schema.get_schema_data.dup, @yml_schema.get_schema_resources.dup, @yml_schema.get_schema_fks)
        yml_java_dao_writer.write
        Blufin::Terminal::output('DAOs...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java Model Classes.
    @threads << Thread.new {
        yml_java_model_writer = Blufin::YmlJavaModelWriter.new(@site, @yml_schema.get_schema_data.dup, @yml_schema.get_schema_resources.dup)
        yml_java_model_writer.write
        Blufin::Terminal::output('Models...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java Validators.
    @threads << Thread.new {
        yml_java_validator_writer = Blufin::YmlJavaValidatorWriter.new(@site, @yml_schema.get_schema_data.dup, @yml_schema.get_schema_resources.dup)
        yml_java_validator_writer.write
        Blufin::Terminal::output('Validators...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java MessageTypes (for Queue messages).
    @threads << Thread.new {
        yml_java_message_type_writer = Blufin::YmlJavaMessageTypeWriter.new(@site)
        yml_java_message_type_writer.write
        Blufin::Terminal::output('Message Queue classes...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java CronTypes (for Cron Service).
    @threads << Thread.new {
        yml_java_cron_type_writer = Blufin::YmlJavaCronTypeWriter.new(@site)
        yml_java_cron_type_writer.write
        Blufin::Terminal::output('CronTypes...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java API Resources.
    @threads << Thread.new {
        yml_java_api_resource_writer = Blufin::YmlJavaApiResourceWriter.new(@site, @yml_schema.get_schema_resources.dup)
        yml_java_api_resource_writer.write
        Blufin::Terminal::output('API Resources...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java SDK Package.
    @threads << Thread.new {
        yml_sql_java_sdk_writer = Blufin::YmlJavaSdkWriter.new(@site, @yml_schema.get_schema_data.dup, @yml_schema.get_schema_resources.dup)
        yml_sql_java_sdk_writer.write
        Blufin::Terminal::output('SDK Package...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the Java Worker Resources.
    @threads << Thread.new {
        yml_java_worker_writer = Blufin::YmlJavaWorkerWriter.new(@site)
        yml_java_worker_writer.write
        Blufin::Terminal::output('Worker Resources...', Blufin::Terminal::MSG_PROCESSED)
    }

    # TODO - Check that PATH_TO_RUBY exists (for the following 2)... Might be able to get rid of this if we manage to kill the config database.

    # Write the SQL Structure.
    @threads << Thread.new {
        yml_sql_structure_writer = Blufin::YmlSqlStructureWriter.new(@site, @yml_schema.get_schema_data.dup)
        yml_sql_structure_writer.write
        Blufin::Terminal::output('SQL Structure...', Blufin::Terminal::MSG_PROCESSED)
    }

    # Write the SQL Templates.
    @threads << Thread.new {
        yml_sql_template_writer = Blufin::YmlSqlTemplateWriter.new(@site, @yml_schema.get_schema_data.dup)
        yml_sql_template_writer.write
        Blufin::Terminal::output('SQL Templates...', Blufin::Terminal::MSG_PROCESSED)
    }

    # # Write Vue Service files.
    # yml_vue_service_writer = Blufin::YmlVueServiceWriter.new(@site, @yml_schema.get_schema_resources.dup)
    # yml_vue_service_writer.write
    # Blufin::Terminal::output('VueJs Services...', Blufin::Terminal::MSG_PROCESSED)

    @threads.each { |thread| thread.join }

end
opts_validate() click to toggle source
# File lib/routes/generate/generate_api.rb, line 27
def opts_validate

    @site = @args[0] ? Blufin::SiteResolver::validate_site(@args[0]) : Blufin::Site::DEFAULT_SITE

    # TODO - Re-enable Yes/no Prompt.
    # exit unless Blufin::Terminal::prompt_yes_no("Generate boiler-plate code for \xe2\x86\x92 #{Blufin::Terminal::format_action(Blufin::SiteResolver::get_site_title(@site))}", 'Continuing will overwrite all auto-generated code.', 'Continue?')

    @error_handler = Blufin::YmlErrorHandler.new(@site)

    # Must go first because it contains the most important configuration data.
    Blufin::SiteEmbedded::init(Blufin::ScannerJavaEmbeddedObjects::new(@site, @error_handler).get_data)

    config_file = "#{Blufin::SiteResolver::get_site_location(@site)}/#{Blufin::Site::PATH_TO_YML_CONFIG}/config.yml"

    Blufin::Terminal::error("Config file doesn't exist", config_file, true) unless Blufin::Files::file_exists(config_file)

    @yml_config = Blufin::YmlConfigValidator.new(@site, @error_handler)
    @yml_maven  = Blufin::YmlMavenValidator.new(@site, @error_handler)

    # If there are YML at this point, display them & return.
    @error_handler.display_errors_if_any(true)

    Blufin::SiteAuth::init(@yml_config.config_data[Blufin::YmlConfigValidator::GLOBAL][Blufin::YmlConfigValidator::GLOBAL_AUTHENTICATION])

    @java_scanner_source = Blufin::ScannerJavaSource::new(@site, @error_handler)
    @java_scanner_tests  = Blufin::ScannerJavaTests::new(@site, @error_handler)

    @yml_schema    = Blufin::YmlSchemaValidator.new(@site, @error_handler)
    @yml_resources = Blufin::YmlResourceValidator.new(@site, @error_handler)

    # If there are YML errors, display them & return.
    @error_handler.display_errors_if_any(true)

    if @yml_schema.get_errors_array.any?

        # Schema Errors are handled the "legacy" way.
        @yml_schema.get_errors_array.each do |hash|
            hash.each do |title, array|
                Blufin::Terminal::error(title, array, false)
            end
        end

        exit

    end

end

Private Instance Methods

cache_data_hashes() click to toggle source

Caches data-maps in the /tmp directory so other scripts can use it. @return void

# File lib/routes/generate/generate_api.rb, line 209
def cache_data_hashes

    Blufin::YmlCacheHandler.store(@site, Blufin::YmlCacheHandler::CONFIG, @yml_config.config_data)
    Blufin::YmlCacheHandler.store(@site, Blufin::YmlCacheHandler::SCHEMA_CONFIG, @yml_schema.get_schema_config)
    Blufin::YmlCacheHandler.store(@site, Blufin::YmlCacheHandler::SCHEMA_DATA, @yml_schema.get_schema_data)
    Blufin::YmlCacheHandler.store(@site, Blufin::YmlCacheHandler::SCHEMA_DESCRIPTIONS, @yml_schema.get_schema_descriptions)
    Blufin::YmlCacheHandler.store(@site, Blufin::YmlCacheHandler::SCHEMA_FKS, @yml_schema.get_schema_fks)
    Blufin::YmlCacheHandler.store(@site, Blufin::YmlCacheHandler::SCHEMA_FKS_DEPENDENCIES, @yml_schema.get_schema_fks_dependencies)
    Blufin::YmlCacheHandler.store(@site, Blufin::YmlCacheHandler::SCHEMA_FKS_PLACEHOLDERS, @yml_schema.get_schema_fks_placeholders)
    Blufin::YmlCacheHandler.store(@site, Blufin::YmlCacheHandler::SCHEMA_FKS_LINKS, @yml_schema.get_schema_fks_links)
    Blufin::YmlCacheHandler.store(@site, Blufin::YmlCacheHandler::SCHEMA_RESOURCES, @yml_schema.get_schema_resources)

end