package com.constellio.model.services.appManagement; import java.io.File; import java.io.IOException; import com.constellio.data.io.services.facades.FileService; public class WrapperConfigurationService { public static final String ASSIGNING_VALUE = "="; public static final String COMMENT = "#"; public static final String CARRIAGE_RETURN = "\n"; public static final String LOGFILE = "wrapper.logfile"; public static final String LOGFILE_VALUE = "../log/wrapper.log"; public static final String CONSOLE_TITLE = "wrapper.console.title"; public static final String NTSERVICE_NAME = "wrapper.ntservice.name"; public static final String NTSERVICE_DISPLAYNAME = "wrapper.ntservice.displayname"; public static final String NTSERVICE_DESCRIPTION = "wrapper.ntservice.description"; public static final String BLOCK_TITLE_SEPARATOR = "#********************************************************************"; public static final String COMMAND_CONDITION_BLOCK_TITLE = "# commandCondition:"; public static final String CONDITION_SCRIPT = "wrapper.condition.script"; public static final String CONDITION_SCRIPT_VALUE = "scripts/commandCondition.gv"; public static final String CONDITION_SCRIPT_ARGS = "wrapper.condition.script.args"; public static final String CONDITION_SCRIPT_ARGS_VALUE = "command/cmd.txt"; public static final String CONDITION_SCRIPT_CYCLE = "wrapper.condition.cycle"; public static final String CONDITION_SCRIPT_CYCLE_VALUE = "1"; public static final String RESTART_RELOAD_CONFIGURATION = "wrapper.restart.reload_configuration"; public static final String RESTART_RELOAD_CONFIGURATION_VALUE = "TRUE"; public static final String RESTART_RELOAD_CACHE = "wrapper.restart.reload_cache"; public static final String RESTART_RELOAD_CACHE_VALUE = "TRUE"; public static final String CONTROL = "wrapper.control"; public static final String CONTROL_VALUE = "APPLICATION"; private static final String SOFTWARE_NAME = "Constellio"; public static final String CONSOLE_TITLE_VALUE = SOFTWARE_NAME; public static final String NTSERVICE_NAME_VALUE = SOFTWARE_NAME; public static final String NTSERVICE_DISPLAYNAME_VALUE = SOFTWARE_NAME; public static final String NTSERVICE_DESCRIPTION_VALUE = SOFTWARE_NAME; public void configureForConstellio(File defaultConfigFile) throws IOException { FileService fileService = new FileService(null); String configFileContent; try { configFileContent = fileService.readFileToString(defaultConfigFile); } catch (IOException e) { throw new IOException("Error while reading configuration file", e); } String modifiedConfigFileContent = modifyFileContent(configFileContent); try { fileService.replaceFileContent(defaultConfigFile, modifiedConfigFileContent); } catch (IOException e) { throw new IOException("Error while writing in configuration file", e); } } private String modifyFileContent(String configFileContent) { StringBuilder configFileContentBuffer = new StringBuilder(); configureExistingProperties(configFileContent, configFileContentBuffer); addProperties(configFileContentBuffer); return configFileContentBuffer.toString(); } private void addProperties(StringBuilder configFileContentBuffer) { configFileContentBuffer.append(BLOCK_TITLE_SEPARATOR + CARRIAGE_RETURN); configFileContentBuffer.append(COMMAND_CONDITION_BLOCK_TITLE + CARRIAGE_RETURN); configFileContentBuffer.append(BLOCK_TITLE_SEPARATOR + CARRIAGE_RETURN); configFileContentBuffer.append(CONDITION_SCRIPT + ASSIGNING_VALUE + CONDITION_SCRIPT_VALUE + CARRIAGE_RETURN); configFileContentBuffer.append(CONDITION_SCRIPT_ARGS + ASSIGNING_VALUE + CONDITION_SCRIPT_ARGS_VALUE + CARRIAGE_RETURN); configFileContentBuffer.append(CONDITION_SCRIPT_CYCLE + ASSIGNING_VALUE + CONDITION_SCRIPT_CYCLE_VALUE + CARRIAGE_RETURN); configFileContentBuffer.append(RESTART_RELOAD_CONFIGURATION + ASSIGNING_VALUE + RESTART_RELOAD_CONFIGURATION_VALUE + CARRIAGE_RETURN); configFileContentBuffer.append(RESTART_RELOAD_CACHE + ASSIGNING_VALUE + RESTART_RELOAD_CACHE_VALUE + CARRIAGE_RETURN); configFileContentBuffer.append(CONTROL + ASSIGNING_VALUE + CONTROL_VALUE + CARRIAGE_RETURN); } private void configureExistingProperties(String configFileContent, StringBuilder configFileContentBuffer) { String[] configFileLines = configFileContent.split(CARRIAGE_RETURN); for (String configFileLine : configFileLines) { String modifiedConfigFileLine = replaceValue(configFileLine) + CARRIAGE_RETURN; configFileContentBuffer.append(modifiedConfigFileLine); } } private String replaceValue(String configFileLine) { String returnedLine = configFileLine; if (!configFileLine.contains(COMMENT)) { returnedLine = replaceConfigLine(configFileLine); } return returnedLine; } private String replaceConfigLine(String configFileLine) { String returnedLine = configFileLine; String keyConfigFileLine = configFileLine.split(ASSIGNING_VALUE)[0]; if (keyConfigFileLine.equals(LOGFILE)) { returnedLine = LOGFILE + ASSIGNING_VALUE + LOGFILE_VALUE; } else if (keyConfigFileLine.equals(CONSOLE_TITLE)) { returnedLine = CONSOLE_TITLE + ASSIGNING_VALUE + CONSOLE_TITLE_VALUE; } else if (keyConfigFileLine.equals(NTSERVICE_NAME)) { returnedLine = NTSERVICE_NAME + ASSIGNING_VALUE + NTSERVICE_NAME_VALUE; } else if (keyConfigFileLine.equals(NTSERVICE_DISPLAYNAME)) { returnedLine = NTSERVICE_DISPLAYNAME + ASSIGNING_VALUE + NTSERVICE_DISPLAYNAME_VALUE; } else if (keyConfigFileLine.equals(NTSERVICE_DESCRIPTION)) { returnedLine = NTSERVICE_DESCRIPTION + ASSIGNING_VALUE + NTSERVICE_DESCRIPTION_VALUE; } return returnedLine; } }