package qa.qcri.aidr.common.code.impl; import java.io.File; import java.util.Map; import org.apache.log4j.Logger; import qa.qcri.aidr.common.code.ConfigurationPropertiesUtil; import qa.qcri.aidr.common.code.ConfigurationProperty; import qa.qcri.aidr.common.code.Configurator; import qa.qcri.aidr.common.exception.ConfigurationPropertyFileException; import qa.qcri.aidr.common.exception.ConfigurationPropertyNotRecognizedException; import qa.qcri.aidr.common.exception.ConfigurationPropertyNotSetException; import qa.qcri.aidr.common.exception.DirectoryNotWritableException; public abstract class BaseConfigurator implements Configurator { private static final Logger LOGGER = Logger .getLogger(BaseConfigurator.class); private Map<String, String> propertyMap; @Override public void initProperties(String configLoadFileName, ConfigurationProperty[] configurationProperties) throws ConfigurationPropertyNotSetException, ConfigurationPropertyNotRecognizedException, ConfigurationPropertyFileException { LOGGER.info("Initializing Properties: " + configurationProperties + " from file : " + configLoadFileName); propertyMap = ConfigurationPropertiesUtil.readConfigurations( configurationProperties, configLoadFileName); } @Override public String getProperty(ConfigurationProperty property) { return propertyMap.get(property.getName()); } @Override public String getProperty(String propertyName) { return propertyMap.get(propertyName); } @Override public void setProperty(String property, String newValue) { if(propertyMap.containsKey(property)){ propertyMap.put(property,newValue); } else{ LOGGER.error("Encountered an unexpected property:'" + property + "' with the value: " + newValue); throw new ConfigurationPropertyNotRecognizedException( property, null); } } @Override public void directoryIsWritable(String propertyName) throws DirectoryNotWritableException{ String directoryLocation = this.getProperty(propertyName); File f = new File(directoryLocation); if(!f.canWrite()) { LOGGER.info(propertyName+ " = " +directoryLocation+ " is not writable. Please verify if this is a valid writable directory."); throw new DirectoryNotWritableException(propertyName, directoryLocation); } } }