package com.n11.imic.config; import com.n11.imic.ScalerParam; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.commons.configuration.SubnodeConfiguration; import org.apache.commons.configuration.XMLConfiguration; import org.imgscalr.Scalr; import java.util.HashMap; import java.util.Map; public class ImageScalerConfiguration { private final Map<String, ScalerParam> defaultScaleParameters = new HashMap<String, ScalerParam>(); private String sourceLocation; private ImageScalerConfiguration() { } public void initConfiguration() { try { XMLConfiguration configuration = new XMLConfiguration(ImageScalerConfigFileLocator.findConfigFile()); readConfiguration(configuration); } catch (ConfigurationException ce) { throw new IllegalArgumentException("Cannot start the app, are you sure you have the necessary configuration?", ce); } } public void readConfiguration(XMLConfiguration xmlConfiguration) { sourceLocation = xmlConfiguration.getString("source[@location]"); initPaths(xmlConfiguration); } private void initPaths(XMLConfiguration xmlConfiguration) { defaultScaleParameters.clear(); HierarchicalConfiguration scales = xmlConfiguration.configurationAt("scales"); for (Object configuration : scales.configurationsAt("scale")) { SubnodeConfiguration scaleConfig = (SubnodeConfiguration) configuration; defaultScaleParameters.put(scaleConfig.getString("[@path]"), new ScalerParam() .withWidth(scaleConfig.getInt("[@width]", ScalerParam.UNDEFINED_SIZE)) .withHasPadding(scaleConfig.getBoolean("[@hasPadding]", false)) .withHeight(scaleConfig.getInt("[@height]", ScalerParam.UNDEFINED_SIZE)) .withUpScale(scaleConfig.getBoolean("[@upscale]", false)) .withPadding(scaleConfig.getInt("[@padding]", ScalerParam.UNDEFINED_SIZE)) .withPaddingColor(scaleConfig.getString("[@background]", "#FFFFFF")) .withQuality(scaleConfig.getFloat("[@quality]", 80f)) .withMethod(Scalr.Method.valueOf(scaleConfig.getString("[@method]", Scalr.Method.QUALITY.name()))) .withProgressiveMode(scaleConfig.getBoolean("[@progressivemode]", false)) ); } } private static class ImageScalerConfigurationHolder { public final static ImageScalerConfiguration instance = new ImageScalerConfiguration(); private ImageScalerConfigurationHolder(){ } } public static ImageScalerConfiguration getInstance() { return ImageScalerConfigurationHolder.instance; } public Map<String, ScalerParam> getDefaultScaleParameters() { return defaultScaleParameters; } public String getSourceLocation() { return sourceLocation; } }