<?xml version="1.0" encoding="UTF-8"?>
<!--
    - DispatcherServlet application context for PetClinic's web tier.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <import resource="mvc-view-config.xml"/>

    <!--
        - POJOs labeled with the @Controller and @Service annotations are auto-detected.
    -->
    <context:component-scan
            base-package="org.springframework.samples.petclinic.web, org.springframework.samples.petclinic.rest"/>


	<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean" 
			p:indentOutput="true" p:simpleDateFormat="yyyy-MM-dd'T'HH:mm:ss.SSSZ">
	</bean>
	
	<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
	    	p:targetObject-ref="objectMapper" p:targetMethod="registerModule">
	    <property name="arguments">
	        <list>
	            <bean class="com.fasterxml.jackson.datatype.joda.JodaModule" />
	        </list>
	    </property>
	</bean>

    <mvc:annotation-driven conversion-service="conversionService" >
    	<mvc:message-converters>
    		<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" >
    			<property name="objectMapper" ref="objectMapper" />
    		</bean>
    	</mvc:message-converters>
    </mvc:annotation-driven>

    <!--  all resources inside folder src/main/webapp/resources are mapped so they can be refered to inside JSP files
        (see header.jsp for more details) -->
    <mvc:resources mapping="/resources/**" location="/resources/"/>

    <!-- uses WebJars so Javascript and CSS libs can be declared as Maven dependencies (Bootstrap, jQuery...) -->
    <mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/>

    <mvc:view-controller path="/" view-name="welcome" />

    <!-- serve static resources (*.html, ...) from src/main/webapp/ 
    Required when both servlet-mapping is '/' and static resources need to be served -->
    <mvc:default-servlet-handler />

    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="formatters">
            <set>
                <bean class="org.springframework.samples.petclinic.web.PetTypeFormatter"/>
            </set>
        </property>
    </bean>

    <!--
        - Message source for this context, loaded from localized "messages_xx" files.
        - Files are stored inside src/main/resources
    -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"
          p:basename="messages/messages"/>

    <!--
        - This bean resolves specific types of exceptions to corresponding logical 
        - view names for error views.
    -->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <!-- view name resolved using bean of type InternalResourceViewResolver (declared in mvc-view-config.xml) -->
        <property name="defaultErrorView" value="exception"/>
        <!-- results into 'WEB-INF/jsp/exception.jsp' -->
        <property name="warnLogCategory" value="warn"/>
        <!-- needed otherwise exceptions won't be logged anywhere -->
    </bean>

</beans>
