package org.ovirt.engine.api.restapi.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.ovirt.engine.core.compat.Guid;
public class GuidUtils {
private static final String MD5_SECURITY_ALGORITHM = "MD5";
public static Guid asGuid(String id) {
try {
return new Guid(id);
}catch (IllegalArgumentException e) {
throw new MalformedIdException(e);
}
}
public static Guid asGuid(byte[] guid, boolean keepByteOrder) {
try {
return new Guid(guid, keepByteOrder);
} catch (IllegalArgumentException e) {
throw new MalformedIdException(e);
}
}
/**
* There are some business entities in the API, which are not regarded as business entities in the engine, and
* therefore they don't have IDs. The API generates uniqute GUIDs for them, according to their attributes. This
* method accepts one or more string attributes, concatenates them, and using Md5 hash to generate a unique Guid for
* them.
*
* @param args
* one or more strings, guid will be generated from them
* @return unique Guid generated from the given strings.
*/
public static Guid generateGuidUsingMd5(String... args) {
StringBuilder builder = new StringBuilder();
for (String arg : args) {
builder.append(arg);
}
byte[] hash;
try {
hash = MessageDigest.getInstance(MD5_SECURITY_ALGORITHM).digest(builder.toString().getBytes());
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException(e); // never happens, MD5 algorithm exists
}
return new Guid(hash, true);
}
}