package org.onehippo.forge.konakart.cms.replication.jcr; import org.apache.commons.lang.StringUtils; import org.hippoecm.frontend.plugins.gallery.imageutil.ImageUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; import javax.jcr.Session; import java.util.HashMap; import java.util.Map; import java.util.Set; public class GalleryProcesssorConfig { public static final Logger log = LoggerFactory.getLogger(GalleryProcesssorConfig.class); public static final String SERVICE_CONFIG_PATH = "/hippo:configuration/hippo:frontend/cms/cms-services/galleryProcessorService/"; private static GalleryProcesssorConfig config = new GalleryProcesssorConfig(); private Map<String, ImageConfig> imageConfigMap = new HashMap<String, ImageConfig>(); /** * @return the config class */ public static GalleryProcesssorConfig getConfig() { return config; } /** * @return the image config. */ public ImageConfig getImageConfigMap(String imageConfigName) { return imageConfigMap.get(imageConfigName); } /** * @return the list of differents images' version */ public Set<String> getImagesVersionSet() { return imageConfigMap.keySet(); } /** * @param session a JCR session * @return an instance of the config */ public static GalleryProcesssorConfig load(Session session) { if (session == null) { log.error("Failed to load the Konakart config. JCR Session is null"); throw new RuntimeException("Failed to load the Konakart config. JCR Session is null"); } // load configuration config.loadConfiguration(session); return config; } private void loadConfiguration(Session session) { try { Node node = session.getNode(SERVICE_CONFIG_PATH); NodeIterator nodeIterator = node.getNodes(); while (nodeIterator.hasNext()) { Node serviceNode = nodeIterator.nextNode(); String serviceName = serviceNode.getName(); ImageConfig imageConfig = new ImageConfig(); if (serviceNode.hasProperty(ImageConfig.HEIGHT)) { imageConfig.setHeight(serviceNode.getProperty(ImageConfig.HEIGHT).getLong()); } if (serviceNode.hasProperty(ImageConfig.WIDTH)) { imageConfig.setWidth(serviceNode.getProperty(ImageConfig.WIDTH).getLong()); } if (serviceNode.hasProperty(ImageConfig.UPSCALING)) { imageConfig.setUpscaling(serviceNode.getProperty(ImageConfig.UPSCALING).getBoolean()); } if (serviceNode.hasProperty(ImageConfig.OPTIMIZE)) { imageConfig.setScalingStrategy(serviceNode.getProperty(ImageConfig.OPTIMIZE).getString()); } if (serviceNode.hasProperty(ImageConfig.COMPRESSION)) { imageConfig.setCompression(serviceNode.getProperty(ImageConfig.COMPRESSION).getDouble()); } imageConfigMap.put(serviceName, imageConfig); } } catch (RepositoryException e) { log.error("Failed to load interspire configuration: " + e.toString()); } } public static class ImageConfig { public static final String HEIGHT = "height"; public static final String WIDTH = "width"; public static final String UPSCALING = "upscaling"; public static final String OPTIMIZE = "optimize"; public static final String COMPRESSION = "compression"; private Long height; private Long width; private Boolean upscaling; private ImageUtils.ScalingStrategy scalingStrategy = ImageUtils.ScalingStrategy.QUALITY; private Double compression = 1D; public int getHeight() { return height.intValue(); } public void setHeight(Long height) { this.height = height; } public int getWidth() { return width.intValue(); } public void setWidth(Long width) { this.width = width; } public boolean getUpscaling() { return upscaling; } public void setUpscaling(Boolean upscaling) { this.upscaling = upscaling; } public ImageUtils.ScalingStrategy getScalingStrategy() { return scalingStrategy; } public void setScalingStrategy(String scalingStrategy) { if (StringUtils.equalsIgnoreCase(scalingStrategy, ImageUtils.ScalingStrategy.SPEED.name())) { this.scalingStrategy = ImageUtils.ScalingStrategy.SPEED; } if (StringUtils.equalsIgnoreCase(scalingStrategy, ImageUtils.ScalingStrategy.SPEED_AND_QUALITY.name())) { this.scalingStrategy = ImageUtils.ScalingStrategy.SPEED_AND_QUALITY; } if (StringUtils.equalsIgnoreCase(scalingStrategy, ImageUtils.ScalingStrategy.QUALITY.name())) { this.scalingStrategy = ImageUtils.ScalingStrategy.QUALITY; } if (StringUtils.equalsIgnoreCase(scalingStrategy, ImageUtils.ScalingStrategy.AUTO.name())) { this.scalingStrategy = ImageUtils.ScalingStrategy.AUTO; } if (StringUtils.equalsIgnoreCase(scalingStrategy, ImageUtils.ScalingStrategy.BEST_QUALITY.name())) { this.scalingStrategy = ImageUtils.ScalingStrategy.BEST_QUALITY; } } public float getCompression() { return compression.floatValue(); } public void setCompression(Double compression) { this.compression = compression; } } }