From b735755815312b5fe2c003642de60711be1cd645 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Fri, 12 Nov 2010 00:19:44 +0100 Subject: New: JogampVersion, providing generic information for Jogamp JAR archives; VersionInfo -> GlueGenVersion JogampVersion, providing generic information for Jogamp JAR archives Accessor to the Jogamp specific manifest additions, ie branch and commit. Also provides convenient attribute access and version dump methods. --- .../com/jogamp/common/util/GlueGenVersion.java | 58 ++++++ src/java/com/jogamp/common/util/JogampVersion.java | 194 +++++++++++++++++++++ src/java/com/jogamp/common/util/VersionInfo.java | 40 ----- src/java/com/jogamp/common/util/VersionUtil.java | 50 +----- 4 files changed, 261 insertions(+), 81 deletions(-) create mode 100644 src/java/com/jogamp/common/util/GlueGenVersion.java create mode 100644 src/java/com/jogamp/common/util/JogampVersion.java delete mode 100644 src/java/com/jogamp/common/util/VersionInfo.java (limited to 'src/java/com/jogamp/common') diff --git a/src/java/com/jogamp/common/util/GlueGenVersion.java b/src/java/com/jogamp/common/util/GlueGenVersion.java new file mode 100644 index 0000000..09cd671 --- /dev/null +++ b/src/java/com/jogamp/common/util/GlueGenVersion.java @@ -0,0 +1,58 @@ +/** + * Copyright 2010 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package com.jogamp.common.util; + +import java.util.jar.Manifest; + +public class GlueGenVersion extends JogampVersion { + + protected static GlueGenVersion jogampCommonVersionInfo; + + protected GlueGenVersion(String packageName, Manifest mf) { + super(packageName, mf); + } + + public static GlueGenVersion getInstance() { + if(null == jogampCommonVersionInfo) { + synchronized(GlueGenVersion.class) { + if( null == jogampCommonVersionInfo ) { + final String packageName = "com.jogamp.common"; + final String fullClazzName = GlueGenVersion.class.getName(); + final Manifest mf = VersionUtil.getManifest(GlueGenVersion.class.getClassLoader(), fullClazzName); + jogampCommonVersionInfo = new GlueGenVersion(packageName, mf); + } + } + } + return jogampCommonVersionInfo; + } + + public static void main(String args[]) { + System.err.println(GlueGenVersion.getInstance().getInfo(null)); + } +} diff --git a/src/java/com/jogamp/common/util/JogampVersion.java b/src/java/com/jogamp/common/util/JogampVersion.java new file mode 100644 index 0000000..229fd13 --- /dev/null +++ b/src/java/com/jogamp/common/util/JogampVersion.java @@ -0,0 +1,194 @@ +/** + * Copyright 2010 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package com.jogamp.common.util; + +import com.jogamp.common.os.Platform; +import java.util.Iterator; +import java.util.Set; +import java.util.jar.Attributes; +import java.util.jar.Manifest; + +public class JogampVersion { + + public static Attributes.Name IMPLEMENTATION_BRANCH = new Attributes.Name("Implementation-Branch"); + public static Attributes.Name IMPLEMENTATION_COMMIT = new Attributes.Name("Implementation-Commit"); + + private String packageName; + private Manifest mf; + private int hash; + private Attributes mainAttributes; + private Set/**/ mainAttributeNames; + + protected JogampVersion(String packageName, Manifest mf) { + this.packageName = packageName; + this.mf = mf; + this.hash = mf.hashCode(); + mainAttributes = mf.getMainAttributes(); + mainAttributeNames = mainAttributes.keySet(); + } + + public final int hashCode() { + return hash; + } + + public final boolean equals(Object o) { + if (o instanceof GlueGenVersion) { + return mf.equals(((GlueGenVersion) o).getManifest()); + } + return false; + } + + public final Manifest getManifest() { + return mf; + } + + public final String getPackageName() { + return packageName; + } + + public final String getAttribute(Attributes.Name attributeName) { + return (null != attributeName) ? (String) mainAttributes.get(attributeName) : null; + } + + public final String getAttribute(String attributeName) { + return getAttribute(getAttributeName(attributeName)); + } + + public final Attributes.Name getAttributeName(String attributeName) { + for (Iterator iter = mainAttributeNames.iterator(); iter.hasNext();) { + Attributes.Name an = (Attributes.Name) iter.next(); + if (an.toString().equals(attributeName)) { + return an; + } + } + return null; + } + + public final Set getAttributeNames() { + return mainAttributeNames; + } + + public final String getExtensionName() { + return this.getAttribute(Attributes.Name.EXTENSION_NAME); + } + + public final String getImplementationBranch() { + return this.getAttribute(GlueGenVersion.IMPLEMENTATION_BRANCH); + } + + public final String getImplementationCommit() { + return this.getAttribute(GlueGenVersion.IMPLEMENTATION_COMMIT); + } + + public final String getImplementationTitle() { + return this.getAttribute(Attributes.Name.IMPLEMENTATION_TITLE); + } + + public final String getImplementationVendor() { + return this.getAttribute(Attributes.Name.IMPLEMENTATION_VENDOR); + } + + public final String getImplementationVendorID() { + return this.getAttribute(Attributes.Name.IMPLEMENTATION_VENDOR_ID); + } + + public final String getImplementationVersion() { + return this.getAttribute(Attributes.Name.IMPLEMENTATION_VERSION); + } + + public final String getSpecificationTitle() { + return this.getAttribute(Attributes.Name.SPECIFICATION_TITLE); + } + + public final String getSpecificationVendor() { + return this.getAttribute(Attributes.Name.SPECIFICATION_VENDOR); + } + + public final String getSpecificationVersion() { + return this.getAttribute(Attributes.Name.SPECIFICATION_VERSION); + } + + public final StringBuffer getFullManifestInfo(StringBuffer sb) { + return VersionUtil.getFullManifestInfo(getManifest(), sb); + } + + public StringBuffer getManifestInfo(StringBuffer sb) { + if(null==sb) { + sb = new StringBuffer(); + } + sb.append("Package: "); + sb.append(getPackageName()); + sb.append(Platform.getNewline()); + sb.append("Specification Title: "); + sb.append(getSpecificationTitle()); + sb.append(Platform.getNewline()); + sb.append("Specification Vendor: "); + sb.append(getSpecificationVendor()); + sb.append(Platform.getNewline()); + sb.append("Specification Version: "); + sb.append(getSpecificationVersion()); + sb.append(Platform.getNewline()); + sb.append("Implementation Title: "); + sb.append(getImplementationTitle()); + sb.append(Platform.getNewline()); + sb.append("Implementation Vendor: "); + sb.append(getImplementationVendor()); + sb.append(Platform.getNewline()); + sb.append("Implementation Vendor ID: "); + sb.append(getImplementationVendorID()); + sb.append(Platform.getNewline()); + sb.append("Implementation Version: "); + sb.append(getImplementationVersion()); + sb.append(Platform.getNewline()); + sb.append("Implementation Branch: "); + sb.append(getImplementationBranch()); + sb.append(Platform.getNewline()); + sb.append("Implementation Commit: "); + sb.append(getImplementationCommit()); + sb.append(Platform.getNewline()); + return sb; + } + + public StringBuffer getInfo(StringBuffer sb) { + if(null==sb) { + sb = new StringBuffer(); + } + + sb.append(Platform.getNewline()); + sb.append("-----------------------------------------------------------------------------------------------------"); + sb.append(Platform.getNewline()); + VersionUtil.getPlatformInfo(sb); + sb.append(Platform.getNewline()); + getManifestInfo(sb); + sb.append("-----------------------------------------------------------------------------------------------------"); + sb.append(Platform.getNewline()); + + return sb; + } +} diff --git a/src/java/com/jogamp/common/util/VersionInfo.java b/src/java/com/jogamp/common/util/VersionInfo.java deleted file mode 100644 index 1e76812..0000000 --- a/src/java/com/jogamp/common/util/VersionInfo.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Copyright 2010 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ - -package com.jogamp.common.util; - -public class VersionInfo { - - public static StringBuffer getInfo(StringBuffer sb, String prefix) { - return VersionUtil.getInfo(VersionInfo.class.getClassLoader(), prefix, "com.jogamp.common.util", "VersionInfo", sb); - } - - public static void main(String args[]) { - System.err.println(VersionInfo.getInfo(null, "GlueGen")); - } -} \ No newline at end of file diff --git a/src/java/com/jogamp/common/util/VersionUtil.java b/src/java/com/jogamp/common/util/VersionUtil.java index 6138388..a4e625e 100644 --- a/src/java/com/jogamp/common/util/VersionUtil.java +++ b/src/java/com/jogamp/common/util/VersionUtil.java @@ -41,35 +41,16 @@ import java.util.jar.Manifest; public class VersionUtil { - public static StringBuffer getInfo(ClassLoader cl, String prefix, String pkgName, String clazzName, StringBuffer sb) { - - if(null==sb) { - sb = new StringBuffer(); - } - - sb.append(Platform.getNewline()); - sb.append("-----------------------------------------------------------------------------------------------------"); - sb.append(Platform.getNewline()); - getPlatformInfo(sb, prefix); - sb.append(Platform.getNewline()); - getManifestInfo(cl, prefix, pkgName, clazzName, sb); - sb.append("-----------------------------------------------------------------------------------------------------"); - sb.append(Platform.getNewline()); - - return sb; - } - - public static StringBuffer getPlatformInfo(StringBuffer sb, String prefix) { + public static StringBuffer getPlatformInfo(StringBuffer sb) { if(null==sb) { sb = new StringBuffer(); } - sb.append(prefix+" Platform: " + Platform.getOS() + " " + Platform.getOSVersion() + " (os), " + Platform.getArch() + " (arch)"); + sb.append("Platform: ").append(Platform.getOS()).append(" ").append(Platform.getOSVersion()).append(" (os), ").append(Platform.getArch()).append(" (arch)"); sb.append(Platform.getNewline()); - sb.append(prefix+" Platform: littleEndian " + Platform.isLittleEndian() + ", 32Bit "+Platform.is32Bit() + ", a-ptr bit-size "+Platform.getPointerSizeInBits()); + sb.append("Platform: littleEndian ").append(Platform.isLittleEndian()).append(", 32Bit ").append(Platform.is32Bit()).append(", a-ptr bit-size ").append(Platform.getPointerSizeInBits()); sb.append(Platform.getNewline()); - sb.append(prefix+" Platform: Java " + Platform.getJavaVersion()+", " - +Platform.getJavaVendor()+", "+Platform.getJavaVendorURL()+", is JavaSE: "+Platform.isJavaSE()); + sb.append("Platform: Java ").append(Platform.getJavaVersion()).append(", ").append(Platform.getJavaVendor()).append(", ").append(Platform.getJavaVendorURL()).append(", is JavaSE: ").append(Platform.isJavaSE()); sb.append(Platform.getNewline()); return sb; @@ -88,33 +69,20 @@ public class VersionUtil { return mf; } - public static StringBuffer getManifestInfo(ClassLoader cl, String prefix, - String pkgName, String className, StringBuffer sb) { - if(null==sb) { - sb = new StringBuffer(); - } - - Manifest mf = getManifest(cl, pkgName + "." + className); - - if(null==mf) { - sb.append("Manifest for <"); - sb.append(pkgName); - sb.append("> not available"); - sb.append(Platform.getNewline()); + public static StringBuffer getFullManifestInfo(Manifest mf, StringBuffer sb) { + if(null==mf) { return sb; } - sb.append(prefix); - sb.append(" package "); - sb.append(pkgName); - sb.append(Platform.getNewline()); + if(null==sb) { + sb = new StringBuffer(); + } Attributes attr = mf.getMainAttributes(); Set keys = attr.keySet(); for(Iterator iter=keys.iterator(); iter.hasNext(); ) { Attributes.Name key = (Attributes.Name) iter.next(); String val = attr.getValue(key); - sb.append(prefix); sb.append(" "); sb.append(key); sb.append(" = "); -- cgit v1.2.3