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/09 20:23:13 UTC

svn commit: r516516 - in /ofbiz/trunk/applications/content: entitydef/entitymodel.xml src/org/ofbiz/content/content/ContentMapFacade.java src/org/ofbiz/content/content/ContentWorker.java

Author: jaz
Date: Fri Mar  9 11:23:12 2007
New Revision: 516516

URL: http://svn.apache.org/viewvc?view=rev&rev=516516
Log:
updated facade/worker to support decorator content; added datamodel for decorator content

Modified:
    ofbiz/trunk/applications/content/entitydef/entitymodel.xml
    ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentMapFacade.java
    ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentWorker.java

Modified: ofbiz/trunk/applications/content/entitydef/entitymodel.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/entitydef/entitymodel.xml?view=diff&rev=516516&r1=516515&r2=516516
==============================================================================
--- ofbiz/trunk/applications/content/entitydef/entitymodel.xml (original)
+++ ofbiz/trunk/applications/content/entitydef/entitymodel.xml Fri Mar  9 11:23:12 2007
@@ -188,6 +188,7 @@
       <field name="contentId" type="id-ne"></field>
       <field name="contentTypeId" type="id"></field>
       <field name="ownerContentId" type="id"></field>
+      <field name="decoratorContentId" type="id"></field> 
       <field name="instanceOfContentId" type="id"></field>
       <field name="dataResourceId" type="id"></field>
       <field name="templateDataResourceId" type="id"></field>
@@ -245,6 +246,9 @@
       </relation>
       <relation type="one" fk-name="CONTENT_DTSRC" rel-entity-name="DataSource">
         <key-map field-name="dataSourceId"/>
+      </relation>
+      <relation type="one" fk-name="CONTENT_DCNTNT" title="Decorator" rel-entity-name="Content">
+        <key-map field-name="decoratorContentId" rel-field-name="contentId"/>
       </relation>
       <relation type="one" fk-name="CONTENT_PCNTNT" title="Owner" rel-entity-name="Content">
         <key-map field-name="ownerContentId" rel-field-name="contentId"/>

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentMapFacade.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentMapFacade.java?view=diff&rev=516516&r1=516515&r2=516516
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentMapFacade.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentMapFacade.java Fri Mar  9 11:23:12 2007
@@ -50,7 +50,7 @@
     protected final Locale locale;
     protected final String mimeType;
     protected final boolean cache;
-    protected boolean isTop = false;
+    protected boolean render = true;
 
     // internal objects
     private DataResource dataResource;
@@ -67,7 +67,7 @@
         this.cache = cache;
         this.contentId = content.getString("contentId");
         this.delegator = content.getDelegator();
-        this.isTop = true;
+        this.render = false;
         init();
     }
 
@@ -95,6 +95,10 @@
         this.content = new Content();
     }
 
