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


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