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

flex2.tools.VersionInfo Maven / Gradle / Ivy

There is a newer version: 0.9.12
Show newest version
/*
 *
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You 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 flex2.tools;

import java.io.InputStream;
import java.io.IOException;
import java.util.Properties;

/**
 * A helper class for querying build number, Flex version, and library
 * version information.
 */
public class VersionInfo
{
    public static String FLEX_MAJOR_VERSION = "4";
    public static String FLEX_MINOR_VERSION = "12";
    public static String FLEX_NANO_VERSION  = "0";
    
	/**
	 * Lib version is the "version" of the SWC format. Major number changes represent big (although not
	 * by definition incompatble) changes, such as bytecode format revs. Minor number changes are intended
	 * to represent easy-to-support modifications. The only universal rule is that the compiler will warn
	 * when a "future" major version is found in a SWC that's being read in.
	 *
	 * It's expected that incompatible changes will arise. Ad-hoc guard code will be added to implement those
	 * dividing lines. The way the code is currently laid out, these would probably be implemented in Swc.read(),
	 * but in any case they should be finable by looking at the callers of VersionInfo.getLibVersion().
	 *
     * 
  • * Version 1.2: Add <keep-as3-metadata> container to catalog.xml to perserve metadata *
  • *
  • * Version 1.1: Add <digest> container to catalog xml for cross-domain rsls support. * Add "signatureChecksum" attribute to "script" element. * *
  • *
  • * Version 1.0: Initial version. *
  • * */ public static String LIB_VERSION_1_0 = "1.0"; public static String LIB_VERSION_1_1 = "1.1"; public static String LIB_VERSION_1_2 = "1.2"; public static String LIB_MAJOR_VERSION = "1"; public static String LIB_MINOR_VERSION = "2"; //Cache this info as it should not change during the time class is loaded static String BUILD_MESSAGE; static String BUILD_NUMBER_STRING; static String FLEX_VERSION_NUMBER; static String LIB_VERSION_NUMBER; public static String buildMessage() { if (BUILD_MESSAGE == null) { try { //Ensure we've parsed build info getBuild(); String buildNum = BUILD_NUMBER_STRING; if (buildNum == null || buildNum.equals("")) { buildNum = "development"; } BUILD_MESSAGE = "Version " + FLEX_MAJOR_VERSION + "." + FLEX_MINOR_VERSION + "." + FLEX_NANO_VERSION + " build " + buildNum; } catch (Exception t) { /* if (Trace.error) { t.printStackTrace(); } */ BUILD_MESSAGE = "build information unavailable"; } } return BUILD_MESSAGE; } public static String getBuild() { if (BUILD_NUMBER_STRING == null) { BUILD_NUMBER_STRING = ""; InputStream in = null; try { Properties p = new Properties(); in = VersionInfo.class.getResourceAsStream("version.properties"); if (in != null) { p.load(in); String build = p.getProperty("build"); if ((build != null) && (! build.equals(""))) { // In open source builds the build number has changed from an // integer to a string of dot separated integers. // for example: 191195 -> 3.0.0.97 int dot_index = build.lastIndexOf("."); if (dot_index != -1) { build = build.substring(dot_index + 1); } BUILD_NUMBER_STRING = build; } } } catch (Exception t) { /* if (Trace.error) { t.printStackTrace(); } */ } finally { if (in != null) { try { in.close(); } catch (IOException ex) { } } } } return BUILD_NUMBER_STRING; } public static String getFlexVersion() { if (FLEX_VERSION_NUMBER == null) { FLEX_VERSION_NUMBER = FLEX_MAJOR_VERSION + "." + FLEX_MINOR_VERSION + "." + FLEX_NANO_VERSION; } return FLEX_VERSION_NUMBER; } public static String getLibVersion() { if (LIB_VERSION_NUMBER == null) { LIB_VERSION_NUMBER = LIB_MAJOR_VERSION + "." + LIB_MINOR_VERSION; } return LIB_VERSION_NUMBER; } /** * * @param swcLibVersion - library version to compare with the current library version. * @param compareMajorVersion - if true, compare only the major versions. Otherwise compare * both major and minor versions. * @return true if the given library version is greater than the compiled in library version. */ public static boolean IsNewerLibVersion(String swcLibVersion, boolean compareMajorVersion) { return compareVersions(swcLibVersion, getLibVersion(), compareMajorVersion) > 0; } /** * Compare two version strings that are in at "Major.minor" format. * * Examples) "1.0", "1.1" * * @param version1 first version * @param version2 second version * @param compareMajorVersion compare only the major versions, disregarding the minor version. * * @return zero if the versions are equal * less than zero if version1 is less than version2 * greater than zero if version1 is greater than version2 */ public static int compareVersions(String version1, String version2, boolean compareMajorVersion) { // C: change this implementation if the lib version changes from the a.b format to the a.b.c. format. // Obviously, a.b.c is not a number! double v1 = 0, v2 = 0; try { v1 = Double.parseDouble(version1); } catch (NumberFormatException ex) { /* if (Trace.error) { ex.printStackTrace(); } */ } try { v2 = Double.parseDouble(version2); } catch (NumberFormatException ex) { /* if (Trace.error) { ex.printStackTrace(); } */ } if (compareMajorVersion) { v1 = Math.floor(v1); v2 = Math.floor(v2); } if (v1 == v2) { return 0; } else if (v1 < v2) { return -1; } return 1; } }




    © 2015 - 2025 Weber Informatics LLC | Privacy Policy