+    public void setRenderFlag(boolean render) {
+        this.render = render;
+    }
+
     // interface methods
     public int size() {
         return 0;
@@ -154,7 +158,7 @@
         String name = (String) obj;
 
         // fields key, returns value object
-        if ("fields".equals(name)) {
+        if ("fields".equalsIgnoreCase(name)) {
             GenericValue value = null;
             try {
                 value = delegator.findByPrimaryKeyCache("Content", UtilMisc.toMap("contentId", contentId));
@@ -166,12 +170,12 @@
         }
 
         // data (resource) object
-        if ("data".equals(name)) {
+        if ("data".equalsIgnoreCase(name) || "dataresource".equalsIgnoreCase(name)) {
             return dataResource;   
         }
 
         // subcontent list of ordered subcontent
-        if ("subcontent_all".equals(name)) {
+        if ("subcontent_all".equalsIgnoreCase(name)) {
             List subContent = FastList.newInstance();
             List subs = null;
             try {
@@ -192,27 +196,28 @@
         }
 
         // return the subcontent object
-        if ("subcontent".equals(name)) {
+        if ("subcontent".equalsIgnoreCase(name)) {
             return this.subContent;
         }
 
         // return list of metaData by predicate ID
-        if ("metadata".equals(name)) {
+        if ("metadata".equalsIgnoreCase(name)) {
             return this.metaData;
         }
 
         // content; returns object from contentId
-        if ("content".equals(name)) {            
+        if ("content".equalsIgnoreCase(name)) {
             return content;
         }
         
         // render this content
-        if ("render".equals(name)) {
+        if ("render".equalsIgnoreCase(name)) {
             Map renderCtx = FastMap.newInstance();
             renderCtx.putAll(context);
-            if (isTop) {
-                Debug.logWarning("Cannot render content being rendered! (No Looping!)", module);
-                return "Cannot render content being rendered! (No Looping!)";
+            if (!render) {
+                String errorMsg = "WARNING: Cannot render content being rendered! (Infinite Recursion NOT allowed!)";
+                Debug.logWarning(errorMsg, module);
+                return "=========> " + errorMsg + " <=========";
             }
             try {
                 return ContentWorker.renderContentAsText(dispatcher, delegator, contentId, renderCtx, locale, mimeType, cache);
@@ -366,7 +371,7 @@
             String name = (String) key;
 
             // get the data resource value object
-            if ("fields".equals(name)) {
+            if ("fields".equalsIgnoreCase(name)) {
                 GenericValue dr = null;
                 try {
                     dr = value.getRelatedOne("DataResource");
@@ -377,7 +382,7 @@
             }
 
             // render just the dataresource
-            if ("render".equals(name)) {
+            if ("render".equalsIgnoreCase(name)) {
                 try {
                     return DataResourceWorker.renderDataResourceAsText(delegator, value.getString("dataResourceId"), context, locale, mimeType, cache);
                 } catch (GeneralException e) {

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentWorker.java?view=diff&rev=516516&r1=516515&r2=516516
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentWorker.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentWorker.java Fri Mar  9 11:23:12 2007
@@ -182,74 +182,80 @@
         if (templateContext == null) {
             templateContext = FastMap.newInstance();
         }
-        
-        // set this contentId in the template context
+
+        // create the content facade
         ContentMapFacade facade = new ContentMapFacade(dispatcher, content, templateContext, locale, mimeTypeId, cache);
-        templateContext.put("thisContent", facade); 
-        templateContext.put("contentId", contentId);
 
-        // render all sub-content; place in template context under mapKey name
-        List subContent = delegator.findByAnd("ContentAssoc", UtilMisc.toMap("contentId", contentId,
-                "contentAssocTypeId", "SUB_CONTENT"), UtilMisc.toList("-fromDate"));
-        subContent = EntityUtil.filterByDate(subContent);
-
-        if (subContent != null && subContent.size() > 0) {
-            Iterator i = subContent.iterator();
-            while (i.hasNext()) {
-                GenericValue contentAssoc = (GenericValue) i.next();
-                String contentIdTo = contentAssoc.getString("contentIdTo");
-                String key = contentAssoc.getString("mapKey");
-                String textData = ContentWorker.renderContentAsText(dispatcher, delegator, contentIdTo, FastMap.newInstance(), locale, mimeTypeId, cache);
-                if (UtilValidate.isNotEmpty(textData)) {
-                    templateContext.put(key, textData);
-                }
+        // look for a content decorator
+        String contentDecoratorId = content.getString("decoratorContentId");
+        if (UtilValidate.isNotEmpty(contentDecoratorId)) {
+            // if there is a decorator content; do not render this content;
+            // instead render the decorator
+            GenericValue decorator;
+            if (cache) {
+                decorator = delegator.findByPrimaryKeyCache("Content", UtilMisc.toMap("contentId", contentDecoratorId));
+            } else {
+                decorator = delegator.findByPrimaryKey("Content", UtilMisc.toMap("contentId", contentDecoratorId));
+            }
+            if (decorator == null) {
+                throw new GeneralException("No decorator content found for decorator contentId [" + contentDecoratorId + "]");
             }
-        }
-
-        // now if no template; just render the data
-        if (UtilValidate.isEmpty(templateDataResourceId) || templateContext.containsKey("ignoreTemplate")) {
-            DataResourceWorker.renderDataResourceAsText(delegator, dataResourceId, out, templateContext, locale, mimeTypeId, cache);
 
-        // there is a template; render the data and then the template
+            // render the decorator
+            ContentMapFacade decFacade = new ContentMapFacade(dispatcher, decorator, templateContext, locale, mimeTypeId, cache);
+            templateContext.put("decoratedContent", facade); // decorated content
+            templateContext.put("thisContent", decFacade); // decorator content
+            ContentWorker.renderContentAsText(dispatcher, delegator, contentDecoratorId, out, templateContext, locale, mimeTypeId, cache);
         } else {
-            Writer dataWriter = new StringWriter();
-            DataResourceWorker.renderDataResourceAsText(delegator, dataResourceId, dataWriter,
-                    templateContext, locale, mimeTypeId, cache);
-
-            String textData = dataWriter.toString();
-            if (textData != null) {
-                textData = textData.trim();
-            }
+            // set this content facade in the context
+            templateContext.put("thisContent", facade);
+            templateContext.put("contentId", contentId);
+
+            // now if no template; just render the data
+            if (UtilValidate.isEmpty(templateDataResourceId) || templateContext.containsKey("ignoreTemplate")) {
+                DataResourceWorker.renderDataResourceAsText(delegator, dataResourceId, out, templateContext, locale, mimeTypeId, cache);
 
-            String mimeType;
-            try {
-                mimeType = DataResourceWorker.getDataResourceMimeType(delegator, dataResourceId, null);
-            } catch (GenericEntityException e) {
-                throw new GeneralException(e.getMessage());
-            }
+            // there is a template; render the data and then the template
+            } else {
+                Writer dataWriter = new StringWriter();
+                DataResourceWorker.renderDataResourceAsText(delegator, dataResourceId, dataWriter,
+                        templateContext, locale, mimeTypeId, cache);
+
+                String textData = dataWriter.toString();
+                if (textData != null) {
+                    textData = textData.trim();
+                }
+
+                String mimeType;
+                try {
+                    mimeType = DataResourceWorker.getDataResourceMimeType(delegator, dataResourceId, null);
+                } catch (GenericEntityException e) {
+                    throw new GeneralException(e.getMessage());
+                }
 
-            // using FTL to handle XML? not really sure what this is doing...
-            if (UtilValidate.isNotEmpty(mimeType)) {
-                if (mimeType.toLowerCase().indexOf("xml") >= 0) {
-                    StringReader sr = new StringReader(textData);
-                    try {
-                        NodeModel nodeModel = NodeModel.parse(new InputSource(sr));
-                        templateContext.put("doc", nodeModel);
-                    } catch (SAXException e) {
-                        throw new GeneralException(e.getMessage());
-                    } catch (ParserConfigurationException e2) {
-                        throw new GeneralException(e2.getMessage());
+                // using FTL to handle XML? not really sure what this is doing...
+                if (UtilValidate.isNotEmpty(mimeType)) {
+                    if (mimeType.toLowerCase().indexOf("xml") >= 0) {
+                        StringReader sr = new StringReader(textData);
+                        try {
+                            NodeModel nodeModel = NodeModel.parse(new InputSource(sr));
+                            templateContext.put("doc", nodeModel);
+                        } catch (SAXException e) {
+                            throw new GeneralException(e.getMessage());
+                        } catch (ParserConfigurationException e2) {
+                            throw new GeneralException(e2.getMessage());
+                        }
+                    } else {
+                        // must be text
+                        templateContext.put("textData", textData);
                     }
                 } else {
-                    // must be text
                     templateContext.put("textData", textData);
                 }
-            } else {
-                templateContext.put("textData", textData);
-            }
 
-            // render the template
-            DataResourceWorker.renderDataResourceAsText(delegator, templateDataResourceId, out, templateContext, locale, mimeTypeId, cache);
+                // render the template
+                DataResourceWorker.renderDataResourceAsText(delegator, templateDataResourceId, out, templateContext, locale, mimeTypeId, cache);
+            }
         }
     }