/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.rice.kns.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.apache.ojb.broker.util.GUID; /** * * This class wraps an OJB Guid so that it conforms to the format (and using the algorithm) described in * RFC 4122 entitled " A Universally Unique IDentifier (UUID) URN Namespace" */ public class Guid { private final static char HYPHEN='-'; private final static String DIGITS="0123456789ABCDEF"; private String stringValue=null; private GUID guid; public Guid() { guid = new GUID(); // This OJB class is deprecated; remove this line when we upgrade OJB String guidString=guid.toString(); // this is roughly the prefered way with the new OJB GUIDFactory: // String guidString=org.apache.ojb.broker.util.GUIDFactory.next(); MessageDigest sha; try { sha = MessageDigest.getInstance("SHA-1"); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } sha.update(guidString.getBytes()); byte[] hash=sha.digest(); StringBuffer result=new StringBuffer(); for (int i=0; i<hash.length; i++) { result.append(toHex(hash[i])); } // hyphenate for (int i=20; i>4; i-=4) { result.insert(i,HYPHEN); } // truncate result.delete(32,40); stringValue=result.toString(); } public static String toHex(byte b) { int ub=b<0?b+256:b; StringBuffer result=new StringBuffer(2); result.append(DIGITS.charAt(ub/16)); result.append(DIGITS.charAt(ub%16)); return result.toString(); } @Override public String toString() { return stringValue; } }