All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.daisy.dotify.cli.ManifestRetriever Maven / Gradle / Ivy

There is a newer version: 3.2.5
Show newest version
package org.daisy.dotify.cli;

import java.io.IOException;
import java.net.URL;
import java.util.jar.Manifest;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Retrieves a jar manifest, if available
 * @author Joel Håkansson
 *
 */
public class ManifestRetriever {
	private static final Logger logger = Logger.getLogger(ManifestRetriever.class.getCanonicalName());
	private final Class clazz;
	private boolean failed = false;
	private Manifest manifest;

	/**
	 * 
	 * @param clazz a class in the jar to get a manifest for
	 */
	public ManifestRetriever(Class clazz) {
		this.clazz = clazz;
		this.manifest = null;
	}
	/**
	 * Returns the jar manifest associated with this instance

	 * @return returns a manifest. If the class is not in a jar, the manifest is empty
	 */
	public Manifest getManifest() {
		if (failed || manifest!=null) {
			return manifest;
		}
		String className = clazz.getSimpleName() + ".class";
		String classPath = clazz.getResource(className).toString();
		if (!classPath.startsWith("jar")) {
		  // Class not from JAR
			failed = true;
			manifest = new Manifest();
		} else {
			String manifestPath = classPath.substring(0, classPath.lastIndexOf("!") + 1) + 
			    "/META-INF/MANIFEST.MF";
			try {
				manifest = new Manifest(new URL(manifestPath).openStream());
			} catch (IOException e) {
				failed = true;
				logger.log(Level.WARNING, "Failed to read manifest.", e);
			}
		}
		return manifest;
	}
	
	/**
	 * Returns true if getManifest has been called and the manifest could not be read
	 * @return true if getManifest previously failed, false otherwise
	 */
	public boolean failed() {
		return failed;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy