ApplicationHandler.java
package org.ferris.riviera.console.application;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
import javax.inject.Inject;
import org.apache.log4j.Logger;
/**
*
* @author Michael Remijan mjremijan@yahoo.com @mjremijan
*/
public class ApplicationHandler {
@Inject
protected Logger log;
protected Attributes getAttributes() {
log.info("ENTER");
// This is an example of a JarUrlConnection URL
// URL: jar:file:/C:/Users/Michael/..../jboss-annotations-api_1.2_spec-1.0.0.Final.jar!/META-INF/MANIFEST.MF
//
// This is what the jarURL returns above
// jarURL: file:/C:/Users/Michael/..../ferris-riviera-2.0.0.0-SNAPSHOT-windows.jar
Attributes attributes;
try {
URL jarURL
= this.getClass().getProtectionDomain().getCodeSource().getLocation();
URI manifestUri
= new URI(String.format("jar:%s!/%s", jarURL, JarFile.MANIFEST_NAME));
InputStream is = manifestUri.toURL().openStream();
Manifest manifest = new Manifest(is);
attributes = manifest.getMainAttributes();
is.close();
} catch (Exception e) {
attributes = new Attributes();
}
return attributes;
}
public Application getApplication() {
log.info("ENTER");
Attributes attributes
= getAttributes();
Application application
= new Application();
application.setTitle(attributes.getValue("Implementation-Title"));
application.setVersion(attributes.getValue("Implementation-Version"));
application.setUrl(attributes.getValue("Implementation-URL"));
application.setBuildJdk(attributes.getValue("Build-Jdk"));
application.setCreatedBy(attributes.getValue("Created-By"));
application.setCreatedOn(attributes.getValue("Build-Time"));
application.setVendorId(attributes.getValue("Implementation-Vendor-Id"));
application.setVendor(attributes.getValue("Implementation-Vendor"));
return application;
}
// private void fromStackOverflow() {
// Enumeration resEnum;
// try {
// resEnum = Thread.currentThread().getContextClassLoader().getResources(JarFile.MANIFEST_NAME);
// while (resEnum.hasMoreElements()) {
// try {
// URL url = (URL)resEnum.nextElement();
// System.out.printf("URL: %s%nCLASS: %s%n", url, url.getClass().getName());
// InputStream is = url.openStream();
// if (is != null) {
// Manifest manifest = new Manifest(is);
// Attributes mainAttribs = manifest.getMainAttributes();
// String version = mainAttribs.getValue("Implementation-Version");
// if(version != null) {
// return version;
// }
// }
// }
// catch (Exception e) {
// // Silently ignore wrong manifests on classpath?
// }
// }
//
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
}