class Blufin::YmlJavaApiResourceWriter
Constants
- PACKAGE
- SERVICE
Public Class Methods
new(site, schema_resources)
click to toggle source
Initialize the class. @return void
# File lib/core/yml_writers/yml_java_api_resource_writer.rb, line 10 def initialize(site, schema_resources) @schema_resources = schema_resources raise RuntimeError, 'Could not find valid @schema_resources.' if @schema_resources.nil? || !@schema_resources.is_a?(Hash) @site = Blufin::SiteResolver::validate_site(site) @site_name = Blufin::SiteResolver::get_site_name(@site) @site_domain = Blufin::SiteResolver::get_site_domain(@site) @site_domain_gsub = @site_domain.strip == '' ? '' : "#{@site_domain}." @site_location = "#{Blufin::SiteResolver::get_site_location(@site)}/" # Wipe out all previous files. Blufin::YmlSchemaValidator::VALID_SCHEMAS_GENERATE.each do |schema| path_to_wipe_out = "#{get_java_path(@site, schema, SERVICE, PACKAGE)}" if Blufin::Files::path_exists(path_to_wipe_out) if Blufin::Files::get_files_in_dir(path_to_wipe_out).any? Blufin::Terminal::command('rm *', path_to_wipe_out, false, false) end end end end
Public Instance Methods
write()
click to toggle source
@return void
# File lib/core/yml_writers/yml_java_api_resource_writer.rb, line 35 def write @schema_resources.each do |schema_table, resource_data| # This filters out the "mock" schema used for testing. next if schema_table.split('.')[0] == Blufin::YmlSchemaValidator::MOCK # Only write PARENT resources as they will contain the others as 'dependents'. next unless resource_data[:tree].length < 2 # Skip if this resource has no HTTP Methods. next unless Blufin::YmlCommon::has_at_least_one_http_method(resource_data, Blufin::YmlSchemaValidator::CONFIG_INTERNAL) @schema = schema_table.split('.')[0] @table = schema_table.split('.')[1] @type = resource_data[:type] @import_statements = [] auth_level = Blufin::SiteAuth::get_auth_level_for_table(@schema, @table) table_name = Blufin::Strings::snake_case_to_camel_case(@table) table_name_lower = Blufin::Strings::snake_case_to_camel_case_lower(@table) class_name = "#{table_name}Resource" auth_string = '' # TODO - THIS CANNOT BE HARD-CODED TO FALSE/TRUE. is_public = false is_secured = false is_account_aware = false is_user_aware = false if auth_level == Blufin::SiteAuth::LEVEL_ACCOUNT || auth_level == Blufin::SiteAuth::LEVEL_ACCOUNT_USER is_secured = true is_account_aware = true auth_string = '{BY.ACCOUNT}' end if auth_level == Blufin::SiteAuth::LEVEL_ACCOUNT_USER is_secured = true is_user_aware = true auth_string = '{BY.ACCOUNT, BY.USER}' end # TODO - THIS CANNOT BE HARD-CODED TO FALSE. is_oauth = false # TODO - REMOVE (AFTER OAUTH IS FIXED -- HANDY DEBUG STRING) # puts "\x1B[38;5;154m#{@schema}.#{@table}\x1B[0m \xe2\x86\x92 \x1B[38;5;196m#{auth_level}\x1B[0m" # TODO - REMOVE # puts "\x1B[38;5;198m#{schema_table}\x1B[0m" # puts resource_data.inspect @import_statements << 'import org.blufin.sdk.rest.PatchOperation;' @import_statements << 'import org.blufin.api.base.AbstractResource;' @import_statements << 'import org.blufin.core.auth.annotations.Public;' if is_public @import_statements << 'import org.blufin.core.auth.annotations.Secured;' if is_secured @import_statements << 'import org.blufin.core.auth.annotations.OAuth;' if is_oauth @import_statements << 'import org.blufin.core.auth.annotations.helper.BY;' @import_statements << 'import org.blufin.sdk.constants.SdkConstants;' @import_statements << "import #{@site_domain_gsub}#{@site_name.gsub('-', '.')}.#{Blufin::SiteServices::SDK}.dto.#{table_name};" @import_statements << "import #{@site_domain_gsub}#{@site_name.gsub('-', '.')}.#{Blufin::SiteServices::SDK}.metadata.#{table_name}#{Blufin::YmlJavaMetaWriter::META_DATA};" @import_statements << "import #{@site_domain_gsub}#{@site_name.gsub('-', '.')}.#{Blufin::SiteServices::API}.#{Blufin::SiteServices::PACKAGE_AUTO_GENERATED}.validator.#{table_name}Validator;" @import_statements << "import #{@site_domain_gsub}#{@site_name.gsub('-', '.')}.#{Blufin::SiteServices::API}.#{Blufin::SiteServices::PACKAGE_AUTO_GENERATED}.model.#{table_name}Model;" @import_statements << 'import java.util.List;' @import_statements << 'import org.springframework.http.ResponseEntity;' @import_statements << 'import org.springframework.web.bind.annotation.PathVariable;' @import_statements << 'import org.springframework.web.bind.annotation.RequestParam;' @import_statements << 'import org.springframework.web.bind.annotation.GetMapping;' @import_statements << 'import org.springframework.web.bind.annotation.PostMapping;' @import_statements << 'import org.springframework.web.bind.annotation.PutMapping;' @import_statements << 'import org.springframework.web.bind.annotation.PatchMapping;' @import_statements << 'import org.springframework.web.bind.annotation.DeleteMapping;' @import_statements << 'import org.springframework.web.bind.annotation.RestController;' @import_statements << 'import java.util.List;' content_inner = [] content_inner << '@RestController' content_inner << '@TestNotRequired' content_inner << "public class #{class_name} extends AbstractResource {" lb = "\n " # line-break if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::GET) content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @GetMapping(\"/#{@schema_resources["#{schema_table}"][:resource]}\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity get#{table_name}(#{lb}@RequestParam(name = SdkConstants.FIELDS, required = false) String fields,#{lb}@RequestParam(name = SdkConstants.SORT, required = false) String sort,#{lb}@RequestParam(name = SdkConstants.PAGE, required = false) String page,#{lb}@RequestParam(name = SdkConstants.ENTRIES, required = false) String entries,#{lb}@RequestParam(name = SdkConstants.FILTERS, required = false) String filters) {" content_inner << '' content_inner << " return getPaginatedResponse(#{table_name}Model.getInstance(), #{table_name}#{Blufin::YmlJavaMetaWriter::META_DATA}.getInstance(), fields, sort, page, entries, filters);" content_inner << ' }' content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @GetMapping(\"/#{@schema_resources["#{schema_table}"][:resource]}/{ids:[0-9\\\\-,]+}\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity get#{table_name}(#{lb}@PathVariable(\"ids\") String ids,#{lb}@RequestParam(name = SdkConstants.FIELDS, required = false) String fields,#{lb}@RequestParam(name = SdkConstants.SORT, required = false) String sort) {" content_inner << '' content_inner << " return getIdSetResponse(#{table_name}Model.getInstance(), #{table_name}#{Blufin::YmlJavaMetaWriter::META_DATA}.getInstance(), ids, fields, sort);" content_inner << ' }' end if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::POST) content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @PostMapping(\"/#{@schema_resources["#{schema_table}"][:resource]}\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity post#{table_name}(#{lb}@RequestBody #{table_name} #{table_name_lower}) {" content_inner << '' content_inner << " return post(#{table_name}Model.getInstance(), #{table_name}MetaData.getInstance(), #{table_name}Validator.getInstance(), #{table_name_lower});" content_inner << ' }' content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @PostMapping(\"/#{@schema_resources["#{schema_table}"][:resource]}/list\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity post#{table_name}List(#{lb}@RequestBody List<#{table_name}> #{table_name_lower}List) {" content_inner << '' content_inner << " return post(#{table_name}Model.getInstance(), #{table_name}MetaData.getInstance(), #{table_name}Validator.getInstance(), #{table_name_lower}List);" content_inner << ' }' end if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::PUT) content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @PutMapping(\"/#{@schema_resources["#{schema_table}"][:resource]}\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity put#{table_name}(#{lb}@RequestBody #{table_name} #{table_name_lower}) {" content_inner << '' content_inner << " return put(#{table_name}Model.getInstance(), #{table_name}MetaData.getInstance(), #{table_name}Validator.getInstance(), #{table_name_lower});" content_inner << ' }' content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @PutMapping(\"/#{@schema_resources["#{schema_table}"][:resource]}/list\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity put#{table_name}List(#{lb}@RequestBody List<#{table_name}> #{table_name_lower}List) {" content_inner << '' content_inner << " return put(#{table_name}Model.getInstance(), #{table_name}MetaData.getInstance(), #{table_name}Validator.getInstance(), #{table_name_lower}List);" content_inner << ' }' end if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::PATCH) content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @PatchMapping(\"/#{@schema_resources["#{schema_table}"][:resource]}\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity patch#{table_name}(#{lb}@RequestBody List<PatchOperation> #{table_name_lower}Patch) {" content_inner << '' content_inner << " return patch(#{table_name}Model.getInstance(), #{table_name}MetaData.getInstance(), #{table_name}Validator.getInstance(), #{table_name_lower}Patch);" content_inner << ' }' end if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::DELETE) content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @DeleteMapping(\"/#{@schema_resources["#{schema_table}"][:resource]}/{ids:[0-9\\\\-,]+}\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity delete#{table_name}(#{lb}@PathVariable(\"ids\") String ids) {" content_inner << '' content_inner << " return delete(#{table_name}Model.getInstance(), #{table_name}MetaData.getInstance(), #{table_name}Validator.getInstance(), ids);" content_inner << ' }' end if !resource_data[:dependents].nil? && resource_data[:dependents].any? resource_data[:dependents].each do |dependent| dependent_resource_data = @schema_resources["#{@schema}.#{dependent}"] dependent_auth_level = Blufin::SiteAuth::get_auth_level_for_table(dependent_resource_data[:schema], dependent_resource_data[:table]) # TODO - IMPLEMENT OR DELETE (ONCE WE START DOING AUTH STUFF) dcc = Blufin::Strings::snake_case_to_camel_case(dependent) dccl = Blufin::Strings::snake_case_to_camel_case_lower(dependent) uri = @schema_resources["#{@schema}.#{dependent}"][:resource] uri_with_parent_id = '' uri_parts = uri.split('/') uri_parts.each_with_index do |uri_part, idx| uri_with_parent_id = uri_with_parent_id + '/' + uri_part uri_with_parent_id = uri_with_parent_id + '/{parentId}' if (idx + 2) == uri_parts.length end uri_with_parent_id.slice!(0) # TODO - REMOVE # puts "\x1B[38;5;166m#{dependent_resource_data[:schema]}.#{dependent_resource_data[:table]}\x1B[0m \xe2\x86\x92 \x1B[38;5;150m#{dependent_auth_level}\x1B[0m" # TODO - REMOVE # puts dependent_resource_data.to_yaml @import_statements << "import #{@site_domain_gsub}#{@site_name.gsub('-', '.')}.#{Blufin::SiteServices::SDK}.dto.#{dcc};" @import_statements << "import #{@site_domain_gsub}#{@site_name.gsub('-', '.')}.#{Blufin::SiteServices::SDK}.metadata.#{dcc}#{Blufin::YmlJavaMetaWriter::META_DATA};" @import_statements << "import #{@site_domain_gsub}#{@site_name.gsub('-', '.')}.#{Blufin::SiteServices::API}.#{Blufin::SiteServices::PACKAGE_AUTO_GENERATED}.validator.#{dcc}Validator;" @import_statements << "import #{@site_domain_gsub}#{@site_name.gsub('-', '.')}.#{Blufin::SiteServices::API}.#{Blufin::SiteServices::PACKAGE_AUTO_GENERATED}.model.#{dcc}Model;" if dependent_resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::GET) content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @GetMapping(\"/#{uri}\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity get#{dcc}(#{lb}@RequestParam(name = SdkConstants.FIELDS, required = false) String fields,#{lb}@RequestParam(name = SdkConstants.SORT, required = false) String sort,#{lb}@RequestParam(name = SdkConstants.PAGE, required = false) String page,#{lb}@RequestParam(name = SdkConstants.ENTRIES, required = false) String entries,#{lb}@RequestParam(name = SdkConstants.FILTERS, required = false) String filters) {" content_inner << '' content_inner << " return getPaginatedResponse(#{dcc}Model.getInstance(), #{dcc}#{Blufin::YmlJavaMetaWriter::META_DATA}.getInstance(), fields, sort, page, entries, filters);" content_inner << ' }' content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @GetMapping(\"/#{uri}/{ids:[0-9\\\\-,]+}\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity get#{dcc}(#{lb}@PathVariable(\"ids\") String ids,#{lb}@RequestParam(name = SdkConstants.FIELDS, required = false) String fields,#{lb}@RequestParam(name = SdkConstants.SORT, required = false) String sort) {" content_inner << '' content_inner << " return getIdSetResponse(#{dcc}Model.getInstance(), #{dcc}#{Blufin::YmlJavaMetaWriter::META_DATA}.getInstance(), ids, fields, sort);" content_inner << ' }' end if dependent_resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::POST) && dependent_resource_data[:type] == Blufin::YmlSchemaValidator::RESOURCE_TYPE_OBJECT content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @PostMapping(\"/#{uri_with_parent_id}\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity post#{dcc}(#{lb}@PathVariable(\"parentId\") int parentId,#{lb}@RequestBody #{dcc} #{dccl}) {" content_inner << '' content_inner << " return post(parentId, #{dcc}Model.getInstance(), #{dcc}MetaData.getInstance(), #{dcc}Validator.getInstance(), #{dccl});" content_inner << ' }' end if dependent_resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::POST) && dependent_resource_data[:type] == Blufin::YmlSchemaValidator::RESOURCE_TYPE_OBJECT_LIST content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @PostMapping(\"/#{uri_with_parent_id}/list\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity post#{dcc}List(#{lb}@PathVariable(\"parentId\") int parentId,#{lb}@RequestBody List<#{dcc}> #{dccl}List) {" content_inner << '' content_inner << " return post(parentId, #{dcc}Model.getInstance(), #{dcc}MetaData.getInstance(), #{dcc}Validator.getInstance(), #{dccl}List);" content_inner << ' }' end if dependent_resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::PUT) && dependent_resource_data[:type] == Blufin::YmlSchemaValidator::RESOURCE_TYPE_OBJECT content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @PutMapping(\"/#{uri_with_parent_id}\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity put#{dcc}(#{lb}@PathVariable(\"parentId\") int parentId,#{lb}@RequestBody #{dcc} #{dccl}) {" content_inner << '' content_inner << " return put(parentId, #{dcc}Model.getInstance(), #{dcc}MetaData.getInstance(), #{dcc}Validator.getInstance(), #{dccl});" content_inner << ' }' end if dependent_resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::PUT) && dependent_resource_data[:type] == Blufin::YmlSchemaValidator::RESOURCE_TYPE_OBJECT_LIST content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @PutMapping(\"/#{uri_with_parent_id}/list\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity put#{dcc}List(#{lb}@PathVariable(\"parentId\") int parentId,#{lb}@RequestBody List<#{dcc}> #{dccl}) {" content_inner << '' content_inner << " return put(parentId, #{dcc}Model.getInstance(), #{dcc}MetaData.getInstance(), #{dcc}Validator.getInstance(), #{dccl});" content_inner << ' }' end if dependent_resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::PATCH) content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @PatchMapping(\"/#{uri}/{id}\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity patch#{dcc}(#{lb}@PathVariable(\"id\") int id,#{lb}@RequestBody List<PatchOperation> #{dccl}Patch) {" content_inner << '' content_inner << " return patch(id, #{dcc}Model.getInstance(), #{dcc}MetaData.getInstance(), #{dcc}Validator.getInstance(), #{dccl}Patch);" content_inner << ' }' end if dependent_resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::DELETE) content_inner << '' content_inner << ' @Public' if is_public content_inner << ' @OAuth' if is_oauth content_inner << " @DeleteMapping(\"/#{uri}/{ids:[0-9\\\\-,]+}\")" content_inner << " @Secured(#{auth_string})" if is_account_aware || is_user_aware content_inner << " public ResponseEntity delete#{dcc}(#{lb}@PathVariable(\"ids\") String ids) {" content_inner << '' content_inner << " return delete(#{dcc}Model.getInstance(), #{dcc}MetaData.getInstance(), #{dcc}Validator.getInstance(), ids);" content_inner << ' }' end end end content = ["package #{get_package(@site, resource_data[:schema], PACKAGE, SERVICE)};", ''] content = content.push(*@import_statements) content << '' content = content.push(*content_inner) content << '}' full_file_path = "#{get_java_path(@site, @schema, SERVICE, PACKAGE)}/#{class_name}.java" write_file_java(full_file_path, content).gsub(@site_location, '') end end