Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,8 @@ default List<Map<String, Object>> getOperationList(Object model, JsonNode config
flattened.put("path", basePath + path);
String normalizedPath = path.replace("{", "").replace("}", "");
flattened.put("handlerName", Utils.camelize(normalizedPath) + Utils.camelize(entryOps.getKey()) + "Handler");
flattened.put("serviceName", Utils.camelize(normalizedPath) + Utils.camelize(entryOps.getKey()) + "Service");
flattened.put("serviceImpl", Utils.camelize(normalizedPath) + Utils.camelize(entryOps.getKey()) + "ServiceImpl");
flattened.put("functionName", Utils.camelize(normalizedPath) + Utils.camelize(entryOps.getKey()) + "Function");
flattened.put("endpoint", path + "@" + entryOps.getKey().toLowerCase());
flattened.put("apiName", Utils.camelize(normalizedPath) + Utils.camelize(entryOps.getKey()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,10 @@ public void generate(final String targetPath, Object model, JsonNode config) thr
if (!skipPomFile) {
transfer(targetPath, "", "pom.xml", templates.rest.parent.pom.template(config));
transfer(targetPath, "model", "pom.xml", templates.rest.model.pom.template(config));
transfer(targetPath, "service", "pom.xml", templates.rest.service.pom.template(config));
transfer(targetPath, "domain", "pom.xml", templates.rest.domain.pom.template(config));
transfer(targetPath, "server", "pom.xml", templates.rest.server.pom.template(config));
transfer(targetPath, "client", "pom.xml", templates.rest.client.pom.template(config));
transfer(targetPath, "service", "pom.xml", templates.rest.service.pom.template(config));
}
transferMaven(targetPath);
} else {
Expand All @@ -100,14 +101,18 @@ public void generate(final String targetPath, Object model, JsonNode config) thr
transfer(targetPath, "model", "build.gradle.kts", templates.rest.model.buildGradleKts.template(config));
transfer(targetPath, "model", "settings.gradle.kts", templates.rest.model.settingsGradleKts.template());

transfer(targetPath, "service", "build.gradle.kts", templates.rest.service.buildGradleKts.template(config));
transfer(targetPath, "service", "settings.gradle.kts", templates.rest.service.settingsGradleKts.template());

transfer(targetPath, "domain", "build.gradle.kts", templates.rest.domain.buildGradleKts.template(config));
transfer(targetPath, "domain", "settings.gradle.kts", templates.rest.domain.settingsGradleKts.template());

transfer(targetPath, "server", "build.gradle.kts", templates.rest.server.buildGradleKts.template(config));
transfer(targetPath, "server", "settings.gradle.kts", templates.rest.server.settingsGradleKts.template());

transfer(targetPath, "client", "build.gradle.kts", templates.rest.client.buildGradleKts.template(config));
transfer(targetPath, "client", "settings.gradle.kts", templates.rest.client.settingsGradleKts.template());

transfer(targetPath, "service", "build.gradle.kts", templates.rest.service.buildGradleKts.template(config));
transfer(targetPath, "service", "settings.gradle.kts", templates.rest.service.settingsGradleKts.template());

transferGradle(targetPath);
}
Expand All @@ -133,7 +138,7 @@ public void generate(final String targetPath, Object model, JsonNode config) thr
transfer(targetPath, "", ".project", templates.rest.project.template(config));
}
// config
transfer(targetPath, ("server.src.main.resources.config").replace(".", separator), "service.yml", templates.rest.serviceYml.template(config));
transfer(targetPath, ("server.src.main.resources.config").replace(".", separator), "service.yml", templates.rest.serviceYml.template(config, operationList));

transfer(targetPath, ("server.src.main.resources.config").replace(".", separator), "server.yml",
templates.rest.serverYml.template(serviceId, enableHttp, httpPort, enableHttps, httpsPort, enableHttp2, enableRegistry, version));
Expand Down Expand Up @@ -222,16 +227,21 @@ public void generate(final String targetPath, Object model, JsonNode config) thr
// handler
for (Map<String, Object> op : operationList) {
String className = op.get("handlerName").toString();
String serviceName = op.get("serviceName").toString();
String serviceImpl = op.get("serviceImpl").toString();
@SuppressWarnings("unchecked")
List<Map> parameters = (List<Map>)op.get("parameters");
Map<String, String> responseExample = (Map<String, String>)op.get("responseExample");
String example = responseExample.get("example");
String statusCode = responseExample.get("statusCode");
statusCode = StringUtils.isBlank(statusCode) || statusCode.equals("default") ? "-1" : statusCode;
if (checkExist(targetPath, ("server.src.main.java." + handlerPackage).replace(".", separator), className + ".java") && !overwriteHandler) {
transfer(targetPath, ("server.src.main.java." + handlerPackage).replace(".", separator), className + ".java", templates.rest.handler.template(handlerPackage, className, serviceName, parameters));
transfer(targetPath, ("service.src.main.java." + handlerPackage).replace(".", separator), serviceName + ".java", templates.rest.handlerService.template(handlerPackage, serviceName));

if (checkExist(targetPath, ("domain.src.main.java." + handlerPackage).replace(".", separator), serviceImpl + ".java") && !overwriteHandler) {
continue;
}
transfer(targetPath, ("server.src.main.java." + handlerPackage).replace(".", separator), className + ".java", templates.rest.handler.template(handlerPackage, className, statusCode, example, parameters));
transfer(targetPath, ("domain.src.main.java." + handlerPackage).replace(".", separator), serviceImpl + ".java", templates.rest.handlerServiceImpl.template(handlerPackage, serviceImpl, serviceName, statusCode, example, parameters));
}

// handler test cases
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ plugins {

dependencies {
val light4jVersion: String by project
implementation("com.networknt", "service", light4jVersion)
implementation("com.networknt", "client", light4jVersion)
compile("com.networknt", "service", light4jVersion)
compile("com.networknt", "client", light4jVersion)
val jacksonVersion: String by project
implementation("com.fasterxml.jackson.core", "jackson-databind", jacksonVersion)
compile("com.fasterxml.jackson.core", "jackson-databind", jacksonVersion)
val slf4jVersion: String by project
implementation("org.slf4j", "slf4j-api", slf4jVersion)
compile("org.slf4j", "slf4j-api", slf4jVersion)
val undertowVersion: String by project
implementation("io.undertow", "undertow-core", undertowVersion)
compile("io.undertow", "undertow-core", undertowVersion)
val logbackVersion: String by project
implementation("ch.qos.logback", "logback-classic", logbackVersion)
compile("ch.qos.logback", "logback-classic", logbackVersion)
val junitVersion: String by project
testImplementation("junit", "junit", junitVersion)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
@import com.fasterxml.jackson.databind.JsonNode
@args (JsonNode config)
plugins {
java
}

dependencies {
compile(project(":model"))
compile(project(":service"))
val light4jVersion: String by project
compile("com.networknt", "utility", light4jVersion)
compile("com.networknt", "http-entity", light4jVersion)
val jacksonVersion: String by project
compile("com.fasterxml.jackson.core", "jackson-databind", jacksonVersion)
val slf4jVersion: String by project
compile("org.slf4j", "slf4j-api", slf4jVersion)
val undertowVersion: String by project
compile("io.undertow", "undertow-core", undertowVersion)
val logbackVersion: String by project
compile("ch.qos.logback", "logback-classic", logbackVersion)
val junitVersion: String by project
testImplementation("junit", "junit", junitVersion)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
@import com.fasterxml.jackson.databind.JsonNode
@args (JsonNode config)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>@config.get("groupId").textValue()</groupId>
<artifactId>@config.get("artifactId").textValue()</artifactId>
<version>@config.get("version").textValue()</version>
<relativePath>..</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>service</artifactId>
<packaging>jar</packaging>
<description>The generated sub for handler service implementations that will be invoked by the server. Add business logic here.</description>

<dependencies>
<dependency>
<groupId>@config.get("groupId").textValue()</groupId>
<artifactId>model</artifactId>
</dependency>
<dependency>
<groupId>@config.get("groupId").textValue()</groupId>
<artifactId>service</artifactId>
</dependency>
<dependency>
<groupId>com.networknt</groupId>
<artifactId>utility</artifactId>
</dependency>
<dependency>
<groupId>com.networknt</groupId>
<artifactId>http-entity</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Mark the folder as a Gradle project
30 changes: 20 additions & 10 deletions light-rest-4j/src/main/resources/templates/rest/handler.rocker.raw
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,18 @@
@import java.util.Map
@import java.util.List
@option discardLogicWhitespace=true
@args (String handlerPackage, String className, String statusCode, String example, List<Map> parameters)
@args (String handlerPackage, String className, String serviceName, List<Map> parameters)
package @handlerPackage;

import com.networknt.handler.LightHttpHandler;
import com.networknt.http.HttpMethod;
import com.networknt.http.RequestEntity;
import com.networknt.http.ResponseEntity;
import com.networknt.service.SingletonServiceFactory;
import io.undertow.server.HttpServerExchange;
import io.undertow.util.HttpString;
import java.util.HashMap;
import io.undertow.util.HeaderMap;

import java.util.Deque;
import java.util.Map;

/**
Expand All @@ -24,12 +29,17 @@ public class @className implements LightHttpHandler {
*/}
@@Override
public void handleRequest(HttpServerExchange exchange) throws Exception {
@if(example != null) {
exchange.getResponseHeaders().add(new HttpString("Content-Type"), "application/json");
exchange.setStatusCode(@statusCode);
@with (e = StringEscapeUtils.escapeJson(example)) {exchange.getResponseSender().send("@e");}
} else {
exchange.endExchange();
}
HeaderMap requestHeaders = exchange.getRequestHeaders();
Map<String, Deque<String>> queryParameters = exchange.getQueryParameters();
Map<String, Deque<String>> pathParameters = exchange.getPathParameters();
HttpMethod httpMethod = HttpMethod.resolve(exchange.getRequestMethod().toString());
RequestEntity requestEntity = new RequestEntity<>(null, requestHeaders, httpMethod, null, null, queryParameters, pathParameters);
@serviceName service = SingletonServiceFactory.getBean(@with(name=serviceName + ".class"){@name});
ResponseEntity<String> responseEntity = service.apply(requestEntity);
responseEntity.getHeaders().forEach(values -> {
exchange.getResponseHeaders().add(values.getHeaderName(), values.getFirst());
});
exchange.setStatusCode(responseEntity.getStatusCodeValue());
exchange.getResponseSender().send(responseEntity.getBody());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
@option discardLogicWhitespace=true
@args (String handlerPackage, String className)
package @handlerPackage;

import com.networknt.http.RequestEntity;
import com.networknt.http.ResponseEntity;

public interface @className {
ResponseEntity apply(RequestEntity requestEntity);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
@import org.apache.commons.text.StringEscapeUtils
@import java.util.Map
@import java.util.List
@option discardLogicWhitespace=true
@args (String handlerPackage, String serviceImpl, String serviceName, String statusCode, String example, List<Map> parameters)
package @handlerPackage;

import com.networknt.http.HttpStatus;
import com.networknt.http.MediaType;
import com.networknt.http.RequestEntity;
import com.networknt.http.ResponseEntity;
import io.undertow.util.HeaderMap;
import io.undertow.util.Headers;
import io.undertow.util.HttpString;

public class @serviceImpl implements @serviceName {
@@Override
public ResponseEntity apply(RequestEntity requestEntity) {
HeaderMap responseHeaders = new HeaderMap();
responseHeaders.add(Headers.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
@if(example != null) {
@with (e = StringEscapeUtils.escapeJson(example)) {String body = "@e";}
} else {
String body = "";
}
ResponseEntity<String> responseEntity = new ResponseEntity<>(body, responseHeaders, HttpStatus.OK);
return responseEntity;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ plugins {

dependencies {
val jacksonVersion: String by project
implementation("com.fasterxml.jackson.core", "jackson-databind", jacksonVersion)
compile("com.fasterxml.jackson.core", "jackson-databind", jacksonVersion)
val slf4jVersion: String by project
implementation("org.slf4j", "slf4j-api", slf4jVersion)
compile("org.slf4j", "slf4j-api", slf4jVersion)
val junitVersion: String by project
testImplementation("junit", "junit", junitVersion)
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ allprojects {
repositories {
mavenLocal() // mavenLocal must be added first.
jcenter()
@if(config.get("supportAvro").booleanValue()){
maven {
url = uri("http://packages.confluent.io/maven/")
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,6 @@ postgresVersion=42.1.1
@if(config.get("supportH2ForTest").booleanValue()){
h2Version=1.3.176
}
@if(config.get("supportAvro").booleanValue()){
avroVersion=5.3.3
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,10 @@

<modules>
<module>model</module>
<module>interface</module>
<module>service</module>
<module>server</module>
<module>client</module>
</modules>

<dependencyManagement>
Expand All @@ -66,11 +68,26 @@
<artifactId>model</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>@config.get("groupId").textValue()</groupId>
<artifactId>interface</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>@config.get("groupId").textValue()</groupId>
<artifactId>service</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>@config.get("groupId").textValue()</groupId>
<artifactId>server</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>@config.get("groupId").textValue()</groupId>
<artifactId>client</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>com.networknt</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
include("model", "service", "client", "server")
include("model", "service", "domain", "client", "server")
Loading