/* * Copyright 2013 MovingBlocks * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.terasology.version; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** */ public final class TerasologyVersion { private static final Logger logger = LoggerFactory.getLogger(TerasologyVersion.class); private static TerasologyVersion instance; private static final String VERSION_INFO_FILE = "versionInfo.properties"; private static final String BUILD_NUMBER = "buildNumber"; private static final String BUILD_ID = "buildId"; private static final String BUILD_TAG = "buildTag"; private static final String BUILD_URL = "buildUrl"; private static final String GIT_BRANCH = "gitBranch"; private static final String GIT_COMMIT = "gitCommit"; private static final String DATE_TIME = "dateTime"; private static final String DISPLAY_VERSION = "displayVersion"; private static final String ENGINE_VERSION = "engineVersion"; private static final String DEFAULT_VALUE = ""; private final String buildNumber; private final String buildId; private final String buildTag; private final String buildUrl; private final String gitBranch; private final String gitCommit; private final String dateTime; private final String toString; private final String displayVersion; private final String engineVersion; private TerasologyVersion() { final Properties properties = new Properties(); try (InputStream inStream = this.getClass().getResourceAsStream(VERSION_INFO_FILE)) { if (inStream != null) { properties.load(inStream); } } catch (final IOException e) { logger.error("Loading {} failed", VERSION_INFO_FILE, e); } buildNumber = properties.getProperty(BUILD_NUMBER, DEFAULT_VALUE); buildId = properties.getProperty(BUILD_ID, DEFAULT_VALUE); buildTag = properties.getProperty(BUILD_TAG, DEFAULT_VALUE); buildUrl = properties.getProperty(BUILD_URL, DEFAULT_VALUE); gitBranch = properties.getProperty(GIT_BRANCH, DEFAULT_VALUE); gitCommit = properties.getProperty(GIT_COMMIT, DEFAULT_VALUE); dateTime = properties.getProperty(DATE_TIME, DEFAULT_VALUE); displayVersion = properties.getProperty(DISPLAY_VERSION, DEFAULT_VALUE); engineVersion = properties.getProperty(ENGINE_VERSION, DEFAULT_VALUE); final StringBuilder toStringBuilder = new StringBuilder(); toStringBuilder.append("["); toStringBuilder.append(BUILD_NUMBER); toStringBuilder.append("="); toStringBuilder.append(buildNumber); toStringBuilder.append(", "); toStringBuilder.append(BUILD_ID); toStringBuilder.append("="); toStringBuilder.append(buildId); toStringBuilder.append(", "); toStringBuilder.append(BUILD_TAG); toStringBuilder.append("="); toStringBuilder.append(buildTag); toStringBuilder.append(", "); toStringBuilder.append(BUILD_URL); toStringBuilder.append("="); toStringBuilder.append(buildUrl); toStringBuilder.append(", "); toStringBuilder.append(GIT_BRANCH); toStringBuilder.append("="); toStringBuilder.append(gitBranch); toStringBuilder.append(", "); toStringBuilder.append(GIT_COMMIT); toStringBuilder.append("="); toStringBuilder.append(gitCommit); toStringBuilder.append(", "); toStringBuilder.append(DATE_TIME); toStringBuilder.append("="); toStringBuilder.append(dateTime); toStringBuilder.append(", "); toStringBuilder.append(DISPLAY_VERSION); toStringBuilder.append("="); toStringBuilder.append(displayVersion); toStringBuilder.append(", "); toStringBuilder.append(ENGINE_VERSION); toStringBuilder.append("="); toStringBuilder.append(engineVersion); toStringBuilder.append("]"); toString = toStringBuilder.toString(); } public static TerasologyVersion getInstance() { if (instance == null) { instance = new TerasologyVersion(); } return instance; } public String getBuildNumber() { return buildNumber; } public String getBuildId() { return buildId; } public String getBuildTag() { return buildTag; } public String getBuildUrl() { return buildUrl; } public String getGitBranch() { return gitBranch; } public String getGitCommit() { return gitCommit; } public String getDateTime() { return dateTime; } public String getDisplayVersion() { return displayVersion; } public String getengineVersion() { return engineVersion; } /** * Makes a pretty version string for displaying to human users * @return prettified version String */ public String getHumanVersion() { // TODO replace with a nicer version later with full version numbering in place String humanVersion = ""; TerasologyVersion ver = getInstance(); // MOAR CAPS! if (!ver.getDisplayVersion().trim().equals("")) { humanVersion = displayVersion.toUpperCase(); } // Expect tag to start with "jenkins-" and remove that if (ver.getBuildTag().trim().length() > 8) { humanVersion += " " + ver.getBuildTag().substring(8); } // Expect a date string but ignore time of day if (ver.getDateTime().trim().length() > 10) { humanVersion += " " + ver.getDateTime().substring(0, 10); } return humanVersion; } @Override public String toString() { return toString; } }