/*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) Alkacon Software GmbH (http://www.alkacon.com)
*
* This library 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 2.1 of the License, or (at your option) any later version.
*
* This library 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.
*
* For further information about Alkacon Software, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.ade.galleries.client.preview;
import org.opencms.ade.galleries.client.preview.ui.CmsImagePreviewDialog;
import org.opencms.ade.galleries.shared.CmsImageInfoBean;
import org.opencms.gwt.client.CmsCoreProvider;
import java.util.HashMap;
import java.util.Map;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
/**
* Image preview dialog controller handler.<p>
*
* Delegates the actions of the preview controller to the preview dialog.
*
* @since 8.0.0
*/
public class CmsImagePreviewHandler extends A_CmsPreviewHandler<CmsImageInfoBean>
implements ValueChangeHandler<CmsCroppingParamBean> {
/** Enumeration of image tag attribute names. */
public enum Attribute {
/** Image align attribute. */
align,
/** Image alt attribute. */
alt,
/** Image class attribute. */
clazz,
/** Image copyright info. */
copyright,
/** Image direction attribute. */
dir,
/** No image selected if this attribute is present. */
emptySelection,
/** The image hash. */
hash,
/** Image height attribute. */
height,
/** Image hspace attribute. */
hspace,
/** Image id attribute. */
id,
/** Image copyright flag. */
insertCopyright,
/** Image link original flag. */
insertLinkOrig,
/** Image spacing flag. */
insertSpacing,
/** Image subtitle flag. */
insertSubtitle,
/** Image language attribute. */
lang,
/** Image link path. */
linkPath,
/** Image link target. */
linkTarget,
/** Image longDesc attribute. */
longDesc,
/** Image style attribute. */
style,
/** Image title attribute. */
title,
/** Image vspace attribute. */
vspace,
/** Image width attribute. */
width
}
/** The cropping parameter. */
private CmsCroppingParamBean m_croppingParam;
/** The image format handler. */
private CmsImageFormatHandler m_formatHandler;
/** The preview dialog. */
private CmsImagePreviewDialog m_previewDialog;
/**
* Constructor.<p>
*
* @param resourcePreview the resource preview instance
*/
public CmsImagePreviewHandler(CmsImageResourcePreview resourcePreview) {
super(resourcePreview);
m_previewDialog = resourcePreview.getPreviewDialog();
}
/**
* Returns the image cropping parameter bean.<p>
*
* @return the image cropping parameter bean
*/
public CmsCroppingParamBean getCroppingParam() {
return m_croppingParam;
}
/**
* Returns the name of the currently selected image format.<p>
*
* @return the format name
*/
public String getFormatName() {
String result = "";
if ((m_formatHandler != null) && (m_formatHandler.getCurrentFormat() != null)) {
result = m_formatHandler.getCurrentFormat().getName();
}
return result;
}
/**
* Returns image tag attributes to set for editor plugins.<p>
*
* @return the attribute map
*/
public Map<String, String> getImageAttributes() {
Map<String, String> result = new HashMap<String, String>();
result.put(Attribute.hash.name(), String.valueOf(getImageIdHash()));
m_previewDialog.getImageAttributes(result);
m_formatHandler.getImageAttributes(result);
return result;
}
/**
* Returns the structure id hash of the previewed image.<p>
*
* @return the structure id hash
*/
public int getImageIdHash() {
return m_resourceInfo.getHash();
}
/**
* Returns the cropping parameter.<p>
*
* @param imageHeight the original image height
* @param imageWidth the original image width
*
* @return the cropping parameter
*/
public String getPreviewScaleParam(int imageHeight, int imageWidth) {
if (m_croppingParam != null) {
return m_croppingParam.getRestrictedSizeScaleParam(
CmsImagePreviewDialog.IMAGE_HEIGHT_MAX,
CmsImagePreviewDialog.IMAGE_WIDTH_MAX);
}
CmsCroppingParamBean restricted = new CmsCroppingParamBean();
restricted.setTargetHeight(imageHeight > CmsImagePreviewDialog.IMAGE_HEIGHT_MAX
? CmsImagePreviewDialog.IMAGE_HEIGHT_MAX
: imageHeight);
restricted.setTargetWidth(imageWidth > CmsImagePreviewDialog.IMAGE_WIDTH_MAX
? CmsImagePreviewDialog.IMAGE_WIDTH_MAX
: imageWidth);
return restricted.toString();
}
/**
* @see com.google.gwt.event.logical.shared.ValueChangeHandler#onValueChange(com.google.gwt.event.logical.shared.ValueChangeEvent)
*/
public void onValueChange(ValueChangeEvent<CmsCroppingParamBean> event) {
m_croppingParam = event.getValue();
m_previewDialog.resetPreviewImage(CmsCoreProvider.get().link(m_resourcePreview.getResourcePath())
+ "?"
+ getPreviewScaleParam(m_croppingParam.getOrgHeight(), m_croppingParam.getOrgWidth()));
}
/**
* Sets the image format handler.<p>
*
* @param formatHandler the format handler
*/
public void setFormatHandler(CmsImageFormatHandler formatHandler) {
m_formatHandler = formatHandler;
m_croppingParam = m_formatHandler.getCroppingParam();
m_formatHandler.addValueChangeHandler(this);
}
}