Skip to content

Latest commit

 

History

History
218 lines (176 loc) · 11.3 KB

README.md

File metadata and controls

218 lines (176 loc) · 11.3 KB

ZenWave SDK

ZW> Code Generator ZW> Code Generator

👉 ZenWave360 Helps You Create Software Easy to Understand

Maven Central GitHub release (latest by date) General Availability build coverage branches coverage GitHub

ZenWave SDK is a configurable and extensible toolkit for Domain Driven Design (DDD) and API-First that can generate code from a mix of different models including:

  • ZDL Domain Language
  • AsyncAPI
  • OpenAPI

Table of Contents:

JBang Instalation

The easiest way to install ZenWave SDK is as a JBang alias:

jbang alias add --fresh --force --name=zw release@zenwave360/zenwave-sdk

or if you prefer to use the latest snapshot versions:

jbang alias add --fresh --force --name=zw snapshots@zenwave360/zenwave-sdk

or if you prefer to use the next experimental/unstable snapshot versions:

jbang alias add --fresh --force --name=zw next@zenwave360/zenwave-sdk

If you plan to use custom plugins you will need to use the command in the following format:

jbang alias add --name=zw  --force \
    -m=io.zenwave360.sdk.Main \
    --repos=mavencentral,snapshots=https://s01.oss.sonatype.org/content/repositories/snapshots \
    --deps=\
org.slf4j:slf4j-simple:1.7.36,\
io.github.zenwave360.zenwave-sdk.plugins:asyncapi-spring-cloud-streams3:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:asyncapi-jsonschema2pojo:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:openapi-spring-webtestclient:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:backend-application-default:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:zdl-to-openapi:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:zdl-to-asyncapi:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:jdl-to-asyncapi:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:zdl-to-markdown:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:openapi-controllers:1.7.1
    io.github.zenwave360.zenwave-sdk:zenwave-sdk-cli:1.7.1

You can include any custom plugin jars in the --deps option.

JBang will use you maven settings for repository resolution, but you can also specify a custom maven repository in the --repos option.

Features / Roadmap

  • ZenWave SDK CLI
    • Default parsers, processors, plugins, templating, formatters, writers, etc... for AsyncAPI, OpenAPI and JDL.
    • Help command: detailed, json, markdown, list of available plugins
    • Fork existing (custom or standard) plugin command
  • ZenWave SDK Maven Plugin
  • Standard Plugins
    • JDL Backend Application (flexible hexagonal architecture)
      • Domain Entities
      • Inbound
        • Service Ports, DTOs, Mappers
        • Implementation for CRUD operations
        • Acceptance Tests: SpringData InMemory Repositories
      • Outbound: SpringData Repositories, ElasticSearch... (for REST or Async see other plugins)
      • Adapters:
        • Spring MVC
        • Spring WebFlux
      • Flavors
        • MongoDB
          • Imperative
          • Reactive
        • JPA
          • Imperative
          • Reactive
      • Unit/Integration Testing
        • Edge Integration Testing: partial spring-boot context for outbound adapters (with testcontainers)
        • Sociable Vertical Testing: manual dependency setup with in memory infrastructure test-doubles
        • Vertical Integration Testing: full spring-boot context for inbound adapters (with testcontainers)
    • JDL OpenAPI Controllers
    • OpenAPI to Spring WebTestClient
    • AsyncAPI Spring Cloud Streams3
      • Consumer and Producer. Imperative and Reactive.
        • Business Exceptions Dead Letter Queues Routing
      • Producer with Transactional Outbox pattern
        • For MongoDB
        • For JDBC
      • Enterprise Envelop Pattern
      • Automatically fill headers at runtime from payload paths, tracing-id supplier...
    • JDL to Specs
      • JDL to OpenAPI
      • JDL to AsyncAPI
        • AsyncAPI schemas
        • AVRO schemas
    • API Testing
    • Reverser Engineering
      • OpenAPI 2 JDL
      • Java 2 JDL
        • Spring Data MongoDB annotations
        • JPA annotations

Building from source

git clone https://github.com/ZenWave360/zenwave-sdk.git
cd zenwave-sdk
mvn clean install

Usage

Use the following jbang format:

jbang zw -p <pluginConfigClass or short-code> optionName=value optionName2=value

You can get a list of all available plugins:

