Update of /var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib
In directory james.mmbase.org:/tmp/cvs-serv9732

Modified Files:
      Tag: MMBase-1_8
        DataTypeTag.java mmbase-taglib.xml 
Log Message:
 MMB-1589, made it also possible to base on datatype of a field


See also: 
http://cvs.mmbase.org/viewcvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib
See also: http://www.mmbase.org/jira/browse/MMB-1589


Index: DataTypeTag.java
===================================================================
RCS file: 
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/DataTypeTag.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -b -r1.1.2.1 -r1.1.2.2
--- DataTypeTag.java    19 Aug 2008 09:38:07 -0000      1.1.2.1
+++ DataTypeTag.java    19 Aug 2008 10:09:34 -0000      1.1.2.2
@@ -32,21 +32,30 @@
 /**
  * This tags produces request scoped new datatypes. (To be used in conjuction 
with mm:fieldinfo datatype='')
  * @author Michiel Meeuwissen
- * @version $Id: DataTypeTag.java,v 1.1.2.1 2008/08/19 09:38:07 michiel Exp $
+ * @version $Id: DataTypeTag.java,v 1.1.2.2 2008/08/19 10:09:34 michiel Exp $
  * @since MMBase-1.8.7
  */
-public class DataTypeTag extends ContextReferrerTag {
+public class DataTypeTag extends CloudReferrerTag {
     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;
+    private Attribute field = Attribute.NULL;
 
     public void setBase(String b) throws JspTagException {
         base = getAttribute(b);
     }
 
+    public void setNodemanager(String n) throws JspTagException {
+        nodeManager = getAttribute(n);
+    }
+    public void setField(String f) throws JspTagException {
+        field = getAttribute(f);
+    }
+
     protected DataTypeCollector getCollector() {
         DataTypeCollector collector = (DataTypeCollector) 
pageContext.getAttribute(KEY, SCOPE);
         if (collector == null) {
@@ -73,9 +82,22 @@
         "xmlns=\"" + DataTypeReader.NAMESPACE_DATATYPES + "\" " +
         "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"; " +
         "xsi:schemaLocation=\"" + DataTypeReader.NAMESPACE_DATATYPES + " " + 
DataTypeReader.NAMESPACE_DATATYPES + ".xsd\"";
+
+    protected BasicDataType getBaseDataType(DataTypeCollector collector) 
throws JspTagException {
+        if (base.getString(this).equals("")) {
+            String nm = nodeManager.getString(this);
+            if ("".equals(nm)) throw new JspTagException("Should specify 
either 'base' or 'nodemanager' attribute");
+            String fn = field.getString(this);
+            if ("".equals(fn)) throw new JspTagException("Attribute 'field' is 
required when using 'nodemanager' attribute");
+            return (BasicDataType) 
getCloudVar().getNodeManager(nm).getField(fn).getDataType();
+        } else {
+            return collector.getDataType(base.getString(this));
+        }
+    }
+
     public int doEndTag() throws JspTagException {
-        StringBuffer buf = new StringBuffer("<datatype base=\"");
-        buf.append(base.getString(this)).append("\" 
id=\"").append(getId()).append("\" ").append(ATTR).append(">");
+        StringBuffer buf = new StringBuffer("<datatype id=\"");
+        buf.append(getId()).append("\" ").append(ATTR).append(">");
         if (body != null) buf.append(body);
         buf.append("</datatype>");
         try {
@@ -85,7 +107,7 @@
                                                                                
              errorHandler, resolver);
             Element element = dbuilder.parse(new InputSource(new 
StringReader(buf.toString()))).getDocumentElement();
             DataTypeCollector collector = getCollector();
-            BasicDataType dt = DataTypeReader.readDataType(element, 
collector.getDataType(base.getString(this)), collector).dataType;
+            BasicDataType dt = DataTypeReader.readDataType(element, 
getBaseDataType(collector), collector).dataType;
             if (log.isDebugEnabled()) {
                 log.debug("Created " + dt);
                 log.debug("In " + collector.getDataTypes());


Index: mmbase-taglib.xml
===================================================================
RCS file: 
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/mmbase-taglib.xml,v
retrieving revision 1.374.2.31
retrieving revision 1.374.2.32
diff -u -b -r1.374.2.31 -r1.374.2.32
--- mmbase-taglib.xml   19 Aug 2008 09:38:07 -0000      1.374.2.31
+++ mmbase-taglib.xml   19 Aug 2008 10:09:34 -0000      1.374.2.32
@@ -39,7 +39,7 @@
 Use one or more possiblevalue tags if you want to list all possible values. Use
 one or more examplevalue tags is you want to give some example values.
 
-version: $Id: mmbase-taglib.xml,v 1.374.2.31 2008/08/19 09:38:07 michiel Exp $
+version: $Id: mmbase-taglib.xml,v 1.374.2.32 2008/08/19 10:09:34 michiel Exp $
 
 -->
 <taglib author="MMBase community">
@@ -8433,7 +8433,7 @@
 
   <tag>
     <name>datatype</name>
-    <extends>contextreferrer</extends>
+    <extends>cloudtreferrer</extends>
     <tagclass>org.mmbase.bridge.jsp.taglib.DataTypeTag</tagclass>
     <bodycontent>JSP</bodycontent>
     <info>
@@ -8441,12 +8441,20 @@
     <since>MMBase-1.8.7</since>
     <attribute>
       <name>base</name>
-      <required>true</required>
+      <required>false</required>
     </attribute>
     <attribute>
       <name>id</name>
       <required>true</required>
     </attribute>
+    <attribute>
+      <name>nodemanager</name>
+      <required>false</required>
+    </attribute>
+    <attribute>
+      <name>field</name>
+      <required>false</required>
+    </attribute>
   </tag>
 
   <!--
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to