package org.jboss.as.patching.installation; import static org.jboss.as.patching.Constants.DEFAULT_ADD_ONS_PATH; import static org.jboss.as.patching.Constants.DEFAULT_LAYERS_PATH; import static org.jboss.as.patching.Constants.LAYERS_CONF; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Properties; import org.jboss.as.patching.Constants; import org.jboss.as.patching.runner.PatchUtils; /** * @author Brian Stansberry */ public class LayersConfig { private final boolean configured; private final String layersPath; private final String addOnsPath; private final List<String> layers; LayersConfig() { configured = false; layersPath = DEFAULT_LAYERS_PATH; addOnsPath = DEFAULT_ADD_ONS_PATH; layers = Collections.singletonList(Constants.BASE); } LayersConfig(Properties properties) { configured = true; layersPath = properties.getProperty("layers.path", DEFAULT_LAYERS_PATH); addOnsPath = properties.getProperty("add-ons.path", DEFAULT_ADD_ONS_PATH); final boolean excludeBase = Boolean.valueOf(properties.getProperty(Constants.EXCLUDE_LAYER_BASE, "false")); String layersProp = (String) properties.get(Constants.LAYERS); if (layersProp == null || (layersProp = layersProp.trim()).length() == 0) { if (excludeBase) { layers = Collections.emptyList(); } else { layers = Collections.singletonList(Constants.BASE); } } else { final String[] layerNames = layersProp.split(","); final List<String> layers = new ArrayList<String>(); boolean hasBase = false; for (String layerName : layerNames) { if (Constants.BASE.equals(layerName)) { hasBase = true; } layers.add(layerName); } if (!hasBase && !excludeBase) { layers.add(Constants.BASE); } this.layers = Collections.unmodifiableList(layers); } } public boolean isConfigured() { return configured; } public String getLayersPath() { return layersPath; } public String getAddOnsPath() { return addOnsPath; } public List<String> getLayers() { return layers; } /** * Process the layers.conf file. * * @param repoRoot the root * @return the layers conf * @throws java.io.IOException */ public static LayersConfig getLayersConfig(final File repoRoot) throws IOException { final File layersList = new File(repoRoot, LAYERS_CONF); if (!layersList.exists()) { return new LayersConfig(); } final Properties properties = PatchUtils.loadProperties(layersList); return new LayersConfig(properties); } }