You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by pg...@apache.org on 2016/04/14 23:12:45 UTC

svn commit: r1739197 - in /ofbiz/branches/release14.12/applications: content/src/org/ofbiz/content/data/DataEvents.java content/src/org/ofbiz/content/data/DataResourceWorker.java order/src/org/ofbiz/order/order/OrderEvents.java

Author: pgil
Date: Thu Apr 14 21:12:45 2016
New Revision: 1739197

URL: http://svn.apache.org/viewvc?rev=1739197&view=rev
Log:
OFBIZ-6944 : streamDataResource do not manage OTHER_OBJECT dataResourceTypeId

Fix an old TODO replacing streamDataResource with getDataResourceStream DataResourceWorker method, this fixing OTHER_OBJECT stream dataResource management.

Thanks Jacques for the feedback

Modified:
    ofbiz/branches/release14.12/applications/content/src/org/ofbiz/content/data/DataEvents.java
    ofbiz/branches/release14.12/applications/content/src/org/ofbiz/content/data/DataResourceWorker.java
    ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderEvents.java

Modified: ofbiz/branches/release14.12/applications/content/src/org/ofbiz/content/data/DataEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/content/src/org/ofbiz/content/data/DataEvents.java?rev=1739197&r1=1739196&r2=1739197&view=diff
==============================================================================
--- ofbiz/branches/release14.12/applications/content/src/org/ofbiz/content/data/DataEvents.java (original)
+++ ofbiz/branches/release14.12/applications/content/src/org/ofbiz/content/data/DataEvents.java Thu Apr 14 21:12:45 2016
@@ -18,6 +18,7 @@
  *******************************************************************************/
 package org.ofbiz.content.data;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -29,6 +30,7 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
+import org.apache.commons.io.IOUtils;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.UtilHttp;
@@ -43,7 +45,6 @@ import org.ofbiz.entity.util.EntityUtilP
 import org.ofbiz.service.GenericServiceException;
 import org.ofbiz.service.LocalDispatcher;
 import org.ofbiz.service.ServiceUtil;
