package org.rhq.plugins.apache;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.rhq.augeas.AugeasProxy;
import org.rhq.augeas.node.AugeasNode;
import org.rhq.augeas.tree.AugeasTree;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.pc.PluginContainer;
import org.rhq.plugins.apache.augeas.AugeasConfigurationApache;
import org.rhq.plugins.apache.augeas.AugeasTreeBuilderApache;
import org.rhq.plugins.apache.helper.LensHelper;
import org.rhq.plugins.apache.util.ApacheConfigurationUtil;
import org.rhq.plugins.apache.util.AugeasNodeSearch;
public class ApacheAugeasUtil {
/**
* Loads augeas.
* @param configFilePath
* @param serverRootPath
* @param lensPath
* @return
*/
public AugeasProxy initAugeas(String configFilePath, String serverRootPath, String lensPath) {
Configuration configuration = new Configuration();
configuration.put(new PropertySimple("configurationFilesInclusionPatterns", configFilePath));
configuration.put(new PropertySimple("augeasModuleName", ApacheTestConstants.MODULE_NAME));
configuration.put(new PropertySimple(ApacheTestConstants.PLUGIN_CONFIG_PROP_SERVER_ROOT, serverRootPath));
AugeasConfigurationApache conf = new AugeasConfigurationApache(lensPath, configuration);
AugeasTreeBuilderApache builder = new AugeasTreeBuilderApache();
AugeasProxy augeas = new AugeasProxy(conf, builder);
augeas.load();
return augeas;
}
/**
* This method will create a new temporary directory and copy there all configuration files.
* @return
* @throws UnitTestException
*/
public String prepareConfigFiles() {
String tempDirPath = null;
try {
File tempDirectory = LensHelper.createTempDir(ApacheTestConstants.TEMP_CONFIG_FILE_DIRECTORY);
if (!tempDirectory.exists())
tempDirectory.createNewFile();
//copy the apache configuration files to temp folder
tempDirPath = tempDirectory.getAbsolutePath() + File.separatorChar;
copyFiles(ApacheTestConstants.FILES_TO_LOAD, "", tempDirectory);
File updateDir = new File(tempDirectory, ApacheTestConstants.TEST_FILE_APACHE_CONFIG_FOLDER);
if (!updateDir.exists()) {
updateDir.mkdir();
updateDir.createNewFile();
}
//copy the apache configuration files to temp folder "updateconfig"
copyFiles(ApacheTestConstants.FILES_TO_LOAD, ApacheTestConstants.TEST_FILE_APACHE_CONFIG_FOLDER,
tempDirectory);
File loadDir = new File(tempDirectory, ApacheTestConstants.TEST_FILE_CONFIG_FOLDER);
if (!loadDir.exists()) {
loadDir.mkdir();
loadDir.createNewFile();
}
//copy xml files with rhq configuration to loadconfig
for (Components component : Components.values()) {
copyFiles(component.getConfigurationFiles().toArray(new String[0]),
ApacheTestConstants.TEST_FILE_CONFIG_FOLDER, tempDirectory);
}
ApacheTestConstants.TEMP_FILES_PATH = tempDirectory.getAbsolutePath();
} catch (Exception e) {
e.printStackTrace();
}
return tempDirPath;
}
public void cleanConfigFiles() {
try {
File tempDirectory = new File(ApacheTestConstants.getApacheConfigFilesPath());
if (!tempDirectory.exists())
return;
deleteFiles(ApacheTestConstants.FILES_TO_LOAD, "", tempDirectory);
File updateDir = new File(tempDirectory, ApacheTestConstants.TEST_FILE_APACHE_CONFIG_FOLDER);
if (updateDir.exists()) {
deleteFiles(ApacheTestConstants.FILES_TO_LOAD, ApacheTestConstants.TEST_FILE_APACHE_CONFIG_FOLDER,
tempDirectory);
updateDir.delete();
}
File loadDir = new File(tempDirectory, ApacheTestConstants.TEST_FILE_CONFIG_FOLDER);
if (loadDir.exists()) {
for (Components component : Components.values()) {
deleteFiles(component.getConfigurationFiles().toArray(new String[0]),
ApacheTestConstants.TEST_FILE_CONFIG_FOLDER, tempDirectory);
}
loadDir.delete();
}
tempDirectory.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
public void copyFiles(String[] files, String folder, File destination) throws Exception {
for (String fileName : files) {
String path = null;
if (folder.equals(""))
path = fileName;
else
path = folder + File.separator + fileName;
File configFile = LensHelper.cpFileFromPluginToTemp(this.getClass().getClassLoader(), destination, path);
if (!configFile.exists())
throw new UnitTestException("Creation of temporary configuration file failed.");
}
}
public void deleteFiles(String[] files, String folder, File destination) throws Exception {
for (String fileName : files) {
String path = null;
if (folder.equals(""))
path = fileName;
else
path = folder + File.separator + fileName;
File configFile = new File(destination, path);
;
if (configFile.exists())
configFile.delete();
}
}
/**
* Method for searching all components in ageasTree which returns List of keys which identify the component.
* @param parentNodeNames
* @param componentName
* @param tree
* @return
*/
public List<String> loadComponent(String[] parentNodeNames, String componentName, AugeasTree tree) {
List<String> paramsString = new ArrayList<String>();
List<AugeasNode> nodes = AugeasNodeSearch.searchNode(parentNodeNames, componentName, tree.getRootNode());
for (AugeasNode node : nodes) {
paramsString.add(AugeasNodeSearch.getNodeKey(node, tree.getRootNode()));
}
return paramsString;
}
public void saveFiles(AugeasTree tree, PluginContainer container) throws Exception {
for (Components component : Components.values()) {
String name = component.getComponentName();
List<AugeasNode> nodes = component.getAllNodes(tree);
for (int i = 0; i < nodes.size(); i++) {
String key = AugeasNodeSearch.getNodeKey(nodes.get(i), tree.getRootNode());
//PATH TO THE CONFIG FILES
String fileName = name + String.valueOf(i);
Configuration config =
ApacheConfigurationUtil.componentToConfiguration(container, component, key, tree);
ApacheConfigurationUtil.saveConfiguration(config, fileName);
}
}
}
}