I'm divided. The 1st time I saw that in groovy scripts I checked and saw that 
Groovy allows that.
My 1st reaction was, like you, to fix it. For me it was the same than not using {} for a single line in Java. It's like a bomb : sooner or later it may explode...
But then I thought that there are other differences between Java and Goovy, why 
not allow this one ?
As I outlined above it's a bit dangerous, even Groovy authors point it out !
Of course I will follow consensus...

Jacques

From: "Vikas Mayur" <[EMAIL PROTECTED]>

On Aug 28, 2008, at 3:32 PM, [EMAIL PROTECTED] wrote:

Author: jleroux
Date: Thu Aug 28 03:02:47 2008
New Revision: 689772

URL: http://svn.apache.org/viewvc?rev=689772&view=rev
Log:
A patch from Mridul Pathak "Added support for uploading additional Product Views (images)" (https://issues.apache.org/jira/browse/OFBIZ-1930 ) - OFBIZ-1930

I fixed an, unrelated to patch, problem in EditProductContentContent.groovy. This is not the 1st time I cross this type of issue. I checked it does not appear on demo server and I guess it was not appearing with bsh before. I'm not sure of its origin but it seems related to my configuration. I use, from my machine default, "Central European Summer Time" and demo server uses "Central Daylight Time". But I can't see why it affects my machine and not the demo server : there is no origin here (maybe GMT, but obviously it's not the case)
The lines I added are (+ import)
} else {
   fromDate = ObjectType.simpleTypeConvert(fromDate, "Timestamp",  null, null, 
false)
}
(I intentionnaly let the line without semi-colon as it's not  mandatory in 
Groovy)


I think we should stick to some guidelines on usage of groovy features especially semi-colon not mandatory, in OFBiz. This is just to make sure that code looks alike.
My preference is to use semicolon. Thoughts ?

- Vikas




Added:
   ofbiz/trunk/framework/images/webapp/images/products/additional/
Modified:
   ofbiz/trunk/applications/product/data/ProductTypeData.xml
   ofbiz/trunk/applications/product/servicedef/services.xml
   ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ 
ProductServices.java
   ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/actions/ 
product/EditProductContentContent.groovy
   ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/ controller.xml
   ofbiz/trunk/applications/product/webapp/catalog/product/ ProductForms.xml

Modified: ofbiz/trunk/applications/product/data/ProductTypeData.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/data/ProductTypeData.xml?rev=689772&r1=689771&r2=689772&view=diff
= = = = = = = = 
======================================================================
--- ofbiz/trunk/applications/product/data/ProductTypeData.xml  (original)
+++ ofbiz/trunk/applications/product/data/ProductTypeData.xml Thu  Aug 28 
03:02:47 2008
@@ -231,6 +231,10 @@
<ProductContentType description="Image Alt Text - Medium" hasTable="N" parentTypeId="" productContentTypeId="MEDIUM_IMAGE_ALT"/> <ProductContentType description="Image Alt Text - Large" hasTable="N" parentTypeId="" productContentTypeId="LARGE_IMAGE_ALT"/> <ProductContentType description="Image Alt Text - Detail" hasTable="N" parentTypeId="" productContentTypeId="DETAIL_IMAGE_ALT"/> + <ProductContentType description="Image - Additional View 1" hasTable="N" parentTypeId="" productContentTypeId="ADDITIONAL_IMAGE_1"/> + <ProductContentType description="Image - Additional View 2" hasTable="N" parentTypeId="" productContentTypeId="ADDITIONAL_IMAGE_2"/> + <ProductContentType description="Image - Additional View 3" hasTable="N" parentTypeId="" productContentTypeId="ADDITIONAL_IMAGE_3"/> + <ProductContentType description="Image - Additional View 4" hasTable="N" parentTypeId="" productContentTypeId="ADDITIONAL_IMAGE_4"/>
    <ProductContentType description="Add To Cart Label" hasTable="N"  parentTypeId="" 
productContentTypeId="ADDTOCART_LABEL"/>
    <ProductContentType description="Add To Cart Image" hasTable="N"  parentTypeId="" 
productContentTypeId="ADDTOCART_IMAGE"/>
    <ProductContentType description="Short Sales Pitch" hasTable="N"  parentTypeId="" 
productContentTypeId="SHORT_SALES_PITCH"/>

Modified: ofbiz/trunk/applications/product/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services.xml?rev=689772&r1=689771&r2=689772&view=diff
= = = = = = = = 
======================================================================
--- ofbiz/trunk/applications/product/servicedef/services.xml  (original)
+++ ofbiz/trunk/applications/product/servicedef/services.xml Thu Aug  28 
03:02:47 2008
@@ -414,6 +414,16 @@
        <override name="localeString" optional="false"/>
        <override name="contentId" mode="INOUT"/>
    </service>
+
+    <service name="addAdditionalViewForProduct" default-entity- name="ProductContent" 
engine="java"
+        location="org.ofbiz.product.product.ProductServices"  
invoke="addAdditionalViewForProduct" auth="true">
+        <implements service="uploadFileInterface"/>
+        <auto-attributes include="pk" mode="IN" optional="true"/>
+        <auto-attributes include="nonpk" mode="IN" optional="true"/>
+        <attribute mode="IN" name="contentId" optional="true"  type="String"/>
+        <override name="productContentTypeId" optional="false"/>
+        <override name="productId" optional="false"/>
+    </service>

    <!-- SupplierProduct Services -->
    <service name="createSupplierProduct" default-entity- name="SupplierProduct" 
engine="simple"

Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/ 
product/ProductServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductServices.java?rev=689772&r1=689771&r2=689772&view=diff
= = = = = = = = 
======================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ 
ProductServices.java (original)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ 
ProductServices.java Thu Aug 28 03:02:47 2008
@@ -18,14 +18,23 @@
  
*******************************************************************************/
package org.ofbiz.product.product;

+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
import java.sql.Timestamp;
import java.util.*;

+import javolution.util.FastList;
+import javolution.util.FastMap;
+
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilDateTime;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.UtilProperties;
import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.base.util.string.FlexibleStringExpander;
import org.ofbiz.entity.GenericDelegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
@@ -934,5 +943,163 @@

        return ServiceUtil.returnSuccess();
    }
