class Blufin::YmlJavaDtoWriter
Constants
- PACKAGE
- SERVICE
Public Class Methods
new(site, schema_data, schema_resources)
click to toggle source
@return void
# File lib/core/yml_writers/yml_java_dto_writer.rb, line 9 def initialize(site, schema_data, schema_resources) @schema_data = schema_data @schema_resources = schema_resources raise RuntimeError, 'Could not find valid @schema_data.' if @schema_data.nil? || !@schema_data.is_a?(Hash) 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_location = "#{Blufin::SiteResolver::get_site_location(@site)}/" # Wipe out all previous files. Blufin::YmlSchemaValidator::VALID_SCHEMAS_GENERATE.each do |schema| paths_to_wipe_out = %W(#{get_java_path(@site, schema, SERVICE, PACKAGE)}) paths_to_wipe_out.each do |path_to_wipe_out| 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 end
Public Instance Methods
write()
click to toggle source
@return void noinspection RubyUnusedLocalVariable
# File lib/core/yml_writers/yml_java_dto_writer.rb, line 37 def write @schema_data.each do |schema, schema_data| schema_data.each_with_index do |(table, table_data), idx| if table_data.is_a?(Hash) && table_data.length > 0 import_statements = [] instance_variables = [] special_getters = [] class_name = Blufin::Strings::snake_case_to_camel_case(table) table_data.each do |column_name, column_data| if column_name =~ /\A(#{Blufin::YmlSchemaValidator::VALID_SCHEMAS_REGEX})\.[a-z_]+\[\]\z/ || column_name =~ /\A(#{Blufin::YmlSchemaValidator::VALID_SCHEMAS_REGEX})\.[a-z_]+\z/ column_name_dup = column_name.dup.split('.')[1] field_camel_case = Blufin::Strings.snake_case_to_camel_case(column_name_dup) field_camel_case_lower = Blufin::Strings.snake_case_to_camel_case_lower(column_name_dup) elsif column_name =~ /\A[a-z_.]+\[#{Blufin::YmlSchemaValidator::LINK}\]/ column_name_dup = column_name.dup.gsub("[#{Blufin::YmlSchemaValidator::LINK}]", '[]').split('.')[1] field_camel_case = Blufin::Strings.snake_case_to_camel_case(column_name_dup) field_camel_case_lower = Blufin::Strings.snake_case_to_camel_case_lower(column_name_dup) else field_camel_case = Blufin::Strings.snake_case_to_camel_case(column_name.dup) field_camel_case_lower = Blufin::Strings.snake_case_to_camel_case_lower(column_name.dup) end # Handle Placeholders if column_name =~ /\A(#{Blufin::YmlSchemaValidator::VALID_SCHEMAS_REGEX})\.[a-z_]+\[\]\z/ || column_name =~ /\A[a-z_.]+\[#{Blufin::YmlSchemaValidator::LINK}\]/ field_camel_case = field_camel_case.gsub('[]', '') field_camel_case_lower = field_camel_case_lower.gsub('[]', '') instance_variables << " private List<#{field_camel_case}> #{field_camel_case_lower}List = new ArrayList<>();#{write_column_description(column_data)}" import_statements << 'import java.util.HashMap;' import_statements << 'import java.util.Map;' import_statements << 'import java.util.ArrayList;' import_statements << 'import java.util.List;' next elsif column_name =~ /\A(#{Blufin::YmlSchemaValidator::VALID_SCHEMAS_REGEX})\.[a-z_]+\z/ instance_variables << " private #{field_camel_case} #{field_camel_case_lower};#{write_column_description(column_data)}" next end special_instance_variable = [] type = column_data[Blufin::YmlSchemaValidator::TYPE] begin nullable = column_data[Blufin::YmlSchemaValidator::FLAG].split(' ').include?(Blufin::YmlSchemaValidator::FLAG_NULLABLE) rescue nullable = false end if type == Blufin::YmlSchemaValidator::TYPE_BOOLEAN import_statements << 'import lombok.AccessLevel;' import_statements << 'import lombok.Getter;' # special_instance_variable << '' unless instance_variables.last == '' special_instance_variable << ' @Getter(AccessLevel.NONE)' special_instance_variable << " private Boolean #{field_camel_case_lower};#{write_column_description(column_data)}" # special_instance_variable << '' special_getters << '' special_getters << " public Boolean is#{field_camel_case}() {" special_getters << '' special_getters << " return #{field_camel_case_lower};" special_getters << ' }' elsif type == Blufin::YmlSchemaValidator::TYPE_DATETIME type = 'ZonedDateTime' import_statements << 'import java.time.ZonedDateTime;' elsif [ Blufin::YmlSchemaValidator::TYPE_DATETIME_INSERT, Blufin::YmlSchemaValidator::TYPE_DATETIME_UPDATE ].include?(type) import_statements << 'import java.time.ZonedDateTime;' import_statements << 'import org.blufin.base.annotations.Transient;' # special_instance_variable << '' unless instance_variables.last == '' special_instance_variable << ' @Transient' special_instance_variable << " private ZonedDateTime #{field_camel_case_lower};" elsif type == Blufin::YmlSchemaValidator::TYPE_DATE type = 'LocalDate' import_statements << 'import java.time.LocalDate;' elsif type =~ Blufin::YmlSchemaValidator::REGEX_DECIMAL type = 'BigDecimal' import_statements << 'import java.math.BigDecimal;' elsif type == Blufin::YmlSchemaValidator::TYPE_INT_TINY type = 'Byte' elsif type == Blufin::YmlSchemaValidator::TYPE_INT_SMALL type = 'Short' elsif type == Blufin::YmlSchemaValidator::TYPE_INT_BIG type = 'Long' elsif [Blufin::YmlSchemaValidator::TYPE_INT, Blufin::YmlSchemaValidator::TYPE_INT_AUTO].include?(type) type = 'Integer' elsif [Blufin::YmlSchemaValidator::TYPE_TEXT, Blufin::YmlSchemaValidator::TYPE_TEXT_LONG].include?(type) type = 'String' elsif type == Blufin::ScannerJavaEmbeddedObjects::OBJECT import_statements << 'import org.blufin.base.annotations.Transient;' # special_instance_variable << '' unless instance_variables.last == '' special_instance_variable << ' @Transient' special_instance_variable << " private #{Blufin::Strings::snake_case_to_camel_case(column_data[Blufin::YmlSchemaValidator::TRANSIENT][1])} #{field_camel_case_lower};" # special_instance_variable << '' elsif type =~ Blufin::YmlSchemaValidator::REGEX_ENUM enum_class_name = "#{class_name}#{field_camel_case}" import_statements << "import #{get_package(@site, schema, Blufin::YmlJavaEnumWriter::PACKAGE_AUTO, SERVICE)}.#{enum_class_name};" type = enum_class_name elsif type =~ Blufin::YmlSchemaValidator::REGEX_ENUM_CUSTOM enum_class_name = Blufin::YmlCommon::enum_name_extractor(type) import_statements << "import #{get_package(@site, schema, Blufin::YmlJavaEnumWriter::PACKAGE_CUSTOM, SERVICE)}.#{enum_class_name};" type = enum_class_name elsif type =~ Blufin::YmlSchemaValidator::REGEX_ENUM_SYSTEM enum_class_name = Blufin::YmlCommon::enum_name_extractor(type) import_statements << "import #{Blufin::SiteServices::PACKAGE_SYSTEM_ENUMS}.#{enum_class_name};" type = enum_class_name elsif type =~ Blufin::YmlSchemaValidator::REGEX_VARCHAR type = 'String' else raise RuntimeError, "Unrecognized type in #{__FILE__}: #{type}" end if special_instance_variable.length > 0 special_instance_variable.each { |n| instance_variables << n } else instance_variables << " private #{type} #{field_camel_case_lower};#{write_column_description(column_data)}" end end import_statements.uniq! import_statements.sort! content = [ "package #{get_package(@site, schema, PACKAGE, SERVICE)};", 'import com.fasterxml.jackson.annotation.JsonIgnore;', 'import org.blufin.sdk.base.PersistentDto;' ] import_statements << 'import lombok.Data;' import_statements << 'import lombok.NoArgsConstructor;' if import_statements.any? content = content.push(*import_statements) content << '' end resource_hash = @schema_resources["#{schema}.#{table}"] resource_type = resource_hash[:type] parent_element = nil if resource_type == Blufin::YmlSchemaValidator::RESOURCE_TYPE_PARENT # DO NOTHING (for now) elsif resource_type == Blufin::YmlSchemaValidator::RESOURCE_TYPE_OBJECT || resource_type == Blufin::YmlSchemaValidator::RESOURCE_TYPE_OBJECT_LIST raise RuntimeError, "resource_hash[:tree].length is less than 2. Something is not right \xe2\x86\x92 #{resource_hash[:tree].inspect}" if resource_hash[:tree].length < 2 parent_element = Blufin::Strings::snake_case_to_camel_case_lower(resource_hash[:tree][resource_hash[:tree].length - 2]) elsif resource_type == Blufin::YmlSchemaValidator::RESOURCE_TYPE_OBJECT_LINK # TODO - CANNOT BE NIL ... BUT WHY? 22/12/2015 ... STILL HAVEN'T LOOKED INTO THIS -> 02/18/2017 parent_element = nil else raise RuntimeError, "Unrecognized type: #{resource_type}" end content << '@Data' content << '@NoArgsConstructor' content << "public final class #{class_name} extends PersistentDto {" content << '' content = content.push(*instance_variables) content = content.push(*special_getters) if special_getters.length > 0 unless parent_element.nil? content << '' content << ' @Override' content << ' @JsonIgnore' content << ' public Integer getParentId() {' content << '' content << " return this.#{parent_element}Id;" content << ' }' content << '' content << ' @Override' content << ' @JsonIgnore' content << ' public void setParentId(Integer id) {' content << '' content << " this.#{parent_element}Id = id;" content << ' }' end content << '}' full_file_path = "#{get_java_path(@site, schema, SERVICE, PACKAGE)}/#{class_name}.java" write_file_java(full_file_path, content, schema == Blufin::YmlSchemaValidator::MOCK).gsub(@site_location, '') end end end end
Private Instance Methods
write_column_description(column_data)
click to toggle source
# File lib/core/yml_writers/yml_java_dto_writer.rb, line 241 def write_column_description(column_data) if !column_data.nil? && !column_data[Blufin::YmlSchemaValidator::DESCRIPTION].nil? " /* #{Blufin::YmlCommon::description_without_formatting(column_data[Blufin::YmlSchemaValidator::DESCRIPTION])} */" end end