Author: michiel
Date: 2010-04-27 14:35:09 +0200 (Tue, 27 Apr 2010)
New Revision: 42050

Modified:
   
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/DataTypeTag.java
   
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/FieldInfoTag.java
   
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/AbstractTypeHandler.java
Log:
MMB-1955

Modified: 
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/DataTypeTag.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/DataTypeTag.java
  2010-04-27 08:50:22 UTC (rev 42049)
+++ 
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/DataTypeTag.java
  2010-04-27 12:35:09 UTC (rev 42050)
@@ -25,6 +25,7 @@
 import javax.xml.parsers.DocumentBuilder;
 
 import javax.servlet.jsp.*;
+import javax.servlet.http.*;
 import java.util.*;
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
@@ -39,7 +40,6 @@
     private static final Logger log = 
Logging.getLoggerInstance(DataTypeTag.class);
 
     public static final String KEY = "org.mmbase.taglib.datatypecollector";
-    public static final int SCOPE = PageContext.REQUEST_SCOPE;
 
     private Attribute base = Attribute.NULL;
     private Attribute nodeManager = Attribute.NULL;
@@ -56,15 +56,26 @@
         field = getAttribute(f, true);
     }
 
-    protected DataTypeCollector getCollector() {
-        DataTypeCollector collector = (DataTypeCollector) 
pageContext.getAttribute(KEY, SCOPE);
+
+
+
+    /**
+     * @since MMBase-1.9.4
+     */
+    public static DataTypeCollector getCollector(PageContext pageContext) {
+        HttpSession session = ((HttpServletRequest) 
pageContext.getRequest()).getSession(false);
+        int scope = session == null ? PageContext.REQUEST_SCOPE : 
PageContext.SESSION_SCOPE;
+        DataTypeCollector collector = (DataTypeCollector) 
pageContext.getAttribute(KEY, scope);
         if (collector == null) {
             collector = new DataTypeCollector(new Object());
-            pageContext.setAttribute(KEY, collector, SCOPE);
+            pageContext.setAttribute(KEY, collector, scope);
 
         }
         return collector;
     }
+    protected  DataTypeCollector getCollector() {
+        return getCollector(pageContext);
+    }
     /**
      *
      **/

Modified: 
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/FieldInfoTag.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/FieldInfoTag.java
 2010-04-27 08:50:22 UTC (rev 42049)
+++ 
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/FieldInfoTag.java
 2010-04-27 12:35:09 UTC (rev 42050)
@@ -95,8 +95,21 @@
     private static final int TYPE_IGNORE           = 1000;
 
 
+    /**
+     * @since MMBase-1.9.4
+     */
+    public static enum DataTypeOrigin {
+        UNDETERMINED,
+        FIELD,
+        SYSTEM,
+        DATATYPETAG,
+        SPECIFIED
+    }
+
     private String sessionName = "cloud_mmbase";
 
+    private DataTypeOrigin origin = DataTypeOrigin.UNDETERMINED;
+
     public String getSessionName() {
         return sessionName;
     }
@@ -189,25 +202,35 @@
      */
     public DataType getDataType() throws JspTagException {
         if (dataType != Attribute.NULL) {
-            if (specifiedDataType != null) throw new RuntimeException();
+            if (specifiedDataType != null) {
+                throw new RuntimeException();
+            }
             String name = dataType.getString(this);
             DataType dt = null;
-            DataTypeCollector collector = (DataTypeCollector) 
pageContext.getAttribute(DataTypeTag.KEY, DataTypeTag.SCOPE);
+            DataTypeCollector collector = 
DataTypeTag.getCollector(pageContext);
             if (collector != null) {
                 dt = collector.getDataType(name);
             }
             if (dt == null) {
+                origin = DataTypeOrigin.SYSTEM;
                 dt =  DataTypes.getDataType(name);
+            } else {
+                origin = DataTypeOrigin.DATATYPETAG;
             }
             if (dt == null) {
-                throw new JspTagException("No datatype '" + name + "'");
+                throw new JspTagException("No datatype '" + name + "' from " + 
origin + " " + collector);
             }
             return dt;
         } else {
+            origin = DataTypeOrigin.SPECIFIED;
             return specifiedDataType;
         }
     }
 
+    public DataTypeOrigin getOrigin() {
+        return origin;
+    }
+
     /**
      * Answer the type handler for the given type.
      * The type handler is responsible for showing the html
@@ -355,6 +378,7 @@
             if (dataType != null) {
                 field = new DataTypeField(field, dataType);
             } else {
+                origin   = DataTypeOrigin.FIELD;
                 dataType = field.getDataType();
             }
         }
@@ -518,7 +542,6 @@
             break;
         }
 
-
         helper.useEscaper(false); // fieldinfo typicaly produces xhtml
         helper.setValue(show);
         if (getId() != null) {

Modified: 
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/AbstractTypeHandler.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/AbstractTypeHandler.java
      2010-04-27 08:50:22 UTC (rev 42049)
+++ 
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/AbstractTypeHandler.java
      2010-04-27 12:35:09 UTC (rev 42050)
@@ -181,6 +181,10 @@
             buf.append(" mm_nm_");
             buf.append(field.getNodeManager().getName());
         }
+        FieldInfoTag.DataTypeOrigin o = tag.getOrigin();
+        if (o != FieldInfoTag.DataTypeOrigin.FIELD) {
+            buf.append(" mm_dto_").append(o.toString().toLowerCase());
+        }
         if (node != null) {
             buf.append(" mm_n_");
             buf.append(node.getNumber());

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to