Update of /var/cvs/src/org/mmbase/datatypes/handlers/html
In directory james.mmbase.org:/tmp/cvs-serv13886

Modified Files:
        BinaryHandler.java HtmlHandler.java MultiPart.java 
Log Message:
  MMB-1810


See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/datatypes/handlers/html
See also: http://www.mmbase.org/jira/browse/MMB-1810


Index: BinaryHandler.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/datatypes/handlers/html/BinaryHandler.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- BinaryHandler.java  17 Apr 2009 22:09:35 -0000      1.4
+++ BinaryHandler.java  24 Apr 2009 15:10:10 -0000      1.5
@@ -22,7 +22,7 @@
  * 'input' tag with type 'file'.
  *
  * @author Michiel Meeuwissen
- * @version $Id: BinaryHandler.java,v 1.4 2009/04/17 22:09:35 michiel Exp $
+ * @version $Id: BinaryHandler.java,v 1.5 2009/04/24 15:10:10 michiel Exp $
  * @since MMBase-1.9.1
  */
 
@@ -68,11 +68,19 @@
 
     @Override
     protected void setValue(Node node, String fieldName, Object value) {
-        if (value == null || ! useSpecificSetter) {
+        if (value == null) {
             node.setValue(fieldName, value);
         } else {
             SerializableInputStream sis = 
Casting.toSerializableInputStream(value);
+            if ("".equals(sis.getName())) {
+                // notching changed.
+            } else {
+                if (useSpecificSetter) {
             node.setInputStreamValue(fieldName, sis, sis.getSize());
+                } else {
+                    node.setValue(fieldName, sis);
+                }
+            }
         }
     }
 
@@ -82,8 +90,8 @@
     @Override
     protected Object getFieldValue(Request request, Node node, Field field)  {
         if (MultiPart.isMultipart(request.getProperty(Parameter.REQUEST))) {
-            FileItem bytes = 
MultiPart.getMultipartRequest(request.getProperty(Parameter.REQUEST),
-                                                           
request.getProperty(Parameter.RESPONSE)).getFileItem(request.getName(field));
+            SerializableInputStream bytes = 
MultiPart.getMultipartRequest(request.getProperty(Parameter.REQUEST),
+                                                           
request.getProperty(Parameter.RESPONSE)).getInputStream(request.getName(field));
             return bytes;
         } else {
             return null;


Index: HtmlHandler.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/datatypes/handlers/html/HtmlHandler.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- HtmlHandler.java    17 Apr 2009 17:38:13 -0000      1.2
+++ HtmlHandler.java    24 Apr 2009 15:10:10 -0000      1.3
@@ -25,7 +25,7 @@
  * This is the base handler for the mime type text/html and 
application/xml+xhtml.
  *
  * @author Michiel Meeuwissen
- * @version $Id: HtmlHandler.java,v 1.2 2009/04/17 17:38:13 michiel Exp $
+ * @version $Id: HtmlHandler.java,v 1.3 2009/04/24 15:10:10 michiel Exp $
  * @since MMBase-1.9.1
  */
 
@@ -36,6 +36,14 @@
     public static final Parameter<String> SESSIONNAME = new 
Parameter<String>(HtmlHandler.class.getName() + ".SESSIONNAME", String.class);
     protected static final CharTransformer XML = new Xml(Xml.ESCAPE);
 
+
+    private boolean setIfNotChanged = false;
+
+
+    public void setSetIfNotChanged(boolean b) {
+        setIfNotChanged = b;
+    }
+
     protected void appendClasses(StringBuilder buf, Node node, Field field) {
         buf.append("mm_validate");
         if (field instanceof org.mmbase.bridge.util.DataTypeField) {
@@ -76,8 +84,8 @@
             // also in an mm:form, you can simply commit.
             if (node != null && ! field.isReadOnly()) {
                 String fieldName = field.getName();
-                Object oldValue = node.getValue(fieldName);
-                if (fieldValue == null ? oldValue != null : ! 
fieldValue.equals(oldValue)) {
+                Object oldValue = setIfNotChanged ? /* irrelevant */ null : 
node.getValue(fieldName);
+                if (setIfNotChanged || (fieldValue == null ? oldValue != null 
: ! fieldValue.equals(oldValue))) {
                     try {
                         if(log.isDebugEnabled()) {
                             log.debug("Setting " + fieldName + " to " + 
(fieldValue == null ? "" : fieldValue.getClass().getName()) + " " + fieldValue);


Index: MultiPart.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/datatypes/handlers/html/MultiPart.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- MultiPart.java      23 Apr 2009 15:27:06 -0000      1.2
+++ MultiPart.java      24 Apr 2009 15:10:10 -0000      1.3
@@ -13,6 +13,7 @@
 import javax.servlet.http.*;
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
+import org.mmbase.util.SerializableInputStream;
 import org.apache.commons.fileupload.*;
 import org.apache.commons.fileupload.disk.*;
 import org.apache.commons.fileupload.servlet.*;
@@ -20,7 +21,7 @@
 /**
  * Taglib needs to read Multipart request sometimes. Functionallity is 
centralized here.
  * @author Michiel Meeuwissen
- * @version $Id: MultiPart.java,v 1.2 2009/04/23 15:27:06 michiel Exp $
+ * @version $Id: MultiPart.java,v 1.3 2009/04/24 15:10:10 michiel Exp $
  **/
 
 public class MultiPart {
@@ -88,6 +89,7 @@
                 List fileItems = fu.parseRequest(req);
                 for (Iterator i = fileItems.iterator(); i.hasNext(); ) {
                     FileItem fi = (FileItem)i.next();
+                    log.debug("Found " + fi);
                     if (fi.isFormField()) {
                         String value;
                         try {
@@ -111,36 +113,24 @@
                             parametersMap.put(fi.getFieldName(), values);
                         }
                     } else {
-                        parametersMap.put(fi.getFieldName(), fi);
+                        // This is an actual file-upload
+                        parametersMap.put(fi.getFieldName(), new 
SerializableInputStream(fi));
                     }
                 }
             } catch (FileUploadException e) {
-                log.error(e.getMessage(), e);
                 throw new RuntimeException(e);
+            } catch (java.io.IOException ioe) {
+                throw new RuntimeException(ioe);
             }
             coding = c;
             log.debug("Created with encoding: " + coding);
         }
 
-        /**
-         * Method to retrieve the bytes of an uploaded file.
-         * @param param The name of the parameter
-         * @return <code>null</code> if parameter not found, otherwise the 
bytes from the parameter
-         */
-        public byte[] getBytes(String param) {
-            log.debug("Getting bytes for " + param);
+        public SerializableInputStream getInputStream(String param)  {
+            log.debug("Getting inputtream for " + param);
             Object value = parametersMap.get(param);
-            if (value instanceof FileItem) {
-                return ((FileItem)value).get();
-            } else {
-                return null;
-            }
-        }
-        public FileItem getFileItem(String param)  {
-            log.debug("Getting outputstream for " + param);
-            Object value = parametersMap.get(param);
-            if (value instanceof FileItem) {
-                return (FileItem)value;
+            if (value instanceof SerializableInputStream) {
+                return (SerializableInputStream) value;
             } else {
                 return null;
             }
@@ -183,7 +173,7 @@
          */
         public boolean isFile(String param) {
             Object value = parametersMap.get(param);
-            return value instanceof FileItem;
+            return value instanceof SerializableInputStream;
         }
 
         /**
@@ -198,8 +188,12 @@
             Object value = parametersMap.get(param);
             //log.debug("Got param " + param + " " + (value == null ? "NULL" : 
value.getClass().getName()) + " " + value);
 
-            if (value instanceof FileItem) {
-                return encodeBytesAsString(((FileItem)value).get());
+            if (value instanceof SerializableInputStream) {
+                try {
+                    return 
encodeBytesAsString(((SerializableInputStream)value).get());
+                } catch (java.io.IOException ioe) {
+                    return ioe.getMessage();
+                }
             } else {
                 return value;
             }
_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to