<?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="https://ofbiz.apache.org/dtds/services.xsd">
    <description>Entity Extension Services</description>
    <vendor>OFBiz</vendor>
    <version>1.0</version>

    <!-- simple generic service to watch and entity through an EECA -->
    <service name="watchEntity" engine="java" location="org.apache.ofbiz.entityext.EntityWatchServices" invoke="watchEntity">
        <attribute name="newValue" type="org.apache.ofbiz.entity.GenericValue" mode="IN"/>
        <attribute name="fieldName" type="String" mode="IN" optional="true"/>
    </service>

    <!-- Entity Engine Extension Services -->
    <service name="distributedClearAllEntityCaches" engine="jms" location="serviceMessenger" invoke="clearAllEntityCaches" auth="true">
        <description>Clear All Entity Engine Caches for all Servers listening to the topic</description>
    </service>
    <!-- Below uses Group/HTTP engine
    <service name="distributedClearAllEntityCaches" engine="group" location="distributedClearAllEntityCaches" invoke=""/>
    -->
    <service name="clearAllEntityCaches" engine="java" export="true"
            location="org.apache.ofbiz.entityext.cache.EntityCacheServices" invoke="clearAllEntityCaches" auth="true">
        <description>Clears all values from all Entity Engine caches. By default does not distribute.</description>
        <attribute name="distribute" type="Boolean" mode="IN" optional="true"/>
    </service>

    <service name="distributedClearCacheLineByValue" engine="jms" location="serviceMessenger" invoke="clearCacheLineByValue" auth="true">
        <description>Clear Cache Line by value for all Servers listening to the topic</description>
        <attribute name="value" type="org.apache.ofbiz.entity.GenericValue" mode="IN" optional="false"/>
    </service>
    <!-- Below uses Group/HTTP engine
    <service name="distributedClearCacheLineByValue" engine="group" location="distributedClearCacheLineByValue" invoke=""/>
    -->
    <service name="clearCacheLineByValue" engine="java" export="true"
            location="org.apache.ofbiz.entityext.cache.EntityCacheServices" invoke="clearCacheLine" auth="true">
        <description>Clear Cache Line with a value (GenericValue); this is the preferred method since the all, by primary key and by and caches will be cleared. By default does not distribute.</description>
        <attribute name="value" type="org.apache.ofbiz.entity.GenericValue" mode="IN" optional="false"/>
        <attribute name="distribute" type="Boolean" mode="IN" optional="true"/>
    </service>

    <service name="distributedClearCacheLineByDummyPK" engine="jms" location="serviceMessenger" invoke="clearCacheLineByDummyPK" auth="true">
        <description>Clear Cache Line by dummyPK for all Servers listening to the topic</description>
        <attribute name="dummyPK" type="GenericEntity" mode="IN" optional="false"/>
    </service>
    <!-- Below uses Group/HTTP engine
    <service name="distributedClearCacheLineByDummyPK" engine="group" location="distributedClearCacheLineByDummyPK" invoke=""/>
    -->
    <service name="clearCacheLineByDummyPK" engine="java" export="true"
            location="org.apache.ofbiz.entityext.cache.EntityCacheServices" invoke="clearCacheLine" auth="true">
        <description>Clear Cache Line with a dummyPK (GenericEntity); clears that all cache entry and depending on whether the dummyPK is a primaryKey or not this clears the by primary key cache or the specified entry in the by and cache. By default does not distribute.</description>
        <attribute name="dummyPK" type="GenericEntity" mode="IN" optional="false"/>
        <attribute name="distribute" type="Boolean" mode="IN" optional="true"/>
    </service>

    <service name="distributedClearCacheLineByPrimaryKey" engine="jms" location="serviceMessenger" invoke="clearCacheLineByPrimaryKey" auth="true">
        <description>Clear Cache Line by primaryKey for all Servers listening to the topic</description>
        <attribute name="primaryKey" type="GenericPK" mode="IN" optional="false"/>
        <attribute name="distribute" type="Boolean" mode="IN" optional="true"/>
    </service>
    <!-- Below uses Group/HTTP engine
    <service name="distributedClearCacheLineByPrimaryKey" engine="group" location="distributedClearCacheLineByPrimaryKey" invoke=""/>
    -->
    <service name="clearCacheLineByPrimaryKey" engine="java" export="true"
            location="org.apache.ofbiz.entityext.cache.EntityCacheServices" invoke="clearCacheLine" auth="true">
        <description>Clear Cache Line with a primaryKey (GenericPK); clears the all and by primary key caches. By default does not distribute.</description>
        <attribute name="primaryKey" type="GenericPK" mode="IN" optional="false"/>
        <attribute name="distribute" type="Boolean" mode="IN" optional="true"/>
    </service>

    <service name="distributedClearCacheLineByCondition" engine="jms" location="serviceMessenger" invoke="clearCacheLineByCondition" auth="true">
        <description>Clear Cache Line by condition for all Servers listening to the topic</description>
        <attribute name="entityName" type="String" mode="IN" optional="false"/>
        <attribute name="condition" type="org.apache.ofbiz.entity.condition.EntityCondition" mode="IN" optional="false"/>
        <attribute name="distribute" type="Boolean" mode="IN" optional="true"/>
    </service>
    <service name="clearCacheLineByCondition" engine="java" export="true"
            location="org.apache.ofbiz.entityext.cache.EntityCacheServices" invoke="clearCacheLine" auth="true">
        <description>Clear Cache Line with a condition; By default does not distribute.</description>
        <attribute name="entityName" type="String" mode="IN" optional="false"/>
        <attribute name="condition" type="org.apache.ofbiz.entity.condition.EntityCondition" mode="IN" optional="false"/>
        <attribute name="distribute" type="Boolean" mode="IN" optional="true"/>
    </service>

    <!-- HTTP Engine localhost cache clearing (example: duplicate entire block for each server) -->
    <service name="localhostClearAllEntityCaches" engine="http"
            location="eedcc-test" invoke="clearAllEntityCaches">
        <implements service="clearAllEntityCaches"/>
    </service>
    <service name="localhostClearCacheLineByValue" engine="http"
            location="eedcc-test" invoke="clearCacheLineByValue">
        <implements service="clearCacheLineByValue"/>
    </service>
    <service name="localhostClearCacheLineByDummyPK" engine="http"
            location="eedcc-test" invoke="clearCacheLineByDummyPK">
        <implements service="clearCacheLineByDummyPK"/>
    </service>
    <service name="localhostClearCacheLineByPrimaryKey" engine="http"
            location="eedcc-test" invoke="clearCacheLineByPrimaryKey">
        <implements service="clearCacheLineByPrimaryKey"/>
    </service>

    <!-- Index/Key Services -->
    <service name="rebuildEntityIndexesAndKeys" engine="java" auth="true" use-transaction="false"
            location="org.apache.ofbiz.entityext.data.EntityDataServices" invoke="rebuildAllIndexesAndKeys">
        <description>Rebuilds all indexes/keys</description>
        <required-permissions join-type="AND">
            <check-permission permission="ENTITY_MAINT"/>
        </required-permissions>
        <attribute name="groupName" type="String" mode="IN" optional="false"/>
        <attribute name="fixColSizes" type="Boolean" mode="IN" optional="true"/>
        <attribute name="messages" type="List" mode="OUT" optional="false"/>
    </service>

    <!-- Entity Delimited File Import Services -->
    <service name="importEntityFileDirectory" engine="java" auth="true" use-transaction="false"
            location="org.apache.ofbiz.entityext.data.EntityDataServices" invoke="importDelimitedFromDirectory">
        <description>Read a directory for .txt files with entity names; read each line as a record</description>
        <attribute name="rootDirectory" type="String" mode="IN" optional="false"/>
        <attribute name="delimiter" type="String" mode="IN" optional="true"/>
    </service>
    <service name="importDelimitedEntityFile" engine="java" auth="true" transaction-timeout="14400" require-new-transaction="true"
            location="org.apache.ofbiz.entityext.data.EntityDataServices" invoke="importDelimitedFile">
        <description>Import delimited file</description>
        <attribute name="file" type="java.io.File" mode="IN" optional="false"/>
        <attribute name="delimiter" type="String" mode="IN" optional="true"/>
        <attribute name="records" type="Integer" mode="OUT" optional="false"/>
    </service>

    <!-- data updates services -->
    <service name="unwrapByteWrappers" engine="java" auth="true" transaction-timeout="14400" require-new-transaction="true"
        location="org.apache.ofbiz.entityext.data.EntityDataServices" invoke="unwrapByteWrappers">
        <description>Unwrap ByteWrapper Fields for the given entity and field</description>
        <attribute name="entityName" type="String" mode="IN" optional="false"/>
        <attribute name="fieldName" type="String" mode="IN" optional="false"/>
    </service>

    <service name="reencryptPrivateKeys" engine="java" auth="true" transaction-timeout="14400"
        location="org.apache.ofbiz.entityext.data.EntityDataServices" invoke="reencryptPrivateKeys">
        <description>Re-encrypt the private keys, encrypted in EntityKeyStore with oldKey, using the newKey.</description>
        <attribute name="oldKey" type="String" mode="IN" optional="true"/>
        <attribute name="newKey" type="String" mode="IN" optional="true"/>
    </service>

    <service name="reencryptFields" engine="java" auth="true" transaction-timeout="14400"
            location="org.apache.ofbiz.entityext.data.EntityDataServices" invoke="reencryptFields">
        <description>Re-encrypt all the encrypted fields in the data model.</description>
        <attribute name="groupName" type="String" mode="IN" optional="true" default-value="org.apache.ofbiz"/>
    </service>

    <!-- EntitySync Services -->
    <service name="createEntitySync" default-entity-name="EntitySync" engine="entity-auto" invoke="create" auth="true">
        <description>Create EntitySync</description>
        <permission-service service-name="entitySyncPermissionCheck" main-action="CREATE"/>
        <auto-attributes include="pk" mode="OUT" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
    </service>
    <service name="updateEntitySync" default-entity-name="EntitySync" engine="entity-auto" invoke="update" auth="true">
        <description>Update EntitySync</description>
        <permission-service service-name="entitySyncPermissionCheck" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
    </service>
    <service name="createEntitySyncInclude" default-entity-name="EntitySyncInclude" engine="entity-auto" invoke="create" auth="true">
        <description>Create EntitySyncInclude</description>
        <permission-service service-name="entitySyncPermissionCheck" main-action="CREATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="applEnumId" optional="false"/>
    </service>
    <service name="updateEntitySyncInclude" default-entity-name="EntitySyncInclude" engine="entity-auto" invoke="update" auth="true">
        <description>Update EntitySyncInclude</description>
        <permission-service service-name="entitySyncPermissionCheck" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
    </service>
    <service name="deleteEntitySyncInclude" default-entity-name="EntitySyncInclude" engine="entity-auto" invoke="delete" auth="true">
        <description>Delete EntitySyncInclude</description>
        <permission-service service-name="entitySyncPermissionCheck" main-action="DELETE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
    </service>

    <service name="createEntitySyncHistory" default-entity-name="EntitySyncHistory" engine="entity-auto" invoke="create" auth="true" require-new-transaction="true">
        <description>Create EntitySyncHistory</description>
        <permission-service service-name="entitySyncPermissionCheck" main-action="CREATE"/>
        <auto-attributes include="pk" mode="INOUT" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
    </service>
    <service name="updateEntitySyncHistory" default-entity-name="EntitySyncHistory" engine="entity-auto" invoke="update" auth="true" require-new-transaction="true">
        <description>Update EntitySyncHistory</description>
        <permission-service service-name="entitySyncPermissionCheck" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
    </service>
    <service name="deleteEntitySyncHistory" default-entity-name="EntitySyncHistory" engine="entity-auto" invoke="delete" auth="true" require-new-transaction="true">
        <description>Delete EntitySyncHistory</description>
        <permission-service service-name="entitySyncPermissionCheck" main-action="DELETE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
    </service>
    <service name="updateOfflineEntitySync" engine="java"
            location="org.apache.ofbiz.entityext.synchronization.EntitySyncServices" invoke="updateOfflineEntitySync" auth="true">
        <description>Not implemented.</description>
    </service>

    <service name="cleanSyncRemoveInfo" engine="java"
            location="org.apache.ofbiz.entityext.synchronization.EntitySyncServices" invoke="cleanSyncRemoveInfo" auth="true" transaction-timeout="600">
        <description>Clean EntitySyncRemove Info - Generally should be run asynchronously after each sync run, or periodically run on a schedule</description>
    </service>
    <service name="resetEntitySyncStatus" engine="groovy"
            location="component://entityext/src/main/groovy/org/apache/ofbiz/entityext/EntitySyncServices.groovy" invoke="resetEntitySyncStatus" auth="true" transaction-timeout="600">
        <description>Generally run manually to reset the status of an EntitySync when it has "crashed". Update a EntitySync, set the Status to ESR_NOT_STARTED, but ONLY if running (ie in ESR_RUNNING)</description>
        <permission-service service-name="entitySyncPermissionCheck" main-action="UPDATE"/>
        <attribute name="entitySyncId" type="String" mode="IN" optional="false"/>
    </service>

    <service name="runOfflineEntitySync" engine="java"
            location="org.apache.ofbiz.entityext.synchronization.EntitySyncServices" invoke="runOfflineEntitySync" auth="true" use-transaction="false">
        <attribute name="entitySyncId" type="String" mode="IN" optional="false"/>
        <attribute name="fileName" type="String" mode="IN" optional="true"><!-- if not specified defaults to "offline_entitySync-" + entitySyncId + "-" + [current date/time in yyyyMMddHHmmss format] + ".xml" --></attribute>
    </service>
    <service name="loadOfflineEntitySyncData" engine="java"
            location="org.apache.ofbiz.entityext.synchronization.EntitySyncServices" invoke="loadOfflineSyncData" auth="true" use-transaction="false">
        <attribute name="xmlFileName" type="String" mode="IN" optional="false"/>
    </service>

    <!-- Entity Remote Synchronization services -->
    <service name="runEntitySync" engine="java" auth="true" use-transaction="false"
            location="org.apache.ofbiz.entityext.synchronization.EntitySyncServices" invoke="runEntitySync">
        <description>Run Entity Sync</description>
        <attribute name="entitySyncId" type="String" mode="IN" optional="false"/>
    </service>
    <service name="storeEntitySyncData" engine="java" location="org.apache.ofbiz.entityext.synchronization.EntitySyncServices" invoke="storeEntitySyncData"
            export="true" auth="true" require-new-transaction="true" transaction-timeout="900">
        <description>Run Entity Sync</description>
        <attribute name="entitySyncId" type="String" mode="IN" optional="false"/>
        <attribute name="valuesToCreate" type="List" mode="IN" optional="false"/>
        <attribute name="valuesToStore" type="List" mode="IN" optional="false"/>
        <attribute name="keysToRemove" type="List" mode="IN" optional="false"/>
        <attribute name="delegatorName" type="String" mode="IN" optional="true"/>
        <attribute name="toCreateInserted" type="Long" mode="OUT" optional="false"/>
        <attribute name="toCreateUpdated" type="Long" mode="OUT" optional="false"/>
        <attribute name="toCreateNotUpdated" type="Long" mode="OUT" optional="false"/>
        <attribute name="toStoreInserted" type="Long" mode="OUT" optional="false"/>
        <attribute name="toStoreUpdated" type="Long" mode="OUT" optional="false"/>
        <attribute name="toStoreNotUpdated" type="Long" mode="OUT" optional="false"/>
        <attribute name="toRemoveDeleted" type="Long" mode="OUT" optional="false"/>
        <attribute name="toRemoveAlreadyDeleted" type="Long" mode="OUT" optional="false"/>
    </service>

    <!-- Services for Entity Sync Data Pulling -->
    <service name="runPullEntitySync" engine="java" auth="true" use-transaction="false"
            location="org.apache.ofbiz.entityext.synchronization.EntitySyncServices" invoke="runPullEntitySync">
        <description>Run Entity Sync Pulling Data From a Remote Server</description>
        <attribute name="entitySyncId" type="String" mode="IN" optional="false"/>
        <attribute name="remotePullAndReportEntitySyncDataName" type="String" mode="IN" optional="false"/>
        <attribute name="localDelegatorName" type="String" mode="IN" optional="true"/>
        <attribute name="remoteDelegatorName" type="String" mode="IN" optional="true"/>
    </service>
    <service name="pullAndReportEntitySyncData" engine="java" auth="true" export="true" use-transaction="false"
            location="org.apache.ofbiz.entityext.synchronization.EntitySyncServices" invoke="pullAndReportEntitySyncData">
        <description>Pull And Report Entity Sync Data</description>
        <attribute name="entitySyncId" type="String" mode="IN" optional="false"/>
        <attribute name="delegatorName" type="String" mode="IN" optional="true"/>
        <!-- fields for returned values to store on the calling machine, note that after storing these this service MUST be called with the results to finalize it! -->
        <attribute name="valuesToCreate" type="List" mode="OUT" optional="true"/>
        <attribute name="valuesToStore" type="List" mode="OUT" optional="true"/>
        <attribute name="keysToRemove" type="List" mode="OUT" optional="true"/>
        <!-- fields for results of storage on the calling machine -->
        <attribute name="startDate" type="Timestamp" mode="INOUT" optional="true"/>
        <attribute name="toCreateInserted" type="Long" mode="IN" optional="true"/>
        <attribute name="toCreateUpdated" type="Long" mode="IN" optional="true"/>
        <attribute name="toCreateNotUpdated" type="Long" mode="IN" optional="true"/>
        <attribute name="toStoreInserted" type="Long" mode="IN" optional="true"/>
        <attribute name="toStoreUpdated" type="Long" mode="IN" optional="true"/>
        <attribute name="toStoreNotUpdated" type="Long" mode="IN" optional="true"/>
        <attribute name="toRemoveDeleted" type="Long" mode="IN" optional="true"/>
        <attribute name="toRemoveAlreadyDeleted" type="Long" mode="IN" optional="true"/>
    </service>

    <!-- Services to call store (Push) remotely -->
    <service name="remoteStoreEntitySyncDataHttp" engine="http" auth="true" use-transaction="false" transaction-timeout="7200"
            location="entity-sync-http" invoke="storeEntitySyncData">
        <description>Remotely Store Entity Sync Date</description>
        <implements service="storeEntitySyncData"/>
    </service>
    <service name="remoteStoreEntitySyncDataRmi" engine="rmi" auth="true" use-transaction="false" transaction-timeout="7200"
            location="entity-sync-rmi" invoke="storeEntitySyncData">
        <description>Remotely Store Entity Sync Data</description>
        <implements service="storeEntitySyncData"/>
    </service>

    <!-- Services to call Pull and Report remotely -->
    <service name="remotePullAndReportEntitySyncDataHttp" engine="http" auth="true" use-transaction="false"
            location="entity-sync-http" invoke="pullAndReportEntitySyncData">
        <description>Remotely Pull And Report Entity Sync Data</description>
        <implements service="pullAndReportEntitySyncData"/>
    </service>
    <service name="remotePullAndReportEntitySyncDataRmi" engine="rmi" auth="true" use-transaction="false"
            location="entity-sync-rmi" invoke="pullAndReportEntitySyncData">
        <description>Remotely Pull And Report Entity Sync Data</description>
        <implements service="pullAndReportEntitySyncData"/>
    </service>

    <!-- TestingSubtype services -->
    <service name="createTestingSubtype" default-entity-name="TestingSubtype" engine="entity-auto" invoke="create" auth="true">
        <description>Create a TestingSubtype record</description>
        <auto-attributes mode="INOUT" include="pk" optional="true"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
    </service>
    <service name="updateTestingSubtype" default-entity-name="TestingSubtype" engine="entity-auto" invoke="update" auth="true">
        <description>Update a TestingSubtype record</description>
        <auto-attributes mode="IN" include="pk"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
    </service>
    <service name="deleteTestingSubtype" default-entity-name="TestingSubtype" engine="entity-auto" invoke="delete" auth="true">
        <description>Delete a TestingSubtype record</description>
        <auto-attributes mode="IN" include="pk"/>
    </service>

    <!-- TestingType services -->
    <service name="createTestingType" default-entity-name="TestingType" engine="entity-auto" invoke="create" auth="true">
        <description>Create a TestingType record</description>
        <auto-attributes mode="INOUT" include="pk" optional="true"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
    </service>
    <service name="updateTestingType" default-entity-name="TestingType" engine="entity-auto" invoke="update" auth="true">
        <description>Update a TestingType record</description>
        <auto-attributes mode="IN" include="pk"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
    </service>
    <service name="deleteTestingType" default-entity-name="TestingType" engine="entity-auto" invoke="delete" auth="true">
        <description>Delete a TestingType record</description>
        <auto-attributes mode="IN" include="pk"/>
    </service>

    <!-- UserAgentType services -->
    <service name="createUserAgentType" default-entity-name="UserAgentType" engine="entity-auto" invoke="create" auth="true">
        <description>Create a UserAgentType record</description>
        <auto-attributes mode="INOUT" include="pk" optional="true"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
    </service>
    <service name="updateUserAgentType" default-entity-name="UserAgentType" engine="entity-auto" invoke="update" auth="true">
        <description>Update a UserAgentType record</description>
        <auto-attributes mode="IN" include="pk"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
    </service>
    <service name="deleteUserAgentType" default-entity-name="UserAgentType" engine="entity-auto" invoke="delete" auth="true">
        <description>Delete a UserAgentType record</description>
        <auto-attributes mode="IN" include="pk"/>
    </service>

    <!-- UserAgentMethodType services -->
    <service name="createUserAgentMethodType" default-entity-name="UserAgentMethodType" engine="entity-auto" invoke="create" auth="true">
        <description>Create a UserAgentMethodType record</description>
        <auto-attributes mode="INOUT" include="pk" optional="true"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
    </service>
    <service name="updateUserAgentMethodType" default-entity-name="UserAgentMethodType" engine="entity-auto" invoke="update" auth="true">
        <description>Update a UserAgentMethodType record</description>
        <auto-attributes mode="IN" include="pk"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
    </service>
    <service name="deleteUserAgentMethodType" default-entity-name="UserAgentMethodType" engine="entity-auto" invoke="delete" auth="true">
        <description>Delete a UserAgentMethodType record</description>
        <auto-attributes mode="IN" include="pk"/>
    </service>

    <!-- BrowserType services -->
    <service name="createBrowserType" default-entity-name="BrowserType" engine="entity-auto" invoke="create" auth="true">
        <description>Create a BrowserType</description>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <auto-attributes include="pk" mode="INOUT" optional="true"/>
    </service>
    <service name="updateBrowserType" default-entity-name="BrowserType" engine="entity-auto" invoke="update" auth="true">
        <description>Update a BrowserType</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
    </service>
    <service name="deleteBrowserType" default-entity-name="BrowserType" engine="entity-auto" invoke="delete" auth="true">
        <description>Delete a BrowserType</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
    </service>

    <!-- PlatformType services -->
    <service name="createPlatformType" default-entity-name="PlatformType" engine="entity-auto" invoke="create" auth="true">
        <description>Create a PlatformType</description>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <auto-attributes include="pk" mode="INOUT" optional="true"/>
    </service>
    <service name="updatePlatformType" default-entity-name="PlatformType" engine="entity-auto" invoke="update" auth="true">
        <description>Update a PlatformType</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
    </service>
    <service name="deletePlatformType" default-entity-name="PlatformType" engine="entity-auto" invoke="delete" auth="true">
        <description>Delete a PlatformType</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
    </service>

    <!-- ProtocolType services -->
    <service name="createProtocolType" default-entity-name="ProtocolType" engine="entity-auto" invoke="create" auth="true">
        <description>Create a ProtocolType</description>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <auto-attributes include="pk" mode="INOUT" optional="true"/>
    </service>
    <service name="updateProtocolType" default-entity-name="ProtocolType" engine="entity-auto" invoke="update" auth="true">
        <description>Update a ProtocolType</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
    </service>
    <service name="deleteProtocolType" default-entity-name="ProtocolType" engine="entity-auto" invoke="delete" auth="true">
        <description>Delete a ProtocolType</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
    </service>

    <!-- ServerHitType services -->
    <service name="createServerHitType" default-entity-name="ServerHitType" engine="entity-auto" invoke="create" auth="true">
        <description>Create a ServerHitType</description>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <auto-attributes include="pk" mode="INOUT" optional="true"/>
    </service>
    <service name="updateServerHitType" default-entity-name="ServerHitType" engine="entity-auto" invoke="update" auth="true">
        <description>Update a ServerHitType</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
    </service>
    <service name="deleteServerHitType" default-entity-name="ServerHitType" engine="entity-auto" invoke="delete" auth="true">
        <description>Delete a ServerHitType</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
    </service>
    <service name="entitySyncPermissionCheck" engine="groovy"
             location="component://entityext/src/main/groovy/org/apache/ofbiz/entityext/EntitySyncServices.groovy" invoke="entitySyncPermissionCheck">
        <description>Entity sync permission Checking Logic</description>
        <implements service="permissionInterface"/>
    </service>
    <service name="generateMySqlFileWithAlterTableForTimestamps" engine="java" auth="true" transaction-timeout="14400"
            location="org.apache.ofbiz.entityext.data.UpgradeServices" invoke="generateMySqlFileWithAlterTableForTimestamps">
        <description>mysql timestamp Field migration service,
            it will generate sql file with alter query statement to update the datatype of timestamp field to support Fractional Seconds in Time Values
            mySql 5.6.4 added support for Fractional Seconds in Time Values. </description>
        <attribute name="groupName" type="String" mode="IN" optional="true" default-value="org.apache.ofbiz"/>
    </service>
</services>
