Update of /var/cvs/src/org/mmbase/bridge/util
In directory james.mmbase.org:/tmp/cvs-serv14051
Modified Files:
AbstractNode.java
Log Message:
MMB-1810
See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/bridge/util
See also: http://www.mmbase.org/jira/browse/MMB-1810
Index: AbstractNode.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/bridge/util/AbstractNode.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -b -r1.29 -r1.30
--- AbstractNode.java 7 Apr 2009 08:23:33 -0000 1.29
+++ AbstractNode.java 24 Apr 2009 15:12:47 -0000 1.30
@@ -32,7 +32,7 @@
* here, to minimalize the implementation effort of fully implemented Nodes.
*
* @author Michiel Meeuwissen
- * @version $Id: AbstractNode.java,v 1.29 2009/04/07 08:23:33 nklasens Exp $
+ * @version $Id: AbstractNode.java,v 1.30 2009/04/24 15:12:47 michiel Exp $
* @see org.mmbase.bridge.Node
* @since MMBase-1.8
*/
@@ -83,7 +83,24 @@
setValueWithoutProcess(fieldName, value);
} else {
DataType dt = field.getDataType();
+
+
value = dt.cast(value, this, field);
+
+ // All this stuff with setSize is pretty horrible
+ // we need to come up with something clearer than this.
+ if (value instanceof org.apache.commons.fileupload.FileItem) {
+ org.apache.commons.fileupload.FileItem fi =
(org.apache.commons.fileupload.FileItem) value;
+ setSize(fieldName, fi.getSize());
+ } else if (value instanceof SerializableInputStream) {
+ SerializableInputStream si = (SerializableInputStream) value;
+ setSize(fieldName, si.getSize());
+ log.info("Setting size to " + si.getSize());
+ }
+
+ log.info("Size " + getSize(fieldName));
+ log.info("Found " + value);
+
if (value == null && dt instanceof
org.mmbase.datatypes.NumberDataType) {
// null would otherwise be converted to -1, which makes little
sense.
// but must happen because set<Numeric>Value methods cannot
accept null.
@@ -97,7 +114,7 @@
break;
case Field.TYPE_BINARY: {
long length = getSize(fieldName);
- setInputStreamValue(fieldName, Casting.toInputStream(value),
length);
+ setInputStreamValue(fieldName,
Casting.toSerializableInputStream(value), length);
break;
}
case Field.TYPE_FLOAT:
@@ -233,6 +250,7 @@
private static final int readLimit = 10 * 1024 * 1024;
public final void setInputStreamValue(String fieldName, final InputStream
value, long size) {
+ log.info("Setting " + size + " + bytes (" + value + ")");
setSize(fieldName, size);
Field field = getNodeManager().getField(fieldName);
if (log.isDebugEnabled()) {
@@ -240,6 +258,7 @@
}
Object v = value;
try {
+ if (field.getDataType().getProcessor(DataType.PROCESS_SET,
Field.TYPE_BINARY) != null) {
if (value.markSupported() && size < readLimit) {
if (log.isDebugEnabled()) {
log.debug("Mark supported and using " +
field.getDataType().getProcessor(DataType.PROCESS_SET, Field.TYPE_BINARY));
@@ -248,23 +267,21 @@
v = field.getDataType().getProcessor(DataType.PROCESS_SET,
Field.TYPE_BINARY).process(this, field, value);
value.reset();
} else {
- if (field.getDataType().getProcessor(DataType.PROCESS_SET,
Field.TYPE_BINARY) != null) {
+
if (log.isDebugEnabled()) {
log.debug("Mark not supported but using " +
field.getDataType().getProcessor(DataType.PROCESS_SET, Field.TYPE_BINARY));
}
- // well, we must read it to byte-array then, first.
- ByteArrayOutputStream b = new ByteArrayOutputStream((int)
size);
- IOUtil.copy(value, b);
- byte[] byteArray = b.toByteArray();
- v = field.getDataType().getProcessor(DataType.PROCESS_SET,
Field.TYPE_BINARY).process(this, field, byteArray);
+ org.mmbase.util.SerializableInputStream si =
Casting.toSerializableInputStream(value);
+ v = field.getDataType().getProcessor(DataType.PROCESS_SET,
Field.TYPE_BINARY).process(this, field, si);
+ }
} else {
- log.debug("Mark not support but no need for processing");
+ log.debug("No need for processing");
v = value;
}
- }
} catch (IOException ioe) {
- log.error(ioe);
+ log.error(ioe.getMessage(), ioe);
}
+ log.debug("Setting " + v);
setValueWithoutProcess(fieldName, v);
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs