finalized java resource

master
Niclas Thobaben 2021-07-17 20:29:39 +02:00
parent 7ae3b6ea8c
commit cc5c8a6a75
5 changed files with 30 additions and 17 deletions

View File

@ -18,7 +18,7 @@ module.exports = (service) => {
const files = resources.map(resource => {
return {
name: `${resource.name}Resource.java`,
name: `${resource.name}.java`,
dir: resource.dir,
contents: Mustache.render(templateResource, { service, ...resource })
}

View File

@ -22,6 +22,7 @@ function mapParameter(parameter, namespace, operation) {
parameter.label = utils.camelcase(parameter.name)
parameter.type = javaType.mapJavaType(parameter.type, namespace)
parameter.op = operation
parameter.isPath = parameter.location === 'Path'
return parameter
}
@ -41,6 +42,14 @@ function mapOperation(operation, namespace) {
operation.name = formatOperationName(operation)
operation.camelcase = utils.camelcase(operation.name)
operation.pathElements = operation.path.split(/\//g).filter(e => e.length).map(element => {
let isVariable = element.startsWith(':')
let pathElement = {
name: isVariable ? `${element.replace(/:/g, '')}.toString()` : `"${element}"`,
}
return pathElement
})
operation.responseTypes = operation.responses.filter(resp => resp.type !== 'unit').map(resp => {
let type = javaType.mapJavaType(resp.type, namespace)
return {
@ -84,11 +93,12 @@ module.exports = {
mapResources: (resources, namespace) => {
return resources.map(resource => {
resource.type = javaType.mapJavaType(resource.type, namespace)
resource.name = `${utils.pascalcase(resource.plural)}Client`
resource.name = `${utils.pascalcase(resource.plural)}Resource`
resource.operations = resource.operations.map(op => mapOperation(op, namespace))
resource.package = `${namespace}.client`
resource.dir = resource.package.replace(/\./g, '/')
let imports = []
resource.operations.forEach(op => op.parameters.forEach(p => {
imports = [

View File

@ -11,6 +11,7 @@
package {{namespace}};
import lombok.*;
import org.glassfish.jersey.client.HttpUrlConnectorProvider;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
@ -24,6 +25,7 @@ public class {{configName}} {
@NonNull
private final String baseUrl;
@Builder.Default
private final Client client = ClientBuilder.newClient();
private final Client client = ClientBuilder.newClient()
.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);
}

View File

@ -60,12 +60,15 @@ public class {{name}} {
}
public {{name}}Response request({{#parameters}}@NonNull {{{type.name}}} {{label}}{{^last}}, {{/last}}{{/parameters}}) {
final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
.path("{{{path}}}")
// {{{path}}}
final URI uri = UriBuilder.fromUri(this.config.getBaseUrl()){{#pathElements}}
.path({{{name}}}){{/pathElements}}{{#query}}
.queryParam("{{name}}", this.{{label}}_query){{/query}}
.build();
WebTarget target = config.getClient().target(uri);
Response response = target.request(MediaType.APPLICATION_JSON)
Response response = target.request(MediaType.APPLICATION_JSON){{#headers}}
.header("{{name}}", this.{{label}}_header){{/headers}}
.method("{{method}}"{{#body}}, Entity.json({{name}}){{/body}});
int status = response.getStatus();
switch(status) {

View File

@ -10,11 +10,11 @@
**/
package {{package}};
import lombok.Builder;
import lombok.With;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NotNull;
import lombok.*;
import lombok.experimental.Accessors;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
{{#imports}}
import {{{.}}};
@ -25,17 +25,15 @@ import {{{.}}};
* See <a href="https://app.apibuilder.io/{{service.organization.key}}/{{service.name}}/{{service.version}}#model-{{model.name}}">https://app.apibuilder.io/{{service.organization.key}}/{{service.name}}/{{service.version}}#model-{{model.name}}</a>
*
**/
@With
@Getter
@Setter
@EqualsAndHashCode
@Builder(toBuilder = true)
@Accessors(fluent = true)
@Data
@NoArgsConstructor
public class {{name}} {
{{#fields}}
{{#description}}/** {{.}} **/{{/description}}
{{#required}}@NotNull{{/required}}
@JsonProperty("{{name}}")
{{#required}}@NonNull{{/required}}
private {{{type.name}}} {{name}};
{{/fields}}