<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one or more
  ~ contributor license agreements.  See the NOTICE file distributed with
  ~ this work for additional information regarding copyright ownership.
  ~ The ASF licenses this file to You under the Apache License, Version 2.0
  ~ (the "License"); you may not use this file except in compliance with
  ~ the License.  You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<blueprint xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
           xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
           http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd">

    <reference id="profileService" interface="org.apache.unomi.api.services.ProfileService"/>
    <reference id="eventService" interface="org.apache.unomi.api.services.EventService"/>
    <reference id="rulesService" interface="org.apache.unomi.api.services.RulesService"/>
    <reference id="privacyService" interface="org.apache.unomi.api.services.PrivacyService"/>
    <reference id="personalizationService" interface="org.apache.unomi.api.services.PersonalizationService"/>
    <reference id="configSharingService" interface="org.apache.unomi.api.services.ConfigSharingService" />

    <cm:property-placeholder persistent-id="org.apache.unomi.web"
                             update-strategy="reload" placeholder-prefix="${web.">
        <cm:default-properties>
            <cm:property name="contextserver.domain" value=""/>
            <cm:property name="contextserver.profileIdCookieName" value="context-profile-id"/>
            <cm:property name="contextserver.profileIdCookieMaxAgeInSeconds" value="31536000"/> <!-- 1 year by default -->
            <cm:property name="allowed.profile.download.formats" value="yaml"/>
        </cm:default-properties>
    </cm:property-placeholder>


    <bean id="contextServlet" class="org.apache.unomi.web.ContextServlet">
        <property name="profileService" ref="profileService"/>
        <property name="eventService" ref="eventService"/>
        <property name="rulesService" ref="rulesService"/>
        <property name="privacyService" ref="privacyService" />
        <property name="personalizationService" ref="personalizationService"/>
        <property name="configSharingService" ref="configSharingService"/>
        <property name="profileIdCookieDomain" value="${web.contextserver.domain}" />
        <property name="profileIdCookieName" value="${web.contextserver.profileIdCookieName}"/>
        <property name="profileIdCookieMaxAgeInSeconds" value="${web.contextserver.profileIdCookieMaxAgeInSeconds}"/>
    </bean>

    <service id="contextServletService" ref="contextServlet">
        <interfaces>
            <value>javax.servlet.Servlet</value>
            <value>javax.servlet.ServletConfig</value>
            <value>java.io.Serializable</value>
        </interfaces>
        <service-properties>
            <entry key="urlPatterns">
                <array value-type="java.lang.String">
                    <value>/context.json</value>
                    <value>/context.js</value>
                </array>
            </entry>
        </service-properties>
    </service>

    <bean id="eventsCollectorServlet" class="org.apache.unomi.web.EventsCollectorServlet">
        <property name="profileService" ref="profileService"/>
        <property name="eventService" ref="eventService"/>
        <property name="privacyService" ref="privacyService" />
        <property name="profileIdCookieName" value="${web.contextserver.profileIdCookieName}"/>
    </bean>

    <service id="eventsCollectorServletService" ref="eventsCollectorServlet">
        <interfaces>
            <value>javax.servlet.Servlet</value>
            <value>javax.servlet.ServletConfig</value>
            <value>java.io.Serializable</value>
        </interfaces>
        <service-properties>
            <entry key="urlPatterns" value="/eventcollector"/>
        </service-properties>
    </service>

    <bean id="clientServlet" class="org.apache.unomi.web.ClientServlet">
        <property name="profileService" ref="profileService"/>
        <property name="allowedProfileDownloadFormats" value="${web.allowed.profile.download.formats}" />
        <property name="profileIdCookieName" value="${web.contextserver.profileIdCookieName}"/>
    </bean>

    <service id="clientServletService" ref="clientServlet">
        <interfaces>
            <value>javax.servlet.Servlet</value>
            <value>javax.servlet.ServletConfig</value>
            <value>java.io.Serializable</value>
        </interfaces>
        <service-properties>
            <entry key="urlPatterns" value="/client/*"/>
        </service-properties>
    </service>

</blueprint>
