restx.annotations.processor.RestxRouter.mustache Maven / Gradle / Ivy
package {{package}};
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.google.common.base.Optional;
import static com.google.common.base.Preconditions.checkNotNull;
import restx.common.Types;
import restx.*;
import restx.entity.*;
import restx.http.*;
import restx.factory.*;
import restx.security.*;
import static restx.security.Permissions.*;
import restx.description.*;
import restx.converters.MainStringConverter;
import static restx.common.MorePreconditions.checkPresent;
import javax.validation.Validator;
import static restx.validation.Validations.checkValid;
import java.io.IOException;
import java.io.PrintWriter;
@Component(priority = {{priority}})
{{condition}}
public class {{router}} extends RestxRouter {
public {{router}}(
final {{resource}} resource,
final EntityRequestBodyReaderRegistry readerRegistry,
final EntityResponseWriterRegistry writerRegistry,
final MainStringConverter converter,
final Validator validator,
final RestxSecurityManager securityManager) {
super(
"{{routerGroup}}", "{{router}}", new RestxRoute[] {
{{#routes}}
new StdEntityRoute<{{inEntity}}, {{outEntity}}>("{{routeId}}",
readerRegistry.<{{inEntity}}>build({{inEntityType}}, {{inContentType}}),
writerRegistry.<{{outEntity}}>build({{outEntityType}}, {{outContentType}}),
new StdRestxRequestMatcher("{{method}}", "{{path}}"),
HttpStatus.{{successStatusName}}, RestxLogLevel.{{logLevelName}}) {
@Override
protected Optional<{{outEntity}}> doRoute(RestxRequest request, RestxRequestMatch match, {{inEntity}} body) throws IOException {
{{securityCheck}}
{{call}}
}
@Override
protected void describeOperation(OperationDescription operation) {
super.describeOperation(operation);
{{parametersDescription}}
operation.responseClass = "{{responseClass}}";
operation.inEntitySchemaKey = "{{inEntitySchemaKey}}";
operation.outEntitySchemaKey = "{{outEntitySchemaKey}}";
operation.sourceLocation = "{{sourceLocation}}";
}
},
{{/routes}}
});
}
}