mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Matthew Swift
15.05.2014 268ac6fa4d1e902ff0ec9873beb31b52745cc8a7
Finish migrating DynamicConstants to ProductInformation class:

* add all remaining property getters
* remove composite properties since these can be generated in ProductInformation.

4 files modified
335 ■■■■■ changed files
opendj-server/pom.xml 13 ●●●● patch | view | raw | blame | history
opendj-server/src/main/java/org/forgerock/opendj/server/core/ProductInformation.java 293 ●●●●● patch | view | raw | blame | history
opendj-server/src/main/resources/META-INF/product/opendj.properties 15 ●●●●● patch | view | raw | blame | history
opendj-server/src/test/java/org/forgerock/opendj/server/core/ProductInformationTest.java 14 ●●●● patch | view | raw | blame | history
opendj-server/pom.xml
@@ -39,14 +39,14 @@
  </description>
  <packaging>jar</packaging>
  <properties>
    <!-- Product properties -->
    <!-- Product information properties -->
    <shortProductName>OpenDJ</shortProductName>
    <issuesFixIds></issuesFixIds>
    <patchFixIds></patchFixIds>
    <isDebugBuild>false</isDebugBuild>
    <docReferenceHome>http://opendj.forgerock.org/</docReferenceHome>
    <docReferenceWiki>http://opendj.forgerock.org/docs.html</docReferenceWiki>
    <docQuickRefGuide>http://opendj.forgerock.org/doc/admin-guide/index.html</docQuickRefGuide>
    <adminGuideUrl>http://opendj.forgerock.org/doc/admin-guide/index.html</adminGuideUrl>
    <docHomepageUrl>http://opendj.forgerock.org/</docHomepageUrl>
    <docWikiUrl>http://opendj.forgerock.org/docs.html</docWikiUrl>
    <docGuideRefUrl>http://opendj.forgerock.org/doc/admin-guide/index.html</docGuideRefUrl>
    <docGuideAdminUrl>http://opendj.forgerock.org/doc/admin-guide/index.html</docGuideAdminUrl>
  </properties>
  <dependencies>
    <dependency>
@@ -125,6 +125,7 @@
            <configuration>
              <useLastCommittedRevision>true</useLastCommittedRevision>
              <buildNumberPropertyName>buildRevision</buildNumberPropertyName>
              <revisionOnScmFailure>-1</revisionOnScmFailure>
            </configuration>
          </execution>
          <execution>
opendj-server/src/main/java/org/forgerock/opendj/server/core/ProductInformation.java
@@ -33,11 +33,11 @@
import java.util.Properties;
/**
 * Product information, including version information.
 * OpenDJ product information, including version number, build information, and
 * references to documentation.
 */
