@startuml hide empty members interface IModelBuilder { Model buildModel(File modelFile) } note bottom of IModelBuilder Implementation creates meta model If you want implement your own builder, then implement this end note interface ICodeGen { void doCodeGen(Model model, Map extraParams) } note top of ICodeGen Implementation process meta model and generate desired stuff If you want implementIModelBuilder your own code generator, then implement this end note class DoCodeGen { void run() static void main(String ... args) } class JsonSchemaBuilder class SingleFileGenerator class MultiFileGenerator class JavaBeanGenerator note left of DoCodeGen start class that handles the code gen process end note note bottom of JsonSchemaBuilder builds from JSON schemas end note note bottom of JavaBeanGenerator builds simple Java beans from meta model end note DoCodeGen o-- IModelBuilder DoCodeGen o-- ICodeGen IModelBuilder <|-- JsonSchemaBuilder ICodeGen <|-- MultiFileGenerator ICodeGen <|-- SingleFileGenerator MultiFileGenerator <|-- JavaBeanGenerator SingleFileGenerator <|-- SwaggerGenerator class Model { List types } class Type { List properties } class Property { BaseType type } BaseType <|-- BooleanType BaseType <|-- ByteType BaseType <|-- MinMaxType BaseType <|-- ComplexType MinMaxType <|-- DateType MinMaxType <|-- DateTimeType MinMaxType <|-- IntType MinMaxType <|-- LongType MinMaxType <|-- NumberType BaseType <|-- RefType BaseType <|-- StringType BaseType <|-- ArrayType BaseType <|-- UnsupportedType Property o-- BaseType Type o-- Property Model o-- Type RefType o-- Type ICodeGen -- Model @enduml