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

<simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/simple-methods-v2.xsd">
    <simple-method method-name="startStopScheduledGbase" short-description="Start or Stop Auto Update to Googlebase Scheduled">
        <entity-and list="jobSandboxs" entity-name="JobSandbox">
            <field-map field-name="serviceName" value="autoUpdateToGoogleBase"/>
            <field-map field-name="parentJobId" value=""/>
        </entity-and>
        <first-from-list entry="jobSandbox" list="jobSandboxs"/>
        <set field="inMap.jobId" from-field="jobSandbox.jobId"/><!-- jobId of autoUpdateToGoogleBase service -->
        
        <entity-and entity-name="JobSandbox" list="pendingList">
            <field-map field-name="serviceName" value="autoUpdateToGoogleBase"/>
            <field-map field-name="statusId" value="SERVICE_PENDING"/>
            <order-by field-name="-lastUpdatedStamp"/>
        </entity-and>
        
        <if-empty field="pendingList">
        <call-service service-name="resetScheduledJob" in-map-name="inMap">
            <result-to-field result-name="responseMessage"/>
        </call-service>
            <else>
                <entity-and list="jobSandboxs" entity-name="JobSandbox">
                    <field-map field-name="serviceName" value="autoUpdateToGoogleBase"/>
                    <field-map field-name="statusId" value="SERVICE_PENDING"/>
                </entity-and>
                <iterate entry="jobSandbox" list="jobSandboxs">
                    <set field="inMap.jobId" from-field="jobSandbox.jobId"/>
                    <call-service service-name="cancelScheduledJob" in-map-name="inMap">
                        <result-to-field result-name="cancelDateTime"/>
                        <result-to-field result-name="responseMessage"/>
                    </call-service>
                </iterate>
            </else>
        </if-empty>
    </simple-method>
</simple-methods>