-import org.ofbiz.webapp.website.WebSiteWorker;
 
 /**
  * DataEvents Class
@@ -283,7 +284,8 @@ public class DataEvents {
                 response.setContentType(mimeType);
             }
             OutputStream os = response.getOutputStream();
-            DataResourceWorker.streamDataResource(os, delegator, dataResourceId, "", WebSiteWorker.getWebSiteId(request), UtilHttp.getLocale(request), application.getRealPath("/"));
+            Map<String, Object> resourceData = DataResourceWorker.getDataResourceStream(dataResource, "", application.getInitParameter("webSiteId"), UtilHttp.getLocale(request), application.getRealPath("/"), false);
+            os.write(IOUtils.toByteArray((ByteArrayInputStream)resourceData.get("stream")));
             os.flush();
         } catch (GenericEntityException e) {
             String errMsg = "Error downloading digital product content: " + e.toString();

Modified: ofbiz/branches/release14.12/applications/content/src/org/ofbiz/content/data/DataResourceWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/content/src/org/ofbiz/content/data/DataResourceWorker.java?rev=1739197&r1=1739196&r2=1739197&view=diff
==============================================================================
--- ofbiz/branches/release14.12/applications/content/src/org/ofbiz/content/data/DataResourceWorker.java (original)
+++ ofbiz/branches/release14.12/applications/content/src/org/ofbiz/content/data/DataResourceWorker.java Thu Apr 14 21:12:45 2016
@@ -26,7 +26,6 @@ import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.io.StringWriter;
 import java.io.Writer;
 import java.net.URL;
@@ -50,6 +49,8 @@ import org.apache.commons.fileupload.Fil
 import org.apache.commons.fileupload.FileUploadException;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
 import org.apache.tika.Tika;
 import org.ofbiz.base.location.FlexibleLocation;
 import org.ofbiz.base.util.Debug;
@@ -84,7 +85,6 @@ import org.ofbiz.widget.renderer.macro.M
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
 
-import freemarker.template.Template;
 import freemarker.template.TemplateException;
 
 /**
@@ -1041,7 +1041,7 @@ public class DataResourceWorker  impleme
             String objectInfo = dataResource.getString("objectInfo");
             if (UtilValidate.isNotEmpty(objectInfo)) {
                 File file = DataResourceWorker.getContentFile(dataResourceTypeId, objectInfo, contextRoot);
-                return UtilMisc.toMap("stream", new FileInputStream(file), "length", Long.valueOf(file.length()));
+                return UtilMisc.toMap("stream", new ByteArrayInputStream(FileUtils.readFileToByteArray(file)), "length", Long.valueOf(file.length()));
             } else {
                 throw new GeneralException("No objectInfo found for FILE type [" + dataResourceTypeId + "]; cannot stream");
             }
@@ -1071,69 +1071,11 @@ public class DataResourceWorker  impleme
         throw new GeneralException("The dataResourceTypeId [" + dataResourceTypeId + "] is not supported in getDataResourceStream");
     }
 
-    // TODO: remove this method in favor of getDataResourceStream
-    public static void streamDataResource(OutputStream os, Delegator delegator, String dataResourceId, String https, String webSiteId, Locale locale, String rootDir) throws IOException, GeneralException {
-        try {
-            GenericValue dataResource = EntityQuery.use(delegator).from("DataResource").where("dataResourceId", dataResourceId).cache().queryOne();
-            if (dataResource == null) {
-                throw new GeneralException("Error in streamDataResource: DataResource with ID [" + dataResourceId + "] was not found.");
-            }
-            String dataResourceTypeId = dataResource.getString("dataResourceTypeId");
-            if (UtilValidate.isEmpty(dataResourceTypeId)) {
-                dataResourceTypeId = "SHORT_TEXT";
-            }
-            String mimeTypeId = dataResource.getString("mimeTypeId");
-            if (UtilValidate.isEmpty(mimeTypeId)) {
-                mimeTypeId = "text/html";
-            }
-
-            if (dataResourceTypeId.equals("SHORT_TEXT")) {
-                String text = dataResource.getString("objectInfo");
-                os.write(text.getBytes());
-            } else if (dataResourceTypeId.equals("ELECTRONIC_TEXT")) {
-                GenericValue electronicText = EntityQuery.use(delegator).from("ElectronicText").where("dataResourceId", dataResourceId).cache().queryOne();
-                if (electronicText != null) {
-                    String text = electronicText.getString("textData");
-                    if (text != null) os.write(text.getBytes());
-                }
-            } else if (dataResourceTypeId.equals("IMAGE_OBJECT")) {
-                byte[] imageBytes = acquireImage(delegator, dataResource);
-                if (imageBytes != null) os.write(imageBytes);
-            } else if (dataResourceTypeId.equals("LINK")) {
-                String text = dataResource.getString("objectInfo");
-                os.write(text.getBytes());
-            } else if (dataResourceTypeId.equals("URL_RESOURCE")) {
-                URL url = new URL(dataResource.getString("objectInfo"));
-                if (url.getHost() == null) { // is relative
-                    String prefix = buildRequestPrefix(delegator, locale, webSiteId, https);
-                    String sep = "";
-                    //String s = "";
-                    if (url.toString().indexOf("/") != 0 && prefix.lastIndexOf("/") != (prefix.length() - 1)) {
-                        sep = "/";
-                    }
-                    String s2 = prefix + sep + url.toString();
-                    url = new URL(s2);
-                }
-                InputStream in = url.openStream();
-                UtilIO.copy(in, true, os, false);
-            } else if (dataResourceTypeId.indexOf("_FILE") >= 0) {
-                String objectInfo = dataResource.getString("objectInfo");
-                File inputFile = getContentFile(dataResourceTypeId, objectInfo, rootDir);
-                //long fileSize = inputFile.length();
-                FileInputStream fis = new FileInputStream(inputFile);
-                UtilIO.copy(fis, true, os, false);
-            } else {
-                throw new GeneralException("The dataResourceTypeId [" + dataResourceTypeId + "] is not supported in streamDataResource");
-            }
-        } catch (GenericEntityException e) {
-            throw new GeneralException("Error in streamDataResource", e);
-        }
-    }
-
     public static ByteBuffer getContentAsByteBuffer(Delegator delegator, String dataResourceId, String https, String webSiteId, Locale locale, String rootDir) throws IOException, GeneralException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        streamDataResource(baos, delegator, dataResourceId, https, webSiteId, locale, rootDir);
-        ByteBuffer byteBuffer = ByteBuffer.wrap(baos.toByteArray());
+        GenericValue dataResource = EntityQuery.use(delegator).from("DataResource").where("dataResourceId", dataResourceId).queryOne(); 
+        Map<String, Object> resourceData = DataResourceWorker.getDataResourceStream(dataResource, https, webSiteId, locale, rootDir, false);
+        ByteArrayInputStream stream = (ByteArrayInputStream) resourceData.get("stream");
+        ByteBuffer byteBuffer = ByteBuffer.wrap(IOUtils.toByteArray(stream));
         return byteBuffer;
     }
 

Modified: ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderEvents.java?rev=1739197&r1=1739196&r2=1739197&view=diff
==============================================================================
--- ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderEvents.java (original)
+++ ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderEvents.java Thu Apr 14 21:12:45 2016
@@ -18,6 +18,7 @@
  *******************************************************************************/
 package org.ofbiz.order.order;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.List;
@@ -29,9 +30,11 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
+import org.apache.commons.io.IOUtils;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.UtilHttp;
+import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.content.data.DataResourceWorker;
 import org.ofbiz.entity.Delegator;
 import org.ofbiz.entity.GenericEntityException;
@@ -41,7 +44,6 @@ import org.ofbiz.entity.util.EntityQuery
 import org.ofbiz.service.GenericServiceException;
 import org.ofbiz.service.LocalDispatcher;
 import org.ofbiz.service.ServiceUtil;
-import org.ofbiz.webapp.website.WebSiteWorker;
 
 import javolution.util.FastMap;
 
@@ -80,7 +82,9 @@ public class OrderEvents {
                 response.setContentType(orderRoleAndProductContentInfo.getString("mimeTypeId"));
             }
             OutputStream os = response.getOutputStream();
-            DataResourceWorker.streamDataResource(os, delegator, dataResourceId, "", WebSiteWorker.getWebSiteId(request), UtilHttp.getLocale(request), application.getRealPath("/"));
+            GenericValue dataResource = EntityQuery.use(delegator).from("DataResource").where("dataResourceId", dataResourceId).cache().queryOne(); 
+            Map<String, Object> resourceData = DataResourceWorker.getDataResourceStream(dataResource, "", application.getInitParameter("webSiteId"), UtilHttp.getLocale(request), application.getRealPath("/"), false);
+            os.write(IOUtils.toByteArray((ByteArrayInputStream) resourceData.get("stream")));
             os.flush();
         } catch (GenericEntityException e) {
             String errMsg = "Error downloading digital product content: " + e.toString();