You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2020/05/17 08:54:24 UTC
[ofbiz-framework] branch trunk updated: Improved: Convert
createArticleContent service from mini-lang to groovy (#140)
This is an automated email from the ASF dual-hosted git repository.
jleroux 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 6495dc7 Improved: Convert createArticleContent service from mini-lang to groovy (#140)
6495dc7 is described below
commit 6495dc7a917612a879fac8e5bb977eae71018c3a
Author: Priya Sharma <pr...@gmail.com>
AuthorDate: Sun May 17 14:24:16 2020 +0530
Improved: Convert createArticleContent service from mini-lang to groovy (#140)
Deleted the old mini-lang service file
Updated the service definitions with the new groovy methods
Added the groovy implementation (with minor enhancement)
(OFBIZ-11383)
Co-authored-by: Priya Sharma <pr...@example.com>
---
.../groovyScripts/content/ContentServices.groovy | 127 +++++++++++++++
.../content/minilang/content/ContentServices.xml | 178 ---------------------
applications/content/servicedef/services.xml | 4 +-
3 files changed, 129 insertions(+), 180 deletions(-)
diff --git a/applications/content/groovyScripts/content/ContentServices.groovy b/applications/content/groovyScripts/content/ContentServices.groovy
index bf01b26..d860b19 100644
--- a/applications/content/groovyScripts/content/ContentServices.groovy
+++ b/applications/content/groovyScripts/content/ContentServices.groovy
@@ -174,3 +174,130 @@ def updateEmailContent() {
run service: "updateElectronicText", with: [dataResourceId: parameters.htmlBodyDataResourceId, textData: parameters.htmlBody]
}
}
+
+def createArticleContent() {
+ // Post a new Content article Entry
+ String origContentAssocTypeId = parameters.contentAssocTypeId
+ String contentAssocTypeId = parameters.contentAssocTypeId
+ String ownerContentId = parameters.threadContentId
+ if ("PUBLISH_LINK".equals(origContentAssocTypeId)) {
+ ownerContentId = parameters.pubPtContentId
+ }
+ String contentIdFrom = parameters.contentIdFrom
+ String pubPtContentId = parameters.pubPtContentId
+ String textData = parameters.textData
+ String subDescript = null
+ String contentId = null
+ if (textData) {
+ int textDataLen = textData.length()
+ Debug.logInfo("textDataLen: " + textDataLen, module)
+ int descriptLen = 0
+ if (parameters.descriptLen) {
+ descriptLen = (int) parameters.descriptLen
+ Debug.logInfo("descriptLen: " + descriptLen, module)
+ }
+ int subStringLen = Math.min(descriptLen, textDataLen)
+ Debug.logInfo("subStringLen: " + subStringLen, module)
+ subDescript = textData.substring(0, subStringLen)
+ Debug.logInfo("subDescript: " + subDescript, module)
+ }
+ if ("PUBLISH_LINK".equals(contentAssocTypeId)) {
+ ownerContentId = pubPtContentId
+ }
+ //determine of we need to create complex template structure or simple content structure
+ if (parameters.uploadedFile && textData) {
+ Map createMain = [:]
+ createMain.dataResourceId = parameters.dataResourceId
+ createMain.contentAssocTypeId = parameters.contentAssocTypeId
+ createMain.contentName = parameters.contentName
+ createMain.description = subDescript
+ createMain.statusId = parameters.statusId
+ createMain.contentIdFrom = parameters.contentIdFrom
+ createMain.partyId = userLogin.partyId
+ createMain.ownerContentId = ownerContentId
+
+ createMain.dataTemplateTypeId = "SCREEN_COMBINED"
+ createMain.mapKey = "MAIN"
+ Map serviceResult = run service: "createContent", with: createMain
+ if (ServiceUtil.isSuccess(serviceResult)) {
+ contentId = serviceResult.contentId
+ }
+ // reset contentIdFrom to new contentId
+ contentAssocTypeId = "SUB_CONTENT"
+ contentIdFrom = contentId
+ }
+ if (parameters.uploadedFile) {
+ // create image data
+ Map createImage = [:]
+ createImage.dataResourceTypeId = "LOCAL_FILE"
+ createImage.dataTemplateTypeId = "NONE"
+ createImage.mapKey = "IMAGE"
+ createImage.ownerContentId = ownerContentId
+ createImage.contentName = parameters.contentName
+ createImage.description = subDescript
+ createImage.statusId = parameters.statusId
+ createImage.contentAssocTypeId = contentAssocTypeId
+ createImage.contentIdFrom = contentIdFrom
+ createImage.partyId = userLogin.partyId
+ createImage.uploadedFile = parameters.uploadedFile
+ createImage._uploadedFile_fileName = parameters._uploadedFile_fileName
+ createImage._uploadedFile_contentType = parameters._uploadedFile_contentType
+ Map serviceResult = run service: "createContentFromUploadedFile", with: createImage
+ String imageContentId = ServiceUtil.isSuccess(serviceResult)? serviceResult.contentId : null
+ if (!contentId) {
+ contentIdFrom = imageContentId
+ contentId = imageContentId
+ contentAssocTypeId = "SUB_CONTENT"
+ }
+ }
+ if (textData) {
+ Map createText = [:]
+ createText.dataResourceTypeId = "ELECTRONIC_TEXT"
+ createText.dataTemplateTypeId = "NONE"
+ createText.mapKey = "MAIN"
+ createText.ownerContentId = ownerContentId
+ createText.contentName = parameters.contentName
+ createText.description = subDescript
+ createText.statusId = parameters.statusId
+ createText.contentAssocTypeId = contentAssocTypeId
+ createText.textData = textData
+ createText.contentIdFrom = contentIdFrom
+ createText.partyId = userLogin.partyId
+ Debug.logInfo("calling createTextContent with map: " + createText, module)
+ Map serviceResult = run service: "createTextContent", with: createText
+ String textContentId = ServiceUtil.isSuccess(serviceResult)? serviceResult.contentId : null
+ if (!contentId) {
+ contentIdFrom = textContentId
+ contentId = textContentId
+ contentAssocTypeId = "SUB_CONTENT"
+ }
+ }
+ // we should have a primary (at least) contentId
+ if (contentId && parameters.summaryData) {
+ Map createSummary = [:]
+ createSummary.dataResourceTypeId = "ELECTRONIC_TEXT"
+ createSummary.dataTemplateTypeId = "NONE"
+ createSummary.mapKey = "SUMMARY"
+ createSummary.ownerContentId = ownerContentId
+ createSummary.contentName = parameters.contentName
+ createSummary.description = parameters.description
+ createSummary.statusId = parameters.statusId
+ createSummary.contentAssocTypeId = contentAssocTypeId
+ createSummary.textData = parameters.summaryData
+ createSummary.contentIdFrom = contentIdFrom
+ createSummary.partyId = userLogin.partyId
+ run service: "createTextContent", with: createSummary
+ }
+ // If a response, still link it to the publish point
+ if ("RESPONSE".equals(origContentAssocTypeId)) {
+ Map contentAssocMap = [:]
+ contentAssocMap.contentId = pubPtContentId
+ contentAssocMap.contentIdTo = contentId
+ contentAssocMap.contentAssocTypeId = "RESPONSE"
+ Debug.logInfo("contentAssocMap: " + contentAssocMap, module)
+ run service: "createContentAssoc", with: contentAssocMap
+ }
+ Map result = success()
+ result.contentId = contentId
+ return result
+}
diff --git a/applications/content/minilang/content/ContentServices.xml b/applications/content/minilang/content/ContentServices.xml
index 8bbbe00..696d7ee 100644
--- a/applications/content/minilang/content/ContentServices.xml
+++ b/applications/content/minilang/content/ContentServices.xml
@@ -489,184 +489,6 @@
<call-simple-method method-name="getContentAndDataResource"/>
</simple-method>
- <simple-method method-name="createArticleContent" short-description="Post a new Content article Entry">
- <set field="contentAssocTypeId" from-field="parameters.contentAssocTypeId"/>
- <set field="origContentAssocTypeId" from-field="parameters.contentAssocTypeId"/>
- <set field="ownerContentId" from-field="parameters.threadContentId"/>
- <if-compare field="origContentAssocTypeId" operator="equals" value="PUBLISH_LINK">
- <set field="ownerContentId" from-field="parameters.pubPtContentId"/>
- </if-compare>
- <set field="contentIdFrom" from-field="parameters.contentIdFrom"/>
- <set field="pubPtContentId" from-field="parameters.pubPtContentId"/>
- <call-object-method method-name="length" obj-field="parameters.textData" ret-field="textDataLen"/>
- <log level="info" message="textDataLen:${textDataLen}"/>
- <property-to-field resource="forum" property="descriptLen" field="descriptLen"/>
- <set field="descriptLen" from-field="descriptLen" type="Integer"/>
- <log level="info" message="descriptLen:${descriptLen}"/>
- <call-class-method method-name="min" class-name="java.lang.Math" ret-field="subStringLen">
- <field field="textDataLen" type="int"/>
- <field field="descriptLen" type="int"/>
- </call-class-method>
- <log level="info" message="subStringLen:${subStringLen}"/>
- <set field="zeroValue" value="0" type="Integer"/>
- <call-object-method method-name="substring" obj-field="parameters.textData" ret-field="subDescript">
- <field field="zeroValue" type="int"/>
- <field field="subStringLen" type="int"/>
- </call-object-method>
- <log level="info" message="subDescript:${subDescript}"/>
- <if-compare field="contentAssocTypeId" operator="equals" value="PUBLISH_LINK">
- <set field="ownerContentId" from-field="pubPtContentId"/>
- </if-compare>
-
- <!-- determine of we need to create complex template structure or simple content structure -->
- <if>
- <condition>
- <and>
- <not>
- <if-empty field="parameters.uploadedFile"/>
- </not>
- <not>
- <if-empty field="parameters.textData"/>
- </not>
- </and>
- </condition>
- <then>
- <!-- complex template structure (image & text) -->
- <set field="createMain.dataResourceId" from-field="parameters.dataResourceId"/>
- <set field="createMain.contentAssocTypeId" from-field="contentAssocTypeId"/>
- <set field="createMain.contentName" from-field="parameters.contentName"/>
- <set field="createMain.description" from-field="subDescript"/>
- <set field="createMain.statusId" from-field="parameters.statusId"/>
- <set field="createMain.contentIdFrom" from-field="contentIdFrom"/>
- <set field="createMain.partyId" from-field="userLogin.partyId"/>
- <set field="createMain.ownerContentId" from-field="ownerContentId"/>
-
- <set field="createMain.dataTemplateTypeId" value="SCREEN_COMBINED"/>
- <set field="createMain.mapKey" value="MAIN"/>
-
- <call-service service-name="createContent" in-map-name="createMain">
- <result-to-field result-name="contentId" field="contentId"/>
- </call-service>
-
- <!-- reset contentIdFrom to new contentId -->
- <set field="contentAssocTypeId" value="SUB_CONTENT"/>
- <set field="contentIdFrom" from-field="contentId"/>
- </then>
- </if>
-
- <if>
- <condition>
- <not>
- <if-empty field="parameters.uploadedFile"/>
- </not>
- </condition>
- <then>
- <!-- create image data -->
- <set field="createImage.dataResourceTypeId" value="LOCAL_FILE"/>
- <set field="createImage.dataTemplateTypeId" value="NONE"/>
- <set field="createImage.mapKey" value="IMAGE"/>
-
- <set field="createMain.ownerContentId" from-field="ownerContentId"/>
- <set field="createImage.contentName" from-field="parameters.contentName"/>
- <set field="createImage.description" from-field="subDescript"/>
- <set field="createImage.statusId" from-field="parameters.statusId"/>
- <set field="createImage.contentAssocTypeId" from-field="contentAssocTypeId"/>
- <set field="createImage.contentIdFrom" from-field="contentIdFrom"/>
- <set field="createImage.partyId" from-field="userLogin.partyId"/>
- <set field="createImage.uploadedFile" from-field="parameters.uploadedFile"/>
- <set field="createImage._uploadedFile_fileName" from-field="parameters._uploadedFile_fileName"/>
- <set field="createImage._uploadedFile_contentType" from-field="parameters._uploadedFile_contentType"/>
-
- <call-service service-name="createContentFromUploadedFile" in-map-name="createImage">
- <result-to-field result-name="contentId" field="imageContentId"/>
- </call-service>
-
- <if-empty field="contentId">
- <set field="contentIdFrom" from-field="imageContentId"/>
- <set field="contentId" from-field="imageContentId"/>
- <set field="contentAssocTypeId" value="SUB_CONTENT"/>
- </if-empty>
- </then>
- </if>
-
- <if>
- <condition>
- <not>
- <if-empty field="parameters.textData"/>
- </not>
- </condition>
- <then>
- <!-- create text data -->
- <set field="createText.dataResourceTypeId" value="ELECTRONIC_TEXT"/>
- <set field="createText.dataTemplateTypeId" value="NONE"/>
- <set field="createText.mapKey" value="MAIN"/>
-
- <set field="createText.ownerContentId" from-field="ownerContentId"/>
- <set field="createText.contentName" from-field="parameters.contentName"/>
- <set field="createText.description" from-field="subDescript"/>
- <set field="createText.statusId" from-field="parameters.statusId"/>
- <set field="createText.contentAssocTypeId" from-field="contentAssocTypeId"/>
- <set field="createText.textData" from-field="parameters.textData"/>
- <set field="createText.contentIdFrom" from-field="contentIdFrom"/>
- <set field="createText.partyId" from-field="userLogin.partyId"/>
-
- <log level="info" message="calling createTextContent with map: ${createText}"/>
- <call-service service-name="createTextContent" in-map-name="createText">
- <result-to-field result-name="contentId" field="textContentId"/>
- </call-service>
-
- <if-empty field="contentId">
- <set field="contentIdFrom" from-field="textContentId"/>
- <set field="contentId" from-field="textContentId"/>
- <set field="contentAssocTypeId" value="SUB_CONTENT"/>
- </if-empty>
- </then>
- </if>
-
- <!-- we should have a primary (at least) contentId -->
- <if>
- <condition>
- <and>
- <not>
- <if-empty field="contentId"/>
- </not>
- <not>
- <if-empty field="parameters.summaryData"/>
- </not>
- </and>
- </condition>
- <then>
- <!-- create the summary data -->
- <set field="createSummary.dataResourceTypeId" value="ELECTRONIC_TEXT"/>
- <set field="createSummary.dataTemplateTypeId" value="NONE"/>
- <set field="createSummary.mapKey" value="SUMMARY"/>
-
- <set field="createSummary.ownerContentId" from-field="ownerContentId"/>
- <set field="createSummary.contentName" from-field="parameters.contentName"/>
- <set field="createSummary.description" from-field="parameters.description"/>
- <set field="createSummary.statusId" from-field="parameters.statusId"/>
- <set field="createSummary.contentAssocTypeId" from-field="contentAssocTypeId"/>
- <set field="createSummary.textData" from-field="parameters.summaryData"/>
- <set field="createSummary.contentIdFrom" from-field="contentIdFrom"/>
- <set field="createSummary.partyId" from-field="userLogin.partyId"/>
-
- <call-service service-name="createTextContent" in-map-name="createSummary"/>
- </then>
- </if>
-
- <!-- If a response, still link it to the publish point -->
- <if-compare field="origContentAssocTypeId" operator="equals" value="RESPONSE">
- <set field="contentAssocMap.contentId" from-field="pubPtContentId"/>
- <set field="contentAssocMap.contentIdTo" from-field="contentId"/>
- <set field="contentAssocMap.contentAssocTypeId" value="RESPONSE"/>
- <log level="info" message="contentAssocMap:${contentAssocMap.contentId}"/>
- <call-service service-name="createContentAssoc" in-map-name="contentAssocMap"/>
- </if-compare>
-
-
- <field-to-result field="contentId"/>
- </simple-method>
-
<simple-method method-name="forceIndexContentKeywords" short-description="induce all the keywords of a content">
<entity-one entity-name="Content" value-field="content"/>
<call-class-method class-name="org.apache.ofbiz.content.content.ContentKeywordIndex" method-name="forceIndexKeywords">
diff --git a/applications/content/servicedef/services.xml b/applications/content/servicedef/services.xml
index f9440f0..43fede2 100644
--- a/applications/content/servicedef/services.xml
+++ b/applications/content/servicedef/services.xml
@@ -448,8 +448,8 @@
<attribute mode="IN" name="fromDate" optional="true" type="Timestamp"/>
</service>
- <service name="createArticleContent" engine="simple" transaction-timeout="300" auth="true"
- location="component://content/minilang/content/ContentServices.xml" invoke="createArticleContent">
+ <service name="createArticleContent" engine="groovy" transaction-timeout="300" auth="true"
+ location="component://content/groovyScripts/content/ContentServices.groovy" invoke="createArticleContent">
<description>Creates content records for a blog entry</description>
<required-permissions join-type="AND">
<check-permission permission="CONTENTMGR" action="_CREATE"/>