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

<services xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/services.xsd">

    <!-- checkout request -->
    <service name="sendGoogleCheckoutRequest" engine="java" auth="false"
            location="org.ofbiz.googlecheckout.GoogleRequestServices" invoke="sendShoppingCartRequest">
        <attribute name="shoppingCart" type="org.ofbiz.order.shoppingcart.ShoppingCart" mode="IN" optional="false"/>
        <attribute name="redirect" type="String" mode="OUT" optional="false"/>
    </service>
    
    <!-- create order request notification -->
    <service name="sendGoogleOrderNumberRequest" engine="java" invoke="sendOrderNumberRequest"
            location="org.ofbiz.googlecheckout.GoogleRequestServices">
        <attribute name="orderId" type="String" mode="IN" optional="false"/>        
    </service>
    
    <!-- payment notifications -->
    <service name="sendGoogleAuthorizeRequest" engine="java" invoke="sendAuthorizeRequest"
            location="org.ofbiz.googlecheckout.GoogleRequestServices">
        <attribute name="orderId" type="String" mode="IN" optional="false"/>
    </service>
    <service name="sendGoogleChargeRequest" engine="java" invoke="sendChargeRequest"
            location="org.ofbiz.googlecheckout.GoogleRequestServices">
        <attribute name="orderId" type="String" mode="IN" optional="false"/>
        <attribute name="captureAmount" type="Double" mode="IN" optional="false"/>
    </service>
    
    <!-- returns -->
    <service name="sendGoogleReturnRequest" engine="java" invoke="sendReturnRequest"
            location="org.ofbiz.googlecheckout.GoogleRequestServices">
        <attribute name="returnId" type="String" mode="IN" optional="false"/>
    </service>
    
    <!-- cancel notification -->
    <service name="sendGoogleOrderCancelRequest" engine="java" invoke="sendOrderCancelRequest"
            location="org.ofbiz.googlecheckout.GoogleRequestServices">
        <attribute name="orderId" type="String" mode="IN" optional="false"/>
    </service>
    <service name="sendGoogleOrderItemCancelRequest" engine="java" invoke="sendOrderItemCancelRequest"
            location="org.ofbiz.googlecheckout.GoogleRequestServices">
        <attribute name="orderId" type="String" mode="IN" optional="false"/> 
        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false"/>
    </service>
    
    <!-- shipment notification -->
    <service name="sendGoogleShipRequest" engine="java" invoke="sendShipRequest"
            location="org.ofbiz.googlecheckout.GoogleRequestServices">
        <attribute name="shipmentId" type="String" mode="IN" optional="false"/>
    </service>
    
    <!--  archive order requests -->
    <service name="sendGoogleArchiveOrderRequest" engine="java" invoke="sendArchiveOrderRequest"
            location="org.ofbiz.googlecheckout.GoogleRequestServices">
        <attribute name="orderId" type="String" mode="IN" optional="false"/>   
    </service>
    <service name="sendGoogleUnarchiveOrderRequest" engine="java" invoke="sendUnarchiveOrderRequest"
            location="org.ofbiz.googlecheckout.GoogleRequestServices">
        <attribute name="orderId" type="String" mode="IN" optional="false"/>
    </service>
    
    <!-- catch editing orders; return error -->
    <service name="catchEditGoogleOrder" engine="java" invoke="catchEditGoogleOrder"
            location="org.ofbiz.googlecheckout.GoogleRequestServices">
        <attribute name="orderId" type="String" mode="IN" optional="false"/>   
    </service>
 </services>
