package org.aksw.sparqlify.admin.web.main;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.http.MediaType;
import org.springframework.web.accept.ContentNegotiationManager;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "org.aksw.sparqlify.admin.web")
public class WebMvcConfig
extends WebMvcConfigurerAdapter
{
@Autowired
private ServletContext servletContext;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
// registry.addResourceHandler("/jsp/**").addResourceLocations("/jsp/");
// registry.addResourceHandler("*.js").addResourceLocations("/resources/snorql/");
// registry.addResourceHandler("/**/*.css").addResourceLocations("/resources/snorql/");
// registry.addResourceHandler("/**/snorql.css").addResourceLocations("/resources/snorql/");
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//registry.addViewController("").setViewName("index-sparqlify-web-manager");
// registry.addViewController("/").setViewName("index-sparqlify-web-manager");
registry.addViewController("/index.do").setViewName("index-sparqlify-web-manager");
}
// @Bean
// public ServletForwardingController endpointsFwdCtrl() {
// ServletForwardingController result = new ServletForwardingController();
// result.setServletName("sparqlify-endpoints");
//
// return result;
// }
// @Bean
// public SimpleUrlHandlerMapping urlMapping() {
// SimpleUrlHandlerMapping result = new SimpleUrlHandlerMapping();
//
//// ServletForwardingController fwd1 = new ServletForwardingController();
//// fwd1.setServletName("sparqlify-admin-api");
////
////
//// Map<String, Object> urlMap = new HashMap<String, Object>();
//// urlMap.put("/manager/*", fwd1);
//// urlMap.put("/endpoints/*", fwd2);
//// result.setUrlMap(urlMap);
//
// Properties mappings = new Properties();
// mappings.put("/endpoints/*", "endpointsFwdCtrl");
//
// result.setMappings(mappings);
//
// return result;
// }
//http://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc/
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
Map<String, MediaType> mediaTypes = new HashMap<String, MediaType>();
mediaTypes.put("htm", MediaType.TEXT_HTML);
mediaTypes.put("html", MediaType.TEXT_HTML);
mediaTypes.put("json", MediaType.APPLICATION_JSON);
configurer.favorPathExtension(true);
configurer.favorParameter(true);
configurer.parameterName("mediaType");
configurer.ignoreAcceptHeader(false);
configurer.useJaf(false);
configurer.defaultContentType(MediaType.TEXT_HTML);
configurer.mediaTypes(mediaTypes);
}
@Bean
public ViewResolver contentNegotiatingViewResolver(ContentNegotiationManager manager) {
// Define the view resolvers
List<ViewResolver> resolvers = new ArrayList<ViewResolver>();
resolvers.add(internalResourceViewResolverJsp());
//resolvers.add(urlBasedViewResolver());
//resolvers.add(internalResourceViewResolverHtml());
// Create the CNVR plugging in the resolvers and the content-negotiation manager
ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();
resolver.setViewResolvers(resolvers);
resolver.setContentNegotiationManager(manager);
return resolver;
}
public ViewResolver urlBasedViewResolver() {
UrlBasedViewResolver result = new InternalResourceViewResolverChainable();
// result.setPrefix("/WEB-INF/jsp/");
// result.setSuffix(".jsp");
// result.setOrder(0);
return result;
}
//@Bean(name="viewResolverJsp")
public InternalResourceViewResolver internalResourceViewResolverJsp() {
InternalResourceViewResolver result = new InternalResourceViewResolver();
result.setPrefix("/WEB-INF/jsp/");
result.setSuffix(".jsp");
result.setViewClass(JstlView.class);
// result.setOrder(1);
return result;
}
//@Bean(name="viewResolverHtml")
public InternalResourceViewResolver internalResourceViewResolverHtml() {
InternalResourceViewResolver result = new InternalResourceViewResolverChainable();
result.setPrefix("/resources/");
result.setSuffix(".html");
// result.setOrder(2);
return result;
}
}