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

com.softwaremagico.tm.file.Version Maven / Gradle / Ivy

package com.softwaremagico.tm.file;

/*-
 * #%L
 * Think Machine 4E (Rules)
 * %%
 * Copyright (C) 2017 - 2024 Softwaremagico
 * %%
 * This software is designed by Jorge Hortelano Otero. Jorge Hortelano Otero
 *  Valencia (Spain).
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; If not, see .
 * #L%
 */

import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import java.util.jar.Attributes;
import java.util.jar.Manifest;

public final class Version {
    private static final String PROJECT_NAME = "think-machine-rules";

    private Version() {

    }

    public static String getVersion() {
        try {
            final String className = Version.class.getSimpleName() + ".class";
            final String classPath = Version.class.getResource(className).toString();
            Manifest manifest = null;
            // Not found, search the manifest.
            if (!classPath.startsWith("jar")) {
                final Enumeration resources = Version.class.getClassLoader().getResources("META-INF/MANIFEST.MF");
                while (resources.hasMoreElements()) {
                    final URL url = resources.nextElement();
                    if (url.toString().contains(PROJECT_NAME)) {
                        manifest = new Manifest(url.openStream());
                    }
                }
            } else {
                final String manifestPath = classPath.substring(0, classPath.lastIndexOf("!") + 1) + "/META-INF/MANIFEST.MF";
                manifest = new Manifest(new URL(manifestPath).openStream());
            }

            if (manifest != null) {
                final Attributes attributes = manifest.getMainAttributes();
                final String version = attributes.getValue("Implementation-Version");
                return version;
            }
        } catch (IOException | NullPointerException e) {
            return null;
        }
        return null;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy