<?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.
-->

<site-conf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/site-conf.xsd">
    <include location="component://common/webcommon/WEB-INF/common-controller.xml"/>
    <description>iCalendar UI Configuration File</description>
    
    <!-- Events to run on every request before security (chains exempt) -->
    <!--
    <preprocessor>
    </preprocessor>
    -->
    <!-- Events to run on every request after all other processing (chains exempt) -->
    <!--
    <postprocessor>
        <event name="test" type="java" path="org.ofbiz.webapp.event.TestEvent" invoke="test"/>
    </postprocessor>
    -->

    <!-- Request Mappings -->

    <request-map uri="EditICalendar">
        <security https="true" auth="true"/>
        <response name="success" type="view" value="EditICalendar"/>
    </request-map>
    <request-map uri="EditICalendarData">
        <security https="true" auth="true"/>
        <response name="success" type="view" value="EditICalendarData"/>
    </request-map>
    <request-map uri="ICalendarChildren">
        <security https="true" auth="true"/>
        <response name="success" type="view" value="ICalendarChildren"/>
    </request-map>
    <request-map uri="ICalendarParties">
        <security https="true" auth="true"/>
        <response name="success" type="view" value="ICalendarParties"/>
    </request-map>
    <request-map uri="ICalendarFixedAssets">
        <security https="true" auth="true"/>
        <response name="success" type="view" value="ICalendarFixedAssets"/>
    </request-map>
    <request-map uri="FindICalendars">
        <security https="true" auth="true"/>
        <response name="success" type="view" value="FindICalendars"/>
    </request-map>
    <request-map uri="ICalendarHelp">
        <security https="true" auth="true"/>
        <response name="success" type="view" value="ICalendarHelp"/>
    </request-map>
    <request-map uri="createICalendar">
        <security https="true" auth="true"/>
        <event type="service" invoke="createWorkEffort"/>
        <response name="success" type="view-home" value="EditICalendar"/>
        <response name="error" type="view" value="EditICalendar"/>
    </request-map>
    <request-map uri="updateICalendar">
        <security https="true" auth="true"/>
        <event type="service" invoke="updateWorkEffort"/>
        <response name="success" type="view-home" value="EditICalendar"/>
        <response name="error" type="view" value="EditICalendar"/>
    </request-map>
    <request-map uri="createICalendarData">
        <security https="true" auth="true"/>
        <event type="service" invoke="createWorkEffortICalData"/>
        <response name="success" type="view-home" value="EditICalendarData"/>
        <response name="error" type="view" value="EditICalendarData"/>
    </request-map>
    <request-map uri="updateICalendarData">
        <security https="true" auth="true"/>
        <event type="service" invoke="updateWorkEffortICalData"/>
        <response name="success" type="view-home" value="EditICalendarData"/>
        <response name="error" type="view" value="EditICalendarData"/>
    </request-map>
    <request-map uri="createICalendarPartyAssign">
        <security https="true" auth="true"/>
        <event type="service" invoke="assignPartyToWorkEffort"/>
        <response name="success" type="view-home" value="ICalendarParties"/>
        <response name="error" type="view-home" value="ICalendarParties"/>
    </request-map>
    <request-map uri="updateICalendarPartyAssign">
        <security https="true" auth="true"/>
        <event type="service" invoke="updatePartyToWorkEffortAssignment"/>
        <response name="success" type="view" value="ICalendarParties"/>
        <response name="error" type="view" value="ICalendarParties"/>
    </request-map>
    <request-map uri="createICalendarFixedAssetAssign">
        <security https="true" auth="true"/>
        <event type="service" invoke="createWorkEffortFixedAssetAssign"/>
        <response name="success" type="view" value="ICalendarFixedAssets"/>
        <response name="error" type="view" value="ICalendarFixedAssets"/>
    </request-map>
    <request-map uri="updateICalendarFixedAssetAssign">
        <security https="true" auth="true"/>
        <event type="service" invoke="updateWorkEffortFixedAssetAssign"/>
        <response name="success" type="view" value="ICalendarFixedAssets"/>
        <response name="error" type="view" value="ICalendarFixedAssets"/>
    </request-map>

    <!-- View Mappings -->

    <view-map name="EditICalendar" type="screen" page="component://workeffort/widget/WorkEffortScreens.xml#EditICalendar"/>
    <view-map name="EditICalendarData" type="screen" page="component://workeffort/widget/WorkEffortScreens.xml#EditICalendarData"/>
    <view-map name="ICalendarChildren" type="screen" page="component://workeffort/widget/WorkEffortScreens.xml#ICalendarChildren"/>
    <view-map name="ICalendarParties" type="screen" page="component://workeffort/widget/WorkEffortScreens.xml#ICalendarParties"/>
    <view-map name="ICalendarFixedAssets" type="screen" page="component://workeffort/widget/WorkEffortScreens.xml#ICalendarFixedAssets"/>
    <view-map name="FindICalendars" type="screen" page="component://workeffort/widget/WorkEffortScreens.xml#FindICalendars"/>
    <view-map name="ICalendarHelp" type="screen" page="component://workeffort/widget/WorkEffortScreens.xml#ICalendarHelp"/>
</site-conf>