public final class ProductInformation {
    private static final ProductInformation DEFAULT = new ProductInformation("opendj");
    private final Properties properties;
    /**
     * Returns the singleton product information instance.
@@ -48,10 +48,13 @@
        return DEFAULT;
    }
    private ProductInformation(String productName) {
        // Load the resource file.
        String resourceName = "/META-INF/product/" + productName + ".properties";
        InputStream stream = getClass().getResourceAsStream(resourceName);
    private final Properties properties;
    private final String versionFull;
    private final String versionPrintable;
    private ProductInformation(final String productName) {
        final String resourceName = "/META-INF/product/" + productName + ".properties";
        final InputStream stream = getClass().getResourceAsStream(resourceName);
        if (stream == null) {
            throw new MissingResourceException("Can't find product information " + resourceName,
@@ -61,14 +64,173 @@
        properties = new Properties();
        try {
            properties.load(new BufferedInputStream(stream));
        } catch (IOException e) {
        } catch (final IOException e) {
            throw new MissingResourceException("Can't load product information " + resourceName
                    + " due to IO exception: " + e.getMessage(), productName, "");
        }
        versionFull =
                productName() + " " + version()
                        + (patchFixIds().length() > 0 ? "+" + patchFixIds() : "");
        versionPrintable =
                versionFull + System.getProperty("line.separator") + "Build " + buildId()
                        + System.getProperty("line.separator");
    }
    /**
     * Returns the short product name for the Directory Server.
     * Returns the build ID for the generated build of the Directory Server.
     *
     * @return The build ID for the generated build of the Directory Server.
     */
    public String buildId() {
        return properties.getProperty("build.id");
    }
    /**
     * Returns {@code true} if this is a debug build of the Directory Server
     * that may include additional debugging facilities not available in
     * standard release versions.
     *
     * @return {@code true} if this is a debug build of the Directory Server
     *         that may include additional debugging facilities not available in
     *         standard release versions.
     */
    public boolean buildIsDebug() {
        return Boolean.valueOf(properties.getProperty("build.isdebug"));
    }
    /**
     * Returns the vendor for the Java version used to generate this build.
     *
     * @return The vendor for the Java version used to generate this build.
     */
    public String buildJavaVendor() {
        return properties.getProperty("build.java.vendor");
    }
    /**
     * Returns the Java version used to generate this build.
     *
     * @return The Java version used to generate this build.
     */
    public String buildJavaVersion() {
        return properties.getProperty("build.java.version");
    }
    /**
     * Returns the vendor for the JVM used to generate this build.
     *
     * @return The vendor for the JVM used to generate this build.
     */
    public String buildJvmVendor() {
        return properties.getProperty("build.jvm.vendor");
    }
    /**
     * Returns the JVM version used to generate this build.
     *
     * @return The JVM version used to generate this build.
     */
    public String buildJvmVersion() {
        return properties.getProperty("build.jvm.version");
    }
    /**
     * Returns the operating system on which this build was generated.
     *
     * @return The operating system on which this build was generated.
     */
    public String buildOs() {
        return properties.getProperty("build.os");
    }
    /**
     * Returns the username of the user that created this build.
     *
     * @return The username of the user that created this build.
     */
    public String buildUser() {
        return properties.getProperty("build.user");
    }
    /**
     * Returns the URL of the product WIKI page.
     *
     * @return The URL of the product WIKI page.
     */
    public String documentationAdminGuideUrl() {
        return properties.getProperty("doc.guide.admin.url");
    }
    /**
     * Returns the URL of the product home page.
     *
     * @return The URL of the product home page.
     */
    public String documentationHomePageUrl() {
        return properties.getProperty("doc.homepage.url");
    }
    /**
     * Returns the URL of the product WIKI page.
     *
     * @return The URL of the product WIKI page.
     */
    public String documentationReferenceGuideUrl() {
        return properties.getProperty("doc.guide.ref.url");
    }
    /**
     * Returns the URL of the product WIKI page.
     *
     * @return The URL of the product WIKI page.
     */
    public String documentationWikiUrl() {
        return properties.getProperty("doc.wiki.url");
    }
    /**
     * Returns the set of bug IDs for fixes included in this build of the
     * Directory Server.
     *
     * @return The set of bug IDs for fixes included in this build of the
     *         Directory Server.
     */
    public String patchFixIds() {
        return properties.getProperty("patch.fix.ids");
    }
    /**
     * Returns the full product name for the Directory Server, which may contain
     * white space.
     *
     * @return The full product name for the Directory Server.
     */
    public String productName() {
        return properties.getProperty("product.name");
    }
    /**
     * Returns the product publication date.
     *
     * @return The product publication date.
     */
    public String productPublicationDate() {
        return properties.getProperty("product.publication.date");
    }
    /**
     * Returns the product release date.
     *
     * @return The product release date.
     */
    public String productReleaseDate() {
        return properties.getProperty("product.release.date");
    }
    /**
     * Returns the short product name for the Directory Server, suitable for use
     * in file names.
     *
     * @return The short product name for the Directory Server.
     */
@@ -77,12 +239,119 @@
    }
    /**
     * Returns the official full product name for the Directory Server.
     * Returns the revision number of the source repository on which this build
     * is based.
     *
     * @return The official full product name for the Directory Server.
     * @return The revision number of the source repository on which this build
     *         is based.
     */
    public String productName() {
        return properties.getProperty("product.name");
    public String scmRevision() {
        return properties.getProperty("scm.revision");
    }
    /**
     * Returns the URL of the source repository location on which this build is
     * based.
     *
     * @return The URL of the source repository location on which this build is
     *         based.
     */
    public String scmUrl() {
        return properties.getProperty("scm.url");
    }
    /**
     * Returns the version number for the Directory Server. The return string
     * will have the format {@code major.minor.point[-qualifier]}.
     *
     * @return The version number for the Directory Server.
     */
    public String version() {
        return properties.getProperty("version");
    }
    /**
     * Returns the build number for the Directory Server.
     *
     * @return The build number for the Directory Server.
     */
    public int versionBuildNumber() {
        return Integer.valueOf(properties.getProperty("version.build"));
    }
    /**
     * Returns the compact version string for this product, suitable for use in
     * path names and similar cases.
     *
     * @return The compact version string for this product, suitable for use in
     *         path names and similar cases.
     */
    public String versionCompact() {
        return properties.getProperty("version.compact");
    }
    /**
     * Returns the full version string for this product.
     *
     * @return The full version string for this product.
     */
    public String versionFull() {
        return versionFull;
    }
    /**
     * Returns the major version number for the Directory Server.
     *
     * @return The major version number for the Directory Server.
     */
    public int versionMajorNumber() {
        return Integer.valueOf(properties.getProperty("version.major"));
    }
    /**
     * Returns the minor version number for the Directory Server.
     *
     * @return The minor version number for the Directory Server.
     */
    public int versionMinorNumber() {
        return Integer.valueOf(properties.getProperty("version.minor"));
    }
    /**
     * Returns the point version number for the Directory Server.
     *
     * @return The point version number for the Directory Server.
     */
    public int versionPointNumber() {
        return Integer.valueOf(properties.getProperty("version.point"));
    }
    /**
     * Returns the printable version string for this product.
     *
     * @return The printable version string for this product.
     */
    public String versionPrintable() {
        return versionPrintable;
    }
    /**
     * Returns the version qualifier string for the Directory Server.
     *
     * @return The version qualifier string for the Directory Server.
     */
    public String versionQualifier() {
        return properties.getProperty("version.qualifier");
    }
    /**
     * Returns the revision number of the source repository on which this build
     * is based.
     *
     * @return The revision number of the source repository on which this build
     *         is based.
     */
    public String versionRevision() {
        return properties.getProperty("scm.revision");
    }
}
opendj-server/src/main/resources/META-INF/product/opendj.properties
@@ -10,14 +10,11 @@
# Version.
version=${project.version}
version.compact=${shortProductName}-${project.version}
version.full=${project.name} ${project.version} ${issuesFixIds}
version.printable=${project.name} ${project.version} ${issuesFixIds}\nBuild ${buildDateTime}\n
version.major=${parsedVersion.majorVersion}
version.minor=${parsedVersion.minorVersion}
version.point=${parsedVersion.incrementalVersion}
version.qualifier=${parsedVersion.qualifier}
version.build=${parsedVersion.buildNumber}
version.revision=${buildRevision}
# Additional build information.
build.id=${buildDateTime}
@@ -27,17 +24,17 @@
build.jvm.version=${java.vm.version}
build.jvm.vendor=${java.vm.vendor}
build.os=${os.name} ${os.version} ${os.arch}
build.isDebug=${isDebugBuild}
build.isdebug=${isDebugBuild}
# Patch bug fix IDs for this build.
patch.fix.ids=${issuesFixIds}
patch.fix.ids=${patchFixIds}
# Source version.
scm.url=${scm.url}
scm.revision=${buildRevision}
# Documentation.
doc.home=${docReferenceHome}
doc.wiki=${docReferenceWiki}
doc.guide.ref=${docQuickRefGuide}
doc.guide.admin=${adminGuideUrl}
doc.homepage.url=${docHomepageUrl}
doc.wiki.url=${docWikiUrl}
doc.guide.ref.url=${docGuideRefUrl}
doc.guide.admin.url=${docGuideAdminUrl}
opendj-server/src/test/java/org/forgerock/opendj/server/core/ProductInformationTest.java
@@ -34,14 +34,24 @@
@SuppressWarnings("javadoc")
@Test
public class ProductInformationTest extends ForgeRockTestCase {
    /*
     * This test class verifies that the product information has been generated
     * and can be loaded at runtime. It does not attempt to exhaustively check
     * all methods.
     */
    @Test
    public void testGetName() {
    public void testProductName() {
        assertThat(ProductInformation.getInstance().productName()).isNotNull();
    }
    @Test
    public void testGetShortName() {
    public void testProductShortName() {
        assertThat(ProductInformation.getInstance().productShortName()).isEqualTo("OpenDJ");
    }
    @Test
    public void testVersionMajor() {
        assertThat(ProductInformation.getInstance().versionMajorNumber()).isGreaterThanOrEqualTo(3);
    }
}