/* * Copyright (c) 2005-2016 Vincent Vandenschrick. All rights reserved. * * This file is part of the Jspresso framework. * * Jspresso is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Jspresso is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Jspresso. If not, see <http://www.gnu.org/licenses/>. */ package org.jspresso.framework.model.descriptor.basic; import java.io.IOException; import org.jspresso.framework.model.descriptor.IImageBinaryPropertyDescriptor; import org.jspresso.framework.util.image.ImageHelper; /** * Describes a property used to store an image binary value. This type of * descriptor instructs Jspresso to use an image component to interact with this * type of property. * * @author Vincent Vandenschrick */ public class BasicImageBinaryPropertyDescriptor extends BasicBinaryPropertyDescriptor implements IImageBinaryPropertyDescriptor { private Integer scaledWidth; private Integer scaledHeight; private String formatName; /** * {@inheritDoc} */ @Override public Integer getScaledWidth() { return scaledWidth; } /** * Sets scaled width. This property, when set to a positive integer will force the image width to be resized to the * target value. If only one of the 2 scaled dimensions is set, then the image is scaled by preserving its aspect * ratio. * * @param scaledWidth * the scaled width */ public void setScaledWidth(Integer scaledWidth) { this.scaledWidth = scaledWidth; } /** * {@inheritDoc} */ @Override public Integer getScaledHeight() { return scaledHeight; } /** * Sets scaled height. This property, when set to a positive integer will force the image height to be resized to the * target value. If only one of the 2 scaled dimensions is set, then the image is scaled by preserving its aspect * ratio. * * @param scaledHeight * the scaled height */ public void setScaledHeight(Integer scaledHeight) { this.scaledHeight = scaledHeight; } /** * {@inheritDoc} */ @Override public String getFormatName() { return formatName; } /** * Sets format name. When set to something not null (e.g. PNG, JPG, ...), the image is transformed to the specified * format before being stored. * * @param formatName * the format name */ public void setFormatName(String formatName) { this.formatName = formatName; } @Override public Object interceptSetter(Object component, Object newValue) { Object actualNewValue = newValue; if (newValue instanceof byte[] && ((byte[]) newValue).length > 0) { try { actualNewValue = ImageHelper.scaleImage(actualNewValue, getScaledWidth(), getScaledHeight(), getFormatName()); return actualNewValue; } catch (IOException ioe) { // could not transform the image property view. } } return super.interceptSetter(component, actualNewValue); } }