+
+    public static Map addAdditionalViewForProduct(DispatchContext  dctx, Map 
context) {
+        LocalDispatcher dispatcher = dctx.getDispatcher();
+        GenericDelegator delegator = dctx.getDelegator();
+        GenericValue userLogin = (GenericValue)  context.get("userLogin");
+        String productId = (String) context.get("productId");
+        String productContentTypeId = (String)  
context.get("productContentTypeId");
+        ByteBuffer imageData = (ByteBuffer)  context.get("uploadedFile");
+
+        if (UtilValidate.isNotEmpty((String)  
context.get("_uploadedFile_fileName"))) {
+            String imageFilenameFormat =  UtilProperties.getPropertyValue("catalog", 
"image.filename.format");
+            String imageServerPath =  UtilProperties.getPropertyValue("catalog", 
"image.server.path");
+            String imageUrlPrefix =  UtilProperties.getPropertyValue("catalog", 
"image.url.prefix");
+
+            FlexibleStringExpander filenameExpander =  
FlexibleStringExpander.getInstance(imageFilenameFormat);
+            String id = productId + "_View_" +  
productContentTypeId.charAt(productContentTypeId.length() - 1);
+ String fileLocation = filenameExpander.expandString(UtilMisc.toMap("location", "products", "type", "additional", "id", id));
+            String filePathPrefix = "";
+            String filenameToUse = fileLocation;
+            if (fileLocation.lastIndexOf("/") != -1) {
+ filePathPrefix = fileLocation.substring(0, fileLocation.lastIndexOf("/") + 1); // adding 1 to include the trailing slash
+                filenameToUse =  
fileLocation.substring(fileLocation.lastIndexOf("/") + 1);
+            }
+
+            List fileExtension = FastList.newInstance();
+            try {
+ fileExtension = delegator.findByAnd("FileExtension", UtilMisc.toMap("mimeTypeId", (String) context.get("_uploadedFile_contentType")));
+            } catch (GenericEntityException e) {
+                Debug.logError(e, module);
+                ServiceUtil.returnError(e.getMessage());
+            }
+
+            GenericValue extension =  EntityUtil.getFirst(fileExtension);
+            if (extension != null) {
+                filenameToUse += "." +  extension.getString("fileExtensionId");
+            }
+
+            File file = new File(imageServerPath + "/" +  filePathPrefix + 
filenameToUse);
+
+            try {
+                RandomAccessFile out = new RandomAccessFile(file,  "rw");
+                out.write(imageData.array());
+                out.close();
+            } catch (FileNotFoundException e) {
+                Debug.logError(e, module);
+                return ServiceUtil.returnError("Unable to open file  for writing: 
" + file.getAbsolutePath());
+            } catch (IOException e) {
+                Debug.logError(e, module);
+                return ServiceUtil.returnError("Unable to write  binary data to: 
" + file.getAbsolutePath());
+            }
+
+            String imageUrl = imageUrlPrefix + "/" + filePathPrefix  + 
filenameToUse;
+
+            if (UtilValidate.isNotEmpty(imageUrl) &&  imageUrl.length() > 0) {
+                String contentId = (String) context.get("contentId");
+
+                Map dataResourceCtx = FastMap.newInstance();
+                dataResourceCtx.put("objectInfo", imageUrl);
+                dataResourceCtx.put("dataResourceName", (String)  
context.get("_uploadedFile_fileName"));
+                dataResourceCtx.put("userLogin", userLogin);
+
+                Map productContentCtx = FastMap.newInstance();
+                productContentCtx.put("productId", productId);
+                productContentCtx.put("productContentTypeId",  
productContentTypeId);
+                productContentCtx.put("fromDate", (Timestamp)  
context.get("fromDate"));
+                productContentCtx.put("thruDate", (Timestamp)  
context.get("thruDate"));
+                productContentCtx.put("userLogin", userLogin);
+
+                if (UtilValidate.isNotEmpty(contentId)) {
+                    GenericValue content = null;
+                    try {
+                        content = delegator.findOne("Content",  
UtilMisc.toMap("contentId", contentId), false);
+                    } catch (GenericEntityException e) {
+                        Debug.logError(e, module);
+                        ServiceUtil.returnError(e.getMessage());
+                    }
+
+                    if (content != null) {
+                        GenericValue dataResource = null;
+                        try {
+                            dataResource =  
content.getRelatedOne("DataResource");
+                        } catch (GenericEntityException e) {
+                            Debug.logError(e, module);
+                            ServiceUtil.returnError(e.getMessage());
+                        }
+
+                        if (dataResource != null) {
+                            dataResourceCtx.put("dataResourceId",  
dataResource.getString("dataResourceId"));
+                            try {
+                                Map dataResourceResult =  
dispatcher.runSync("updateDataResource", dataResourceCtx);
+                            } catch (GenericServiceException e) {
+                                Debug.logError(e, module);
+                                 ServiceUtil.returnError(e.getMessage());
+                            }
+                        } else {
+                             dataResourceCtx.put("dataResourceTypeId", 
"URL_RESOURCE");
+                            Map dataResourceResult =  FastMap.newInstance();
+                            try {
+                                dataResourceResult =  
dispatcher.runSync("createDataResource", dataResourceCtx);
+                            } catch (GenericServiceException e) {
+                                Debug.logError(e, module);
+                                 ServiceUtil.returnError(e.getMessage());
+                            }
+
+                            Map contentCtx = FastMap.newInstance();
+                            contentCtx.put("contentId", contentId);
+                            contentCtx.put("dataResourceId",  
dataResourceResult.get("dataResourceId"));
+                            contentCtx.put("userLogin", userLogin);
+                            try {
+                                Map contentResult =  
dispatcher.runSync("updateContent", contentCtx);
+                            } catch (GenericServiceException e) {
+                                Debug.logError(e, module);
+                                 ServiceUtil.returnError(e.getMessage());
+                            }
+                        }
+
+                        productContentCtx.put("contentId",  contentId);
+                        try {
+                            Map productContentResult =  
dispatcher.runSync("updateProductContent", productContentCtx);
+                        } catch (GenericServiceException e) {
+                            Debug.logError(e, module);
+                            ServiceUtil.returnError(e.getMessage());
+                        }
+                    }
+                } else {
+                    dataResourceCtx.put("dataResourceTypeId",  "URL_RESOURCE");
+                    Map dataResourceResult = FastMap.newInstance();
+                    try {
+                        dataResourceResult =  
dispatcher.runSync("createDataResource", dataResourceCtx);
+                    } catch (GenericServiceException e) {
+                        Debug.logError(e, module);
+                        ServiceUtil.returnError(e.getMessage());
+                    }
+
+                    Map contentCtx = FastMap.newInstance();
+                    contentCtx.put("contentTypeId", "DOCUMENT");
+                    contentCtx.put("dataResourceId",  
dataResourceResult.get("dataResourceId"));
+                    contentCtx.put("userLogin", userLogin);
+                    Map contentResult = FastMap.newInstance();
+                    try {
+                        contentResult =  dispatcher.runSync("createContent", 
contentCtx);
+                    } catch (GenericServiceException e) {
+                        Debug.logError(e, module);
+                        ServiceUtil.returnError(e.getMessage());
+                    }
+
+                    productContentCtx.put("contentId",  
contentResult.get("contentId"));
+                    try {
+                        Map productContentResult =  
dispatcher.runSync("createProductContent", productContentCtx);
+                    } catch (GenericServiceException e) {
+                        Debug.logError(e, module);
+                        ServiceUtil.returnError(e.getMessage());
+                    }
+                }
+            }
+        }
+       return ServiceUtil.returnSuccess();
+    }
}


Modified: ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/ 
actions/product/EditProductContentContent.groovy
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/actions/product/EditProductContentContent.groovy?rev=689772&r1=689771&r2=689772&view=diff
= = = = = = = = 
======================================================================
--- ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/actions/ 
product/EditProductContentContent.groovy (original)
+++ ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/actions/ product/EditProductContentContent.groovy Thu Aug 28 03:02:47 2008
@@ -22,6 +22,7 @@
import org.ofbiz.entity.util.*;
import org.ofbiz.base.util.*;
import java.sql.Timestamp;
+import org.ofbiz.base.util.ObjectType

contentId = request.getParameter("contentId");
if ("".equals(contentId)) {
@@ -33,8 +34,11 @@
fromDate = request.getParameter("fromDate");
if ("".equals(fromDate)) {
    fromDate = null;
+} else {
+    fromDate = ObjectType.simpleTypeConvert(fromDate, "Timestamp",  null, 
null, false)
}

+
description = request.getParameter("description");
if ("".equals(description)) {
    description = null;
@@ -115,6 +119,8 @@
    context.downloadData = downloadData;
} else if ("FULFILLMENT_EXTERNAL".equals(productContentTypeId)) {
    context.contentFormName = "EditProductContentExternal";
+} else if (productContentTypeId.indexOf("ADDITIONAL_IMAGE") > -1) {
+ context.contentFormName = "EditProductAdditionalImageContent";
} else {
    //Assume it is a generic simple text content
    textData = [:];
@@ -134,4 +140,4 @@

context.productContentData = productContentData;
context.content = content;
-context.contentId = contentId;
\ No newline at end of file
+context.contentId = contentId;

Modified: ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/ 
controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/controller.xml?rev=689772&r1=689771&r2=689772&view=diff
= = = = = = = = 
======================================================================
--- ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/ controller.xml 
(original)
+++ ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/ controller.xml Thu 
Aug 28 03:02:47 2008
@@ -700,6 +700,12 @@
        <response name="success" type="view"  value="EditProductContent"/>
        <response name="error" type="view"  value="EditProductContentContent"/>
    </request-map>
+    <request-map uri="addAdditionalImageContentForProduct">
+        <security https="true" auth="true"/>
+        <event type="service" path=""  invoke="addAdditionalViewForProduct"/>
+        <response name="success" type="view"  value="EditProductContent"/>
+        <response name="error" type="view"  value="EditProductContentContent"/>
+    </request-map>

    <!-- ================ Product GoodIdentification Requests  ================= 
-->
    <request-map uri="EditProductGoodIdentifications">

Modified: ofbiz/trunk/applications/product/webapp/catalog/product/ 
ProductForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/product/ProductForms.xml?rev=689772&r1=689771&r2=689772&view=diff
= = = = = = = = 
======================================================================
--- ofbiz/trunk/applications/product/webapp/catalog/product/ ProductForms.xml 
(original)
+++ ofbiz/trunk/applications/product/webapp/catalog/product/ ProductForms.xml 
Thu Aug 28 03:02:47 2008
@@ -662,6 +662,26 @@
<field use-when="contentId == null" name="submitButton" title="${uiLabelMap.CommonCreate}" widget- style="smallSubmit"><submit button-type="button"/></field> <field use-when="contentId != null" name="submitButton" title="${uiLabelMap.CommonUpdate}" widget- style="smallSubmit"><submit button-type="button"/></field>
    </form>
+
+    <form name="EditProductAdditionalImageContent" type="upload"  
target="addAdditionalImageContentForProduct" title="">
+        <auto-fields-entity entity-name="ProductContent" map- 
name="productContentData"/>
+        <field name="productContentTypeId"><display-entity entity- name="ProductContentType" 
also-hidden="true"/></field>
+        <field name="fromDate" use-when="contentId==null" title="$ 
{uiLabelMap.CommonFromDate}*" ><date-time/></field>
+        <field name="fromDate" use-when="contentId!=null" title="$ 
{uiLabelMap.CommonFromDate}" ><display/></field>
+        <field name="thruDate" title="$ {uiLabelMap.CommonThruDate}"></field>
+        <field use-when="contentId == null"  
name="contentId"><ignored/></field>
+ <field use-when="contentId != null" name="contentId" tooltip="$ {uiLabelMap .ProductNotModificationRecrationProductContentAssociation}" map- name="productContentData" ><display/></field>
+        <field name="useTime"><hidden/></field>
+        <field name="useTimeUomId"><hidden/></field>
+        <field name="useRoleTypeId"><hidden/></field>
+        <field name="useCountLimit"><hidden/></field>
+        <field name="purchaseThruDate"><hidden/></field>
+        <field name="purchaseFromDate"><hidden/></field>
+        <field name="uploadedFile" title="$ 
{uiLabelMap.ProductFile}"><file/></field>
+        <field name="productId"><hidden/></field>
+ <field use-when="contentId == null" name="submitButton" title="${uiLabelMap.CommonCreate}" widget- style="smallSubmit"><submit button-type="button"/></field> + <field use-when="contentId != null" name="submitButton" title="${uiLabelMap.CommonUpdate}" widget- style="smallSubmit"><submit button-type="button"/></field>
+    </form>

    <!-- SupplierProduct -->
    <form name="AddSupplierProduct" type="single"  target="updateSupplierProduct" 
title="" default-map- name="supplierProduct"




Reply via email to