All Downloads are FREE. Search and download functionalities are using the official Maven repository.

no.tsl2.nano.h5.2.5.6.source-code.generate-openapi.sh Maven / Gradle / Ivy

Go to download

TSL2 Framework Html5 Extensions (WebServer, Html5Presentation, RuleCover, BeanConfigurator, LogicTable-Sheet, Expression-Descriptors for Actions, Rules, URLs, Queries)

The newest version!
#!/bin/bash
# generate openapi specifiation or api+client classes from specification (Thomas Schneider / 2025)
# usage: generate-openapi.sh [spec|]
#
# example-1: generate-openapi.sh https://github.com/bump-sh-examples/train-travel-api/raw/refs/heads/main/openapi.yaml
# example-2: generate-openapi.sh spec

DEF_OPENAPI="openapi.yaml"
[[ "$1" == "spec" ]] && GENERATE_SPEC=1 || OPENAPI=${1:-$DEF_OPENAPI}

[[ "$1" == "" ]] && [ ! -f $DEF_OPENAPI ] \
	&& echo "usage: $0 [spec|]" \
	&& echo "       if no parameter was given, the file $DEF_OPENAPI will be used" \
	&& echo "ERROR: NO $DEF_OPENAPI FILE FOUND!" \
	&& return 1

# only needed, if using standard pom.xml name
#if [ -f pom.xml ]; then mv pom.xml pom.xml.$(date +%Y%m%d_%H%M%S); fi
#cp pom-openapi.xml pom.xml

if [[ $GENERATE_SPEC != "" ]]; then
	echo "Generating $DEF_OPENAPI from classes"
	. mvnw -f pom-openapi.xml com.github.kongchen:swagger-maven-plugin:3.1.8:generate
	
else
	echo "Generating java client classes from $OPENAPI"
	if [[ $OPENAPI != $DEF_OPENAPI ]]; then
		if [ -f $DEF_OPENAPI ]; then mv $DEF_OPENAPI $DEF_OPENAPI.$(date +%Y%m%d_%H%M%S); fi
		curl -kL -X GET $OPENAPI -o $DEF_OPENAPI
	fi

	# the swagger generator seems to be outdated	
	# . mvnw io.swagger:swagger-codegen-maven-plugin:generate

	# openapitools: for parameters (like library), see https://openapi-generator.tech/docs/generators/java/
	bash -c "
	. mvnw -f pom-openapi.xml org.openapitools:openapi-generator-maven-plugin:7.12.0:generate \
		-Dopenapi.generator.maven.plugin.inputSpec=openapi.yaml \
		-Dopenapi.generator.maven.plugin.generatorName=java \
		-Dopenapi.generator.maven.plugin.sourceFolder=generated-src \
		-Dopenapi.generator.maven.plugin.output=generated-src \
		-Dopenapi.generator.maven.plugin.library=native"

	echo "compiling and creating beans jar file"
	bash -c ". mvnw -f pom-openapi.xml dependency:copy-dependencies -DoutputDirectory=./"
	cp -fr --update=all generated-src/src/main/java/org generated-src
	rm -fr generated-src/src/main/java/org
	cp -fr --update=all generated-src/src/test/java/org generated-src
	rm -fr generated-src/src/test/java/org

	# make model classes persistable
	sed -i -E 's/(public class.*)/@de.tsl2.nano.bean.annotation.Presentable(icon="icons\/point-yellow.png")\[email protected]\n\1\n\n\t\/\/generated by tsl2nano\n\tprivate @javax.persistence.Id @javax.persistence.GeneratedValue Long idgen_;\n\tpublic Long getIdgen_(){return idgen_;}\n\tpublic void setIdgen_(Long id){this.idgen_ = id;}\n\n/g' \
		$(find generated-src/org/openapitools/client/model -name "*.java" -a -not -name "*Test.java")

	sed -i -E 's/(private (List|Set|Collection|Array|Linked).*;)/@javax.persistence.ElementCollection\n\t\1/g' \
		$(find generated-src/org/openapitools/client/model -name "*.java" -a -not -name "*Test.java")
	sed -i -E 's/(private (\w+<)?(Object|Serializable).*;)/@javax.persistence.Transient\n\t\1/g' \
		$(find generated-src/org/openapitools/client/model -name "*.java" -a -not -name "*Test.java")

	# sed is not able to do a regex look ahead - so we use perl
	perl -i -pE 's/(private (?!\w+Links|static|final|transient|class|.*Enum|List|Set|Collection|Array|Linked|Object|Serializable|[@]|String|.*Date.*|.*Time.*|Long|.*Integer|Short|Double|Bool|Byte|Character|.*Decimal|UUID|UR(I|L)).*;)/\@javax.persistence.ManyToOne\n\t\1/g' \
		$(find generated-src/org/openapitools/client/model -name "*.java" -a -not -name "*Test.java")
		
	# special mappings
	sed -i -E 's/(private \w*Links.*;)/@javax.persistence.Transient\n\t\1/g' \
		$(find generated-src/org/openapitools/client/model -name "*.java" -a -not -name "*Test.java")
	# build the generated-model.jar file
	. compilejar.cmd
fi




© 2015 - 2025 Weber Informatics LLC | Privacy Policy