Java tutorial
/* * ProActive Parallel Suite(TM): * The Open Source library for parallel and distributed * Workflows & Scheduling, Orchestration, Cloud Automation * and Big Data Analysis on Enterprise Grids & Clouds. * * Copyright (c) 2007 - 2017 ActiveEon * Contact: contact@activeeon.com * * This library is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation: version 3 of * the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * If needed, contact us to obtain a release under GPL Version 2 or 3 * or a different license than the AGPL. */ package org.ow2.proactive.procci; import java.util.ArrayList; import java.util.List; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.PropertySource; import org.springframework.http.MediaType; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; /** * @author ActiveEon Team */ @SpringBootApplication @EnableAutoConfiguration(exclude = { MultipartAutoConfiguration.class }) @EnableSwagger2 @PropertySource("classpath:application.properties") public class Application extends WebMvcConfigurerAdapter { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.favorPathExtension(false).favorParameter(true).parameterName("format").ignoreAcceptHeader(true) .useJaf(false).defaultContentType(MediaType.APPLICATION_JSON) .mediaType("json", MediaType.APPLICATION_JSON); } @Bean public MultipartResolver multipartResolver() { return new CommonsMultipartResolver(); } /* * The following code is for Swagger documentation */ @Bean public Docket procciApi() { return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("proactive").select() .apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot"))) .paths(allowedPaths()).build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder().title("Multi-language connector").description( "The purpose of Multi-language connector is to offer a standard access to the cloud automation functionnalities\n") .licenseUrl("https://github.com/ow2-proactive/procci/blob/master/LICENSE").version("1.0").build(); } private Predicate<String> allowedPaths() { List<String> pathList = new ArrayList<String>(); pathList.add("/occi/compute.*"); pathList.add("/occi/swarm.*"); pathList.add("/occi/.*"); String pathRegex = "(" + pathList.get(0) + ")"; for (int i = 1; i < pathList.size(); i++) { pathRegex += "|(" + pathList.get(i) + ")"; } return PathSelectors.regex(pathRegex); } }