From 45ed92bd767e9e88d70c14d81e8bbb7acd2e5fe2 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Sat, 07 Mar 2015 09:04:17 -0500
Subject: [PATCH] Minor refactoring of user/team checksumming

---
 src/main/java/com/gitblit/utils/DeepCopier.java |   33 +++++++++++++++++++++++++++++++++
 1 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gitblit/utils/DeepCopier.java b/src/main/java/com/gitblit/utils/DeepCopier.java
index 5d89606..fc76f1a 100644
--- a/src/main/java/com/gitblit/utils/DeepCopier.java
+++ b/src/main/java/com/gitblit/utils/DeepCopier.java
@@ -23,10 +23,43 @@
 import java.io.ObjectOutputStream;
 import java.io.PipedInputStream;
 import java.io.PipedOutputStream;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 
 public class DeepCopier {
 
 	/**
+	 * Utility method to calculate the checksum of an object.
+	 * @param sourceObject The object from which to establish the checksum.
+	 * @return The checksum
+	 * @throws IOException
+	 */
+	public static BigInteger checksum(Object sourceObject) {
+
+	    if (sourceObject == null) {
+	      return BigInteger.ZERO;
+	    }
+
+	    try {
+		    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		    ObjectOutputStream oos = new ObjectOutputStream(baos);
+		    oos.writeObject(sourceObject);
+		    oos.close();
+
+	    	MessageDigest m = MessageDigest.getInstance("SHA-1");
+	    	m.update(baos.toByteArray());
+	    	return new BigInteger(1, m.digest());
+	    } catch (IOException e) {
+	    	throw new RuntimeException(e);
+	    } catch (NoSuchAlgorithmException e) {
+	    	// impossible
+	    }
+
+	    return BigInteger.ZERO;
+	}
+
+	/**
 	 * Produce a deep copy of the given object. Serializes the entire object to
 	 * a byte array in memory. Recommended for relatively small objects.
 	 */

--
Gitblit v1.9.1