You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ha...@apache.org on 2010/12/24 16:22:52 UTC
svn commit: r1052521 [2/8] - in /ofbiz/trunk: ./ applications/order/
applications/product/ applications/product/config/
applications/product/data/ applications/product/data/helpdata/
applications/product/entitydef/ applications/product/lib/ application...
Modified: ofbiz/trunk/applications/product/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services.xml?rev=1052521&r1=1052520&r2=1052521&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/servicedef/services.xml (original)
+++ ofbiz/trunk/applications/product/servicedef/services.xml Fri Dec 24 15:22:49 2010
@@ -1335,4 +1335,163 @@ under the License.
<override name="productPromoContentTypeId" optional="false"/>
<override name="productPromoId" optional="false"/>
</service>
+
+ <!-- Image Management Services -->
+ <service name="addMultipleuploadForProduct" default-entity-name="ProductContent" engine="java"
+ location="org.ofbiz.product.imagemanagement.ImageManagementServices" invoke="addMultipleuploadForProduct" auth="true">
+ <implements service="uploadFileInterface"/>
+ <auto-attributes include="pk" mode="IN" optional="true"/>
+ <auto-attributes include="nonpk" mode="IN" optional="true"/>
+ <attribute mode="INOUT" name="contentId" optional="true" type="String"/>
+ <attribute mode="INOUT" name="dataResourceId" optional="true" type="String"/>
+ <attribute mode="IN" name="imageResize" optional="true" type="String"/>
+ <attribute mode="OUT" name="contentFrameId" optional="true" type="String"/>
+ <attribute mode="OUT" name="dataResourceFrameId" optional="true" type="String"/>
+ <override name="productContentTypeId" optional="false"/>
+ <override name="productId" optional="false"/>
+ </service>
+
+ <service name="multipleUploadProductImages" engine="simple"
+ location="component://product/script/org/ofbiz/product/imagemanagement/ImageManagementServices.xml" invoke="UploadProductImages" auth="true">
+ <description>Multiple upload Images For Product</description>
+ <permission-service service-name="genericContentPermission" main-action="CREATE"/>
+ <attribute name="productId" type="String" mode="INOUT" optional="false"/>
+ <attribute name="imageResize" type="String" mode="IN" optional="true"/>
+ <attribute name="additionalImageOne" type="java.nio.ByteBuffer" mode="IN" optional="true"/>
+ <attribute name="_additionalImageOne_fileName" type="String" mode="IN" optional="true"/>
+ <attribute name="_additionalImageOne_contentType" type="String" mode="IN" optional="true"/>
+ <attribute name="additionalImageTwo" type="java.nio.ByteBuffer" mode="IN" optional="true"/>
+ <attribute name="_additionalImageTwo_fileName" type="String" mode="IN" optional="true"/>
+ <attribute name="_additionalImageTwo_contentType" type="String" mode="IN" optional="true"/>
+ <attribute name="additionalImageThree" type="java.nio.ByteBuffer" mode="IN" optional="true"/>
+ <attribute name="_additionalImageThree_fileName" type="String" mode="IN" optional="true"/>
+ <attribute name="_additionalImageThree_contentType" type="String" mode="IN" optional="true"/>
+ <attribute name="additionalImageFour" type="java.nio.ByteBuffer" mode="IN" optional="true"/>
+ <attribute name="_additionalImageFour_fileName" type="String" mode="IN" optional="true"/>
+ <attribute name="_additionalImageFour_contentType" type="String" mode="IN" optional="true"/>
+ <attribute name="additionalImageFive" type="java.nio.ByteBuffer" mode="IN" optional="true"/>
+ <attribute name="_additionalImageFive_fileName" type="String" mode="IN" optional="true"/>
+ <attribute name="_additionalImageFive_contentType" type="String" mode="IN" optional="true"/>
+ <attribute name="additionalImageSix" type="java.nio.ByteBuffer" mode="IN" optional="true"/>
+ <attribute name="_additionalImageSix_fileName" type="String" mode="IN" optional="true"/>
+ <attribute name="_additionalImageSix_contentType" type="String" mode="IN" optional="true"/>
+ <attribute name="additionalImageSeven" type="java.nio.ByteBuffer" mode="IN" optional="true"/>
+ <attribute name="_additionalImageSeven_fileName" type="String" mode="IN" optional="true"/>
+ <attribute name="_additionalImageSeven_contentType" type="String" mode="IN" optional="true"/>
+ <attribute name="additionalImageEight" type="java.nio.ByteBuffer" mode="IN" optional="true"/>
+ <attribute name="_additionalImageEight_fileName" type="String" mode="IN" optional="true"/>
+ <attribute name="_additionalImageEight_contentType" type="String" mode="IN" optional="true"/>
+ <attribute name="additionalImageNine" type="java.nio.ByteBuffer" mode="IN" optional="true"/>
+ <attribute name="_additionalImageNine_fileName" type="String" mode="IN" optional="true"/>
+ <attribute name="_additionalImageNine_contentType" type="String" mode="IN" optional="true"/>
+ <attribute name="additionalImageTen" type="java.nio.ByteBuffer" mode="IN" optional="true"/>
+ <attribute name="_additionalImageTen_fileName" type="String" mode="IN" optional="true"/>
+ <attribute name="_additionalImageTen_contentType" type="String" mode="IN" optional="true"/>
+ </service>
+
+ <service name="removeProductContentAndImageFile" default-entity-name="ProductContent" engine="simple"
+ location="component://product/script/org/ofbiz/product/imagemanagement/ImageManagementServices.xml" invoke="removeProductContentAndImageFile" auth="true">
+ <description>Remove Content From Product and File Image</description>
+ <auto-attributes include="pk" mode="IN" optional="false"/>
+ <auto-attributes include="nonpk" mode="IN" optional="true"/>
+ </service>
+
+ <service name="removeProductContentForImageManagement" engine="simple"
+ location="component://product/script/org/ofbiz/product/imagemanagement/ImageManagementServices.xml" invoke="removeProductContentForImageManagement" auth="true">
+ <description>Delete Product Content Relationship Entity</description>
+ <attribute mode="IN" name="contentId" optional="false" type="String"/>
+ <attribute mode="IN" name="productId" optional="false" type="String"/>
+ </service>
+
+ <service name="removeImageFileForImageManagement" engine="java"
+ location="org.ofbiz.product.imagemanagement.ImageManagementServices" invoke="removeImageFileForImageManagement" auth="true">
+ <description>Delete Image File</description>
+ <attribute mode="IN" name="contentId" optional="false" type="String"/>
+ <attribute mode="IN" name="dataResourceName" optional="false" type="String"/>
+ <attribute mode="IN" name="productId" optional="false" type="String"/>
+ </service>
+
+ <service name="addImageFrame" engine="java"
+ location="org.ofbiz.product.imagemanagement.FrameImage" invoke="addImageFrame" auth="true">
+ <description>Create Image Frame For Product.</description>
+ <attribute mode="IN" name="productId" optional="false" type="String"/>
+ <attribute mode="IN" name="imageName" optional="false" type="String"/>
+ <attribute mode="IN" name="imageWidth" optional="false" type="String"/>
+ <attribute mode="IN" name="imageHeight" optional="false" type="String"/>
+ <attribute mode="IN" name="frameContentId" optional="false" type="String"/>
+ <attribute mode="IN" name="frameDataResourceId" optional="false" type="String"/>
+ </service>
+
+ <service name="uploadFrame" engine="java"
+ location="org.ofbiz.product.imagemanagement.FrameImage" invoke="uploadFrame" auth="true">
+ <description>Upload Image Frame.</description>
+ <attribute mode="IN" name="uploadedFile" optional="false" type="java.nio.ByteBuffer"/>
+ </service>
+
+ <service name="addImageCaption" engine="simple"
+ location="component://product/script/org/ofbiz/product/imagemanagement/ImageManagementServices.xml" invoke="addImageCaption" auth="true">
+ <description>Replace Image To Exist Image.</description>
+ <attribute mode="IN" name="productId" optional="false" type="String"/>
+ <attribute mode="IN" name="contentId" optional="false" type="String"/>
+ <attribute mode="IN" name="description" optional="true" type="String"/>
+ </service>
+
+ <service name="imageCrop" engine="java"
+ location="org.ofbiz.product.imagemanagement.CropImage" invoke="imageCrop" auth="true">
+ <description>Crop Image</description>
+ <attribute mode="IN" name="productId" optional="false" type="String"/>
+ <attribute mode="IN" name="imageName" optional="false" type="String"/>
+ <attribute mode="IN" name="imageX" optional="false" type="String"/>
+ <attribute mode="IN" name="imageY" optional="false" type="String"/>
+ <attribute mode="IN" name="imageW" optional="false" type="String"/>
+ <attribute mode="IN" name="imageH" optional="false" type="String"/>
+ </service>
+
+ <service name="imageRotate" engine="java"
+ location="org.ofbiz.product.imagemanagement.RotateImage" invoke="imageRotate" auth="true">
+ <description>Rotate Image</description>
+ <attribute mode="IN" name="productId" optional="false" type="String"/>
+ <attribute mode="IN" name="imageName" optional="false" type="String"/>
+ <attribute mode="IN" name="angle" optional="false" type="String"/>
+ </service>
+
+ <service name="setImageDetail" engine="simple" default-entity-name="ProductContent"
+ location="component://product/script/org/ofbiz/product/imagemanagement/ImageManagementServices.xml" invoke="setImageDetail" auth="true">
+ <auto-attributes include="pk" mode="IN" optional="false"/>
+ <auto-attributes include="nonpk" mode="IN" optional="true"/>
+ <attribute name="defaultSequenceNum" mode="IN" type="Integer" optional="true"/>
+ <attribute name="enable" mode="IN" type="Boolean" optional="true" default-value="true"/>
+ <attribute name="description" mode="IN" type="String" optional="true"/>
+ </service>
+
+ <service name="updateStatusImageManagement" engine="simple"
+ location="component://product/script/org/ofbiz/product/imagemanagement/ImageManagementServices.xml" invoke="updateStatusImageManagement" auth="true">
+ <attribute name="contentId" mode="IN" type="String" optional="false"/>
+ <attribute name="checkStatusId" mode="IN" type="String" optional="true"/>
+ </service>
+
+ <service name="addRejectedReasonImageManagement" engine="simple"
+ location="component://product/script/org/ofbiz/product/imagemanagement/ImageManagementServices.xml" invoke="addRejectedReasonImageManagement" auth="true">
+ <attribute name="contentId" mode="IN" type="String" optional="false"/>
+ <attribute name="description" mode="IN" type="String" optional="true"/>
+ </service>
+
+ <service name="createImagePartyContent" engine="simple"
+ location="component://product/script/org/ofbiz/product/imagemanagement/ImageManagementServices.xml" invoke="createImagePartyContent" auth="true">
+ <attribute name="contentId" mode="IN" type="String" optional="false"/>
+ </service>
+
+ <service name="removeImagePartyContent" engine="simple"
+ location="component://product/script/org/ofbiz/product/imagemanagement/ImageManagementServices.xml" invoke="removeImagePartyContent" auth="true">
+ <attribute name="partyId" mode="IN" type="String" optional="false"/>
+ </service>
+
+ <service name="setThumbnail" engine="java"
+ location="org.ofbiz.product.imagemanagement.ImageManagementServices" invoke="setThumbnail" auth="true">
+ <description>Set Thumbnail for product</description>
+ <attribute mode="IN" name="contentIdTo" optional="false" type="String"/>
+ <attribute mode="IN" name="productId" optional="false" type="String"/>
+ </service>
+
+
</services>
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=1052521&r1=1052520&r2=1052521&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 Dec 24 15:22:49 2010
@@ -37,6 +37,7 @@ import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilGenerics;
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.service.ServiceUtil;
import org.ofbiz.common.image.ImageTransform;
@@ -77,6 +78,7 @@ public class ScaleImage {
/* VARIABLES */
Locale locale = (Locale) context.get("locale");
+
int index;
Map<String, Map<String, String>> imgPropertyMap = FastMap.newInstance();
BufferedImage bufImg, bufNewImg;
@@ -126,12 +128,14 @@ public class ScaleImage {
if (fileLocation.lastIndexOf("/") != -1) {
filePathPrefix = fileLocation.substring(0, fileLocation.lastIndexOf("/") + 1); // adding 1 to include the trailing slash
}
-
-
-
- /* get original BUFFERED IMAGE */
- resultBufImgMap.putAll(ImageTransform.getBufferedImage(imageServerPath + "/" + filePathPrefix + filenameToUse, locale));
-
+
+ if (context.get("contentId") != null){
+ resultBufImgMap.putAll(ImageTransform.getBufferedImage(imageServerPath + "/products/management/" + context.get("productId") + "/" + context.get("clientFileName"), locale));
+ } else {
+ /* get original BUFFERED IMAGE */
+ resultBufImgMap.putAll(ImageTransform.getBufferedImage(imageServerPath + "/" + filePathPrefix + filenameToUse, locale));
+ }
+
if (resultBufImgMap.containsKey("responseMessage") && resultBufImgMap.get("responseMessage").equals("success")) {
bufImg = (BufferedImage) resultBufImgMap.get("bufferedImage");
@@ -156,7 +160,6 @@ public class ScaleImage {
Iterator<String> sizeIter = sizeTypeList.iterator();
while (sizeIter.hasNext()) {
String sizeType = sizeIter.next();
-
resultScaleImgMap.putAll(ImageTransform.scaleImage(bufImg, imgHeight, imgWidth, imgPropertyMap, sizeType, locale));
if (resultScaleImgMap.containsKey("responseMessage") && resultScaleImgMap.get("responseMessage").equals("success")) {
@@ -219,4 +222,160 @@ public class ScaleImage {
return ServiceUtil.returnError(errMsg);
}
}
+
+ public static Map<String, Object> scaleImageManageInAllSize(Map<String, ? extends Object> context, String filenameToUse, String viewType, String viewNumber , String imageType)
+ throws IllegalArgumentException, ImagingOpException, IOException, JDOMException {
+
+ /* VARIABLES */
+ Locale locale = (Locale) context.get("locale");
+ List<String> sizeTypeList = null;
+ if (UtilValidate.isNotEmpty(imageType)) {
+ sizeTypeList = UtilMisc.toList(imageType);
+ } else {
+ sizeTypeList = UtilMisc.toList("small", "medium", "large", "detail");
+ }
+
+ int index;
+ Map<String, Map<String, String>> imgPropertyMap = FastMap.newInstance();
+ BufferedImage bufImg, bufNewImg;
+ double imgHeight, imgWidth;
+ Map<String, String> imgUrlMap = FastMap.newInstance();
+ Map<String, Object> resultXMLMap = FastMap.newInstance();
+ Map<String, Object> resultBufImgMap = FastMap.newInstance();
+ Map<String, Object> resultScaleImgMap = FastMap.newInstance();
+ Map<String, Object> result = FastMap.newInstance();
+
+ /* ImageProperties.xml */
+ String imgPropertyFullPath = System.getProperty("ofbiz.home") + "/applications/product/config/ImageProperties.xml";
+ resultXMLMap.putAll((Map<String, Object>) ImageTransform.getXMLValue(imgPropertyFullPath, locale));
+ if (resultXMLMap.containsKey("responseMessage") && resultXMLMap.get("responseMessage").equals("success")) {
+ imgPropertyMap.putAll(UtilGenerics.<Map<String, Map<String, String>>>cast(resultXMLMap.get("xml")));
+ } else {
+ String errMsg = UtilProperties.getMessage(resource, "ScaleImage.unable_to_parse", locale) + " : ImageProperties.xml";
+ Debug.logError(errMsg, module);
+ result.put("errorMessage", errMsg);
+ return result;
+ }
+
+ /* IMAGE */
+ // get Name and Extension
+ index = filenameToUse.lastIndexOf(".");
+ String imgName = filenameToUse.substring(0, index - 1);
+ String imgExtension = filenameToUse.substring(index + 1);
+ // paths
+ String mainFilenameFormat = UtilProperties.getPropertyValue("catalog", "image.filename.format");
+ String imageServerPath = FlexibleStringExpander.expandString(UtilProperties.getPropertyValue("catalog", "image.server.path"), context);
+ String imageUrlPrefix = UtilProperties.getPropertyValue("catalog", "image.url.prefix");
+
+ String id = null;
+ String type = null;
+ if (viewType.toLowerCase().contains("main")) {
+ type = "original";
+ id = imgName;
+ } else if (viewType.toLowerCase().contains("additional") && viewNumber != null && !viewNumber.equals("0")) {
+ type = "additional";
+ id = imgName + "_View_" + viewNumber;
+ } else {
+ return ServiceUtil.returnError("View Type : " + type + " is wrong");
+ }
+ FlexibleStringExpander mainFilenameExpander = FlexibleStringExpander.getInstance(mainFilenameFormat);
+ String fileLocation = mainFilenameExpander.expandString(UtilMisc.toMap("location", "products", "type", type, "id", filenameToUse));
+ String filePathPrefix = "";
+ if (fileLocation.lastIndexOf("/") != -1) {
+ filePathPrefix = fileLocation.substring(0, fileLocation.lastIndexOf("/") + 1); // adding 1 to include the trailing slash
+ }
+
+ if (context.get("contentId") != null){
+ resultBufImgMap.putAll(ImageTransform.getBufferedImage(imageServerPath + "/products/management/" + context.get("productId") + "/" + context.get("clientFileName"), locale));
+ } else {
+ /* get original BUFFERED IMAGE */
+ resultBufImgMap.putAll(ImageTransform.getBufferedImage(imageServerPath + "/" + filePathPrefix + filenameToUse, locale));
+ }
+
+ if (resultBufImgMap.containsKey("responseMessage") && resultBufImgMap.get("responseMessage").equals("success")) {
+ bufImg = (BufferedImage) resultBufImgMap.get("bufferedImage");
+
+ // get Dimensions
+ imgHeight = (double) bufImg.getHeight();
+ imgWidth = (double) bufImg.getWidth();
+ if (imgHeight == 0.0 || imgWidth == 0.0) {
+ String errMsg = UtilProperties.getMessage(resource, "ScaleImage.one_current_image_dimension_is_null", locale) + " : imgHeight = " + imgHeight + " ; imgWidth = " + imgWidth;
+ Debug.logError(errMsg, module);
+ result.put("errorMessage", errMsg);
+ return result;
+ }
+
+ // new Filename Format
+ FlexibleStringExpander addFilenameExpander = mainFilenameExpander;
+ if (viewType.toLowerCase().contains("additional")) {
+ String addFilenameFormat = UtilProperties.getPropertyValue("catalog", "image.filename.additionalviewsize.format");
+ addFilenameExpander = FlexibleStringExpander.getInstance(addFilenameFormat);
+ }
+
+ /* scale Image for each Size Type */
+ Iterator<String> sizeIter = sizeTypeList.iterator();
+ while (sizeIter.hasNext()) {
+ String sizeType = sizeIter.next();
+ resultScaleImgMap.putAll(ImageTransform.scaleImage(bufImg, imgHeight, imgWidth, imgPropertyMap, sizeType, locale));
+
+ if (resultScaleImgMap.containsKey("responseMessage") && resultScaleImgMap.get("responseMessage").equals("success")) {
+ bufNewImg = (BufferedImage) resultScaleImgMap.get("bufferedImage");
+
+ // write the New Scaled Image
+ String newFileLocation = null;
+ if (viewType.toLowerCase().contains("main")) {
+ newFileLocation = mainFilenameExpander.expandString(UtilMisc.toMap("location", "products", "type", sizeType, "id", id));
+ } else if (viewType.toLowerCase().contains("additional")) {
+ newFileLocation = addFilenameExpander.expandString(UtilMisc.toMap("location", "products", "viewtype", viewType, "sizetype", sizeType,"id", id));
+ }
+ String newFilePathPrefix = "";
+ if (newFileLocation.lastIndexOf("/") != -1) {
+ newFilePathPrefix = newFileLocation.substring(0, newFileLocation.lastIndexOf("/") + 1); // adding 1 to include the trailing slash
+ }
+
+ 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);
+ }
+ }
+
+ // write new image
+ try {
+ ImageIO.write((RenderedImage) bufNewImg, imgExtension, new File(imageServerPath + "/" + newFilePathPrefix + filenameToUse));
+ } catch (IllegalArgumentException e) {
+ String errMsg = UtilProperties.getMessage(resource, "ScaleImage.one_parameter_is_null", locale) + e.toString();
+ Debug.logError(errMsg, module);
+ result.put("errorMessage", errMsg);
+ return result;
+ } catch (IOException e) {
+ String errMsg = UtilProperties.getMessage(resource, "ScaleImage.error_occurs_during_writing", locale) + e.toString();
+ Debug.logError(errMsg, module);
+ result.put("errorMessage", errMsg);
+ return result;
+ }
+
+ /* write Return Result */
+ String imageUrl = imageUrlPrefix + "/" + newFilePathPrefix + filenameToUse;
+ imgUrlMap.put(sizeType, imageUrl);
+
+ } // scaleImgMap
+ } // sizeIter
+
+ result.put("responseMessage", "success");
+ result.put("imageUrlMap", imgUrlMap);
+ result.put("original", resultBufImgMap);
+ return result;
+
+ } else {
+ String errMsg = UtilProperties.getMessage(resource, "ScaleImage.unable_to_scale_original_image", locale) + " : " + filenameToUse;
+ Debug.logError(errMsg, module);
+ result.put("errorMessage", errMsg);
+ return ServiceUtil.returnError(errMsg);
+ }
+ }
}
Added: ofbiz/trunk/applications/product/src/org/ofbiz/product/imagemanagement/CropImage.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/imagemanagement/CropImage.java?rev=1052521&view=auto
==============================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/product/imagemanagement/CropImage.java (added)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/product/imagemanagement/CropImage.java Fri Dec 24 15:22:49 2010
@@ -0,0 +1,161 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.product.imagemanagement;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.RenderedImage;
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+
+import javax.imageio.ImageIO;
+
+import javolution.util.FastMap;
+
+import org.jdom.JDOMException;
+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.Delegator;
+import org.ofbiz.entity.GenericEntityException;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.service.DispatchContext;
+import org.ofbiz.service.GenericServiceException;
+import org.ofbiz.service.LocalDispatcher;
+import org.ofbiz.service.ServiceUtil;
+
+
+public class CropImage {
+
+ public static final String module = CropImage.class.getName();
+ public static final String resource = "ProductErrorUiLabels";
+
+ public static Map<String, Object> imageCrop(DispatchContext dctx, Map<String, ? extends Object> context)
+ throws IOException, JDOMException {
+ LocalDispatcher dispatcher = dctx.getDispatcher();
+ Delegator delegator = dctx.getDelegator();
+ GenericValue userLogin = (GenericValue) context.get("userLogin");
+
+ String productId = (String) context.get("productId");
+ String imageName = (String) context.get("imageName");
+ String imageX = (String) context.get("imageX");
+ String imageY = (String) context.get("imageY");
+ String imageW = (String) context.get("imageW");
+ String imageH = (String) context.get("imageH");
+
+ if (UtilValidate.isNotEmpty(imageName)) {
+ Map<String, Object> contentCtx = FastMap.newInstance();
+ contentCtx.put("contentTypeId", "DOCUMENT");
+ contentCtx.put("userLogin", userLogin);
+ Map<String, Object> contentResult = FastMap.newInstance();
+ try {
+ contentResult = dispatcher.runSync("createContent", contentCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ return ServiceUtil.returnError(e.getMessage());
+ }
+
+ Map<String, Object> contentThumb = FastMap.newInstance();
+ contentThumb.put("contentTypeId", "DOCUMENT");
+ contentThumb.put("userLogin", userLogin);
+ Map<String, Object> contentThumbResult = FastMap.newInstance();
+ try {
+ contentThumbResult = dispatcher.runSync("createContent", contentThumb);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ return ServiceUtil.returnError(e.getMessage());
+ }
+
+ String contentIdThumb = (String) contentThumbResult.get("contentId");
+ String contentId = (String) contentResult.get("contentId");
+ String filenameToUse = (String) contentResult.get("contentId") + ".jpg";
+ String filenameTouseThumb = (String) contentThumbResult.get("contentId") + ".jpg";
+
+ String imageServerPath = FlexibleStringExpander.expandString(UtilProperties.getPropertyValue("catalog", "image.server.path"), context);
+ BufferedImage bufImg = ImageIO.read(new File(imageServerPath + "/products/management/" + productId + "/" + imageName));
+
+ int x = Integer.parseInt(imageX);
+ int y = Integer.parseInt(imageY);
+ int w = Integer.parseInt(imageW);
+ int h = Integer.parseInt(imageH);
+
+ BufferedImage bufNewImg = bufImg.getSubimage(x, y, w, h);
+ String mimeType = imageName.substring(imageName.lastIndexOf(".") + 1);
+ ImageIO.write((RenderedImage) bufNewImg, mimeType, new File(imageServerPath + "/products/management/" + productId + "/" + filenameToUse));
+
+ double imgHeight = bufNewImg.getHeight();
+ double imgWidth = bufNewImg.getWidth();
+
+ Map<String, Object> resultResize = ImageManagementServices.resizeImageThumbnail(bufNewImg, imgHeight, imgWidth);
+ ImageIO.write((RenderedImage) resultResize.get("bufferedImage"), mimeType, new File(imageServerPath + "/products/management/" + productId + "/" + filenameTouseThumb));
+
+ String imageUrlResource = "/images/products/management/" + productId + "/" + filenameToUse;
+ String imageUrlThumb = "/images/products/management/" + productId + "/" + filenameTouseThumb;
+
+ ImageManagementServices.createContentAndDataResource(dctx, userLogin, filenameToUse, imageUrlResource, contentId);
+ ImageManagementServices.createContentAndDataResource(dctx, userLogin, filenameTouseThumb, imageUrlThumb, contentIdThumb);
+
+ Map<String, Object> createContentAssocMap = FastMap.newInstance();
+ createContentAssocMap.put("contentAssocTypeId", "IMAGE_THUMBNAIL");
+ createContentAssocMap.put("contentId", contentId);
+ createContentAssocMap.put("contentIdTo", contentIdThumb);
+ createContentAssocMap.put("userLogin", userLogin);
+ try {
+ dispatcher.runSync("createContentAssoc", createContentAssocMap);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ return ServiceUtil.returnError(e.getMessage());
+ }
+
+ Map<String, Object> productContentCtx = FastMap.newInstance();
+ productContentCtx.put("productId", productId);
+ productContentCtx.put("productContentTypeId", "IMAGE");
+ productContentCtx.put("fromDate", UtilDateTime.nowTimestamp());
+ productContentCtx.put("userLogin", userLogin);
+ productContentCtx.put("contentId", contentId);
+ productContentCtx.put("statusId", "IM_PENDING");
+ try {
+ dispatcher.runSync("createProductContent", productContentCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ return ServiceUtil.returnError(e.getMessage());
+ }
+
+ Map<String, Object> partyContentCtx = FastMap.newInstance();
+ partyContentCtx.put("contentId", contentId);
+ partyContentCtx.put("userLogin", userLogin);
+ try {
+ dispatcher.runSync("createImagePartyContent", partyContentCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ return ServiceUtil.returnError(e.getMessage());
+ }
+ } else {
+ String errMsg = "Please select Image.";
+ Debug.logFatal(errMsg, module);
+ return ServiceUtil.returnError(errMsg);
+ }
+ String successMsg = "Crop image successfully.";
+ Map<String, Object> result = ServiceUtil.returnSuccess(successMsg);
+ return result;
+ }
+}
Added: ofbiz/trunk/applications/product/src/org/ofbiz/product/imagemanagement/FrameImage.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/imagemanagement/FrameImage.java?rev=1052521&view=auto
==============================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/product/imagemanagement/FrameImage.java (added)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/product/imagemanagement/FrameImage.java Fri Dec 24 15:22:49 2010
@@ -0,0 +1,413 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.product.imagemanagement;
+
+import java.awt.AlphaComposite;
+import java.awt.Composite;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.RenderingHints;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.RenderedImage;
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.util.List;
+import java.util.Map;
+
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.swing.ImageIcon;
+
+import javolution.util.FastMap;
+
+import org.jdom.JDOMException;
+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.content.layout.LayoutWorker;
+import org.ofbiz.entity.Delegator;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.entity.util.EntityUtil;
+import org.ofbiz.service.DispatchContext;
+import org.ofbiz.service.GenericServiceException;
+import org.ofbiz.service.LocalDispatcher;
+import org.ofbiz.service.ServiceUtil;
+
+public class FrameImage {
+
+ public static final String module = FrameImage.class.getName();
+ public static final String resource = "ProductErrorUiLabels";
+
+ public static Map<String, Object> addImageFrame(DispatchContext dctx, Map<String, ? extends Object> context)
+ throws IOException, JDOMException {
+ Map<String, Object> result = FastMap.newInstance();
+ LocalDispatcher dispatcher = dctx.getDispatcher();
+ Delegator delegator = dctx.getDelegator();
+ String imageServerPath = FlexibleStringExpander.expandString(UtilProperties.getPropertyValue("catalog", "image.server.path"), context);
+
+ GenericValue userLogin = (GenericValue) context.get("userLogin");
+ String productId = (String) context.get("productId");
+ String imageName = (String) context.get("imageName");
+ String imageWidth = (String) context.get("imageWidth");
+ String imageHeight = (String) context.get("imageHeight");
+
+ if (UtilValidate.isEmpty(context.get("frameContentId")) || UtilValidate.isEmpty(context.get("frameDataResourceId"))) {
+ result = ServiceUtil.returnError("Required frame image content ID or dataResource ID parameters. Please upload new frame image or choose the exist frame.");
+ result.putAll(context);
+ }
+ if (UtilValidate.isEmpty(context.get("imageWidth")) || UtilValidate.isEmpty(context.get("imageHeight"))) {
+ result = ServiceUtil.returnError("Image Width and Image Height are required to create the image. Please enter in Image Width and Image Height fields.");
+ result.putAll(context);
+ }
+
+ String frameContentId = (String) context.get("frameContentId");
+ String frameDataResourceId = (String) context.get("frameDataResourceId");
+
+ String frameImageName = null;
+ try {
+ GenericValue contentDataResourceView = delegator.findByPrimaryKey("ContentDataResourceView", UtilMisc.toMap("contentId", frameContentId, "drDataResourceId", frameDataResourceId));
+ frameImageName = contentDataResourceView.getString("contentName");
+ } catch (Exception e) {
+ Debug.logError(e, module);
+ result = ServiceUtil.returnError(e.getMessage());
+ result.putAll(context);
+ }
+
+ if (UtilValidate.isNotEmpty(imageName)) {
+
+ // Image Frame
+ BufferedImage bufImg1 = ImageIO.read(new File(imageServerPath + "/products/management/" + productId + "/" + imageName));
+ BufferedImage bufImg2 = ImageIO.read(new File(imageServerPath + "/products/management/frame/"+frameImageName));
+
+ int bufImgType;
+ if (BufferedImage.TYPE_CUSTOM == bufImg1.getType()) {
+ bufImgType = BufferedImage.TYPE_INT_ARGB_PRE;
+ } else {
+ bufImgType = bufImg1.getType();
+ }
+
+ int width = Integer.parseInt(imageWidth);
+ int height= Integer.parseInt(imageHeight);
+
+ Map<String, Object> contentCtx = FastMap.newInstance();
+ contentCtx.put("contentTypeId", "DOCUMENT");
+ contentCtx.put("userLogin", userLogin);
+ Map<String, Object> contentResult = FastMap.newInstance();
+ try {
+ contentResult = dispatcher.runSync("createContent", contentCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ result = ServiceUtil.returnError(e.getMessage());
+ result.putAll(context);
+ }
+
+ Map<String, Object> contentThumb = FastMap.newInstance();
+ contentThumb.put("contentTypeId", "DOCUMENT");
+ contentThumb.put("userLogin", userLogin);
+ Map<String, Object> contentThumbResult = FastMap.newInstance();
+ try {
+ contentThumbResult = dispatcher.runSync("createContent", contentThumb);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ result = ServiceUtil.returnError(e.getMessage());
+ result.putAll(context);
+ }
+
+ String contentIdThumb = (String) contentThumbResult.get("contentId");
+ String contentId = (String) contentResult.get("contentId");
+ String filenameToUse = (String) contentResult.get("contentId") + ".jpg";
+ String filenameTouseThumb = (String) contentThumbResult.get("contentId") + ".jpg";
+
+ Image newImg1 = bufImg1.getScaledInstance((int) width, (int) height , Image.SCALE_SMOOTH);
+ Image newImg2 = bufImg2.getScaledInstance((int) width , (int) height , Image.SCALE_SMOOTH);
+ BufferedImage bufNewImg = combineBufferedImage(newImg1, newImg2, bufImgType);
+ String mimeType = imageName.substring(imageName.lastIndexOf(".") + 1);
+ ImageIO.write((RenderedImage) bufNewImg, mimeType, new File(imageServerPath + "/products/management/" + productId + "/" + filenameToUse));
+
+ double imgHeight = bufNewImg.getHeight();
+ double imgWidth = bufNewImg.getWidth();
+
+ Map<String, Object> resultResize = ImageManagementServices.resizeImageThumbnail(bufNewImg, imgHeight, imgWidth);
+ ImageIO.write((RenderedImage) resultResize.get("bufferedImage"), mimeType, new File(imageServerPath + "/products/management/" + productId + "/" + filenameTouseThumb));
+
+ String imageUrlResource = "/images/products/management/" + productId + "/" + filenameToUse;
+ String imageUrlThumb = "/images/products/management/" + productId + "/" + filenameTouseThumb;
+
+ ImageManagementServices.createContentAndDataResource(dctx, userLogin, filenameToUse, imageUrlResource, contentId);
+ ImageManagementServices.createContentAndDataResource(dctx, userLogin, filenameTouseThumb, imageUrlThumb, contentIdThumb);
+
+ Map<String, Object> createContentAssocMap = FastMap.newInstance();
+ createContentAssocMap.put("contentAssocTypeId", "IMAGE_THUMBNAIL");
+ createContentAssocMap.put("contentId", contentId);
+ createContentAssocMap.put("contentIdTo", contentIdThumb);
+ createContentAssocMap.put("userLogin", userLogin);
+ try {
+ dispatcher.runSync("createContentAssoc", createContentAssocMap);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ result = ServiceUtil.returnError(e.getMessage());
+ result.putAll(context);
+ }
+
+ Map<String, Object> productContentCtx = FastMap.newInstance();
+ productContentCtx.put("productId", productId);
+ productContentCtx.put("productContentTypeId", "IMAGE");
+ productContentCtx.put("fromDate", UtilDateTime.nowTimestamp());
+ productContentCtx.put("userLogin", userLogin);
+ productContentCtx.put("contentId", contentId);
+ productContentCtx.put("statusId", "IM_PENDING");
+ try {
+ dispatcher.runSync("createProductContent", productContentCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ result = ServiceUtil.returnError(e.getMessage());
+ result.putAll(context);
+ }
+
+ Map<String, Object> partyContentCtx = FastMap.newInstance();
+ partyContentCtx.put("contentId", contentId);
+ partyContentCtx.put("userLogin", userLogin);
+ try {
+ dispatcher.runSync("createImagePartyContent", partyContentCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ result = ServiceUtil.returnError(e.getMessage());
+ result.putAll(context);
+ }
+ }
+ else{
+ String errMsg = "Please select Image.";
+ Debug.logFatal(errMsg, module);
+ result = ServiceUtil.returnError(errMsg);
+ result.putAll(context);
+ }
+ String successMsg = "Frame image successfully.";
+ result = ServiceUtil.returnSuccess(successMsg);
+ return result;
+ }
+
+ public static BufferedImage combineBufferedImage(Image image1, Image image2, int bufImgType) {
+ // Full image loading
+ image1 = new ImageIcon(image1).getImage();
+ image2 = new ImageIcon(image2).getImage();
+
+ // New BufferedImage creation
+ BufferedImage bufferedImage = new BufferedImage(image1.getWidth(null), image1.getHeight(null), bufImgType);
+ Graphics2D g = bufferedImage.createGraphics( );
+ g.drawImage(image1, null, null);
+
+ // Draw Image combine
+ Point2D center = new Point2D.Float(bufferedImage.getHeight() / 2, bufferedImage.getWidth() / 2);
+ AffineTransform at = AffineTransform.getTranslateInstance(center.getX( ) - (image2.getWidth(null) / 2), center.getY( ) - (image2.getHeight(null) / 2));
+ g.transform(at);
+ g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ g.drawImage(image2, 0, 0, null);
+ Composite c = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .35f);
+ g.setComposite(c);
+ at = AffineTransform.getTranslateInstance(center.getX( ) - (bufferedImage.getWidth(null) / 2), center.getY( ) - (bufferedImage.getHeight(null) / 2));
+ g.setTransform(at);
+ g.drawImage(bufferedImage, 0, 0, null);
+ g.dispose();
+
+ return( bufferedImage );
+ }
+
+ public static String uploadFrame(HttpServletRequest request, HttpServletResponse response) {
+ LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
+ HttpSession session = request.getSession();
+ GenericValue userLogin = (GenericValue)session.getAttribute("userLogin");
+
+ Map<String, ? extends Object> context = request.getParameterMap();
+ String imageServerPath = FlexibleStringExpander.expandString(UtilProperties.getPropertyValue("catalog", "image.server.path"), context);
+ Map<String, Object> tempFile = LayoutWorker.uploadImageAndParameters(request, "uploadedFile");
+ String imageName = tempFile.get("imageFileName").toString();
+ String mimType = tempFile.get("uploadMimeType").toString();
+ ByteBuffer imageData = (ByteBuffer) tempFile.get("imageData");
+ if (UtilValidate.isEmpty(imageName) || UtilValidate.isEmpty(imageData)) {
+ session.setAttribute("frameContentId", request.getParameter("frameExistContentId").toString());
+ session.setAttribute("frameDataResourceId", request.getParameter("frameExistDataResourceId").toString());
+ request.setAttribute("_ERROR_MESSAGE_", "There is no frame image, please select the image type *.PNG uploading.");
+ return "error";
+ }
+ if (!"image/png".equals(mimType)) {
+ session.setAttribute("frameContentId", request.getParameter("frameExistContentId").toString());
+ session.setAttribute("frameDataResourceId", request.getParameter("frameExistDataResourceId").toString());
+ request.setAttribute("_ERROR_MESSAGE_", "The selected image type is incorrect, please select the image type *.PNG to upload.");
+ return "error";
+ }
+
+ String contentId = null;
+ String dataResourceId = null;
+ try {
+ String dirPath = "/products/management/frame/";
+ File dir = new File(imageServerPath + dirPath);
+ if (!dir.exists()) {
+ boolean createDir = dir.mkdir();
+ if (!createDir) {
+ request.setAttribute("_ERROR_MESSAGE_", "Cannot create directory.");
+ return "error";
+ }
+ }
+ String imagePath = "/products/management/frame/" + imageName;
+ File file = new File(imageServerPath + imagePath);
+ if (file.exists()) {
+ request.setAttribute("_ERROR_MESSAGE_", "There is an existing frame, please select from the existing frame.");
+ return "error";
+ }
+ RandomAccessFile out = new RandomAccessFile(file, "rw");
+ out.write(imageData.array());
+ out.close();
+
+ //create dataResource
+ Map<String, Object> dataResourceCtx = FastMap.newInstance();
+ dataResourceCtx.put("objectInfo", "/images" + imagePath);
+ dataResourceCtx.put("dataResourceName", imageName);
+ dataResourceCtx.put("userLogin", userLogin);
+ dataResourceCtx.put("dataResourceTypeId", "IMAGE_OBJECT");
+ dataResourceCtx.put("mimeTypeId", "image/png");
+ dataResourceCtx.put("isPublic", "Y");
+ Map<String, Object> dataResourceResult = dispatcher.runSync("createDataResource", dataResourceCtx);
+ dataResourceId = dataResourceResult.get("dataResourceId").toString();
+ //create content
+ Map<String, Object> contentCtx = FastMap.newInstance();
+ contentCtx.put("dataResourceId", dataResourceResult.get("dataResourceId").toString());
+ contentCtx.put("contentTypeId", "IMAGE_FRAME");
+ contentCtx.put("contentName", imageName);
+ contentCtx.put("fromDate", UtilDateTime.nowTimestamp());
+ contentCtx.put("userLogin", userLogin);
+ Map<String, Object> contentResult = dispatcher.runSync("createContent", contentCtx);
+ contentId = contentResult.get("contentId").toString();
+ } catch (Exception e) {
+ request.setAttribute("_ERROR_MESSAGE_", e.getMessage());
+ return "error";
+ }
+ session.setAttribute("frameContentId", contentId);
+ session.setAttribute("frameDataResourceId", dataResourceId);
+ request.setAttribute("_EVENT_MESSAGE_", "Upload frame image successful.");
+ return "success";
+ }
+ public static String previewFrameImage(HttpServletRequest request, HttpServletResponse response) throws IOException, JDOMException {
+ Delegator delegator = (Delegator) request.getAttribute("delegator");
+ Map<String, ? extends Object> context = request.getParameterMap();
+ HttpSession session = request.getSession();
+ String imageServerPath = FlexibleStringExpander.expandString(UtilProperties.getPropertyValue("catalog", "image.server.path"), context);
+
+ String productId = request.getParameter("productId");
+ String imageName = request.getParameter("imageName");
+
+ if (UtilValidate.isEmpty(request.getParameter("frameContentId")) || UtilValidate.isEmpty(request.getParameter("frameDataResourceId"))) {
+ request.setAttribute("_ERROR_MESSAGE_", "Required frame image content ID or dataResource ID parameters. Please upload new frame image or choose the exist frame.");
+ return "error";
+ }
+ String frameContentId = (String) request.getParameter("frameContentId");
+ String frameDataResourceId = (String) request.getParameter("frameDataResourceId");
+
+ if (UtilValidate.isEmpty(request.getParameter("imageWidth")) || UtilValidate.isEmpty(request.getParameter("imageHeight"))) {
+ String errMsg = "Image Width and Image Height are required to preview the image. Please enter in Image Width and Image Height fields.";
+ session.setAttribute("frameContentId", frameContentId);
+ session.setAttribute("frameDataResourceId", frameDataResourceId);
+ request.setAttribute("_ERROR_MESSAGE_", errMsg);
+ return "error";
+ }
+
+ String frameImageName = null;
+ try {
+ GenericValue contentDataResourceView = delegator.findByPrimaryKey("ContentDataResourceView", UtilMisc.toMap("contentId", frameContentId, "drDataResourceId", frameDataResourceId));
+ frameImageName = contentDataResourceView.getString("contentName");
+ } catch (Exception e) {
+ request.setAttribute("_ERROR_MESSAGE_", e.getMessage());
+ return "error";
+ }
+ if (UtilValidate.isNotEmpty(imageName)) {
+ File file = new File(imageServerPath + "/products/management/previewImage.jpg");
+ file.delete();
+ // Image Frame
+ BufferedImage bufImg1 = ImageIO.read(new File(imageServerPath + "/products/management/" + productId + "/" + imageName));
+ BufferedImage bufImg2 = ImageIO.read(new File(imageServerPath + "/products/management/frame/" + frameImageName));
+
+ int bufImgType;
+ if (BufferedImage.TYPE_CUSTOM == bufImg1.getType()) {
+ bufImgType = BufferedImage.TYPE_INT_ARGB_PRE;
+ } else {
+ bufImgType = bufImg1.getType();
+ }
+
+ int width = Integer.parseInt(request.getParameter("imageWidth"));
+ int height= Integer.parseInt(request.getParameter("imageHeight"));
+
+ Image newImg1 = bufImg1.getScaledInstance((int) width, (int) height , Image.SCALE_SMOOTH);
+ Image newImg2 = bufImg2.getScaledInstance((int) width , (int) height , Image.SCALE_SMOOTH);
+ BufferedImage bufNewImg = combineBufferedImage(newImg1, newImg2, bufImgType);
+ String mimeType = imageName.substring(imageName.lastIndexOf(".") + 1);
+ ImageIO.write((RenderedImage) bufNewImg, mimeType, new File(imageServerPath + "/products/management/previewImage.jpg"));
+
+ }
+ else{
+ String errMsg = "Please select Image.";
+ request.setAttribute("_EVENT_MESSAGE_", errMsg);
+ return "error";
+ }
+ return "success";
+ }
+ public static String chooseFrameImage(HttpServletRequest request, HttpServletResponse response) {
+ HttpSession session = request.getSession();
+ if(UtilValidate.isEmpty(request.getParameter("frameContentId"))) {
+ if (UtilValidate.isNotEmpty(request.getParameter("frameExistContentId")) && UtilValidate.isNotEmpty(request.getParameter("frameExistDataResourceId"))) {
+ session.setAttribute("frameExistContentId", request.getParameter("frameExistContentId").toString());
+ session.setAttribute("frameDataResourceId", request.getParameter("frameExistDataResourceId").toString());
+ }
+ request.setAttribute("_ERROR_MESSAGE_", "Required frame image content ID");
+ return "error";
+ }
+
+ String frameContentId = (String) request.getParameter("frameContentId");
+ Delegator delegator = (Delegator) request.getAttribute("delegator");
+
+ String frameDataResourceId = null;
+ try {
+ List<GenericValue> contentDataResources = delegator.findByAnd("ContentDataResourceView", UtilMisc.toMap("contentId", frameContentId));
+ GenericValue contentDataResource = EntityUtil.getFirst(contentDataResources);
+ frameDataResourceId = contentDataResource.getString("dataResourceId");
+ } catch (Exception e) {
+ request.setAttribute("_ERROR_MESSAGE_", e.getMessage());
+ return "error";
+ }
+ session.setAttribute("frameContentId", frameContentId);
+ session.setAttribute("frameDataResourceId", frameDataResourceId);
+ return "success";
+ }
+ public static String deleteFrameImage(HttpServletRequest request, HttpServletResponse response) {
+ Map<String, ? extends Object> context = request.getParameterMap();
+ String imageServerPath = FlexibleStringExpander.expandString(UtilProperties.getPropertyValue("catalog", "image.server.path"), context);
+ File file = new File(imageServerPath + "/products/management/previewImage.jpg");
+ if (file.exists()) {
+ file.delete();
+ }
+ return "success";
+ }
+}
\ No newline at end of file