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();
+    }
+}