package com.google.gwt.dist.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Util {
@SuppressWarnings("unchecked")
private static final Class[] parameters = new Class[] { URL.class };
private static final Logger logger = Logger.getLogger(Util.class.getName());
/**
* This method adds a folder to class search path at runtime.
*
* @param f
* Folder to be added.
*/
public static void addFolderToClasspath(File f, ClassLoader classLoader) {
URL uncompressedSrcURL = null;
try {
uncompressedSrcURL = new URL("file://" + f.getAbsolutePath()
+ File.separator + "*");
} catch (MalformedURLException e) {
e.printStackTrace();
}
URL elements[] = { uncompressedSrcURL };
new URLClassLoader(elements, classLoader);
}
public static void addUrl(URL u) {
URLClassLoader sysloader = (URLClassLoader) ClassLoader
.getSystemClassLoader();
Class<URLClassLoader> sysclass = URLClassLoader.class;
try {
Method method = sysclass.getDeclaredMethod("addURL", parameters);
method.setAccessible(true);
method.invoke(sysloader, new Object[] { u });
} catch (NoSuchMethodException e) {
logger.log(Level.SEVERE, e.getMessage());
} catch (InvocationTargetException e) {
logger.log(Level.SEVERE, e.getMessage());
} catch (IllegalAccessException e) {
logger.log(Level.SEVERE, e.getMessage());
}
}
public static String getFolderSeparatorInZipArchive() {
return "/";
}
/**
* Get MD5, which is stored as a byte array, as a String representation.
*
* @param md5 byte array to be converted into a string.
* @return String representation of the MD5.
*/
public static String getMD5AsHex(byte[] md5) {
String result = "";
for (int i = 0; i < md5.length; i++) {
result += Integer.toString((md5[i] & 0xff) + 0x100, 16)
.substring(1);
}
return result;
}
/**
* Converts array of bytes into object.
*
* @param bytes
* Bytes to be converted to object.
* @return Object read from byte array or null if conversion failed.
*/
public static Object byteArrayToObject(byte[] bytes) {
Object obj = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
obj = ois.readObject();
return obj;
} catch (IOException e) {
} catch (ClassNotFoundException e) {
}
return null;
}
public static byte[] objectToByteArray(Object o) {
byte[] data = null;
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(o);
oos.flush();
oos.close();
bos.close();
data = bos.toByteArray();
} catch (IOException e) {
}
return data;
}
}