package com.revolsys.util;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.jar.Attributes;
import java.util.jar.Attributes.Name;
import java.util.jar.Manifest;
import org.apache.log4j.Logger;
import com.revolsys.io.FileUtil;
public class ManifestUtil {
private static final Logger LOG = Logger.getLogger(ManifestUtil.class);
public static String getImplementationVersion(final String implementationTitle) {
final Manifest manifest = getManifestByImplementationTitle(implementationTitle);
if (manifest != null) {
return manifest.getMainAttributes().getValue(Name.IMPLEMENTATION_VERSION);
} else {
return "0.0.0";
}
}
public static String getMainAttributeByImplementationTitle(final String implementationTitle,
final String name) {
final Manifest manifest = getManifestByImplementationTitle(implementationTitle);
if (manifest != null) {
return manifest.getMainAttributes().getValue(name);
} else {
return null;
}
}
public static Manifest getManifestByImplementationTitle(final String implementationTitle) {
try {
final Enumeration resources = Thread.currentThread()
.getContextClassLoader()
.getResources("META-INF/MANIFEST.MF");
while (resources.hasMoreElements()) {
final URL url = (URL)resources.nextElement();
final InputStream in = url.openStream();
try {
final Manifest manifest = new Manifest(in);
final Attributes attrs = manifest.getMainAttributes();
final String title = attrs.getValue(Attributes.Name.IMPLEMENTATION_TITLE);
if (implementationTitle.equals(title)) {
return manifest;
}
} finally {
FileUtil.closeSilent(in);
}
}
} catch (final IOException e) {
LOG.error("Unable to get manifest for: " + implementationTitle, e);
}
return null;
}
}