package com.sequenceiq.periscope.rest;
import java.io.IOException;
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;
import org.springframework.stereotype.Component;
import com.sequenceiq.periscope.api.AutoscaleApi;
import com.sequenceiq.periscope.rest.controller.AlertController;
import com.sequenceiq.periscope.rest.controller.ClusterController;
import com.sequenceiq.periscope.rest.controller.ConfigurationController;
import com.sequenceiq.periscope.rest.controller.HistoryController;
import com.sequenceiq.periscope.rest.controller.PolicyController;
import com.sequenceiq.periscope.rest.mapper.AccessDeniedExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.BadRequestExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.ConversionFailedExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.DataIntegrityViolationExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.DefaultExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.HttpMediaTypeNotSupportedExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.HttpMessageNotReadableExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.HttpRequestMethodNotSupportedExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.NotFoundExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.ParseExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.RuntimeExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.SpringAccessDeniedExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.SpringBadRequestExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.TypeMismatchExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.UnsupportedOperationFailedExceptionMapper;
import com.sequenceiq.periscope.rest.mapper.WebApplicaitonExceptionMapper;
import com.sequenceiq.periscope.utils.FileReaderUtils;
import io.swagger.jaxrs.config.BeanConfig;
import io.swagger.jaxrs.config.SwaggerConfigLocator;
import io.swagger.jaxrs.config.SwaggerContextService;
@ApplicationPath(AutoscaleApi.API_ROOT_CONTEXT)
@Component
public class EndpointConfig extends ResourceConfig {
public EndpointConfig() throws IOException {
registerEndpoints();
registerExceptionMappers();
registerSwagger();
}
private void registerSwagger() throws IOException {
BeanConfig beanConfig = new BeanConfig();
beanConfig.setTitle("Auto-scaling API");
beanConfig.setDescription(FileReaderUtils.readFileFromClasspath("swagger/auto-scaling-introduction"));
beanConfig.setVersion("1.9.0");
beanConfig.setSchemes(new String[]{"http", "https"});
beanConfig.setBasePath(AutoscaleApi.API_ROOT_CONTEXT);
beanConfig.setLicenseUrl("https://github.com/sequenceiq/cloudbreak/blob/master/LICENSE");
beanConfig.setResourcePackage("com.sequenceiq.periscope.api");
beanConfig.setScan(true);
beanConfig.setContact("https://hortonworks.com/contact-sales/");
beanConfig.setPrettyPrint(true);
SwaggerConfigLocator.getInstance().putConfig(SwaggerContextService.CONFIG_ID_DEFAULT, beanConfig);
}
private void registerExceptionMappers() {
register(AccessDeniedExceptionMapper.class);
register(BadRequestExceptionMapper.class);
register(ConversionFailedExceptionMapper.class);
register(HttpMediaTypeNotSupportedExceptionMapper.class);
register(HttpMessageNotReadableExceptionMapper.class);
register(HttpRequestMethodNotSupportedExceptionMapper.class);
register(NotFoundExceptionMapper.class);
register(SpringAccessDeniedExceptionMapper.class);
register(SpringBadRequestExceptionMapper.class);
register(TypeMismatchExceptionMapper.class);
register(UnsupportedOperationFailedExceptionMapper.class);
register(DataIntegrityViolationExceptionMapper.class);
register(WebApplicaitonExceptionMapper.class);
register(ParseExceptionMapper.class);
register(RuntimeExceptionMapper.class);
register(DefaultExceptionMapper.class);
}
private void registerEndpoints() {
register(AlertController.class);
register(ClusterController.class);
register(ConfigurationController.class);
register(HistoryController.class);
register(PolicyController.class);
register(io.swagger.jaxrs.listing.ApiListingResource.class);
register(io.swagger.jaxrs.listing.SwaggerSerializers.class);
register(io.swagger.jaxrs.listing.AcceptHeaderApiListingResource.class);
}
}