You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2007/05/24 00:18:29 UTC
svn commit: r541101 -
/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/EntityTag.java
Author: jmsnell
Date: Wed May 23 15:18:25 2007
New Revision: 541101
URL: http://svn.apache.org/viewvc?view=rev&rev=541101
Log:
Utility code for generating Etags using a MD5 hash of source material
Modified:
incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/EntityTag.java
Modified: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/EntityTag.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/EntityTag.java?view=diff&rev=541101&r1=541100&r2=541101
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/EntityTag.java (original)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/EntityTag.java Wed May 23 15:18:25 2007
@@ -18,11 +18,16 @@
package org.apache.abdera.util;
import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
+import org.apache.commons.codec.binary.Hex;
+
/**
- * Represents a simple Entity Tag
+ * Implements an EntityTag.
*/
public class EntityTag
implements Cloneable,
@@ -165,4 +170,34 @@
return super.clone();
}
+
+ /**
+ * Utility method for generating ETags. Works by concatenating the UTF-8
+ * bytes of the provided strings then generating an MD5 hash of the result.
+ */
+ public static EntityTag generate(String... material) {
+ String etag = null;
+ try {
+ MessageDigest md = MessageDigest.getInstance("md5");
+ for (String s : material) md.update(s.getBytes("utf-8"));
+ byte[] digest = md.digest();
+ etag = new String(Hex.encodeHex(digest));
+ } catch (NoSuchAlgorithmException e) {
+ throw new UnsupportedOperationException(
+ "The hashing function is not available");
+ } catch (UnsupportedEncodingException e) {
+ // should not happen
+ throw new RuntimeException("UTF-8 not supported?", e);
+ }
+ return new EntityTag(etag);
+ }
+
+ /**
+ * Checks that the passed in ETag matches the ETag generated by the
+ * generate method
+ */
+ public static boolean matches(EntityTag etag, String... material) {
+ EntityTag etag2 = generate(material);
+ return EntityTag.matches(etag,etag2);
+ }
}