Author: hansbak
Date: Fri Mar 25 07:57:46 2011 New Revision: 1085275 URL: http://svn.apache.org/viewvc?rev=1085275&view=rev Log: patch provided by Eric de Maulde OFBIZ-4217: Scaling image for every size type from ImageProperties.xml Modified: ofbiz/trunk/applications/product/config/ImageProperties.xml ofbiz/trunk/applications/product/src/org/ofbiz/product/image/ScaleImage.java ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductServices.java ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/actions/product/EditProductContent.groovy ofbiz/trunk/framework/common/src/org/ofbiz/common/image/ImageTransform.java Modified: ofbiz/trunk/applications/product/config/ImageProperties.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/config/ImageProperties.xml?rev=1085275&r1=1085274&r2=1085275&view=diff ============================================================================== --- ofbiz/trunk/applications/product/config/ImageProperties.xml (original) +++ ofbiz/trunk/applications/product/config/ImageProperties.xml Fri Mar 25 07:57:46 2011 @@ -17,8 +17,12 @@ KIND, either express or implied. See th specific language governing permissions and limitations under the License. --> + +<!-- + # The uploaded image is scaled in each size tye , you can descrease or increase size types ; size type name doesn't have to contain space + # Just one configured dimension on two is allowed to restrict just one image dimension, whatever its proportions +--> <imageSize xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <format name="extension" value="jpg"/> <size name="small"> <dimension name="height" value="50"/> <dimension name="width" value="50"/> Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/image/ScaleImage.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/image/ScaleImage.java?rev=1085275&r1=1085274&r2=1085275&view=diff ============================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/product/image/ScaleImage.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/product/image/ScaleImage.java Fri Mar 25 07:57:46 2011 @@ -23,6 +23,8 @@ import java.awt.image.ImagingOpException import java.awt.image.RenderedImage; import java.io.File; import java.io.IOException; +import java.lang.NullPointerException; +import java.lang.SecurityException; import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -118,7 +120,6 @@ public class ScaleImage { filenameExpander = FlexibleStringExpander.getInstance(filenameFormat); id = (String) context.get("productId"); fileLocation = filenameExpander.expandString(UtilMisc.toMap("location", "products", "id", id, "type", "original")); - Debug.logWarning("fileLocation for view type = MAIN : " + fileLocation,module); } else if (viewType.toLowerCase().contains("additional") && viewNumber != null && !viewNumber.equals("0")) { String filenameFormat = UtilProperties.getPropertyValue("catalog", "image.filename.additionalviewsize.format"); filenameExpander = FlexibleStringExpander.getInstance(filenameFormat); @@ -138,7 +139,7 @@ public class ScaleImage { } /* get original BUFFERED IMAGE */ - resultBufImgMap.putAll(ImageTransform.getBufferedImage(imageServerPath + "/" + fileLocation + "." + imgExtension, locale)); + resultBufImgMap.putAll(ImageTransform.getBufferedImage(imageServerPath + "/" + fileLocation + "." + imgExtension, locale)); if (resultBufImgMap.containsKey("responseMessage") && resultBufImgMap.get("responseMessage").equals("success")) { bufImg = (BufferedImage) resultBufImgMap.get("bufferedImage"); @@ -153,16 +154,18 @@ public class ScaleImage { return result; } - /* scale Image for each Size Type */ - Iterator<String> sizeIter = sizeTypeList.iterator(); - while (sizeIter.hasNext()) { - String sizeType = sizeIter.next(); + /* Scale image for each size from ImageProperties.xml */ + for (Map.Entry<String, Map<String, String>> entry : imgPropertyMap.entrySet()) { + String sizeType = entry.getKey(); + + // Scale resultScaleImgMap.putAll(ImageTransform.scaleImage(bufImg, imgHeight, imgWidth, imgPropertyMap, sizeType, locale)); + /* Write the new image file */ if (resultScaleImgMap.containsKey("responseMessage") && resultScaleImgMap.get("responseMessage").equals("success")) { bufNewImg = (BufferedImage) resultScaleImgMap.get("bufferedImage"); - // write the New Scaled Image + // Build full path for the new scaled image String newFileLocation = null; filenameToUse = sizeType + filenameToUse.substring(filenameToUse.lastIndexOf(".")); if (viewType.toLowerCase().contains("main")) { @@ -170,21 +173,38 @@ public class ScaleImage { } else if (viewType.toLowerCase().contains("additional")) { newFileLocation = filenameExpander.expandString(UtilMisc.toMap("location", "products", "id", id, "viewtype", viewType, "sizetype", sizeType)); } - String newFilePathPrefix = ""; if (newFileLocation.lastIndexOf("/") != -1) { newFilePathPrefix = newFileLocation.substring(0, newFileLocation.lastIndexOf("/") + 1); // adding 1 to include the trailing slash - } - + } + // Directory String targetDirectory = imageServerPath + "/" + newFilePathPrefix; - File targetDir = new File(targetDirectory); - if (!targetDir.exists()) { - boolean created = targetDir.mkdirs(); - if (!created) { - String errMsg = UtilProperties.getMessage(resource, "ScaleImage.unable_to_create_target_directory", locale) + " - " + targetDirectory; - Debug.logFatal(errMsg, module); - return ServiceUtil.returnError(errMsg); + try { + // Create the new directory + File targetDir = new File(targetDirectory); + if (!targetDir.exists()) { + boolean created = targetDir.mkdirs(); + if (!created) { + String errMsg = UtilProperties.getMessage(resource, "ScaleImage.unable_to_create_target_directory", locale) + " - " + targetDirectory; + Debug.logFatal(errMsg, module); + return ServiceUtil.returnError(errMsg); + } + // Delete existing image files + // Images aren't ordered by productId (${location}/${viewtype}/${sizetype}/${id}) !!! BE CAREFUL !!! + } else if (newFileLocation.endsWith("/" + id)) { + try { + File[] files = targetDir.listFiles(); + for(File file : files) { + if (file.isFile() && file.getName().startsWith(id)) { + file.delete(); + } + } + } catch (SecurityException e) { + Debug.logError(e,module); + } } + } catch (NullPointerException e) { + Debug.logError(e,module); } // write new image @@ -202,12 +222,14 @@ public class ScaleImage { return result; } - /* write Return Result */ - String imageUrl = imageUrlPrefix + "/" + newFileLocation + "." + imgExtension; - imgUrlMap.put(sizeType, imageUrl); + // Save each Url + if (sizeTypeList.contains(sizeType)) { + String imageUrl = imageUrlPrefix + "/" + newFileLocation + "." + imgExtension; + imgUrlMap.put(sizeType, imageUrl); + } } // scaleImgMap - } // sizeIter + } // Loop over sizeType result.put("responseMessage", "success"); result.put("imageUrlMap", imgUrlMap); 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=1085275&r1=1085274&r2=1085275&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 Fri Mar 25 07:57:46 2011 @@ -22,6 +22,8 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; +import java.lang.NullPointerException; +import java.lang.SecurityException; import java.math.BigDecimal; import java.nio.ByteBuffer; import java.sql.Timestamp; @@ -1015,28 +1017,59 @@ public class ProductServices { /* Write the new image file */ String targetDirectory = imageServerPath + "/" + filePathPrefix; - File targetDir = new File(targetDirectory); - if (!targetDir.exists()) { - boolean created = targetDir.mkdirs(); - if (!created) { - String errMsg = UtilProperties.getMessage(resource, "ScaleImage.unable_to_create_target_directory", locale) + " - " + targetDirectory; - Debug.logFatal(errMsg, module); - return ServiceUtil.returnError(errMsg); + try { + File targetDir = new File(targetDirectory); + // Create the new directory + if (!targetDir.exists()) { + boolean created = targetDir.mkdirs(); + if (!created) { + String errMsg = UtilProperties.getMessage(resource, "ScaleImage.unable_to_create_target_directory", locale) + " - " + targetDirectory; + Debug.logFatal(errMsg, module); + return ServiceUtil.returnError(errMsg); + } + // Delete existing image files + // Images are ordered by productId (${location}/${id}/${viewtype}/${sizetype}) + } else if (!filenameToUse.contains(productId)) { + try { + File[] files = targetDir.listFiles(); + for(File file : files) { + if (file.isFile()) file.delete(); + } + } catch (SecurityException e) { + Debug.logError(e,module); + } + // Images aren't ordered by productId (${location}/${viewtype}/${sizetype}/${id}) + } else { + try { + File[] files = targetDir.listFiles(); + for(File file : files) { + if (file.isFile() && file.getName().startsWith(productId + "_View_" + viewNumber)) file.delete(); + } + } catch (SecurityException e) { + Debug.logError(e,module); + } } + } catch (NullPointerException e) { + Debug.logError(e,module); } - File file = new File(imageServerPath + "/" + fileLocation + "." + extension.getString("fileExtensionId")); + // Write try { - RandomAccessFile out = new RandomAccessFile(file, "rw"); - out.write(imageData.array()); - out.close(); - } catch (FileNotFoundException e) { - Debug.logError(e, module); - return ServiceUtil.returnError(UtilProperties.getMessage(resource, - "ProductImageViewUnableWriteFile", UtilMisc.toMap("fileName", file.getAbsolutePath()), locale)); - } catch (IOException e) { - Debug.logError(e, module); - return ServiceUtil.returnError(UtilProperties.getMessage(resource, - "ProductImageViewUnableWriteBinaryData", UtilMisc.toMap("fileName", file.getAbsolutePath()), locale)); + File file = new File(imageServerPath + "/" + fileLocation + "." + extension.getString("fileExtensionId")); + try { + RandomAccessFile out = new RandomAccessFile(file, "rw"); + out.write(imageData.array()); + out.close(); + } catch (FileNotFoundException e) { + Debug.logError(e, module); + return ServiceUtil.returnError(UtilProperties.getMessage(resource, + "ProductImageViewUnableWriteFile", UtilMisc.toMap("fileName", file.getAbsolutePath()), locale)); + } catch (IOException e) { + Debug.logError(e, module); + return ServiceUtil.returnError(UtilProperties.getMessage(resource, + "ProductImageViewUnableWriteBinaryData", UtilMisc.toMap("fileName", file.getAbsolutePath()), locale)); + } + } catch (NullPointerException e) { + Debug.logError(e,module); } /* scale Image in different sizes */ Modified: ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/actions/product/EditProductContent.groovy URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/actions/product/EditProductContent.groovy?rev=1085275&r1=1085274&r2=1085275&view=diff ============================================================================== --- ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/actions/product/EditProductContent.groovy (original) +++ ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/actions/product/EditProductContent.groovy Fri Mar 25 07:57:46 2011 @@ -110,7 +110,21 @@ if (fileType) { file = new File(imageServerPath + "/" + filePathPrefix, defaultFileName); file1 = new File(imageServerPath + "/" + filePathPrefix, filenameToUse); try { - file1.delete(); + // Delete existing image files + File targetDir = new File(imageServerPath + "/" + filePathPrefix); + // Images are ordered by productId (${location}/${id}/${viewtype}/${sizetype}) + if (!filenameToUse.startsWith(productId + ".")) { + File[] files = targetDir.listFiles(); + for(File file : files) { + if (file.isFile() && !file.getName().equals(defaultFileName)) file.delete(); + } + // Images aren't ordered by productId (${location}/${viewtype}/${sizetype}/${id}) !!! BE CAREFUL !!! + } else { + File[] files = targetDir.listFiles(); + for(File file : files) { + if (file.isFile() && !file.getName().equals(defaultFileName) && file.getName().startsWith(productId + ".")) file.delete(); + } + } } catch (Exception e) { System.out.println("error deleting existing file (not neccessarily a problem)"); } Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/image/ImageTransform.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/image/ImageTransform.java?rev=1085275&r1=1085274&r2=1085275&view=diff ============================================================================== --- ofbiz/trunk/framework/common/src/org/ofbiz/common/image/ImageTransform.java (original) +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/image/ImageTransform.java Fri Mar 25 07:57:46 2011 @@ -117,8 +117,17 @@ public class ImageTransform { Map<String, Object> result = FastMap.newInstance(); /* DIMENSIONS from ImageProperties */ - defaultHeight = Double.parseDouble(dimensionMap.get(sizeType).get("height").toString()); - defaultWidth = Double.parseDouble(dimensionMap.get(sizeType).get("width").toString()); + // A missed dimension is authorized + if (dimensionMap.get(sizeType).containsKey("height")) { + defaultHeight = Double.parseDouble(dimensionMap.get(sizeType).get("height").toString()); + } else { + defaultHeight = -1; + } + if (dimensionMap.get(sizeType).containsKey("width")) { + defaultWidth = Double.parseDouble(dimensionMap.get(sizeType).get("width").toString()); + } else { + defaultWidth = -1; + } if (defaultHeight == 0.0 || defaultWidth == 0.0) { String errMsg = UtilProperties.getMessage(resource, "ImageTransform.one_default_dimension_is_null", locale) + " : defaultHeight = " + defaultHeight + " ; defaultWidth = " + defaultWidth; Debug.logError(errMsg, module); @@ -128,7 +137,23 @@ public class ImageTransform { /* SCALE FACTOR */ // find the right Scale Factor related to the Image Dimensions - if (imgHeight > imgWidth) { + if (defaultHeight == -1) { + scaleFactor = defaultWidth / imgWidth; + if (scaleFactor == 0.0) { + String errMsg = UtilProperties.getMessage(resource, "ImageTransform.width_scale_factor_is_null", locale) + " (defaultWidth = " + defaultWidth + "; imgWidth = " + imgWidth; + Debug.logError(errMsg, module); + result.put("errorMessage", errMsg); + return result; + } + } else if (defaultWidth == -1) { + scaleFactor = defaultHeight / imgHeight; + if (scaleFactor == 0.0) { + String errMsg = UtilProperties.getMessage(resource, "ImageTransform.height_scale_factor_is_null", locale) + " (defaultHeight = " + defaultHeight + "; imgHeight = " + imgHeight; + Debug.logError(errMsg, module); + result.put("errorMessage", errMsg); + return result; + } + } else if (imgHeight > imgWidth) { scaleFactor = defaultHeight / imgHeight; if (scaleFactor == 0.0) { String errMsg = UtilProperties.getMessage(resource, "ImageTransform.height_scale_factor_is_null", locale) + " (defaultHeight = " + defaultHeight + "; imgHeight = " + imgHeight; |
Free forum by Nabble | Edit this page |