<?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">
    <description>Product Component Maintenance Services</description>
    <vendor>OFBiz</vendor>
    <version>1.0</version>

    <!-- Product View Services -->
    <service name="getProduct" engine="java"
            location="org.ofbiz.product.product.ProductServices" invoke="prodFindProduct">
        <description>Gets a product value object.</description>
        <attribute name="productId" type="String" mode="IN"/>
        <attribute name="product" type="org.ofbiz.entity.GenericValue" mode="OUT"/>
    </service>
    <service name="getProductVariant" engine="java"
            location="org.ofbiz.product.product.ProductServices" invoke="prodFindSelectedVariant">
        <description>Gets a list of variant product value objects.</description>
        <attribute name="productId" type="String" mode="IN"/>
        <attribute name="selectedFeatures" type="java.util.Map" mode="IN"/>
        <attribute name="products" type="java.util.List" mode="OUT"/>
    </service>
    <service name="getProductFeatureSet" engine="java"
            location="org.ofbiz.product.product.ProductServices" invoke="prodFindFeatureTypes">
        <description>Gets a Set of product features (distinct)</description>
        <attribute name="productId" type="String" mode="IN"/>
        <attribute name="productFeatureApplTypeId" type="String" mode="IN" optional="true"/>
        <attribute name="featureSet" type="java.util.Set" mode="OUT"/>
    </service>
    <service name="getProductVariantTree" engine="java"
            location="org.ofbiz.product.product.ProductServices" invoke="prodMakeFeatureTree">
        <description>Gets a tree of product variants based on a virtual product and a list of features.</description>
        <attribute name="productId" type="String" mode="IN"/>
        <attribute name="featureOrder" type="java.util.Collection" mode="IN"/>
        <attribute name="productStoreId" type="String" mode="IN" optional="true"/>
        <attribute name="checkInventory" type="Boolean" mode="IN" default-value="true" optional="true"/>
        <attribute name="variantTree" type="java.util.Map" mode="OUT" optional="true"/>
        <attribute name="unavailableVariants" type="java.util.List" mode="OUT" optional="true"/>
        <attribute name="variantSample" type="java.util.Map" mode="OUT" optional="true"/>
        <attribute name="virtualVariant" type="java.util.List" mode="OUT" optional="true"/>
    </service>
    <service name="getAllProductVariants" engine="java"
            location="org.ofbiz.product.product.ProductServices" invoke="prodFindAllVariants">
        <description>Gets a Collection of products from a 'virtual' parent product.</description>
        <attribute name="productId" type="String" mode="IN"/>
        <attribute name="assocProducts" type="java.util.Collection" mode="OUT"/>
    </service>
    <service name="getAssociatedProducts" engine="java"
            location="org.ofbiz.product.product.ProductServices" invoke="prodFindAssociatedByType">
        <description>
            Finds associated products by the defined type.  Only one of either productId or productIdTo can be supplied,
            not both.  If bidirectional is set to true then the passed in productId will be treated as both a productId
            and a productIdTo (defaults to false).  If sortDescending is true then assocProducts will be returned sorted
            by sequenceNum descending (defaults to false).
        </description>
        <attribute name="productId" type="String" mode="IN" optional="true"/>
        <attribute name="productIdTo" type="String" mode="IN" optional="true"/>
        <attribute name="checkViewAllow" type="Boolean" mode="IN" optional="true"/>
        <attribute name="prodCatalogId" type="String" mode="IN" optional="true"/>
        <attribute name="type" type="String" mode="IN"/>
        <attribute name="bidirectional" type="Boolean" mode="IN" optional="true"/>
        <attribute name="sortDescending" type="Boolean" mode="IN" optional="true"/>
        <attribute name="assocProducts" type="java.util.Collection" mode="OUT" optional="true"/>
    </service>
    <service name="getProductFeatures" engine="java"
            location="org.ofbiz.product.product.ProductServices" invoke="prodGetFeatures">
        <description>Gets a Collection of product features (ProductFeatureAndAppl) for a product.</description>
        <attribute name="productId" type="String" mode="IN"/>
        <attribute name="type" type="String" mode="IN" optional="true"/>
        <attribute name="distinct" type="String" mode="IN" optional="true"/>
        <attribute name="productFeatures" type="java.util.Collection" mode="OUT"/>
    </service>
    <service name="getSuppliersForProduct" engine="java"
            location="org.ofbiz.product.supplier.SupplierProductServices" invoke="getSuppliersForProduct">
        <description>Finds a list of SupplierProduct entity values based on a productId.
              If other parameters are given, they are used to filter the list down.</description>
        <attribute name="productId" type="String" mode="IN" optional="false"/>
        <attribute name="partyId" type="String" mode="IN" optional="true"/>
        <attribute name="currencyUomId" type="String" mode="IN" optional="true"/>
        <attribute name="quantity" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="canDropShip" type="String" mode="IN" optional="true"/>
        <attribute name="supplierProducts" type="java.util.List" mode="OUT" optional="false"/>
    </service>
    <service name="convertFeaturesForSupplier" engine="java"
        location = "org.ofbiz.product.supplier.SupplierProductServices" invoke="convertFeaturesForSupplier">
        <description>Takes a list of product feature (either ProductFeature or ProductFeatureAndAppl) and converts
            each one for the supplier specified by partyId, changing the description and idCode</description>
        <attribute type="java.util.Collection" mode="IN" name="productFeatures" optional="false"/>
        <attribute type="String" mode="IN" name="partyId" optional="false"/>
        <attribute type="java.util.Collection" mode="OUT" name="convertedProductFeatures"/>
    </service>

    <!-- Category View Services -->
    <service name="getProductCategoryMembers" engine="java"
            location="org.ofbiz.product.category.CategoryServices" invoke="getCategoryMembers">
        <description>Gets ProductCategoryMembers for the category_id</description>
        <attribute name="categoryId" type="String" mode="IN"/>
        <attribute name="category" type="org.ofbiz.entity.GenericValue" mode="OUT"/>
        <attribute name="categoryMembers" type="java.util.Collection" mode="OUT"/>
    </service>
    
    <service name="getAssociatedProductsList" engine="simple" auth="false"
        location="component://product/script/org/ofbiz/product/category/CategoryServices.xml" invoke="getAssociatedProductsList">
        <description>Set the product options for selected product category, mostly used by getDependentDropdownValues</description>
        <attribute name="productCategoryId" mode="IN" type="String" optional="false"/>
        <attribute name="products" mode="OUT" type="java.util.List"/>
    </service>
    
    <service name="getPreviousNextProducts" engine="java"
        location="org.ofbiz.product.category.CategoryServices" invoke="getPreviousNextProducts">
        <description>Gets the previous and next product Ids.</description>
        <attribute name="categoryId" type="String" mode="IN"/>
        <attribute name="productId" type="String" mode="IN"/>
        <attribute name="activeOnly" type="Boolean" mode="IN" optional="true"/>
        <attribute name="introductionDateLimit" type="java.sql.Timestamp" mode="IN" optional="true"/>
        <attribute name="releaseDateLimit" type="java.sql.Timestamp" mode="IN" optional="true"/>
        <attribute name="orderByFields" type="List" mode="IN" optional="true"/>
        <attribute name="category" type="org.ofbiz.entity.GenericValue" mode="OUT" optional="true"/>
        <attribute name="previousProductId" type="String" mode="OUT" optional="true"/>
        <attribute name="nextProductId" type="String" mode="OUT" optional="true"/>
    </service>
    <service name="getProductCategoryAndLimitedMembers" engine="java"
            location="org.ofbiz.product.category.CategoryServices" invoke="getProductCategoryAndLimitedMembers">
        <description>Gets a productCategory and a Collection of associated productCategoryMembers and calculates limiting parameters</description>
        <attribute name="productCategoryId" type="String" mode="IN" optional="false"/>
        <attribute name="prodCatalogId" type="String" mode="IN" optional="true"/>
        <attribute name="defaultViewSize" type="Integer" mode="IN" optional="false"/>
        <attribute name="limitView" type="Boolean" mode="IN" optional="false"/>
        <attribute name="checkViewAllow" type="Boolean" mode="IN" optional="true"/>
        <attribute name="viewIndexString" type="String" mode="IN" optional="true"/>
        <attribute name="viewSizeString" type="String" mode="IN" optional="true"/>
        <attribute name="useCacheForMembers" type="Boolean" mode="IN" optional="true"/>
        <attribute name="activeOnly" type="Boolean" mode="IN" optional="true"/>
        <attribute name="introductionDateLimit" type="java.sql.Timestamp" mode="IN" optional="true"/>
        <attribute name="releaseDateLimit" type="java.sql.Timestamp" mode="IN" optional="true"/>
        <attribute name="orderByFields" type="List" mode="IN" optional="true"/>
        <attribute name="productStoreId" mode="IN" type="String" optional="true"/>
        <attribute name="productCategory" type="org.ofbiz.entity.GenericValue" mode="OUT" optional="true"/>
        <attribute name="productCategoryMembers" type="java.util.Collection" mode="OUT" optional="true"/> <!-- this list will only contain the limited members if limitView=true -->
        <attribute name="viewIndex" type="Integer" mode="OUT" optional="false"/> <!-- this is a 1 based index, ie the first results are in index 1 -->
        <attribute name="viewSize" type="Integer" mode="OUT" optional="false"/>
        <attribute name="lowIndex" type="Integer" mode="OUT" optional="false"/>
        <attribute name="highIndex" type="Integer" mode="OUT" optional="false"/>
        <attribute name="listSize" type="Integer" mode="OUT" optional="false"/>
    </service>
</services>
