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
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs