Author: michiel
Date: 2009-12-07 15:55:55 +0100 (Mon, 07 Dec 2009)
New Revision: 40137

Modified:
   
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/AbstractTypeHandler.java
   
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/BinaryHandler.java
Log:
some details to deal better with binaries

Modified: 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/AbstractTypeHandler.java
===================================================================
--- 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/AbstractTypeHandler.java
    2009-12-07 14:55:12 UTC (rev 40136)
+++ 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/AbstractTypeHandler.java
    2009-12-07 14:55:55 UTC (rev 40137)
@@ -134,7 +134,8 @@
      */
     protected String getClasses(Node node, Field field) {
         StringBuilder buf = new StringBuilder("mm_validate ");
-        for (String styleClass : field.getDataType().getStyleClasses()) {
+        DataType dt = field.getDataType();
+        for (String styleClass : dt.getStyleClasses()) {
             buf.append(styleClass).append(' ');
         }
         if (field instanceof org.mmbase.bridge.util.DataTypeField) {
@@ -149,6 +150,10 @@
         if (node != null) {
             buf.append(" mm_n_");
             buf.append(node.getNumber());
+            if (dt instanceof org.mmbase.datatypes.LengthDataType) {
+                buf.append(" mm_length_");
+                buf.append(node.getSize(field.getName()));
+            }
         }
         return buf.toString();
     }
@@ -214,7 +219,9 @@
             log.debug("No value found in context for " + fieldName);
             if (node != null) {
                 value = node.isNull(fieldName) ? null : getValue(node, 
fieldName);
-                log.debug("Value for " + fieldName + " found in node " + 
value);
+                if (log.isDebugEnabled()) {
+                    log.debug("Value for " + fieldName + " found in node " + 
value);
+                }
             } else if (useDefault) {
                 value = field.getDataType().getDefaultValue(tag.getLocale(), 
tag.getCloudVar(), field);
                 log.debug("No Node, defaultvalue found in field " + value);

Modified: 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/BinaryHandler.java
===================================================================
--- 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/BinaryHandler.java
  2009-12-07 14:55:12 UTC (rev 40136)
+++ 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/BinaryHandler.java
  2009-12-07 14:55:55 UTC (rev 40137)
@@ -12,6 +12,7 @@
 
 import javax.servlet.jsp.JspTagException;
 
+import java.io.*;
 import java.util.*;
 import org.mmbase.bridge.*;
 import org.mmbase.bridge.jsp.taglib.*;
@@ -72,14 +73,31 @@
     }
 
 
+
+    @Override
+    protected InputStream getValue(Node node, String fieldName) {
+        InputStream v = node.getInputStreamValue(fieldName);
+        if (log.isDebugEnabled()) {
+            log.debug("Value for " + node.getNumber() + ":" + fieldName + ": " 
+ v.getClass() + " " + v + " of " + node.getClass());
+        }
+        return v;
+    }
+
+
     /**
      * Returns the field value as specified by the client's post.
      */
     @Override
-    protected Object getFieldValue(Node node, Field field) throws 
JspTagException {
+    protected SerializableInputStream getFieldValue(Node node, Field field) 
throws JspTagException {
         if (MultiPart.isMultipart(tag.getPageContext())) {
             ContextTag ct = tag.getContextTag();
-            return ct.getInputStream(prefix(field.getName()));
+            log.debug("Field value '" + field.getName() + "' not found in 
context, using existing value ");
+            SerializableInputStream si = 
ct.getInputStream(prefix(field.getName()));
+            if (si == null || si.getName().length() == 0) {
+                return null;
+            } else {
+                return si;
+            }
         } else {
             return null;
         }
@@ -87,48 +105,61 @@
 
     @Override
     public String checkHtmlInput(Node node, Field field, boolean errors) 
throws JspTagException {
-        Object fieldValue = getFieldValue(node, field);
+        final Object fieldValue;
+        boolean fromUser = true;
+        {
+            SerializableInputStream si = getFieldValue(node, field);
+            if (si == null) {
+                fieldValue = getFieldValue(node, field, node == null);
+                log.debug("Field value '" + field.getName() + "' not found in 
context, using existing value " + fieldValue);
+                fromUser = false;
+            } else {
+                fieldValue = si;
+            }
+        }
 
-        if (fieldValue != null) {
-            DataType<Object> dt = field.getDataType();
-            Collection<LocalizedString> col = dt.validate(fieldValue, node, 
field);
-            if (col.size() == 0) {
-                // do actually set the field, because some datatypes need 
cross-field checking
-                // also in an mm:form, you can simply commit.
-                SerializableInputStream bytes = (SerializableInputStream) 
fieldValue;
+        DataType<Object> dt = field.getDataType();
+        if (log.isDebugEnabled()) {
+            log.debug("Validating " + fieldValue + " with " + dt);
+        }
+        Collection<LocalizedString> col = dt.validate(fieldValue, node, field);
+        if (col.size() == 0) {
+            // do actually set the field, because some datatypes need 
cross-field checking
+            // also in an mm:form, you can simply commit.
+            if (fromUser) {
+                SerializableInputStream bytes = 
Casting.toSerializableInputStream(fieldValue);
                 if (node != null && ! field.isReadOnly() && ! 
bytes.getName().equals("")) {
                     setValue(node, field.getName(), bytes);
                 }
-                if (errors) {
-                    return "<div id=\"" + prefixError(field.getName()) + "\" 
class=\"mm_check_noerror\"> </div>";
-                } else {
-                    return "";
+            }
+            if (errors) {
+                return "<div id=\"" + prefixError(field.getName()) + "\" 
class=\"mm_check_noerror\"> </div>";
+            } else {
+                return "";
+            }
+        } else {
+            if (log.isDebugEnabled()) {
+                log.debug("Found errors " + errors);
+            }
+            FormTag form =  tag.getFormTag(false, null);
+            if (form != null) {
+                form.setValid(false);
+            }
+            if (errors) {
+                StringBuilder show = new StringBuilder("<div id=\"");
+                show.append(prefixError(field.getName()));
+                show.append("\" class=\"mm_check_error\">");
+                Locale locale =  tag.getLocale();
+                for (LocalizedString error : col) {
+                    show.append("<span>");
+                    Xml.XMLEscape(error.get(locale), show);
+                    show.append("</span>");
                 }
+                show.append("</div>");
+                return show.toString();
             } else {
-                FormTag form =  tag.getFormTag(false, null);
-                if (form != null) {
-                    form.setValid(false);
-                }
-                if (errors) {
-                    StringBuilder show = new StringBuilder("<div id=\"");
-                    show.append(prefixError(field.getName()));
-                    show.append("\" class=\"mm_check_error\">");
-                    Locale locale =  tag.getLocale();
-                    Iterator<LocalizedString> i = col.iterator();
-                    while (i.hasNext()) {
-                        LocalizedString error = i.next();
-                        show.append("<span>");
-                        Xml.XMLEscape(error.get(locale), show);
-                        show.append("</span>");
-                    }
-                    show.append("</div>");
-                    return show.toString();
-                } else {
-                    return "";
-                }
+                return "";
             }
-        } else {
-            return "";
         }
     }
 
@@ -140,7 +171,11 @@
     public boolean useHtmlInput(Node node, Field field) throws JspTagException 
{
         SerializableInputStream bytes = (SerializableInputStream) 
getFieldValue(node, field);
         if (bytes == null) {
-            throw new BridgeException("getBytes(" + prefix(field.getName()) + 
") returned null (node= " +  node.getNumber() +") field=(" + field + ") (Was 
your form  enctype='multipart/form-data' ?");
+            if (! MultiPart.isMultipart(tag.getPageContext())) {
+                throw new BridgeException("getBytes(" + 
prefix(field.getName()) + ") returned null (node= " +  node.getNumber() +") 
field=(" + field + ") (Was your form  enctype='multipart/form-data' ?");
+            } else {
+                return false;
+            }
         }
         log.debug("Found " + bytes.getName());
         if ("".equals(bytes.getName())) {
@@ -156,7 +191,8 @@
     /**
      * @see TypeHandler#whereHtmlInput(Field)
      */
-    @Override public String whereHtmlInput(Field field) throws JspTagException 
{
+    @Override
+    public String whereHtmlInput(Field field) throws JspTagException {
         log.error("Don't know what to do with byte[]");
         return super.whereHtmlInput(field);
     }

_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to