This is an automated email from the ASF dual-hosted git repository. nmalin pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/trunk by this push: new 4d0827503d Improved: Convert SubscriptionServices.xml service from mini-lang to groovy DSL (OFBIZ-12583) 4d0827503d is described below commit 4d0827503d2693a65dcea20beef85a129f4e1517 Author: Nicolas Malin <nicolas.ma...@nereide.fr> AuthorDate: Fri Apr 22 13:41:00 2022 +0200 Improved: Convert SubscriptionServices.xml service from mini-lang to groovy DSL (OFBIZ-12583) Thanks to Leila Mekika for solve this issue --- .../subscription/SubscriptionServices.groovy | 119 +++++++++++++++++++++ .../product/subscription/SubscriptionServices.xml | 117 -------------------- .../product/servicedef/services_subscription.xml | 20 ++-- 3 files changed, 129 insertions(+), 127 deletions(-) diff --git a/applications/product/groovyScripts/product/subscription/SubscriptionServices.groovy b/applications/product/groovyScripts/product/subscription/SubscriptionServices.groovy new file mode 100644 index 0000000000..06e320ef7e --- /dev/null +++ b/applications/product/groovyScripts/product/subscription/SubscriptionServices.groovy @@ -0,0 +1,119 @@ +/* +* 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. +*/ + + +import org.apache.ofbiz.entity.GenericValue + + +/** + * Create a Subscription + * @return + */ +def createSubscription() { + GenericValue newEntity = makeValue('Subscription') + String subscriptionId = parameters.subscriptionId ?: delegator.getNextSeqId('Subscription') + newEntity.subscriptionId = subscriptionId + + // lookup the product subscription resource (if exists) + if (parameters.subscriptionResourceId && parameters.productId) { + GenericValue resource = from('ProductSubscriptionResource') + .where(subscriptionResourceId: parameters.subscriptionResourceId, + productId: parameters.productId ) + .filterByDate() + .orderBy('-fromDate') + .queryFirst() + if (resource) { + newEntity.setNonPKFields(resource.getAllFields()) + } + } + + newEntity.setNonPKFields(parameters) + newEntity.create() + + return success(subscriptionId: subscriptionId) +} + +/** + * Check if a party has a subscription + * @return + */ +def isSubscribed() { + Map result = success() + + Map serviceContext = [entityName: 'Subscription', + inputFields: parameters, + filterByDate: parameters.filterByDate ?: 'Y'] + Map serviceResult = run service: 'performFindList', with: serviceContext + + Boolean found = serviceResult.list + if (serviceResult.list) { + result.subscriptionId = serviceResult.list[0].subscriptionId + } + result.isSubscribed = found + return result +} + +/** + * Get Subscription data + * @return + */ +def getSubscription() { + Map result = success() + + GenericValue subscription = from('Subscription') + .where(parameters) + .queryOne() + result.subscriptionId = parameters.subscriptionId + if (subscription) result.subscription = subscription + return result +} + +/** + * Create (when not exist) or update (when exist) a Subscription attribute + * @return + */ +def updateSubscriptionAttribute() { + GenericValue lookedUpValue = from('SubscriptionAttribute') + .where(parameters) + .queryOne() + if (lookedUpValue) { + lookedUpValue.setNonPKFields(parameters) + lookedUpValue.store() + } else { + GenericValue newEntity = makeValue('SubscriptionAttribute') + newEntity.setPKFields(parameters) + newEntity.setNonPKFields(parameters) + newEntity.create() + } + return success(subscriptionId: parameters.subscriptionId) +} + +/** + * Subscription permission checking logic + * @return + */ +def subscriptionPermissionCheck() { + parameters.primaryPermission = "CATALOG" + Map result = run service: "genericBasePermissionCheck", with: parameters + // Backwards compatibility - check for non-existent CATALOG_READ permission + result.hasPermission = result.hasPermission || + (parameters.mainAction == 'VIEW' && + security.hasPermission('CATALOG_READ', userLogin)) + return result +} diff --git a/applications/product/minilang/product/subscription/SubscriptionServices.xml b/applications/product/minilang/product/subscription/SubscriptionServices.xml deleted file mode 100644 index d640a78a46..0000000000 --- a/applications/product/minilang/product/subscription/SubscriptionServices.xml +++ /dev/null @@ -1,117 +0,0 @@ -<?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" - xmlns="http://ofbiz.apache.org/Simple-Method" xsi:schemaLocation="http://ofbiz.apache.org/Simple-Method http://ofbiz.apache.org/dtds/simple-methods.xsd"> - - <simple-method method-name="createSubscription" short-description="Create a Subscription"> - <make-value entity-name="Subscription" value-field="newEntity"/> - <if-empty field="parameters.subscriptionId"> - <sequenced-id sequence-name="Subscription" field="newEntity.subscriptionId"/> <!-- get the next sequenced ID --> - <else> - <set field="newEntity.subscriptionId" from-field="parameters.subscriptionId"/> - </else> - </if-empty> - <field-to-result field="newEntity.subscriptionId" result-name="subscriptionId"/> - - <!-- lookup the product subscription resource (if exists) --> - <if-not-empty field="parameters.subscriptionResourceId"> - <if-not-empty field="parameters.productId"> - <entity-and entity-name="ProductSubscriptionResource" list="resourceList" filter-by-date="true"> - <field-map field-name="subscriptionResourceId" from-field="parameters.subscriptionResourceId"/> - <field-map field-name="productId" from-field="parameters.productId"/> - <order-by field-name="-fromDate"/> - </entity-and> - <first-from-list list="resourceList" entry="resource"/> - <if-not-empty field="resource"> - <set-nonpk-fields map="resource" value-field="newEntity"/> - </if-not-empty> - </if-not-empty> - </if-not-empty> - - <set-nonpk-fields map="parameters" value-field="newEntity"/> - <create-value value-field="newEntity"/> - </simple-method> - - <simple-method method-name="isSubscribed" short-description="check if a party has a subscription"> - <set field="pfInput.inputFields" from-field="parameters"/> - <set field="pfInput.entityName" value="Subscription"/> - <set field="pfInput.filterByDate" from-field="parameters.filterByDate" default-value="Y"/> - - <call-service service-name="performFindList" in-map-name="pfInput"> - <result-to-field result-name="list" field="pfResultList"/> - </call-service> - - <if-empty field="pfResultList"> - <set field="found" value="false" type="Boolean"/> - <else> - <set field="found" value="true" type="Boolean"/> - <first-from-list list="pfResultList" entry="subscription"/> - <field-to-result field="subscription.subscriptionId" result-name="subscriptionId"/> - </else> - </if-empty> - - <field-to-result field="found" result-name="isSubscribed"/> - </simple-method> - - <simple-method method-name="getSubscription" short-description="Get Subscription data"> - <entity-one entity-name="Subscription" value-field="subscription"/> - <field-to-result field="parameters.subscriptionId" result-name="subscriptionId"/> - <if-not-empty field="subscription"> - <field-to-result field="subscription" result-name="subscription"/> - </if-not-empty> - </simple-method> - - <simple-method method-name="updateSubscriptionAttribute" short-description="Create (when not exist) or update (when exist) a Subscription attribute"> - <field-to-result field="parameters.subscriptionId" result-name="subscriptionId"/> - <entity-one entity-name="SubscriptionAttribute" value-field="lookedUpValue"/> - <if-empty field="lookedUpValue"> - <make-value entity-name="SubscriptionAttribute" value-field="newEntity"/> - <set-pk-fields map="parameters" value-field="newEntity"/> - <set-nonpk-fields map="parameters" value-field="newEntity"/> - <create-value value-field="newEntity"/> - <else> - <set-nonpk-fields map="parameters" value-field="lookedUpValue"/> - <store-value value-field="lookedUpValue"/> - </else> - </if-empty> - </simple-method> - - <!-- ============== Permission Checking Service ============= --> - <simple-method method-name="subscriptionPermissionCheck" short-description="Subscription permission checking logic"> - <set field="primaryPermission" value="CATALOG"/> - <call-simple-method method-name="genericBasePermissionCheck" xml-resource="component://common/minilang/permission/CommonPermissionServices.xml"/> - <!-- Backwards compatibility - check for non-existent CATALOG_READ permission --> - <if> - <condition> - <and> - <if-compare field="hasPermission" value="false" operator="equals" type="Boolean"/> - <if-compare field="mainAction" value="VIEW" operator="equals"/> - </and> - </condition> - <then> - <if-has-permission permission="CATALOG_READ"> - <set field="hasPermission" type="Boolean" value="true"/> - <field-to-result field="hasPermission"/> - </if-has-permission> - </then> - </if> - </simple-method> - -</simple-methods> diff --git a/applications/product/servicedef/services_subscription.xml b/applications/product/servicedef/services_subscription.xml index 7dbadaeaa6..deddc18615 100644 --- a/applications/product/servicedef/services_subscription.xml +++ b/applications/product/servicedef/services_subscription.xml @@ -23,8 +23,8 @@ under the License. <description>Product Component Services for subscriptions entity (subscription entity not ContentRoles)</description> <vendor>OFBiz</vendor> - <service name="createSubscription" default-entity-name="Subscription" auth="true" engine="simple" - location="component://product/minilang/product/subscription/SubscriptionServices.xml" invoke="createSubscription"> + <service name="createSubscription" default-entity-name="Subscription" auth="true" engine="groovy" + location="component://product/groovyScripts/product/subscription/SubscriptionServices.groovy" invoke="createSubscription"> <description>Create a Subscription Record</description> <permission-service service-name="subscriptionPermissionCheck" main-action="CREATE"/> <auto-attributes include="pk" mode="INOUT" optional="true"/> @@ -37,8 +37,8 @@ under the License. <auto-attributes include="nonpk" mode="IN" optional="true"/> </service> - <service name="isSubscribed" default-entity-name="Subscription" auth="true" engine="simple" - location="component://product/minilang/product/subscription/SubscriptionServices.xml" invoke="isSubscribed"> + <service name="isSubscribed" default-entity-name="Subscription" auth="true" engine="groovy" + location="component://product/groovyScripts/product/subscription/SubscriptionServices.groovy" invoke="isSubscribed"> <description>Check if a particular party has at this moment a subscription</description> <permission-service service-name="subscriptionPermissionCheck" main-action="VIEW"/> <auto-attributes include="all" mode="IN" optional="true"/> @@ -48,8 +48,8 @@ under the License. <override name="partyId" optional="false" mode="IN"/> </service> - <service name="getSubscriptionEnt" default-entity-name="Subscription" auth="true" engine="simple" - location="component://product/minilang/product/subscription/SubscriptionServices.xml" invoke="getSubscription"> + <service name="getSubscriptionEnt" default-entity-name="Subscription" auth="true" engine="groovy" + location="component://product/groovyScripts/product/subscription/SubscriptionServices.groovy" invoke="getSubscription"> <description>Retrieve a single Subscription Entity Record</description> <permission-service service-name="subscriptionPermissionCheck" main-action="VIEW"/> <auto-attributes include="pk" mode="INOUT" optional="false"/> @@ -130,8 +130,8 @@ under the License. <auto-attributes include="nonpk" mode="IN" optional="true"/> <auto-attributes include="pk" mode="INOUT" optional="false"/> </service> - <service name="updateSubscriptionAttribute" default-entity-name="SubscriptionAttribute" auth="true" engine="simple" - location="component://product/minilang/product/subscription/SubscriptionServices.xml" invoke="updateSubscriptionAttribute"> + <service name="updateSubscriptionAttribute" default-entity-name="SubscriptionAttribute" auth="true" engine="groovy" + location="component://product/groovyScripts/product/subscription/SubscriptionServices.groovy" invoke="updateSubscriptionAttribute"> <description>Create (when not exist) or update (when exist) a Subscription attribute</description> <permission-service service-name="subscriptionPermissionCheck" main-action="UPDATE"/> <attribute name="subscriptionId" type="String" mode="INOUT" optional="false"> @@ -162,8 +162,8 @@ under the License. <auto-attributes include="pk" mode="IN" optional="false"/> </service> - <service name="subscriptionPermissionCheck" engine="simple" - location="component://product/minilang/product/subscription/SubscriptionServices.xml" invoke="subscriptionPermissionCheck" auth="true"> + <service name="subscriptionPermissionCheck" engine="groovy" + location="component://product/groovyScripts/product/subscription/SubscriptionServices.groovy" invoke="subscriptionPermissionCheck" auth="true"> <description>Subscription Permission Checking Logic</description> <implements service="permissionInterface"/> </service>