package com.tesora.dve.common; /* * #%L * Tesora Inc. * Database Virtualization Engine * %% * Copyright (C) 2011 - 2014 Tesora Inc. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ import java.net.URL; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.jar.Attributes; import java.util.jar.Manifest; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import com.tesora.dve.exceptions.PEException; public final class PELogUtils { private static final String MANIFEST_FILE_NAME = "META-INF/MANIFEST.MF"; private static final String CORE_PROJECT_NAME = "tesora-dve-core"; private static final String IMPL_BUILDTAG = "Implementation-BuildTag"; private static final String IMPL_BUILDNUM = "Implementation-BuildNum"; private static final String IMPL_BUILDID = "Implementation-BuildId"; private static final String IMPL_VERSION = "Implementation-Version"; private static final String BUILT_BY = "Built-By"; private static final String BUILD_TIME = "Build-Time"; private static final String attributeKeys[] = new String[] { IMPL_BUILDTAG, IMPL_BUILDNUM, IMPL_BUILDID, IMPL_VERSION, BUILT_BY, BUILD_TIME }; private static final Map<String,String> values = buildValues(); private PELogUtils() { } // get individual values public static String getBuildTag() { return values.get(IMPL_BUILDTAG); } public static String getBuildNumber() { return values.get(IMPL_BUILDNUM); } public static String getBuildID() { return values.get(IMPL_BUILDID); } public static String getVersion() { return values.get(IMPL_VERSION); } public static String getBuildTime() { return values.get(BUILD_TIME); } public static String getBuilder() { return values.get(BUILT_BY); } public static String getBuildVersionString(boolean verbose) { StringBuffer ret; if (values.isEmpty()) ret = new StringBuffer("Version not available"); else { if (StringUtils.isBlank(getBuildNumber())) { ret = new StringBuffer("Developer Build"); if (!StringUtils.isBlank(getBuilder())) { ret.append(" - ").append(getBuilder()); if (!StringUtils.isBlank(getBuildTime())) ret.append(" at ").append(getBuildTime()); } } else { ret = new StringBuffer("Version ").append(getVersion()).append("-") .append(getBuildNumber()); if (verbose) { if (!StringUtils.isBlank(getBuilder())) { ret.append(" built by ").append(getBuilder()); if (!StringUtils.isBlank(getBuildTime())) ret.append(" at ").append(getBuildTime()); } } } } return ret.toString(); } private static Attributes readManifestFile() throws PEException { try { Enumeration<URL> resources = PELogUtils.class.getClassLoader().getResources(MANIFEST_FILE_NAME); Attributes attrs = new Attributes(); while (resources.hasMoreElements()) { URL url = resources.nextElement(); if (url.toString().contains(CORE_PROJECT_NAME)) { Manifest manifest = new Manifest(url.openStream()); attrs = manifest.getMainAttributes(); break; } } return attrs; } catch (Exception e) { throw new PEException("Error retrieving build manifest", e); } } private static Map<String,String> buildValues() { Attributes attributes = null; try { attributes = readManifestFile(); } catch (Exception e) { Logger.getLogger(PELogUtils.class).warn("Unable to read manifest file",e); attributes = null; } Map<String,String> out = new HashMap<String,String>(); if (attributes != null) { for(String k : attributeKeys) { out.put(k, attributes.getValue(k)); } } return out; } }