You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ja...@apache.org on 2007/03/02 23:03:50 UTC

svn commit: r513985 [2/3] - in /ofbiz/trunk: applications/content/ applications/content/config/ applications/content/data/ applications/content/entitydef/ applications/content/script/org/ofbiz/content/data/ applications/content/servicedef/ applications...

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/data/DataResourceWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/data/DataResourceWorker.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/data/DataResourceWorker.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/data/DataResourceWorker.java Fri Mar  2 14:03:48 2007
@@ -18,17 +18,9 @@
  *******************************************************************************/
 package org.ofbiz.content.data;
 
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-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.io.*;
 import java.net.URL;
+import java.net.URLConnection;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.HashMap;
@@ -58,6 +50,7 @@
 import org.ofbiz.entity.GenericEntityException;
 import org.ofbiz.entity.GenericValue;
 import org.ofbiz.entity.util.ByteWrapper;
+import org.ofbiz.entity.util.EntityUtil;
 import org.ofbiz.service.GenericServiceException;
 import org.ofbiz.service.LocalDispatcher;
 import org.ofbiz.widget.html.HtmlScreenRenderer;
@@ -71,8 +64,6 @@
 import freemarker.template.TemplateException;
 import javolution.util.FastMap;
 
-//import com.clarkware.profiler.Profiler;
-
 /**
  * DataResourceWorker Class
  */
@@ -406,223 +397,252 @@
         return imageType;
     }
 
-    public static String renderDataResourceAsText(GenericDelegator delegator, String dataResourceId, Map templateContext, GenericValue view, Locale locale, String mimeTypeId) throws GeneralException, IOException {
-        Writer outWriter = new StringWriter();
-        renderDataResourceAsText(delegator, dataResourceId, outWriter, templateContext, view, locale, mimeTypeId);
-        return outWriter.toString();
-    }
-
-    public static void renderDataResourceAsText(GenericDelegator delegator, String dataResourceId, Writer out, Map templateContext, GenericValue view, Locale locale, String mimeTypeId) throws GeneralException, IOException {
-        if (templateContext == null) {
-            templateContext = new HashMap();
+    public static String buildRequestPrefix(GenericDelegator delegator, Locale locale, String webSiteId, String https) {
+        Map prefixValues = FastMap.newInstance();
+        String prefix;
+        
+        NotificationServices.setBaseUrl(delegator, webSiteId, prefixValues);
+        if (https != null && https.equalsIgnoreCase("true")) {
+            prefix = (String) prefixValues.get("baseSecureUrl");
+        } else {
+            prefix = (String) prefixValues.get("baseUrl");
+        }
+        if (UtilValidate.isEmpty(prefix)) {
+            if (https != null && https.equalsIgnoreCase("true")) {
+                prefix = UtilProperties.getMessage("content", "baseSecureUrl", locale);
+            } else {
+                prefix = UtilProperties.getMessage("content", "baseUrl", locale);
+            }
         }
 
+        return prefix;
+    }
 
-//        Map context = (Map) templateContext.get("context");
-//        if (context == null) {
-//            context = new HashMap();
-//        }
+    public static File getContentFile(String dataResourceTypeId, String objectInfo, String contextRoot)  throws GeneralException, FileNotFoundException{
+        File file = null;
 
-        if (UtilValidate.isEmpty(mimeTypeId)) {
-            mimeTypeId = "text/html";
-        }
+        if (dataResourceTypeId.equals("LOCAL_FILE") || dataResourceTypeId.equals("LOCAL_FILE_BIN")) {
+            file = new File(objectInfo);
+            if (!file.exists()) {
+                throw new FileNotFoundException("No file found: " + (objectInfo));
+            }
+            if (!file.isAbsolute()) {
+                throw new GeneralException("File (" + objectInfo + ") is not absolute");
+            }
+        } else if (dataResourceTypeId.equals("OFBIZ_FILE") || dataResourceTypeId.equals("OFBIZ_FILE_BIN")) {
+            String prefix = System.getProperty("ofbiz.home");
 
-        // if the target mimeTypeId is not a text type, throw an exception
-        if (!mimeTypeId.startsWith("text/")) {
-            throw new GeneralException("The desired mime-type is not a text type, cannot render as text: " + mimeTypeId);
-        }
+            String sep = "";
+            if (objectInfo.indexOf("/") != 0 && prefix.lastIndexOf("/") != (prefix.length() - 1)) {
+                sep = "/";
+            }
+            file = new File(prefix + sep + objectInfo);
+            if (!file.exists()) {
+                throw new FileNotFoundException("No file found: " + (prefix + sep + objectInfo));
+            }
+        } else if (dataResourceTypeId.equals("CONTEXT_FILE") || dataResourceTypeId.equals("CONTEXT_FILE_BIN")) {
+            if (UtilValidate.isEmpty(contextRoot)) {
+                throw new GeneralException("Cannot find CONTEXT_FILE with an empty context root!");
+            }
 
-        GenericValue dataResource = null;
-        if (view != null) {
-            String entityName = view.getEntityName();
-            dataResource = delegator.makeValue("DataResource", null);
-            if ("DataResource".equals(entityName)) {
-                dataResource.setAllFields(view, true, null, null);
-            } else {
-                dataResource.setAllFields(view, true, "dr", null);
+            String sep = "";
+            if (objectInfo.indexOf("/") != 0 && contextRoot.lastIndexOf("/") != (contextRoot.length() - 1)) {
+                sep = "/";
             }
-            dataResourceId = dataResource.getString("dataResourceId");
-            if (UtilValidate.isEmpty(dataResourceId)) {
-                throw new GeneralException("The dataResourceId [" + dataResourceId + "] is empty.");
+            file = new File(contextRoot + sep + objectInfo);
+            if (!file.exists()) {
+                throw new FileNotFoundException("No file found: " + (contextRoot + sep + objectInfo));
             }
         }
 
-        if (dataResource == null || dataResource.isEmpty()) {
-            if (dataResourceId == null) {
-                throw new GeneralException("DataResourceId is null");
-            }
-            dataResource = delegator.findByPrimaryKey("DataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
+        return file;
+    }
+
+
+    public static String getDataResourceMimeType(GenericDelegator delegator, String dataResourceId, GenericValue view) throws GenericEntityException {
+
+        String mimeType = null;
+        if (view != null)
+            mimeType = view.getString("drMimeTypeId");
+            //if (Debug.infoOn()) Debug.logInfo("getDataResourceMimeType, mimeType(2):" + mimeType, "");
+        if (UtilValidate.isEmpty(mimeType) && UtilValidate.isNotEmpty(dataResourceId)) {
+                GenericValue dataResource = delegator.findByPrimaryKeyCache("DataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
+                //if (Debug.infoOn()) Debug.logInfo("getDataResourceMimeType, dataResource(2):" + dataResource, "");
+                mimeType = dataResource.getString("mimeTypeId");
+
         }
-        if (dataResource == null || dataResource.isEmpty()) {
-            throw new GeneralException("DataResource not found with id=" + dataResourceId);
+        return mimeType;
+    }
+
+    public static String getDataResourceContentUploadPath() {
+        String initialPath = UtilProperties.getPropertyValue("content.properties", "content.upload.path.prefix");
+        double maxFiles = UtilProperties.getPropertyNumber("content.properties", "content.upload.max.files");
+        if (maxFiles < 1) {
+            maxFiles = 250;
         }
+        String ofbizHome = System.getProperty("ofbiz.home");
 
-        String drMimeTypeId = dataResource.getString("mimeTypeId");
-        if (UtilValidate.isEmpty(drMimeTypeId)) {
-            drMimeTypeId = "text/plain";
+        if (!initialPath.startsWith("/")) {
+            initialPath = "/" + initialPath;
         }
 
-        String dataTemplateTypeId = dataResource.getString("dataTemplateTypeId");
+        // descending comparator
+        Comparator desc = new Comparator() {
+            public int compare(Object o1, Object o2) {
+                if (((Long) o1).longValue() > ((Long) o2).longValue()) {
+                    return -1;
+                } else if (((Long) o1).longValue() < ((Long) o2).longValue()) {
+                    return 1;
+                }
+                return 0;
+            }
+        };
 
-        // if this is a template, we need to get the full template text and interpret it, otherwise we should just write a bit at a time to the writer to better support large text
-        if (UtilValidate.isEmpty(dataTemplateTypeId) || "NONE".equals(dataTemplateTypeId)) {
-            writeDataResourceText(dataResource, mimeTypeId, locale, templateContext, delegator, out);
+        // check for the latest subdirectory
+        String parentDir = ofbizHome + initialPath;
+        File parent = new File(parentDir);
+        TreeMap dirMap = new TreeMap(desc);
+        if (parent.exists()) {
+            File[] subs = parent.listFiles();
+            for (int i = 0; i < subs.length; i++) {
+                if (subs[i].isDirectory()) {
+                    dirMap.put(new Long(subs[0].lastModified()), subs[i]);
+                }
+            }
         } else {
-            String subContentId = (String)templateContext.get("subContentId");
-            //String subContentId = (String)context.get("subContentId");
-            // TODO: the reason why I did this (and I can't remember) may not be valid or it can be done better
-            if (UtilValidate.isNotEmpty(subContentId)) {
-                //context.put("contentId", subContentId);
-                //context.put("subContentId", null);
-                templateContext.put("contentId", subContentId);
-                templateContext.put("subContentId", null);
+            // if the parent doesn't exist; create it now
+            boolean created = parent.mkdir();
+            if (!created) {
+                Debug.logWarning("Unable to create top level upload directory [" + parentDir + "].", module);
             }
+        }
 
-
-            // get the full text of the DataResource
-            String templateText = getDataResourceText(dataResource, mimeTypeId, locale, templateContext, delegator);
-
-            //String subContentId3 = (String)context.get("subContentId");
-
-//            context.put("mimeTypeId", null);
-            templateContext.put("mimeTypeId", null);
-//            templateContext.put("context", context);
-
-            if ("FTL".equals(dataTemplateTypeId)) {
-                try {
-                    FreeMarkerWorker.renderTemplate("DataResource:" + dataResourceId, templateText, templateContext, out);
-                } catch (TemplateException e) {
-                    throw new GeneralException("Error rendering FTL template", e);
+        // first item in map is the most current directory
+        File latestDir = null;
+        if (dirMap != null && dirMap.size() > 0) {
+            latestDir = (File) dirMap.values().iterator().next();
+            if (latestDir != null) {
+                File[] dirList = latestDir.listFiles();
+                if (dirList.length >= maxFiles) {
+                    latestDir = makeNewDirectory(parent);
                 }
-            } else {
-                throw new GeneralException("The dataTemplateTypeId [" + dataTemplateTypeId + "] is not yet supported");
             }
+        } else {
+            latestDir = makeNewDirectory(parent);
         }
-    }
 
-    public static String renderDataResourceAsTextCache(GenericDelegator delegator, String dataResourceId, Map templateContext, GenericValue view, Locale locale, String mimeTypeId) throws GeneralException, IOException {
-        Writer outWriter = new StringWriter();
-        renderDataResourceAsTextCache(delegator, dataResourceId, outWriter, templateContext, view, locale, mimeTypeId);
-        return outWriter.toString();
+        Debug.log("Directory Name : " + latestDir.getName(), module);
+        return latestDir.getAbsolutePath().replace('\\','/');
     }
 
+    private static File makeNewDirectory(File parent) {
+        File latestDir = null;
+        boolean newDir = false;
+        while (!newDir) {
+            latestDir = new File(parent, "" + System.currentTimeMillis());
+            if (!latestDir.exists()) {
+                latestDir.mkdir();
+                newDir = true;
+            }
+        }
+        return latestDir;
+    }
 
-    public static void renderDataResourceAsTextCache(GenericDelegator delegator, String dataResourceId, Writer out, Map templateRoot, GenericValue view, Locale locale, String mimeTypeId) throws GeneralException, IOException {
+    // -------------------------------------
+    // DataResource rendering methods
+    // -------------------------------------
+
+    public static String renderDataResourceAsText(GenericDelegator delegator, String dataResourceId, Map templateContext,
+             Locale locale, String targetMimeTypeId, boolean cache) throws GeneralException, IOException {
+        Writer writer = new StringWriter();
+        renderDataResourceAsText(delegator, dataResourceId, writer, templateContext, locale, targetMimeTypeId, cache);
+        return writer.toString();
+    }
 
-        if (templateRoot == null) {
-            templateRoot = new HashMap();
+    public static void renderDataResourceAsText(GenericDelegator delegator, String dataResourceId, Writer out,
+            Map templateContext, Locale locale, String targetMimeTypeId, boolean cache) throws GeneralException, IOException {
+        if (dataResourceId == null) {
+                throw new GeneralException("Cannot lookup data resource with for a null dataResourceId");
+            }
+        if (templateContext == null) {
+            templateContext = FastMap.newInstance();
+        }
+        if (UtilValidate.isEmpty(targetMimeTypeId)) {
+            targetMimeTypeId = "text/html";
+        }
+        if (locale == null) {
+            locale = Locale.getDefault();
         }
 
-        //Map context = (Map) templateRoot.get("context");
-        //if (context == null) {
-            //context = new HashMap();
-        //}
-
-        String disableCache = UtilProperties.getPropertyValue("content", "disable.ftl.template.cache");
-        if (disableCache == null || !disableCache.equalsIgnoreCase("true")) {
-            Template cachedTemplate = FreeMarkerWorker.getTemplateCached(dataResourceId);
-            if (cachedTemplate != null) {
-                try {
-                    String subContentId = (String)templateRoot.get("subContentId");
-                    if (UtilValidate.isNotEmpty(subContentId)) {
-                        templateRoot.put("contentId", subContentId);
-                        templateRoot.put("subContentId", null);
-                        templateRoot.put("globalNodeTrail", null); // Force getCurrentContent to query for subContent
+        // check for a cahced template
+        if (cache) {
+            String disableCache = UtilProperties.getPropertyValue("content", "disable.ftl.template.cache");
+            if (disableCache == null || !disableCache.equalsIgnoreCase("true")) {
+                Template cachedTemplate = FreeMarkerWorker.getTemplateCached(dataResourceId);
+                if (cachedTemplate != null) {
+                    try {
+                        String subContentId = (String) templateContext.get("subContentId");
+                        if (UtilValidate.isNotEmpty(subContentId)) {
+                            templateContext.put("contentId", subContentId);
+                            templateContext.put("subContentId", null);
+                            templateContext.put("globalNodeTrail", null); // Force getCurrentContent to query for subContent
+                        }
+                        FreeMarkerWorker.renderTemplateCached(cachedTemplate, templateContext, out);
+                    } catch (TemplateException e) {
+                        Debug.logError("Error rendering FTL template. " + e.getMessage(), module);
+                        throw new GeneralException("Error rendering FTL template", e);
                     }
-                    FreeMarkerWorker.renderTemplateCached(cachedTemplate, templateRoot, out);
-                } catch (TemplateException e) {
-                    Debug.logError("Error rendering FTL template. " + e.getMessage(), module);
-                    throw new GeneralException("Error rendering FTL template", e);
+                    return;
                 }
-                return;
             }
         }
 
-        if (UtilValidate.isEmpty(mimeTypeId)) {
-            mimeTypeId = "text/html";
-        }
-
         // if the target mimeTypeId is not a text type, throw an exception
-        if (!mimeTypeId.startsWith("text/")) {
-            throw new GeneralException("The desired mime-type is not a text type, cannot render as text: " + mimeTypeId);
+        if (!targetMimeTypeId.startsWith("text/")) {
+            throw new GeneralException("The desired mime-type is not a text type, cannot render as text: " + targetMimeTypeId);
         }
 
+        // get the data resource object
         GenericValue dataResource = null;
-        if (view != null) {
-            String entityName = view.getEntityName();
-            dataResource = delegator.makeValue("DataResource", null);
-            if ("DataResource".equals(entityName)) {
-                dataResource.setAllFields(view, true, null, null);
-            } else {
-                dataResource.setAllFields(view, true, "dr", null);
-            }
-            String thisDataResourceId = null;
-            try {
-                thisDataResourceId = (String) view.get("drDataResourceId");
-            } catch (Exception e) {
-                thisDataResourceId = (String) view.get("dataResourceId");
-            }
-            if (UtilValidate.isEmpty(thisDataResourceId)) {
-                if (UtilValidate.isNotEmpty(dataResourceId))
-                    view = null; // causes lookup of DataResource
-                else
-                    throw new GeneralException("The dataResourceId [" + dataResourceId + "] is empty.");
-            }
-        }
-
-        if (dataResource == null || dataResource.isEmpty()) {
-            if (dataResourceId == null) {
-                throw new GeneralException("DataResourceId is null");
-            }
+        if (cache) {
             dataResource = delegator.findByPrimaryKeyCache("DataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
-        }
-        if (dataResource == null || dataResource.isEmpty()) {
-            throw new GeneralException("DataResource not found with id=" + dataResourceId);
+        } else {
+            dataResource = delegator.findByPrimaryKey("DataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
         }
 
-        String drMimeTypeId = dataResource.getString("mimeTypeId");
-        if (UtilValidate.isEmpty(drMimeTypeId)) {
-            drMimeTypeId = "text/plain";
+        if (dataResource == null) {
+            throw new GeneralException("No data resource object found for dataResourceId: [" + dataResourceId + "]");
         }
 
+        // a data template attached to the data resource
         String dataTemplateTypeId = dataResource.getString("dataTemplateTypeId");
-        //if (Debug.infoOn()) Debug.logInfo("in renderDataResourceAsText, dataTemplateTypeId :" + dataTemplateTypeId ,"");
 
-        // if this is a template, we need to get the full template text and interpret it, otherwise we should just write a bit at a time to the writer to better support large text
+        // no template; or template is NONE; render the data
         if (UtilValidate.isEmpty(dataTemplateTypeId) || "NONE".equals(dataTemplateTypeId)) {
-            writeDataResourceTextCache(dataResource, mimeTypeId, locale, templateRoot, delegator, out);
-        } else {
-            String subContentId = (String)templateRoot.get("subContentId");
-            if (UtilValidate.isNotEmpty(subContentId)) {
-                templateRoot.put("contentId", subContentId);
-                templateRoot.put("subContentId", null);
-            }
+            DataResourceWorker.writeDataResourceText(dataResource, targetMimeTypeId, locale, templateContext, delegator, out, true);
 
-            templateRoot.put("mimeTypeId", null);
+        // a template is defined; render the template first
+        } else {
+            templateContext.put("mimeTypeId", targetMimeTypeId);
 
+            // FTL template
             if ("FTL".equals(dataTemplateTypeId)) {
                 try {
-                    // This is something of a hack. FTL templates should need "contentId" value and
-                    // not subContentId so that it will find subContent.
-                    templateRoot.put("contentId", subContentId);
-                    templateRoot.put("subContentId", null);
-                    templateRoot.put("globalNodeTrail", null); // Force getCurrentContent to query for subContent
-                    //if (Debug.infoOn()) Debug.logInfo("in renderDataResourceAsTextCache, templateRoot :" + templateRoot ,"");
-                    //StringWriter sw = new StringWriter();
-                    // get the full text of the DataResource
-                    String templateText = getDataResourceTextCache(dataResource, mimeTypeId, locale, templateRoot, delegator);
-                    FreeMarkerWorker.renderTemplate("DataResource:" + dataResourceId, templateText, templateRoot, out);
-                    //if (Debug.infoOn()) Debug.logInfo("in renderDataResourceAsText, sw:" + sw.toString(),"");
-                    //out.write(sw.toString());
-                    //out.flush();
+                    // get the template data for rendering
+                    String templateText = getDataResourceText(dataResource, targetMimeTypeId, locale, templateContext, delegator, cache);
+
+                    // render the FTL template
+                    FreeMarkerWorker.renderTemplate("DataResource:" + dataResourceId, templateText, templateContext, out);
                 } catch (TemplateException e) {
                     throw new GeneralException("Error rendering FTL template", e);
                 }
+
+            // Screen Widget template
             } else if ("SCREEN_COMBINED".equals(dataTemplateTypeId)) {
                 try {
-                    MapStack context = MapStack.create(templateRoot);
+                    MapStack context = MapStack.create(templateContext);
                     context.put("locale", locale);
-                    
+
                     // prepare the map for preRenderedContent
                     Map prc = FastMap.newInstance();
                     String textData = (String) context.get("textData");
@@ -633,20 +653,22 @@
                     prc.put("body", textData); // used for default screen defs
                     context.put("preRenderedContent", prc);
 
+                    // get the screen renderer; or create a new one
                     ScreenRenderer screens = (ScreenRenderer) context.get("screens");
                     if (screens == null) {
                         screens = new ScreenRenderer(out, context, new HtmlScreenRenderer());
                         screens.getContext().put("screens", screens);
                     }
 
+                    // render the screen
                     ScreenStringRenderer renderer = screens.getScreenStringRenderer();
                     String combinedName = (String) dataResource.get("objectInfo");
                     ModelScreen modelScreen = ScreenFactory.getScreenFromLocation(combinedName);
                     modelScreen.renderScreenString(out, context, renderer);
                 } catch (SAXException e) {
                     throw new GeneralException("Error rendering Screen template", e);
-                } catch(ParserConfigurationException e3) {
-                    throw new GeneralException("Error rendering Screen template", e3);
+                } catch (ParserConfigurationException e) {
+                    throw new GeneralException("Error rendering Screen template", e);
                 }
             } else {
                 throw new GeneralException("The dataTemplateTypeId [" + dataTemplateTypeId + "] is not yet supported");
@@ -654,20 +676,54 @@
         }
     }
 
-    public static String getDataResourceText(GenericValue dataResource, String mimeTypeId, Locale locale, Map context, GenericDelegator delegator) throws IOException, GeneralException {
-        Writer outWriter = new StringWriter();
-        writeDataResourceText(dataResource, mimeTypeId, locale, context, delegator, outWriter);
-        return outWriter.toString();
+
+    /** @deprecated */
+    public static String renderDataResourceAsText(GenericDelegator delegator, String dataResourceId, Map templateContext,
+            GenericValue view, Locale locale, String mimeTypeId) throws GeneralException, IOException {
+        return renderDataResourceAsText(delegator, dataResourceId, templateContext, locale, mimeTypeId, false);
+    }
+
+    /** @deprecated */
+    public static void renderDataResourceAsText(GenericDelegator delegator, String dataResourceId, Writer out,
+            Map templateContext, GenericValue view, Locale locale, String targetMimeTypeId) throws GeneralException, IOException {
+        renderDataResourceAsText(delegator, dataResourceId, out, templateContext, locale, targetMimeTypeId, false);
     }
 
-    public static void writeDataResourceText(GenericValue dataResource, String mimeTypeId, Locale locale, Map templateContext, GenericDelegator delegator, Writer outWriter) throws IOException, GeneralException {
+    /** @deprecated */
+    public static String renderDataResourceAsTextCache(GenericDelegator delegator, String dataResourceId, Map templateContext,
+            GenericValue view, Locale locale, String mimeTypeId) throws GeneralException, IOException {
+        return renderDataResourceAsText(delegator, dataResourceId, templateContext, locale, mimeTypeId, true);
+    }
 
-        Map context = (Map)templateContext.get("context");
+    /** @deprecated */
+    public static void renderDataResourceAsTextCache(GenericDelegator delegator, String dataResourceId, Writer out,
+            Map templateContext, GenericValue view, Locale locale, String targetMimeTypeId) throws GeneralException, IOException {
+        renderDataResourceAsText(delegator, dataResourceId, out, templateContext, locale, targetMimeTypeId, true);
+    }
+
+    // ----------------------------
+    // Data Resource Data Gathering
+    // ----------------------------
+
+    public static String getDataResourceText(GenericValue dataResource, String mimeTypeId, Locale locale, Map context,
+            GenericDelegator delegator, boolean cache) throws IOException, GeneralException {
+        Writer out = new StringWriter();
+        writeDataResourceText(dataResource, mimeTypeId, locale, context, delegator, out, cache);
+        return out.toString();
+    }
+
+    public static void writeDataResourceText(GenericValue dataResource, String mimeTypeId, Locale locale, Map templateContext,
+            GenericDelegator delegator, Writer out, boolean cache) throws IOException, GeneralException {
+        Map context = (Map) templateContext.get("context");
+        if (context == null) {
+            context = FastMap.newInstance();
+        }
         String webSiteId = (String) templateContext.get("webSiteId");
         if (UtilValidate.isEmpty(webSiteId)) {
             if (context != null)
                 webSiteId = (String) context.get("webSiteId");
         }
+
         String https = (String) templateContext.get("https");
         if (UtilValidate.isEmpty(https)) {
             if (context != null)
@@ -676,36 +732,32 @@
 
         String dataResourceId = dataResource.getString("dataResourceId");
         String dataResourceTypeId = dataResource.getString("dataResourceTypeId");
+
+        // default type
         if (UtilValidate.isEmpty(dataResourceTypeId)) {
             dataResourceTypeId = "SHORT_TEXT";
         }
 
-        if (dataResourceTypeId.equals("SHORT_TEXT")) {
+        // text types
+        if ("SHORT_TEXT".equals(dataResourceTypeId) || "LINK".equals(dataResourceTypeId)) {
             String text = dataResource.getString("objectInfo");
-            outWriter.write(text);
-        } else if (dataResourceTypeId.equals("ELECTRONIC_TEXT")) {
-            GenericValue electronicText = delegator.findByPrimaryKey("ElectronicText", UtilMisc.toMap("dataResourceId", dataResourceId));
-            String text = electronicText.getString("textData");
-            outWriter.write(text);
-        } else if (dataResourceTypeId.equals("IMAGE_OBJECT")) {
-            // TODO: Is this where the image (or any binary) object URL is created? looks like it is just returning
-            //the ID, maybe is okay, but maybe should create the whole image tag so that text and images can be
-            //interchanged without changing the wrapping template, and so the wrapping template doesn't have to know what the root is, etc
-            /*
-            // decide how to render based on the mime-types
-            // TODO: put this in a separate method to be re-used for file objects as well...
-            if ("text/html".equals(mimeTypeId)) {
-            } else if ("text/plain".equals(mimeTypeId)) {
+            writeText(dataResource, text, templateContext, mimeTypeId, locale, out);
+        } else if ("ELECTRONIC_TEXT".equals(dataResourceTypeId)) {
+            GenericValue electronicText;
+            if (cache) {
+                electronicText = delegator.findByPrimaryKeyCache("ElectronicText", UtilMisc.toMap("dataResourceId", dataResourceId));
             } else {
-                throw new GeneralException("The renderDataResourceAsText operation does not yet support the desired mime-type: " + mimeTypeId);
+                electronicText = delegator.findByPrimaryKey("ElectronicText", UtilMisc.toMap("dataResourceId", dataResourceId));
             }
-            */
+            String text = electronicText.getString("textData");
+            writeText(dataResource, text, templateContext, mimeTypeId, locale, out);
 
+        // object types
+        } else if (dataResourceTypeId.endsWith("_OBJECT")) {
             String text = (String) dataResource.get("dataResourceId");
-            outWriter.write(text);
-        } else if (dataResourceTypeId.equals("LINK")) {
-            String text = dataResource.getString("objectInfo");
-            outWriter.write(text);
+            writeText(dataResource, text, templateContext, mimeTypeId, locale, out);
+
+        // resource type
         } else if (dataResourceTypeId.equals("URL_RESOURCE")) {
             String text = null;
             URL url = new URL(dataResource.getString("objectInfo"));
@@ -719,152 +771,109 @@
                 sw.close();
                 text = sw.toString();
             } else {
-                String prefix = buildRequestPrefix(delegator, locale, webSiteId, https);
+                String prefix = DataResourceWorker.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 url2 = new URL(s2);
-                text = (String) url2.getContent();
-            }
-            outWriter.write(text);
-        } else if (dataResourceTypeId.indexOf("_FILE") >= 0) {
-            String rootDir = (String) templateContext.get("rootDir");
-            if (UtilValidate.isEmpty(rootDir)) {
-                if (context != null)
-                    rootDir = (String) context.get("rootDir");
-            }
-            if (mimeTypeId != null && mimeTypeId.startsWith("image")) {
-                writeDataResourceText(dataResource, mimeTypeId, locale, context, delegator, outWriter);
+                String fixedUrlStr = prefix + sep + url.toString();
+                URL fixedUrl = new URL(fixedUrlStr);
+                text = (String) fixedUrl.getContent();
+            }
+            out.write(text);
+
+        // file types
+        } else if (dataResourceTypeId.endsWith("_FILE_BIN")) {
+            writeText(dataResource, dataResourceId, templateContext, mimeTypeId, locale, out);
+        } else if (dataResourceTypeId.endsWith("_FILE")) {
+            String dataResourceMimeTypeId = dataResource.getString("mimeTypeId");
+            String objectInfo = dataResource.getString("objectInfo");
+            String rootDir = (String) context.get("rootDir");
+
+            if (dataResourceMimeTypeId == null || dataResourceMimeTypeId.startsWith("text")) {
+                renderFile(dataResourceTypeId, objectInfo, rootDir, out);
             } else {
-                renderFile(dataResourceTypeId, dataResource.getString("objectInfo"), rootDir, outWriter);
+                writeText(dataResource, dataResourceId, templateContext, mimeTypeId, locale, out);
             }
         } else {
             throw new GeneralException("The dataResourceTypeId [" + dataResourceTypeId + "] is not supported in renderDataResourceAsText");
         }
     }
 
-    public static String getDataResourceTextCache(GenericValue dataResource, String mimeTypeId, Locale locale, Map context, GenericDelegator delegator) throws IOException, GeneralException {
-        Writer outWriter = new StringWriter();
-        writeDataResourceText(dataResource, mimeTypeId, locale, context, delegator, outWriter);
-        return outWriter.toString();
+    /** @deprecated */
+    public static String getDataResourceTextCache(GenericValue dataResource, String mimeTypeId, Locale locale, Map context,
+            GenericDelegator delegator) throws IOException, GeneralException {
+        return getDataResourceText(dataResource, mimeTypeId, locale, context, delegator, true);
     }
 
-    public static void writeDataResourceTextCache(GenericValue dataResource, String mimeTypeId, Locale locale, Map context, GenericDelegator delegator, Writer outWriter) throws IOException, GeneralException {
+    /** @deprecated */
+    public static void writeDataResourceTextCache(GenericValue dataResource, String mimeTypeId, Locale locale, Map context,
+            GenericDelegator delegator, Writer outWriter) throws IOException, GeneralException {
+        writeDataResourceText(dataResource, mimeTypeId, locale, context, delegator, outWriter, true);       
+    }
 
-        if (context == null)
-            context = new HashMap();
+    /** @deprecated */
+    public static String getDataResourceText(GenericValue dataResource, String mimeTypeId, Locale locale, Map context,
+            GenericDelegator delegator) throws IOException, GeneralException {
+        return getDataResourceText(dataResource, mimeTypeId, locale, context, delegator, false);
+    }
 
-        String text = null;
-        String webSiteId = (String) context.get("webSiteId");
-        String https = (String) context.get("https");
+    /** @deprecated */
+    public static void writeDataResourceText(GenericValue dataResource, String mimeTypeId, Locale locale, Map context,
+            GenericDelegator delegator, Writer out) throws IOException, GeneralException {
+        writeDataResourceText(dataResource, mimeTypeId, locale, context, delegator, out, false);
+    }
 
-        String dataResourceId = dataResource.getString("dataResourceId");
-        String dataResourceTypeId = dataResource.getString("dataResourceTypeId");
+    public static void writeText(GenericValue dataResource, String textData, Map context, String targetMimeTypeId, Locale locale, Writer out) throws GeneralException, IOException {
         String dataResourceMimeTypeId = dataResource.getString("mimeTypeId");
-        if (UtilValidate.isEmpty(dataResourceTypeId)) {
-            dataResourceTypeId = "SHORT_TEXT";
+        GenericDelegator delegator = dataResource.getDelegator();
+
+        // assume HTML as data resource data
+        if (UtilValidate.isEmpty(dataResourceMimeTypeId)) {
+            dataResourceMimeTypeId = "text/html";
         }
 
-        if (dataResourceTypeId.equals("SHORT_TEXT")) {
-            text = dataResource.getString("objectInfo");
-            writeText(text, dataResourceMimeTypeId, mimeTypeId, outWriter);
-        } else if (dataResourceTypeId.equals("ELECTRONIC_TEXT")) {
-            GenericValue electronicText = delegator.findByPrimaryKeyCache("ElectronicText", UtilMisc.toMap("dataResourceId", dataResourceId));
-            if (electronicText != null) {
-                text = electronicText.getString("textData");
-                writeText(text, dataResourceMimeTypeId, mimeTypeId, outWriter);
-            }
-        } else if (dataResourceTypeId.equals("IMAGE_OBJECT")) {
-            // TODO: Is this where the image (or any binary) object URL is created? looks like it is just returning
-            //the ID, maybe is okay, but maybe should create the whole image tag so that text and images can be
-            //interchanged without changing the wrapping template, and so the wrapping template doesn't have to know what the root is, etc
-            /*
-            // decide how to render based on the mime-types
-            // TODO: put this in a separate method to be re-used for file objects as well...
-            if ("text/html".equals(mimeTypeId)) {
-            } else if ("text/plain".equals(mimeTypeId)) {
-            } else {
-                throw new GeneralException("The renderDataResourceAsText operation does not yet support the desired mime-type: " + mimeTypeId);
-            }
-            */
+        // assume HTML for target
+        if (UtilValidate.isEmpty(targetMimeTypeId)) {
+            targetMimeTypeId = "text/html";
+        }
 
-            text = (String) dataResource.get("dataResourceId");
-            writeText(text, dataResourceMimeTypeId, mimeTypeId, outWriter);
-        } else if (dataResourceTypeId.equals("LINK")) {
-            text = dataResource.getString("objectInfo");
-            writeText(text, dataResourceMimeTypeId, mimeTypeId, outWriter);
-        } else if (dataResourceTypeId.equals("URL_RESOURCE")) {
-            URL url = new URL(dataResource.getString("objectInfo"));
-            if (url.getHost() != null) { // is absolute
-                InputStream in = url.openStream();
-                int c;
-                StringWriter sw = new StringWriter();
-                while ((c = in.read()) != -1) {
-                    sw.write(c);
-                }
-                sw.close();
-                text = sw.toString();
-            } else {
-                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 url2 = new URL(s2);
-                text = (String) url2.getContent();
-            }
-            writeText(text, dataResourceMimeTypeId, mimeTypeId, outWriter);
-        } else if (dataResourceTypeId.indexOf("_FILE_BIN") >= 0) {
-            String rootDir = (String) context.get("rootDir");
-            //renderFileBin(dataResourceTypeId, dataResource.getString("objectInfo"), rootDir, outWriter);
-            String objectInfo = dataResource.getString("objectInfo");
-            dataResourceMimeTypeId = dataResource.getString("mimeTypeId");
-            writeText( dataResourceId, dataResourceMimeTypeId, "text/html", outWriter);
-        } else if (dataResourceTypeId.indexOf("_FILE") >= 0) {
-            String rootDir = (String) context.get("rootDir");
-            dataResourceMimeTypeId = dataResource.getString("mimeTypeId");
-            if (dataResourceMimeTypeId == null || dataResourceMimeTypeId.startsWith("text")) {
-                renderFile(dataResourceTypeId, dataResource.getString("objectInfo"), rootDir, outWriter);
-            } else {
-                writeText( dataResourceId, dataResourceMimeTypeId, "text/html", outWriter);
-            }
-        } else {
-            throw new GeneralException("The dataResourceTypeId [" + dataResourceTypeId + "] is not supported in renderDataResourceAsText");
+        // we can only render text
+        if (!targetMimeTypeId.startsWith("text")) {
+            throw new GeneralException("Method writeText() only supports rendering text content : " + targetMimeTypeId + " is not supported");
         }
-    }
 
-    public static void writeText( String textData, String dataResourceMimeType, String targetMimeType, Writer out) throws IOException {
-        if (UtilValidate.isEmpty(targetMimeType))
-            targetMimeType = "text/html";
-        if (UtilValidate.isEmpty(dataResourceMimeType))
-            dataResourceMimeType = "text/html";
+        if ("text/html".equals(targetMimeTypeId)) {
+            // get the default mime type template
+            GenericValue mimeTypeTemplate = delegator.findByPrimaryKeyCache("MimeTypeHtmlTemplate", UtilMisc.toMap("mimeTypeId", dataResourceMimeTypeId));
 
-        if (dataResourceMimeType.startsWith("text") ) {
-                out.write(textData);
-        } else {
-            if( targetMimeType.equals("text/html")) {
-                /*
-                if (request == null || response == null) {
-                    throw new GeneralException("Request [" + request + "] or response [" + response + "] is null.");
-                }
-                ServletContext ctx = (ServletContext) request.getAttribute("servletContext");
-                RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_");
-                boolean fullPath = false;
-                boolean secure = false;
-                boolean encode = false;
-                String url = rh.makeLink(request, response, buf.toString(), fullPath, secure, encode);
-                */
-                String img = "<img src=\"/content/control/img?imgId=" + textData + "\"/>";
-                out.write(img);
-            } else if( targetMimeType.equals("text/plain")) {
+            if (mimeTypeTemplate != null && mimeTypeTemplate.get("templateLocation") != null) {
+                // prepare the context
+                Map mimeContext = FastMap.newInstance();
+                mimeContext.putAll(context);
+                mimeContext.put("dataResource", dataResource);
+                mimeContext.put("textData", textData);
+                
+                String mimeString = DataResourceWorker.renderMimeTypeTemplate(mimeTypeTemplate, context);
+                out.write(mimeString);
+            } else {
                 out.write(textData);
             }
+        } else if ("text/plain".equals(targetMimeTypeId)) {
+            out.write(textData);
+        }
+    }
+
+    public static String renderMimeTypeTemplate(GenericValue mimeTypeTemplate, Map context) throws GeneralException, IOException {
+        String location = mimeTypeTemplate.getString("templateLocation");
+        StringWriter writer = new StringWriter();
+        try {
+            FreeMarkerWorker.renderTemplateAtLocation(location, context, writer);
+        } catch (TemplateException e) {
+            throw new GeneralException(e.getMessage(), e);
         }
+
+        return writer.toString();
     }
 
     public static void renderFile(String dataResourceTypeId, String objectInfo, String rootDir, Writer out) throws GeneralException, IOException {
@@ -918,143 +927,137 @@
         }
     }
 
+    // ----------------------------
+    // Data Resource Streaming
+    // ----------------------------
 
-    public static String buildRequestPrefix(GenericDelegator delegator, Locale locale, String webSiteId, String https) {
-        String prefix = null;
-        Map prefixValues = new HashMap();
-        NotificationServices.setBaseUrl(delegator, webSiteId, prefixValues);
-        if (https != null && https.equalsIgnoreCase("true")) {
-            prefix = (String) prefixValues.get("baseSecureUrl");
-        } else {
-            prefix = (String) prefixValues.get("baseUrl");
-        }
-        if (UtilValidate.isEmpty(prefix)) {
-            if (https != null && https.equalsIgnoreCase("true")) {
-                prefix = UtilProperties.getMessage("content", "baseSecureUrl", locale);
-            } else {
-                prefix = UtilProperties.getMessage("content", "baseUrl", locale);
-            }
+    /**
+     * getDataResourceStream - gets an InputStream and Content-Length of a DataResource
+     *
+     * @param dataResource
+     * @param https
+     * @param webSiteId
+     * @param locale
+     * @param contextRoot
+     * @return Map containing 'stream': the InputStream and 'length' a Long containing the content-length
+     * @throws IOException
+     * @throws GeneralException
+     */
+    public static Map getDataResourceStream(GenericValue dataResource, String https, String webSiteId, Locale locale, String contextRoot, boolean cache) throws IOException, GeneralException {
+        if (dataResource == null) {
+            throw new GeneralException("Cannot stream null data resource!");
         }
 
-        return prefix;
-    }
-
-    public static File getContentFile(String dataResourceTypeId, String objectInfo, String rootDir)  throws GeneralException, FileNotFoundException{
+        String dataResourceTypeId = dataResource.getString("dataResourceTypeId");
+        String dataResourceId = dataResource.getString("dataResourceId");
+        GenericDelegator delegator = dataResource.getDelegator();
 
-        File file = null;
-        if (dataResourceTypeId.equals("LOCAL_FILE") || dataResourceTypeId.equals("LOCAL_FILE_BIN")) {
-            file = new File(objectInfo);
-            if (!file.isAbsolute()) {
-                throw new GeneralException("File (" + objectInfo + ") is not absolute");
-            }
-        } else if (dataResourceTypeId.equals("OFBIZ_FILE") || dataResourceTypeId.equals("OFBIZ_FILE_BIN")) {
-            String prefix = System.getProperty("ofbiz.home");
-            String sep = "";
-            if (objectInfo.indexOf("/") != 0 && prefix.lastIndexOf("/") != (prefix.length() - 1)) {
-                sep = "/";
-            }
-            file = new File(prefix + sep + objectInfo);
-        } else if (dataResourceTypeId.equals("CONTEXT_FILE") || dataResourceTypeId.equals("CONTEXT_FILE_BIN")) {
-            String prefix = rootDir;
-            String sep = "";
-            if (objectInfo.indexOf("/") != 0 && prefix.lastIndexOf("/") != (prefix.length() - 1)) {
-                sep = "/";
+        // first text based data
+        if (dataResourceTypeId.endsWith("_TEXT") || "LINK".equals(dataResourceTypeId)) {
+            String text = "";
+
+            if ("SHORT_TEXT".equals(dataResourceTypeId) || "LINK".equals(dataResourceTypeId)) {
+                text = dataResource.getString("objectInfo");
+            } else if ("ELECTRONIC_TEXT".equals(dataResourceTypeId)) {
+                GenericValue electronicText;
+                if (cache) {
+                    electronicText = delegator.findByPrimaryKeyCache("ElectronicText", UtilMisc.toMap("dataResourceId", dataResourceId));
+                } else {
+                    electronicText = delegator.findByPrimaryKey("ElectronicText", UtilMisc.toMap("dataResourceId", dataResourceId));
+                }
+                if (electronicText != null) {
+                    text = electronicText.getString("textData");
+                }
+            } else {
+                throw new GeneralException("Unsupported TEXT type; cannot stream");
             }
-            file = new File(prefix + sep + objectInfo);
-        }
-        return file;
-    }
 
+            byte[] bytes = text.getBytes();
+            return UtilMisc.toMap("stream", new ByteArrayInputStream(bytes), "length", new Integer(bytes.length));
 
-    public static String getDataResourceMimeType(GenericDelegator delegator, String dataResourceId, GenericValue view) throws GenericEntityException {
-
-        String mimeType = null;
-        if (view != null)
-            mimeType = view.getString("drMimeTypeId");
-            //if (Debug.infoOn()) Debug.logInfo("getDataResourceMimeType, mimeType(2):" + mimeType, "");
-        if (UtilValidate.isEmpty(mimeType) && UtilValidate.isNotEmpty(dataResourceId)) {
-                GenericValue dataResource = delegator.findByPrimaryKeyCache("DataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
-                //if (Debug.infoOn()) Debug.logInfo("getDataResourceMimeType, dataResource(2):" + dataResource, "");
-                mimeType = dataResource.getString("mimeTypeId");
-
-        }
-        return mimeType;
-    }
-
-    public static String getDataResourceContentUploadPath() {
-        String initialPath = UtilProperties.getPropertyValue("content.properties", "content.upload.path.prefix");
-        double maxFiles = UtilProperties.getPropertyNumber("content.properties", "content.upload.max.files");
-        if (maxFiles < 1) {
-            maxFiles = 250;
-        }
-        String ofbizHome = System.getProperty("ofbiz.home");
-
-        if (!initialPath.startsWith("/")) {
-            initialPath = "/" + initialPath;
-        }
-
-        // descending comparator
-        Comparator desc = new Comparator() {
-            public int compare(Object o1, Object o2) {
-                if (((Long) o1).longValue() > ((Long) o2).longValue()) {
-                    return -1;
-                } else if (((Long) o1).longValue() < ((Long) o2).longValue()) {
-                    return 1;
+        // object (binary) data
+        } else if (dataResourceTypeId.endsWith("_OBJECT")) {
+            byte[] bytes = new byte[0];
+            GenericValue valObj;
+
+            if ("IMAGE_OBJECT".equals(dataResourceTypeId)) {
+                if (cache) {
+                    valObj = delegator.findByPrimaryKeyCache("ImageDataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
+                } else {
+                    valObj = delegator.findByPrimaryKey("ImageDataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
                 }
-                return 0;
-            }
-        };
-
-        // check for the latest subdirectory
-        String parentDir = ofbizHome + initialPath;
-        File parent = new File(parentDir);
-        TreeMap dirMap = new TreeMap(desc);
-        if (parent.exists()) {
-            File[] subs = parent.listFiles();
-            for (int i = 0; i < subs.length; i++) {
-                if (subs[i].isDirectory()) {
-                    dirMap.put(new Long(subs[0].lastModified()), subs[i]);
+                if (valObj != null) {
+                    bytes = valObj.getBytes("imageData");
                 }
+            } else if ("VIDEO_OBJECT".equals(dataResourceTypeId)) {
+                if (cache) {
+                    valObj = delegator.findByPrimaryKeyCache("VideoDataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
+                } else {
+                    valObj = delegator.findByPrimaryKey("VideoDataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
+                }
+                if (valObj != null) {
+                    bytes = valObj.getBytes("videoData");
+                }
+            } else if ("AUDIO_OBJECT".equals(dataResourceTypeId)) {
+                if (cache) {
+                    valObj = delegator.findByPrimaryKeyCache("AudioDataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
+                } else {
+                    valObj = delegator.findByPrimaryKey("AudioDataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
+                }
+                if (valObj != null) {
+                    bytes = valObj.getBytes("audioData");
+                }
+            } else if ("OTHER_OBJECT".equals(dataResourceTypeId)) {
+                if (cache) {
+                    valObj = delegator.findByPrimaryKeyCache("OtherDataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
+                } else {
+                    valObj = delegator.findByPrimaryKey("OtherDataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
+                }
+                if (valObj != null) {
+                    bytes = valObj.getBytes("dataResourceContent");
+                }
+            } else {
+                throw new GeneralException("Unsupported OBJECT type [" + dataResourceTypeId + "]; cannot stream");
             }
-        } else {
-            // if the parent doesn't exist; create it now
-            boolean created = parent.mkdir();
-            if (!created) {
-                Debug.logWarning("Unable to create top level upload directory [" + parentDir + "].", module);
-            }
-        }
 
-        // first item in map is the most current directory
-        File latestDir = null;
-        if (dirMap != null && dirMap.size() > 0) {
-            latestDir = (File) dirMap.values().iterator().next();
-            if (latestDir != null) {
-                File[] dirList = latestDir.listFiles();
-                if (dirList.length >= maxFiles) {
-                    latestDir = makeNewDirectory(parent);
-                }
+            return UtilMisc.toMap("stream", new ByteArrayInputStream(bytes), "length", new Long(bytes.length));
+
+        // file data
+        } else if (dataResourceTypeId.endsWith("_FILE") || dataResourceTypeId.endsWith("_FILE_BIN")) {
+            String objectInfo = dataResource.getString("objectInfo");
+            if (UtilValidate.isNotEmpty(objectInfo)) {
+                File file = DataResourceWorker.getContentFile(dataResourceTypeId, objectInfo, contextRoot);
+                return UtilMisc.toMap("stream", new FileInputStream(file), "length", new Long(file.length()));                 
+            } else {
+                throw new GeneralException("No objectInfo found for FILE type [" + dataResourceTypeId + "]; cannot stream");
             }
-        } else {
-            latestDir = makeNewDirectory(parent);
-        }
 
-        Debug.log("Directory Name : " + latestDir.getName(), module);
-        return latestDir.getAbsolutePath().replace('\\','/');
-    }
+        // URL resource data
+        } else if ("URL_RESOURCE".equals(dataResourceTypeId)) {
+            String objectInfo = dataResource.getString("objectInfo");
+            if (UtilValidate.isNotEmpty(objectInfo)) {
+                URL url = new URL(objectInfo);
+                if (url.getHost() == null) { // is relative
+                    String newUrl = DataResourceWorker.buildRequestPrefix(delegator, locale, webSiteId, https);
+                    if (!newUrl.endsWith("/")) {
+                        newUrl = newUrl + "/";
+                    }
+                    newUrl = newUrl + url.toString();
+                    url = new URL(newUrl);
+                }
 
-    private static File makeNewDirectory(File parent) {
-        File latestDir = null;
-        boolean newDir = false;
-        while (!newDir) {
-            latestDir = new File(parent, "" + System.currentTimeMillis());
-            if (!latestDir.exists()) {
-                latestDir.mkdir();
-                newDir = true;
+                URLConnection con = url.openConnection();
+                return UtilMisc.toMap("stream", con.getInputStream(), "length", new Long(con.getContentLength()));                
+            } else {
+                throw new GeneralException("No objectInfo found for URL_RESOURCE type; cannot stream");
             }
         }
-        return latestDir;
+
+        // unsupported type
+        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, GenericDelegator delegator, String dataResourceId, String https, String webSiteId, Locale locale, String rootDir) throws IOException, GeneralException {
         try {
             GenericValue dataResource = delegator.findByPrimaryKeyCache("DataResource", UtilMisc.toMap("dataResourceId", dataResourceId));

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/data/DataServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/data/DataServices.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/data/DataServices.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/data/DataServices.java Fri Mar  2 14:03:48 2007
@@ -471,7 +471,7 @@
 
         GenericValue view = (GenericValue) context.get("subContentDataResourceView");
         Writer outWriter = new StringWriter();
-        DataResourceWorker.renderDataResourceAsTextCache(delegator, dataResourceId, outWriter, templateContext, view, locale, mimeTypeId);
+        DataResourceWorker.renderDataResourceAsText(delegator, dataResourceId, outWriter, templateContext, locale, mimeTypeId, true);
         try {
             out.write(outWriter.toString());
             results.put("textData", outWriter.toString());

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/search/ContentDocument.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/search/ContentDocument.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/search/ContentDocument.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/search/ContentDocument.java Fri Mar  2 14:03:48 2007
@@ -52,7 +52,7 @@
 	public static Document Document(String id, GenericDelegator delegator) throws InterruptedException  {
 	  	
 		Document doc = null;
-		GenericValue content = null;
+		GenericValue content;
 	  	try {
 	  		content = delegator.findByPrimaryKeyCache("Content", UtilMisc.toMap("contentId",id));
 	  	} catch(GenericEntityException e) {
@@ -67,7 +67,7 @@
 	
 	public static Document Document(GenericValue content, Map context)
 			throws InterruptedException {
-		Document doc = null;
+		Document doc;
 		// make a new, empty document
 		doc = new Document();
 		String contentId = content.getString("contentId");
@@ -118,7 +118,7 @@
 		// module);
 		String dataResourceId = content.getString("dataResourceId");
 		//Debug.logInfo("in ContentDocument, dataResourceId:" + dataResourceId, module);
-		GenericValue dataResource = null;
+		GenericValue dataResource;
 		try {
 			dataResource = delegator.findByPrimaryKeyCache("DataResource", UtilMisc.toMap("dataResourceId", dataResourceId));
 		} catch (GenericEntityException e) {
@@ -143,9 +143,9 @@
 		if (UtilValidate.isNotEmpty(currentLocaleString)) {
 			locale = UtilMisc.parseLocale(currentLocaleString);
 		}
-		String text = null;
+		String text;
 		try {
-			text = ContentWorker.renderContentAsTextCache(delegator, contentId, context, content, locale, mimeTypeId);
+			text = ContentWorker.renderContentAsText(delegator, contentId, context, locale, mimeTypeId, true);
 		} catch (GeneralException e) {
 			Debug.logError(e, module);
 			List badIndexList = (List) context.get("badIndexList");
@@ -165,7 +165,7 @@
 			//Debug.logInfo("in ContentDocument, field:" + field.stringValue(), module);
 			doc.add(field);
 		}
-		List featureDataResourceList = null;
+		List featureDataResourceList;
 		try {
 			featureDataResourceList = content.getRelatedCache("ProductFeatureDataResource");
 		} catch (GenericEntityException e) {

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/search/DataResourceDocument.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/search/DataResourceDocument.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/search/DataResourceDocument.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/search/DataResourceDocument.java Fri Mar  2 14:03:48 2007
@@ -72,7 +72,7 @@
         
         StringWriter outWriter = new StringWriter();
 	  	try {
-	  	    DataResourceWorker.writeDataResourceTextCache(dataResource, mimeTypeId, locale, context, delegator, outWriter);
+	  	    DataResourceWorker.writeDataResourceText(dataResource, mimeTypeId, locale, context, delegator, outWriter, true);
 	  	} catch(GeneralException e) {
 	  		Debug.logError(e, module);
 	  	} catch(IOException e) {

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/EditRenderSubContentCacheTransform.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/EditRenderSubContentCacheTransform.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/EditRenderSubContentCacheTransform.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/EditRenderSubContentCacheTransform.java Fri Mar  2 14:03:48 2007
@@ -160,7 +160,7 @@
                         Locale locale = null;
                         try {
                            //if (Debug.infoOn()) Debug.logInfo("in Edit(0), before calling renderContentAsTextCache, wrapTemplateId: ." + wrapTemplateId , module);
-                            ContentWorker.renderContentAsTextCache(delegator, wrapTemplateId, out, templateRoot, null, locale, mimeTypeId);
+                            ContentWorker.renderContentAsText(delegator, wrapTemplateId, out, templateRoot, locale, mimeTypeId, true);
                            //if (Debug.infoOn()) Debug.logInfo("in Edit(0), after calling renderContentAsTextCache, wrapTemplateId: ." + wrapTemplateId , module);
                         } catch (IOException e) {
                             Debug.logError(e, "Error rendering content" + e.getMessage(), module);

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/EditRenderSubContentTransform.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/EditRenderSubContentTransform.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/EditRenderSubContentTransform.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/EditRenderSubContentTransform.java Fri Mar  2 14:03:48 2007
@@ -190,7 +190,7 @@
                         templateRoot.put("context", templateContext);
                         
                         try {
-                            ContentWorker.renderContentAsText(delegator, wrapTemplateId, out, templateRoot, null, locale, mimeTypeId);
+                            ContentWorker.renderContentAsText(delegator, wrapTemplateId, out, templateRoot, locale, mimeTypeId, false);
                         } catch (IOException e) {
                             Debug.logError(e, "Error rendering content" + e.getMessage(), module);
                             throw new IOException("Error rendering content" + e.toString());

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/LoopSubContentTransform.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/LoopSubContentTransform.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/LoopSubContentTransform.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/LoopSubContentTransform.java Fri Mar  2 14:03:48 2007
@@ -276,7 +276,7 @@
                         locale = Locale.getDefault();
                     String mimeTypeId = (String) templateCtx.get("mimeTypeId");
                     try {
-                        ContentWorker.renderContentAsText(delegator, wrapTemplateId, out, templateRoot, null, locale, mimeTypeId);
+                        ContentWorker.renderContentAsText(delegator, wrapTemplateId, out, templateRoot, locale, mimeTypeId, true);
                     } catch (GeneralException e) {
                         Debug.logError(e, "Error rendering content", module);
                         throw new IOException("Error rendering content" + e.toString());

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderContentAsText.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderContentAsText.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderContentAsText.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderContentAsText.java Fri Mar  2 14:03:48 2007
@@ -175,7 +175,7 @@
                 FreeMarkerWorker.saveContextValues(templateRoot, saveKeyNames, savedValues);
                 //if (thisView != null) {
                     try {
-                        String txt = ContentWorker.renderContentAsTextCache(delegator, thisContentId, templateRoot, null, locale, mimeTypeId);
+                        String txt = ContentWorker.renderContentAsText(delegator, thisContentId, templateRoot, locale, mimeTypeId, true);
                         if ("true".equals(xmlEscape)) {
                             txt = UtilFormatOut.encodeXmlValue(txt);
                         }

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderSubContentAsText.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderSubContentAsText.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderSubContentAsText.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderSubContentAsText.java Fri Mar  2 14:03:48 2007
@@ -160,7 +160,8 @@
 
                 FreeMarkerWorker.saveContextValues(templateRoot, saveKeyNames, savedValues);
                 try {
-                    String txt = ContentWorker.renderSubContentAsTextCache(delegator, thisContentId, thisMapKey, null, templateRoot, locale, mimeTypeId, null, fromDate);
+                    String txt = ContentWorker.renderSubContentAsText(delegator, thisContentId, thisMapKey, templateRoot, locale, mimeTypeId, true);                    
+                    //String txt = ContentWorker.renderSubContentAsTextCache(delegator, thisContentId, thisMapKey, null, templateRoot, locale, mimeTypeId, null, fromDate);
                     if ("true".equals(xmlEscape)) {
                         txt = UtilFormatOut.encodeXmlValue(txt);
                     }

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderSubContentCacheTransform.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderSubContentCacheTransform.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderSubContentCacheTransform.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderSubContentCacheTransform.java Fri Mar  2 14:03:48 2007
@@ -171,12 +171,15 @@
                 }
 
                 if (thisView != null) {
-                    try {
-                        ContentWorker.renderContentAsTextCache(delegator, null, out, templateRoot, thisView, locale, mimeTypeId);
-                        //if (Debug.infoOn()) Debug.logInfo("in RenderSubContent, after renderContentAsTextCache:", module);
-                    } catch (GeneralException e) {
-                        Debug.logError(e, "Error rendering content", module);
-                        throw new IOException("Error rendering thisView:" + thisView + " msg:" + e.toString());
+                    String contentId = thisView.getString("contentId");
+                    if (contentId != null) {
+                        try {
+                            ContentWorker.renderContentAsText(delegator, contentId, out, templateRoot, locale, mimeTypeId, true);
+                            //if (Debug.infoOn()) Debug.logInfo("in RenderSubContent, after renderContentAsTextCache:", module);
+                        } catch (GeneralException e) {
+                            Debug.logError(e, "Error rendering content", module);
+                            throw new IOException("Error rendering thisView:" + thisView + " msg:" + e.toString());
+                        }
                     }
                 }
                 if (UtilValidate.isNotEmpty(editRequestName)) {

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderSubContentTransform.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderSubContentTransform.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderSubContentTransform.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderSubContentTransform.java Fri Mar  2 14:03:48 2007
@@ -133,13 +133,18 @@
                 if (subContentDataResourceView != null) {
                 }
                 try {
-                    Map results = ContentWorker.renderSubContentAsText(delegator, contentId, out, mapKey, subContentId, subContentDataResourceView, templateRoot, locale, mimeTypeId, userLogin, fromDate);
+                    if (subContentId != null) {
+                        ContentWorker.renderContentAsText(delegator, subContentId, out, templateRoot, locale, mimeTypeId, false);
+                    } else {
+                        ContentWorker.renderSubContentAsText(delegator, contentId, out, mapKey, templateRoot, locale, mimeTypeId, false);
+                    }
+                    //Map results = ContentWorker.renderSubContentAsText(delegator, contentId, out, mapKey, subContentId, subContentDataResourceView, templateRoot, locale, mimeTypeId, userLogin, fromDate);
                 } catch (GeneralException e) {
                     Debug.logError(e, "Error rendering content", module);
                     throw new IOException("Error rendering content" + e.toString());
                 }
 
-                Map resultCtx = (Map) FreeMarkerWorker.getWrappedObject("context", env);
+                //Map resultCtx = (Map) FreeMarkerWorker.getWrappedObject("context", env);
                 templateContext.put("mapKey", null);
                 templateContext.put("subContentId", null);
                 templateContext.put("subDataResourceTypeId", null);

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/TraverseSubContentTransform.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/TraverseSubContentTransform.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/TraverseSubContentTransform.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/TraverseSubContentTransform.java Fri Mar  2 14:03:48 2007
@@ -249,7 +249,7 @@
                     if (locale == null)
                         locale = Locale.getDefault();
                     try {
-                        ContentWorker.renderContentAsText(delegator, wrapTemplateId, out, templateRoot, null, locale, mimeTypeId);
+                        ContentWorker.renderContentAsText(delegator, wrapTemplateId, out, templateRoot, locale, mimeTypeId, false);
                     } catch (GeneralException e) {
                         Debug.logError(e, "Error rendering content", module);
                         throw new IOException("Error rendering content" + e.toString());

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/WrapSubContentCacheTransform.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/WrapSubContentCacheTransform.java?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/WrapSubContentCacheTransform.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/WrapSubContentCacheTransform.java Fri Mar  2 14:03:48 2007
@@ -169,7 +169,7 @@
                     Locale locale = null;
                     try {
                         //if (Debug.infoOn()) Debug.logInfo("in Edit(0), before calling renderContentAsText ." , module);
-                        ContentWorker.renderContentAsTextCache(delegator, wrapTemplateId, out, templateRoot, null, locale, mimeTypeId);
+                        ContentWorker.renderContentAsText(delegator, wrapTemplateId, out, templateRoot, locale, mimeTypeId, true);
                         //if (Debug.infoOn()) Debug.logInfo("in Edit(0), after calling renderContentAsText ." , module);
                     } catch (IOException e) {
                         Debug.logError(e, "Error rendering content" + e.getMessage(), module);

Added: ofbiz/trunk/applications/content/template/mime-type/flash-flv.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/template/mime-type/flash-flv.ftl?view=auto&rev=513985
==============================================================================
--- ofbiz/trunk/applications/content/template/mime-type/flash-flv.ftl (added)
+++ ofbiz/trunk/applications/content/template/mime-type/flash-flv.ftl Fri Mar  2 14:03:48 2007
@@ -0,0 +1,31 @@
+<#--
+  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.
+  -->
+<object type="application/x-shockwave-flash" data="/images/FlowPlayerLP.swf" width="320" height="263" id="FlowPlayer">
+	<param name="movie" value="/images/FlowPlayerLP.swf" />
+	<param name="quality" value="high" />
+
+	<param name="flashvars" value="config={
+		autoPlay: true,
+		bufferLength: '100',
+		loop: false,
+		initialScale: 'fit',
+		videoFile: '/content/control/stream?contentId=${contentId}',
+		showPlayListButtons: true
+		}" />
+</object>
\ No newline at end of file

Propchange: ofbiz/trunk/applications/content/template/mime-type/flash-flv.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/content/template/mime-type/flash-flv.ftl
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/applications/content/template/mime-type/flash-flv.ftl
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/applications/content/template/mime-type/flash-swf.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/template/mime-type/flash-swf.ftl?view=auto&rev=513985
==============================================================================
--- ofbiz/trunk/applications/content/template/mime-type/flash-swf.ftl (added)
+++ ofbiz/trunk/applications/content/template/mime-type/flash-swf.ftl Fri Mar  2 14:03:48 2007
@@ -0,0 +1,22 @@
+<#--
+  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.
+  -->
+<object width="550" height="400">
+    <param name="movie" value="/content/control/stream?contentId=${contentId}">
+  	<embed src="/content/control/stream?contentId=${contentId}" width="550" height="400"></embed>
+</object>

Propchange: ofbiz/trunk/applications/content/template/mime-type/flash-swf.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/content/template/mime-type/flash-swf.ftl
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/applications/content/template/mime-type/flash-swf.ftl
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/applications/content/template/mime-type/image.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/template/mime-type/image.ftl?view=auto&rev=513985
==============================================================================
--- ofbiz/trunk/applications/content/template/mime-type/image.ftl (added)
+++ ofbiz/trunk/applications/content/template/mime-type/image.ftl Fri Mar  2 14:03:48 2007
@@ -0,0 +1,19 @@
+<#--
+  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.
+  -->
+<img src="/content/control/stream?contentId=${contentId}"/>
\ No newline at end of file

Propchange: ofbiz/trunk/applications/content/template/mime-type/image.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/content/template/mime-type/image.ftl
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/applications/content/template/mime-type/image.ftl
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/applications/content/template/mime-type/quicktime.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/template/mime-type/quicktime.ftl?view=auto&rev=513985
==============================================================================
--- ofbiz/trunk/applications/content/template/mime-type/quicktime.ftl (added)
+++ ofbiz/trunk/applications/content/template/mime-type/quicktime.ftl Fri Mar  2 14:03:48 2007
@@ -0,0 +1,31 @@
+<#--
+  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.
+  -->
+<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab">
+    <param name="SRC" value="/content/control/stream?contentId=${contentId}" />
+    <param name="WIDTH" value="320" />
+    <param name="HEIGHT" value="263" />
+    <param name="SCALE" value="tofit" />
+    <param name="AUTOSTART" value="true" />
+    <param name="AUTOPLAY" value="true" />
+    <param name="KIOSKMODE" value="false" />
+    <embed src="/content/control/stream?contentId=${contentId}" width="320" height="263" scale="tofit"
+        autostart="true" autoplay="true" kioskmode="false" target="quicktimeplayer"
+      	    pluginspage="http://www.apple.com/quicktime/download/">
+    </embed>
+</object>

Propchange: ofbiz/trunk/applications/content/template/mime-type/quicktime.ftl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/content/template/mime-type/quicktime.ftl
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/applications/content/template/mime-type/quicktime.ftl
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/website/WebSitePublishPoint.bsh
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/website/WebSitePublishPoint.bsh?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/website/WebSitePublishPoint.bsh (original)
+++ ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/website/WebSitePublishPoint.bsh Fri Mar  2 14:03:48 2007
@@ -38,7 +38,7 @@
     context.put("publishPoint", publishPoint);
     Debug.log("CnRt: " + contentRoot + " -- PP: " + publishPoint);
 
-    // get all subsite content for the publish point
-    List subsites = delegator.findByAnd("ContentAssoc", UtilMisc.toMap("contentId", contentRoot, "contentAssocTypeId", "SUBSITE"));
+    // get all sub content for the publish point
+    List subsites = delegator.findByAnd("ContentAssoc", UtilMisc.toMap("contentId", contentRoot));
     context.put("subsites", subsites);
 }

Modified: ofbiz/trunk/applications/content/webapp/content/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/webapp/content/WEB-INF/controller.xml?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/webapp/content/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/applications/content/webapp/content/WEB-INF/controller.xml Fri Mar  2 14:03:48 2007
@@ -749,6 +749,30 @@
         <response name="error" type="view" value="EditMimeType"/>
     </request-map>
 
+    <!-- ================ MimeTypeHtmlTemplate Requests ================= -->
+    <request-map uri="EditMimeTypeHtmlTemplate">
+        <security auth="true" https="true"/>
+        <response name="success" type="view" value="EditMimeTypeHtmlTemplate"/>
+    </request-map>
+    <request-map uri="createMimeTypeHtmlTemplate">
+        <security auth="true" https="true"/>
+        <event invoke="createMimeTypeHtmlTemplate" path="" type="service"/>
+        <response name="success" type="view" value="EditMimeTypeHtmlTemplate"/>
+        <response name="error" type="view" value="EditMimeTypeHtmlTemplate"/>
+    </request-map>
+    <request-map uri="updateMimeTypeHtmlTemplate">
+        <security auth="true" https="true"/>
+        <event invoke="updateMimeTypeHtmlTemplate" path="" type="service"/>
+        <response name="success" type="view" value="EditMimeTypeHtmlTemplate"/>
+        <response name="error" type="view" value="EditMimeTypeHtmlTemplate"/>
+    </request-map>
+    <request-map uri="removeMimeTypeHtmlTemplate">
+        <security auth="true" https="true"/>
+        <event invoke="removeMimeTypeHtmlTemplate" path="" type="service"/>
+        <response name="success" type="view" value="EditMimeTypeHtmlTemplate"/>
+        <response name="error" type="view" value="EditMimeTypeHtmlTemplate"/>
+    </request-map>
+
     <!-- ================ Redirect Content Requests ================= -->
     <request-map uri="findContent">
         <security auth="true" https="true"/>
@@ -864,6 +888,11 @@
         <response name="success" type="none"/>
         <response name="error" type="view" value="main"/>
     </request-map>
+    <request-map uri="stream">       
+        <event type="java" path="org.ofbiz.content.data.DataEvents" invoke="serveObjectData"/>
+        <response name="success" type="none"/>
+        <response name="error" type="view" value="error"/>
+    </request-map>
 
     <!-- ================ ContentOperation Requests ================= -->
     <request-map uri="EditContentOperation"><security auth="true" https="true"/><response name="success" type="view" value="EditContentOperation"/></request-map>
@@ -1709,6 +1738,7 @@
     <view-map name="EditCharacterSet" page="component://content/widget/datasetup/DataResourceSetupScreens.xml#EditCharacterSet" type="screen"/>
     <view-map name="EditFileExtension" page="component://content/widget/datasetup/DataResourceSetupScreens.xml#EditFileExtension" type="screen"/>
     <view-map name="EditMimeType" page="component://content/widget/datasetup/DataResourceSetupScreens.xml#EditMimeType" type="screen"/>
+    <view-map name="EditMimeTypeHtmlTemplate" page="component://content/widget/datasetup/DataResourceSetupScreens.xml#EditMimeTypeHtmlTemplate" type="screen"/>
 
     <view-map name="ListLayout" page="component://content/widget/layout/LayoutScreens.xml#ListLayout" type="screen"/>
     <view-map name="FindLayout" page="component://content/widget/layout/LayoutScreens.xml#FindLayout" type="screen"/>

Modified: ofbiz/trunk/applications/content/webapp/content/datasetup/DataResourceSetupMenus.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/webapp/content/datasetup/DataResourceSetupMenus.xml?view=diff&rev=513985&r1=513984&r2=513985
==============================================================================
--- ofbiz/trunk/applications/content/webapp/content/datasetup/DataResourceSetupMenus.xml (original)
+++ ofbiz/trunk/applications/content/webapp/content/datasetup/DataResourceSetupMenus.xml Fri Mar  2 14:03:48 2007
@@ -51,5 +51,8 @@
         <menu-item name="EditMimeType" title="${uiLabelMap.ContentMimeType}" >
             <link target="EditMimeType" target-window="_top" style="tabButton" />
         </menu-item>
+        <menu-item name="EditMimeTypeHtmlTemplate" title="${uiLabelMap.ContentMimeTypeHtmlTemplate}" >
+            <link target="EditMimeTypeHtmlTemplate" target-window="_top" style="tabButton" />
+        </menu-item>
     </menu>
 </menus>