KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > util > transformers > ChecksumFactory


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.util.transformers;
11
12 import org.mmbase.util.functions.*;
13 import java.util.zip.Checksum JavaDoc;
14 import java.io.*;
15
16 import org.mmbase.util.logging.Logger;
17 import org.mmbase.util.logging.Logging;
18
19 /**
20  * Creates ByteToCharTransformers, creating a 'checksum' string of a byte-arrays. Parameterized by
21  * the checksum implementation (defaults to java.util.zip.Adler32).
22  *
23  * @author Michiel Meeuwissen
24  * @since MMBase-1.8
25  * @version $Id: ChecksumFactory.java,v 1.8 2006/04/18 14:10:38 michiel Exp $
26  */

27
28 public class ChecksumFactory implements ParameterizedTransformerFactory {
29     private static final Logger log = Logging.getLoggerInstance(ChecksumFactory.class);
30
31     public static final Parameter[] PARAMS = new Parameter[] {
32         new Parameter("implementation", String JavaDoc.class, java.util.zip.Adler32 JavaDoc.class.getName())
33     };
34
35     public Parameters createParameters() {
36         return new Parameters(PARAMS);
37     }
38
39     /**
40      * Creates a parameterized transformer.
41      */

42     public Transformer createTransformer(Parameters parameters) {
43         String JavaDoc impl = (String JavaDoc) parameters.get("implementation");
44         try {
45             Class JavaDoc clazz = Class.forName(impl);
46             if (Checksum JavaDoc.class.isAssignableFrom(clazz)) {
47                 Checksum JavaDoc checksum = (Checksum JavaDoc) clazz.newInstance();
48                 return new ChecksumTransformer(checksum);
49             }
50             if (impl.equalsIgnoreCase("md5")) {
51                 return new MD5();
52             }
53         } catch (Exception JavaDoc e) {
54             log.error(e);
55         }
56         return Transformers.getCharTransformer(impl, "", "ChecksumFactory", false);
57
58
59     }
60
61
62     protected class ChecksumTransformer extends ByteArrayToCharTransformer implements ByteToCharTransformer {
63         private static final long serialVersionUID = 1L;
64         private Checksum JavaDoc checksum;
65         ChecksumTransformer(Checksum JavaDoc c) {
66             checksum = c;
67         }
68         public String JavaDoc transform(byte[] bytes) {
69             if (bytes == null) return null;
70             synchronized(checksum) {
71                 checksum.reset();
72                 checksum.update(bytes, 0, bytes.length);
73                 return "" + checksum.getValue();
74             }
75         }
76
77         public String JavaDoc toString() {
78             return "checksum(" + checksum + ")";
79         }
80
81         // implementation of serializable
82
private void writeObject(ObjectOutputStream out) throws IOException {
83             if (checksum instanceof Serializable) {
84                 out.writeObject(checksum);
85             } else {
86                 out.writeObject(checksum.getClass());
87             }
88         }
89         // implementation of serializable
90
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException JavaDoc {
91             Object JavaDoc cs = in.readObject();
92             if (cs instanceof Class JavaDoc) {
93                 try {
94                     checksum = (Checksum JavaDoc) ((Class JavaDoc) cs).newInstance();
95                 } catch (InstantiationException JavaDoc e) {
96                     throw new IOException(e.getMessage());
97                } catch (IllegalAccessException JavaDoc e) {
98                     throw new IOException(e.getMessage());
99                 }
100             } else {
101                 checksum = (Checksum JavaDoc) cs;
102             }
103         }
104
105     }
106
107 }
108
Popular Tags