Class MapperUtil

java.lang.Object
ru.yojo.codegen.util.MapperUtil

public class MapperUtil extends Object
Utility class for common mapping, string, and code-generation operations.

Includes utilities for:

  • YAML-to-Java type conversion and field name normalization
  • Lombok annotation generation
  • JavaDoc construction
  • String utilities (camel/kebab/snake case, capitalization, empty checks)
  • Class/interface/enum code template assembly
  • Constructor Details

    • MapperUtil

      public MapperUtil()
  • Method Details

    • getSetValueIfExistsOrElseEmptySet

      public static Set<String> getSetValueIfExistsOrElseEmptySet(String key, Map<String,Object> schemaMap)
      Safely extracts a Set<String> value from a map for the given key, or returns an empty set.
      Parameters:
      key - key to lookup
      schemaMap - map to extract from
      Returns:
      non-null set of strings
    • getStringValueIfExistOrElseNull

      public static String getStringValueIfExistOrElseNull(String key, Map<String,Object> map)
      Safely extracts a string value from a map for the given key, or returns null.
      Parameters:
      key - map key
      map - source map
      Returns:
      string value or null
    • castObjectToMap

      public static Map<String,Object> castObjectToMap(Object obj)
      Casts an object to Map<String, Object>, returning an empty map if null.
      Parameters:
      obj - object to cast
      Returns:
      non-null map
    • castObjectToList

      public static ArrayList<String> castObjectToList(Object obj)
      Casts an object to ArrayList<String>, returning an empty list if null.
      Parameters:
      obj - object to cast
      Returns:
      non-null list
    • castObjectToListObjects

      public static ArrayList<Object> castObjectToListObjects(Object obj)
      Casts an object to ArrayList<Object>, returning an empty list if null.
      Parameters:
      obj - object to cast
      Returns:
      non-null list
    • refReplace

      public static String refReplace(String ref)
      Extracts and capitalizes the schema name from an AsyncAPI $ref path.

      Examples:

      • "#/components/schemas/User""User"
      • "./file.yaml#/components/schemas/user""User"
      Parameters:
      ref - $ref string
      Returns:
      capitalized schema name
    • generateSetter

      public static String generateSetter(String type, String variableName)
      Generates a setter method declaration for a field.
      Parameters:
      type - field type
      variableName - field name (camelCase)
      Returns:
      Java setter source, e.g., " public void setField(Type field) { ... }"
    • generateGetter

      public static String generateGetter(String type, String variableName)
      Generates a getter method declaration for a field.
      Parameters:
      type - field type
      variableName - field name (camelCase)
      Returns:
      Java getter source, e.g., " public Type getField() { ... }"
    • generateEnumConstructor

      public static String generateEnumConstructor(String enumClassName, String type, String variableName)
      Generates an enum constructor call (used internally for enum with description).
      Parameters:
      enumClassName - enum class name
      type - enum constant type (typically String)
      variableName - field holding description
      Returns:
      constructor call string
    • getInterfaceBuilder

      public static StringBuilder getInterfaceBuilder(String schemaName)
      Creates a StringBuilder initialized with:
       public interface X {
       }
       
      Parameters:
      schemaName - interface name
      Returns:
      builder with interface header
    • getClassBuilder

      public static StringBuilder getClassBuilder(String schemaName)
      Creates a StringBuilder initialized with:
       public class X {
       }
       
      Parameters:
      schemaName - class name
      Returns:
      builder with class header
    • getEnumClassBuilder

      public static StringBuilder getEnumClassBuilder(String schemaName)
      Creates a StringBuilder initialized with:
       public enum X {
       }
       
      Parameters:
      schemaName - enum name
      Returns:
      builder with enum header
    • getImplementationClassBuilder

      public static StringBuilder getImplementationClassBuilder(String schemaName, Set<String> implementsFrom)
      Creates a StringBuilder initialized with:
       public class X implements I1, I2 {
       }
       
      Parameters:
      schemaName - class name
      implementsFrom - set of interface simple names
      Returns:
      builder with class+implements header
    • getExtendsClassBuilder

      public static StringBuilder getExtendsClassBuilder(String schemaName, String extendsClass)
      Creates a StringBuilder initialized with:
       public class X extends Y {
       }
       
      Parameters:
      schemaName - class name
      extendsClass - superclass name
      Returns:
      builder with class+extends header
    • getExtendsWithImplementationClassBuilder

      public static StringBuilder getExtendsWithImplementationClassBuilder(String schemaName, String extendsClass, Set<String> implementsFrom)
      Creates a StringBuilder initialized with:
       public class X extends Y implements I1, I2 {
       }
       
      Parameters:
      schemaName - class name
      extendsClass - superclass name
      implementsFrom - set of interface names
      Returns:
      builder with full inheritance header
    • generateJavaDoc

      public static void generateJavaDoc(StringBuilder sb, String description, String example)
      Appends a field-level JavaDoc comment (with optional example) to the given StringBuilder.
      Parameters:
      sb - builder to append to
      description - field description (from description in schema)
      example - field example (from example in schema)
    • generateClassJavaDoc

      public static void generateClassJavaDoc(StringBuilder sb, String description)
      Prepends a class-level JavaDoc comment to the given StringBuilder. Inserted before public class X { ...}.
      Parameters:
      sb - builder to modify (via insert(0, ...))
      description - class description (from description in schema)
    • getPackage

      public static String getPackage(String packageLocation, String outputDirectoryName, String messagePackageImport)
      Joins package parts with dots.
      Parameters:
      packageLocation - base package (e.g., com.example)
      outputDirectoryName - subdirectory name (e.g., test)
      messagePackageImport - suffix (e.g., messages;)
      Returns:
      full package string (e.g., com.example.test.messages;)
    • generateSizeAnnotation

      public static String generateSizeAnnotation(String minLength, String maxLength)
      Generates @Size annotation based on min/max bounds.
      Parameters:
      minLength - minimum length
      maxLength - maximum length
      Returns:
      annotation string
    • generateMinAnnotation

      public static String generateMinAnnotation(String min)
      Generates @Min(...) annotation.
      Parameters:
      min - minimum value
      Returns:
      annotation string
    • generateMaxAnnotation

      public static String generateMaxAnnotation(String max)
      Generates @Max(...) annotation.
      Parameters:
      max - maximum value
      Returns:
      annotation string
    • buildLombokAnnotations

      public static void buildLombokAnnotations(LombokProperties lombokProperties, Set<String> requiredImports, StringBuilder lombokAnnotationBuilder)
      Appends Lombok annotations (e.g., @NoArgsConstructor, @Accessors) to the builder and adds corresponding imports to the set.
      Parameters:
      lombokProperties - Lombok config
      requiredImports - target import set
      lombokAnnotationBuilder - target builder for annotations
    • finishBuild

      public static String finishBuild(StringBuilder sb, Set<String> requiredImports, String packageName)
      Finalizes Java source by prepending package and imports, and appending closing brace.
      Parameters:
      sb - builder with class body
      requiredImports - set of import strings
      packageName - package name (with semicolon)
      Returns:
      complete Java source
    • prepareStringBuilder

      public static StringBuilder prepareStringBuilder(Set<String> requiredImports, Set<String> implementsFrom, String extendsFrom, String schemaName, Set<String> importSet, FillParameters fillParameters)
      Prepares a class builder with correct inheritance/implementation clause and appends field declarations.
      Parameters:
      requiredImports - accumulated imports (updated in-place)
      implementsFrom - interfaces to implement
      extendsFrom - superclass to extend
      schemaName - class name
      importSet - extra imports (e.g., from extends/implements)
      fillParameters - field container
      Returns:
      initialized builder with fields appended
    • capitalize

      public static String capitalize(String str)
      Converts the first character to title case (e.g., "userName""UserName").
      Parameters:
      str - input string
      Returns:
      capitalized string
    • uncapitalize

      public static String uncapitalize(String str)
      Converts the first character to lower case (e.g., "UserName""userName").
      Parameters:
      str - input string
      Returns:
      uncapitalized string
    • isBlank

      public static boolean isBlank(CharSequence cs)
      Checks if a CharSequence is null, empty, or whitespace only.
      Parameters:
      cs - char sequence
      Returns:
      true if blank
    • isNotBlank

      public static boolean isNotBlank(CharSequence cs)
      Checks if a CharSequence is not blank.
      Parameters:
      cs - char sequence
      Returns:
      true if non-blank
    • isAnyEmpty

      public static boolean isAnyEmpty(CharSequence... css)
      Checks if any of the input strings is null or empty.
      Parameters:
      css - vararg strings
      Returns:
      true if at least one is empty
    • isNoneEmpty

      public static boolean isNoneEmpty(CharSequence... css)
      Checks if none of the input strings is null or empty.
      Parameters:
      css - vararg strings
      Returns:
      true if all are non-empty
    • isEmpty

      public static boolean isEmpty(CharSequence cs)
      Checks if a CharSequence is null or zero-length.
      Parameters:
      cs - char sequence
      Returns:
      true if empty
    • length

      public static int length(CharSequence cs)
      Returns length of a CharSequence, or 0 if null.
      Parameters:
      cs - char sequence
      Returns:
      length
    • isEmpty

      public static boolean isEmpty(Object[] array)
      Checks if an object array is empty.
      Parameters:
      array - array
      Returns:
      true if empty or null
    • getLength

      public static int getLength(Object array)
      Returns length of an array or 0 if null.
      Parameters:
      array - array
      Returns:
      length
    • substringBefore

      public static String substringBefore(String str, String separator)
      Gets substring before the first occurrence of a separator.
      Parameters:
      str - source string
      separator - separator
      Returns:
      substring before separator, or original if not found
    • isTrue

      public static boolean isTrue(Boolean bool)
      Checks if a Boolean is true.
      Parameters:
      bool - boolean wrapper
      Returns:
      true if non-null and true
    • getSchemaByName

      public static Map<String,Object> getSchemaByName(Map<String,Object> content, String schemaName)
      Retrieves schema definition by name from the global components.schemas section.
      Parameters:
      content - full AsyncAPI document
      schemaName - schema name
      Returns:
      schema map or empty map
    • toValidJavaFieldName

      public static String toValidJavaFieldName(String rawName)
      Converts a raw field name (e.g., "user-name", "user_name") to valid Java field identifier (camelCase). Respects keyword safety.
      Parameters:
      rawName - raw name from YAML
      Returns:
      safe camelCase name
    • toValidJavaEnumConstantName

      public static String toValidJavaEnumConstantName(String rawName)
      Converts raw enum constant name (e.g., "success", "error-code", "\r\n") to valid Java enum identifier (UPPER_SNAKE_CASE), handling control chars and keywords.
      Parameters:
      rawName - raw enum name
      Returns:
      valid UPPER_SNAKE_CASE enum constant name