01: /*
02:
03: This software is OSI Certified Open Source Software.
04: OSI Certified is a certification mark of the Open Source Initiative.
05:
06: The license (Mozilla version 1.0) can be read at the MMBase site.
07: See http://www.MMBase.org/license
08: */
09: package org.mmbase.datatypes.processors;
10:
11: import org.mmbase.bridge.*;
12: import org.mmbase.util.transformers.*;
13: import org.mmbase.util.functions.*;
14: import java.io.StringWriter;
15:
16: /**
17: * See {@link org.mmbase.util.transformers.ChecksumFactory}. This produces CommitProcessors meant
18: * for fields that are a checksum of another field. Parameters for that are the parameters of the
19: * Checksum 'processor', and the field for which this field is a checksum.
20: *
21: * @author Michiel Meeuwissen
22: * @version $Id: ChecksumGetProcessorFactory.java,v 1.6 2008/02/19 20:56:35 nklasens Exp $
23: * @since MMBase-1.8
24: */
25:
26: public class ChecksumGetProcessorFactory implements
27: ParameterizedProcessorFactory, java.io.Serializable {
28:
29: private static final long serialVersionUID = 1L;
30:
31: protected static final Parameter[] PARAMS = new Parameter[] {
32: new Parameter.Wrapper(ChecksumFactory.PARAMS),
33: new Parameter<String>("field", String.class, true) };
34:
35: private static final ParameterizedTransformerFactory factory = new ChecksumFactory();
36:
37: /**
38: * Creates a parameterized processor.
39: */
40: public Processor createProcessor(Parameters parameters) {
41: final ByteToCharTransformer transformer = (ByteToCharTransformer) factory
42: .createTransformer(parameters);
43: final String sourceField = (String) parameters.get("field");
44: return new Processor() {
45: private static final long serialVersionUID = 1L;
46:
47: public Object process(Node node, Field field, Object value) {
48: if (value == null || "".equals(value)) {
49: if (node.isNull(sourceField)
50: || node.getSize(sourceField) == 0) {
51: // set checksum null too.
52: // node.setValue(field.getName(), null);
53: return value;
54: } else {
55: StringWriter writer = new StringWriter();
56: transformer.transform(node
57: .getInputStreamValue(sourceField),
58: writer);
59: value = writer.toString();
60: if (!field.isVirtual()) {
61: node.setStringValue(field.getName(),
62: (String) value);
63: node.commit();
64: }
65: return value;
66: }
67: } else {
68: return value;
69: }
70: }
71:
72: public String toString() {
73: return transformer.toString() + " on " + sourceField;
74: }
75: };
76: }
77:
78: /**
79: * Create empty <code>Parameters</code> object for use with {@link #createProcessor}.
80: */
81: public Parameters createParameters() {
82: return new Parameters(PARAMS);
83: }
84:
85: }
|