From: "Vikas Mayur" <[EMAIL PROTECTED]>
Yeah, it would be good to have consensus on usage of groovy features  not just 
on this semi-colon issue but others - if any (which
I am not  able to think of).

- Vikas

This might help http://groovy.codehaus.org/Differences+from+Java
For instance note the optional return in 
http://groovy.codehaus.org/Differences+from+Java#DifferencesfromJava-Thingstobeawareof
This is interesting too 
http://groovy.codehaus.org/Runtime+vs+Compile+time%2C+Static+vs+Dynamic

I also wondered if removing type when creating a variable was a good thing. It's obvious sometimes, somtimes not. But a rule for that would be boolean, so we would have to rewrite them all ... tedious... I had some other considerations, but, from the top of my head, the only one that really makes me hesitate was the semi-colon issue. Optional return maybe also but we don't use them much in script...

Jacques


On Aug 28, 2008, at 4:38 PM, Jacques Le Roux wrote:

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