$ jbang zw -h list
Usage: <main class> [-f] [-h[=<helpFormat>]] [-p[=<pluginClass>]]
                    [<String=Object>...]
      [<String=Object>...]
  -f, --force                Force overwrite
  -h, --help[=<helpFormat>]  Help with output format
  -p, --plugin[=<pluginClass>]
                             Plugin Class or short-code
INFO Reflections - Reflections took 780 ms to scan 54 urls, producing 2370 keys and 11537 values
ZW> SDK (1.7.0)

Available plugins:

backend-application-default    io.zenwave360.sdk.plugins.BackendApplicationDefaultPlugin: Generates a full backend application using a flexible hexagonal architecture (1.7.0)
spring-cloud-streams3-adapters io.zenwave360.sdk.plugins.SpringCloudStreams3AdaptersPlugin: Generates tests for Spring Cloud Streams Consumers. (1.7.0)
jdl-to-asyncapi                io.zenwave360.sdk.plugins.JDLToAsyncAPIPlugin: Generates a full AsyncAPI definitions for CRUD operations from JDL models (1.7.0)
zdl-to-json                    io.zenwave360.sdk.plugins.ZdlToJsonPlugin: Prints to StdOut ZDL Model as JSON (1.7.0)
spring-webtestclient           io.zenwave360.sdk.plugins.SpringWebTestClientPlugin: Generates test for SpringMVC or Spring WebFlux using WebTestClient based on OpenAPI specification. (1.7.0)
jsonschema2pojo                io.zenwave360.sdk.plugins.AsyncApiJsonSchema2PojoPlugin: Generate Plain Old Java Objects from OpenAPI/AsyncAPI schemas or full JSON-Schema files (1.7.0)
openapi-controllers            io.zenwave360.sdk.plugins.OpenAPIControllersPlugin: Generates implementations based on ZDL models and OpenAPI definitions SpringMVC generated OpenAPI interfaces. (1.7.0)
openapi-to-jdl                 io.zenwave360.sdk.plugins.OpenAPIToJDLPlugin: Generates JDL model from OpenAPI schemas (1.7.0)
openapi-karate                 io.zenwave360.sdk.plugins.OpenAPIKaratePlugin: Generates test for SpringMVC or Spring WebFlux using WebTestClient based on OpenAPI specification. (1.7.0)
spring-cloud-streams3          io.zenwave360.sdk.plugins.SpringCloudStreams3Plugin: Generates strongly typed SpringCloudStreams3 producer/consumer classes for AsyncAPI (1.7.0)
zdl-to-openapi                 io.zenwave360.sdk.plugins.ZDLToOpenAPIPlugin: Generates a draft OpenAPI definitions from your ZDL entities and services. (1.7.0)
zdl-to-markdown                io.zenwave360.sdk.plugins.ZdlToMarkdownPlugin: Generates Markdown glossary from Zdl Models (1.7.0)
zdl-to-asyncapi                io.zenwave360.sdk.plugins.ZDLToAsyncAPIPlugin: Generates a draft AsyncAPI file with events from your ZDL services. (1.7.0)


Use: "jbang zw -p <plugin | short-code> -h" to get help on a specific plugin

NOTE: it will list any available plugin, standard or custom, inside any of these root java packages "io", "com" or "org".

And get help for a given plugin:

jbang zw --help -p <pluginConfigClass>

You can add choose a help format from the following: help, detailed, markdown, or list:

jbang zw --help markdown -p <pluginConfigClass>

Available Plugins

Refer to individual plugin's documentation for more information:

Plugin Description Model Types
Backend Application Default Backend Application Default ZDL
AsyncAPI JSON Schema to POJO AsyncAPI JSON Schema to POJO AsyncAPI, JsonSchema
AsyncAPI to Spring Cloud Streams 3 AsyncAPI to Spring Cloud Streams 3 AsyncAPI, AVRO, JsonSchema
OpenAPI Controllers JDL OpenAPI Controllers OpenAPI, ZDL
OpenAPI to Spring WebTestClient OpenAPI to Spring WebTestClient OpenAPI
ZDL to OpenAPI ZDL to OpenAPI and OpenAPI to ZDL ZDL, OpenAPI
ZDL to AsyncAPI ZDL to AsyncAPI ZDL, AsyncAPI
ZDL to Markdown ZDL to Markdown ZDL
Java 2 JDL Reverse Engineering Java 2 JDL Reverse Engineering Java, JDL

ZenWave SDK Documentation

Please refer to the documentation website for more information.