<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">
  <display-name>DHIS 2</display-name>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:/META-INF/dhis/beans.xml</param-value>
  </context-param>
  <context-param>
    <param-name>automaticAccessType</param-name>
    <param-value>databaseAdmin</param-value>
  </context-param>

  <!-- Filters -->

  <filter>
    <filter-name>RedirectFilter</filter-name>
    <filter-class>org.hisp.dhis.servlet.filter.HttpRedirectFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>redirectPath</param-name>
      <param-value>dhis-web-commons-about/redirect.action</param-value>
    </init-param>
  </filter>
  <filter>
    <filter-name>shallowEtagHeaderFilter</filter-name>
    <filter-class>org.hisp.dhis.servlet.filter.ExcludableShallowEtagHeaderFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>excludeUriRegex</param-name>
      <param-value>/api/(\d{2}/)?dataValueSets|/api/(\d{2}/)?dataValues|/api/(\d{2}/)?fileResources</param-value>
    </init-param>
  </filter>
  <filter>
    <filter-name>httpNoCacheFilter</filter-name>
    <filter-class>org.hisp.dhis.servlet.filter.HttpNoCacheFilter</filter-class>
    <init-param>
      <param-name>urlPattern</param-name>
      <param-value>index\.html|/$</param-value>
    </init-param>
  </filter>
  <filter>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    <async-supported>true</async-supported>
  </filter>
  <filter>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
    <async-supported>true</async-supported>
  </filter>
  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <async-supported>true</async-supported>
  </filter>
  <filter>
    <filter-name>Struts</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    <async-supported>true</async-supported>
  </filter>
  <filter>
    <filter-name>encoding-filter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter>
    <filter-name>appCacheFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <async-supported>true</async-supported>
  </filter>

  <filter-mapping>
    <filter-name>encoding-filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>RedirectFilter</filter-name>
    <url-pattern>/</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <url-pattern>/api/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>shallowEtagHeaderFilter</filter-name>
    <url-pattern>/api/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>httpNoCacheFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>shallowEtagHeaderFilter</filter-name>
    <url-pattern>/ohie/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <url-pattern>/ohie/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <url-pattern>/ohie/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <url-pattern>/uaa/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <url-pattern>/uaa/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <url-pattern>/mobile/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>Struts</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>appCacheFilter</filter-name>
    <url-pattern>*.appcache</url-pattern>
  </filter-mapping>

  <!-- Listeners -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <listener>
    <listener-class>org.hisp.dhis.system.startup.StartupListener</listener-class>
  </listener>

  <!-- Servlets -->
  <servlet>
    <servlet-name>webapi</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:/META-INF/dhis/servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
  </servlet>
  <servlet>
    <servlet-name>mobile</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:/META-INF/dhis/mobile.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
  </servlet>

  <servlet>
    <servlet-name>ohieServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:/META-INF/dhis/webapi-ohie.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
  </servlet>

  <servlet>
    <servlet-name>uaaServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:/META-INF/dhis/webapi-uaa.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
  </servlet>

  <servlet-mapping>
    <servlet-name>mobile</servlet-name>
    <url-pattern>/mobile</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>mobile</servlet-name>
    <url-pattern>/mobile/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>webapi</servlet-name>
    <url-pattern>/api</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>webapi</servlet-name>
    <url-pattern>/api/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ohieServlet</servlet-name>
    <url-pattern>/ohie</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ohieServlet</servlet-name>
    <url-pattern>/ohie/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>uaaServlet</servlet-name>
    <url-pattern>/uaa</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>uaaServlet</servlet-name>
    <url-pattern>/uaa/*</url-pattern>
  </servlet-mapping>
  
  <!-- MIME mappings -->
  
  <mime-mapping>
    <extension>webapp</extension>
    <mime-type>application/json</mime-type>
  </mime-mapping>
  <mime-mapping>
    <extension>properties</extension>
    <mime-type>text/plain</mime-type>
  </mime-mapping>
  
</web-app>
