package org.jboss.as.test.patching; import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.Collections; import java.util.Map; import org.jboss.modules.LocalModuleLoader; import org.jboss.modules.Module; import org.jboss.modules.ModuleIdentifier; import org.jboss.modules.ModuleLoader; /** * @author Emanuel Muckenhuber */ class ProductInfo { public static final String PRODUCT_VERSION; public static final String PRODUCT_NAME; public static final boolean isProduct; static { // Load the current product conf final File distributionRoot = new File(PatchingTestUtil.AS_DISTRIBUTION); final LocalModuleLoader loader = new LocalModuleLoader(new File[]{PatchingTestUtil.BASE_MODULE_DIRECTORY}); try { final Module module = loader.loadModule(ModuleIdentifier.create("org.jboss.as.version")); final Class<?> clazz = module.getClassLoader().loadClass("org.jboss.as.version.ProductConfig"); final Method resolveName = clazz.getMethod("resolveName"); final Method resolveVersion = clazz.getMethod("resolveVersion"); final Method productName = clazz.getMethod("getProductName"); final Constructor<?> constructor = clazz.getConstructor(ModuleLoader.class, String.class, Map.class); final Object productConfig = constructor.newInstance(loader, distributionRoot.getAbsolutePath(), Collections.emptyMap()); PRODUCT_NAME = (String) resolveName.invoke(productConfig); PRODUCT_VERSION = (String) resolveVersion.invoke(productConfig); isProduct = productName.invoke(productConfig) != null; // See if the product name was configured } catch (Exception e) { throw new RuntimeException(PatchingTestUtil.BASE_MODULE_DIRECTORY.getAbsolutePath(), e); } } static String getVersionModule() { return isProduct ? "org.jboss.as.product" : "org.jboss.as.version"; } static String getVersionModuleSlot() { return isProduct ? "eap" : "main"; } static String createVersionString(final String newVersion) { final StringBuilder builder = new StringBuilder(); if (isProduct) { builder.append("JBoss-Product-Release-Name: ").append(PRODUCT_NAME).append("\n"); builder.append("JBoss-Product-Release-Version: ").append(newVersion).append("\n"); builder.append("JBoss-Product-Console-Slot: eap").append("\n"); } else { builder.append("JBossAS-Release-Version: ").append(newVersion).append("\n"); } return builder.toString(); } }