You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by al...@apache.org on 2011/03/15 19:37:20 UTC
svn commit: r1081894 [7/7] - in /incubator/stanbol/trunk/kres: ./
eu.iksproject.kres.jersey/ eu.iksproject.kres.jersey/KReSConf/
eu.iksproject.kres.jersey/src/main/java/eu/iksproject/kres/jersey/
eu.iksproject.kres.jersey/src/main/java/eu/iksproject/kr...
Added: incubator/stanbol/trunk/kres/rules/refactor/src/main/java/org/apache/stanbol/rules/refactor/api/util/URIGenerator.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/kres/rules/refactor/src/main/java/org/apache/stanbol/rules/refactor/api/util/URIGenerator.java?rev=1081894&view=auto
==============================================================================
--- incubator/stanbol/trunk/kres/rules/refactor/src/main/java/org/apache/stanbol/rules/refactor/api/util/URIGenerator.java (added)
+++ incubator/stanbol/trunk/kres/rules/refactor/src/main/java/org/apache/stanbol/rules/refactor/api/util/URIGenerator.java Tue Mar 15 18:37:12 2011
@@ -0,0 +1,87 @@
+package org.apache.stanbol.rules.refactor.api.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class URIGenerator {
+
+
+ public static final String SHA1 = "SHA1";
+
+ public static final int MIN_BUF_SIZE = 8 * 1024; // 8 kB
+
+ public static final int MAX_BUF_SIZE = 64 * 1024; // 64 kB
+
+ private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
+
+
+ public static String createID(String baseUri, byte[] content) {
+
+
+ // calculate an ID based on the digest of the content
+ String hexDigest = "";
+ if (!baseUri.startsWith("urn:") && !baseUri.endsWith("/")) {
+ baseUri = baseUri + "/";
+ }
+ try {
+ hexDigest = streamDigest(
+ new ByteArrayInputStream(content), null, SHA1);
+ } catch (IOException e) {
+ // this is not going to happen since output stream is null and the
+ // input data is already loaded in memory
+ }
+
+ return baseUri + SHA1.toLowerCase() + "-" + hexDigest;
+ }
+
+
+
+
+ public static String streamDigest(InputStream in, OutputStream out,
+ String digestAlgorithm) throws IOException {
+ MessageDigest digest;
+ try {
+ digest = MessageDigest.getInstance(digestAlgorithm);
+ } catch (NoSuchAlgorithmException e) {
+ throw (IOException) new IOException().initCause(e);
+ }
+
+ int size = in.available();
+ if (size == 0) {
+ size = MAX_BUF_SIZE;
+ } else if (size < MIN_BUF_SIZE) {
+ size = MIN_BUF_SIZE;
+ } else if (size > MAX_BUF_SIZE) {
+ size = MAX_BUF_SIZE;
+ }
+ byte[] buf = new byte[size];
+
+ /*
+ * Copy and digest.
+ */
+ int n;
+ while ((n = in.read(buf)) != -1) {
+ if (out != null) {
+ out.write(buf, 0, n);
+ }
+ digest.update(buf, 0, n);
+ }
+ if (out != null) {
+ out.flush();
+ }
+ return toHexString(digest.digest());
+ }
+
+ public static String toHexString(byte[] data) {
+ StringBuilder buf = new StringBuilder(2 * data.length);
+ for (byte b : data) {
+ buf.append(HEX_DIGITS[(0xF0 & b) >> 4]);
+ buf.append(HEX_DIGITS[0x0F & b]);
+ }
+ return buf.toString();
+ }
+}