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