You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by nm...@apache.org on 2020/03/06 10:36:44 UTC
[ofbiz-framework] branch trunk updated: Improved: Convert
ProductFeatureServices.xml mini lang to groovy (OFBIZ-11439)
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 9296360 Improved: Convert ProductFeatureServices.xml mini lang to groovy (OFBIZ-11439)
9296360 is described below
commit 92963609dac2539837d38dd7b93f684b968106cd
Author: Nicolas Malin <ni...@nereide.fr>
AuthorDate: Fri Mar 6 11:36:17 2020 +0100
Improved: Convert ProductFeatureServices.xml mini lang to groovy
(OFBIZ-11439)
Thanks to Sebastian Berg for providing the patch
---
.../product/feature/ProductFeatureServices.groovy | 88 +++++++++++++++++
.../product/feature/ProductFeatureServices.xml | 104 ---------------------
.../product/servicedef/services_feature.xml | 12 +--
3 files changed, 94 insertions(+), 110 deletions(-)
diff --git a/applications/product/groovyScripts/product/feature/ProductFeatureServices.groovy b/applications/product/groovyScripts/product/feature/ProductFeatureServices.groovy
new file mode 100644
index 0000000..dc3b43c
--- /dev/null
+++ b/applications/product/groovyScripts/product/feature/ProductFeatureServices.groovy
@@ -0,0 +1,88 @@
+/*
+ * 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 java.util.regex.Pattern
+import org.apache.ofbiz.base.util.UtilProperties
+import org.apache.ofbiz.entity.GenericValue
+
+
+/**
+ * Apply Feature to Product using Feature Type and ID Code
+ * @return
+ */
+def applyFeatureToProductFromTypeAndCode() {
+ // find the ProductFeatures by type and id code
+ List productFeatures = from("ProductFeature")
+ .where(productFeatureTypeId: parameters.productFeatureTypeId,
+ idCode: parameters.idCode)
+ .queryList()
+ for (GenericValue productFeature : productFeatures) {
+ Map applyFeatureContext = parameters
+ applyFeatureContext.productFeatureId = productFeature.productFeatureId
+ if (! applyFeatureContext.sequenceNum) {
+ applyFeatureContext.sequenceNum = productFeature.defaultSequenceNum
+ }
+ run service: "applyFeatureToProduct", with: applyFeatureContext
+ }
+ return success()
+}
+
+/**
+ * Create a Product Feature Type
+ * @return
+ */
+def createProductFeatureType() {
+ Map result = success()
+ if (!security.hasEntityPermission("CATALOG", "_CREATE", parameters.userLogin)) {
+ return error(UtilProperties.getMessage("ProductUiLabels",
+ "ProductCatalogCreatePermissionError", parameters.locale))
+ }
+ if (! parameters.productFeatureTypeId) {
+ parameters.productFeatureTypeId = delegator.getNextSeqId("ProductFeatureType")
+ } else if (!Pattern.matches('^[a-zA-Z_0-9]+$', parameters.productFeatureTypeId)) {
+ return error(UtilProperties.getMessage("ProductErrorUiLabels",
+ "ProductFeatureTypeIdMustContainsLettersAndDigits", parameters.locale))
+ }
+ GenericValue newEntity = makeValue("ProductFeatureType", parameters)
+ newEntity.create()
+ result.productFeatureTypeId = newEntity.productFeatureTypeId
+ return result
+}
+
+/**
+ * Create a ProductFeatureApplAttr
+ * @return
+ */
+def createProductFeatureApplAttr() {
+ if (!security.hasEntityPermission("CATALOG", "_CREATE", parameters.userLogin)) {
+ return error(UtilProperties.getMessage("ProductUiLabels",
+ "ProductCatalogCreatePermissionError", parameters.locale))
+ }
+ GenericValue newEntity = makeValue("ProductFeatureApplAttr", parameters)
+ if (! newEntity.fromDate) {
+ GenericValue productFeatureAppl = from("ProductFeatureAppl")
+ .where(productId: newEntity.productId, productFeatureId: newEntity.productFeatureId)
+ .filterByDate().orderBy("-fromDate").queryFirst()
+ if (productFeatureAppl) {
+ newEntity.fromDate = productFeatureAppl.fromDate
+ }
+ }
+ newEntity.create()
+ return success()
+}
\ No newline at end of file
diff --git a/applications/product/minilang/product/feature/ProductFeatureServices.xml b/applications/product/minilang/product/feature/ProductFeatureServices.xml
deleted file mode 100644
index 6810a6a..0000000
--- a/applications/product/minilang/product/feature/ProductFeatureServices.xml
+++ /dev/null
@@ -1,104 +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="applyFeatureToProductFromTypeAndCode" short-description="Apply Feature to Product using Feature Type and ID Code">
- <!-- find the ProductFeatures by type and id code -->
- <entity-and entity-name="ProductFeature" list="productFeatures">
- <field-map field-name="productFeatureTypeId" from-field="parameters.productFeatureTypeId"/>
- <field-map field-name="idCode" from-field="parameters.idCode"/>
- </entity-and>
-
- <iterate list="productFeatures" entry="productFeature">
- <set-service-fields service-name="applyFeatureToProduct" map="parameters" to-map="applyFeatureContext"/>
- <set field="applyFeatureContext.productFeatureId" from-field="productFeature.productFeatureId"/>
-
- <if-empty field="applyFeatureContext.sequenceNum">
- <set field="applyFeatureContext.sequenceNum" from-field="productFeature.defaultSequenceNum"/>
- </if-empty>
-
- <call-service service-name="applyFeatureToProduct" in-map-name="applyFeatureContext"/>
- </iterate>
- </simple-method>
- <!-- Methods for ProductFeatureType -->
- <simple-method method-name="createProductFeatureType" short-description="Create a Product Feature Type">
- <check-permission permission="CATALOG" action="_CREATE">
- <fail-property resource="ProductUiLabels" property="ProductCatalogCreatePermissionError"/>
- </check-permission>
- <check-errors/>
-
- <if>
- <condition>
- <if-empty field="parameters.productFeatureTypeId" />
- </condition>
- <then>
- <sequenced-id sequence-name="ProductFeatureType" field="parameters.productFeatureTypeId"/>
- </then>
- </if>
- <check-errors/>
-
- <if>
- <condition>
- <not>
- <if-regexp field="parameters.productFeatureTypeId" expr="^[a-zA-Z_0-9]+$"></if-regexp>
- </not>
- </condition>
- <then>
- <add-error>
- <fail-property resource="ProductErrorUiLabels" property="ProductFeatureTypeIdMustContainsLettersAndDigits"/>
- </add-error>
- </then>
- </if>
- <check-errors/>
-
- <make-value entity-name="ProductFeatureType" value-field="newEntity"/>
- <set-nonpk-fields map="parameters" value-field="newEntity"/>
- <set-pk-fields map="parameters" value-field="newEntity"/>
-
- <create-value value-field="newEntity"/>
- <field-to-result field="newEntity.productFeatureTypeId" result-name="productFeatureTypeId"/>
- </simple-method>
- <!-- create a new ProductFeatureApplAttr -->
- <simple-method method-name="createProductFeatureApplAttr" short-description="Create a ProductFeatureApplAttr">
- <check-permission permission="CATALOG" action="_CREATE">
- <fail-property resource="ProductUiLabels" property="ProductCatalogCreatePermissionError"/>
- </check-permission>
- <check-errors/>
- <make-value entity-name="ProductFeatureApplAttr" value-field="newEntity"/>
- <set-pk-fields map="parameters" value-field="newEntity"/>
- <set-nonpk-fields map="parameters" value-field="newEntity"/>
- <if-empty field="newEntity.fromDate">
- <entity-condition entity-name="ProductFeatureAppl" list="productFeatureAppls" filter-by-date="true">
- <condition-list combine="and">
- <condition-expr field-name="productId" from-field="newEntity.productId"/>
- <condition-expr field-name="productFeatureId" from-field="newEntity.productFeatureId"/>
- </condition-list>
- <order-by field-name="-fromDate"/>
- </entity-condition>
- <first-from-list list="productFeatureAppls" entry="productFeatureAppl"/>
- <set field="newEntity.fromDate" from-field="productFeatureAppl.fromDate"/>
- </if-empty>
- <create-value value-field="newEntity"/>
- <check-errors/>
- </simple-method>
-
-</simple-methods>
diff --git a/applications/product/servicedef/services_feature.xml b/applications/product/servicedef/services_feature.xml
index f7e2320..722729f 100644
--- a/applications/product/servicedef/services_feature.xml
+++ b/applications/product/servicedef/services_feature.xml
@@ -77,8 +77,8 @@ under the License.
<permission-service service-name="productGenericPermission" main-action="DELETE"/>
<auto-attributes include="pk" mode="IN" optional="false"/>
</service>
- <service name="applyFeatureToProductFromTypeAndCode" engine="simple"
- location="component://product/minilang/product/feature/ProductFeatureServices.xml" invoke="applyFeatureToProductFromTypeAndCode" auth="true">
+ <service name="applyFeatureToProductFromTypeAndCode" engine="groovy"
+ location="component://product/groovyScripts/product/feature/ProductFeatureServices.groovy" invoke="applyFeatureToProductFromTypeAndCode" auth="true">
<description>Apply a ProductFeature to a Product</description>
<permission-service service-name="checkProductRelatedPermission" main-action="CREATE"/>
<attribute name="productId" type="String" mode="IN" optional="false"/>
@@ -177,8 +177,8 @@ under the License.
<auto-attributes include="pk" mode="IN" optional="false"/>
</service>
<!-- ProductFeatureType Services -->
- <service name="createProductFeatureType" default-entity-name="ProductFeatureType" engine="simple"
- location="component://product/minilang/product/feature/ProductFeatureServices.xml" invoke="createProductFeatureType" auth="true">
+ <service name="createProductFeatureType" default-entity-name="ProductFeatureType" engine="groovy"
+ location="component://product/groovyScripts/product/feature/ProductFeatureServices.groovy" invoke="createProductFeatureType" auth="true">
<description>Create a ProductFeatureType</description>
<auto-attributes include="pk" mode="IN" optional="false"/>
<auto-attributes include="nonpk" mode="IN" optional="true"/>
@@ -196,8 +196,8 @@ under the License.
<auto-attributes include="pk" mode="IN" optional="false"/>
</service>
<!-- ProductFeatureApplAttr -->
- <service name="createProductFeatureApplAttr" default-entity-name="ProductFeatureApplAttr" engine="simple"
- location="component://product/minilang/product/feature/ProductFeatureServices.xml" invoke="createProductFeatureApplAttr" auth="true">
+ <service name="createProductFeatureApplAttr" default-entity-name="ProductFeatureApplAttr" engine="groovy"
+ location="component://product/groovyScripts/product/feature/ProductFeatureServices.groovy" invoke="createProductFeatureApplAttr" auth="true">
<description>Create a ProductFeatureApplAttr</description>
<permission-service service-name="productGenericPermission" main-action="CREATE"/>
<auto-attributes include="pk" mode="IN" optional="false"/>