All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.ade.galleries.client.ui.CmsImageGalleryField Maven / Gradle / Ivy

Go to download

OpenCms is an enterprise-ready, easy to use website content management system based on Java and XML technology. Offering a complete set of features, OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.

There is a newer version: 18.0
Show newest version
/*
 * 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.ui;

import org.opencms.ade.galleries.client.preview.CmsCroppingParamBean;
import org.opencms.ade.galleries.shared.I_CmsGalleryConfiguration;
import org.opencms.file.CmsResource;
import org.opencms.gwt.client.CmsCoreProvider;
import org.opencms.gwt.client.ui.css.I_CmsLayoutBundle;
import org.opencms.gwt.client.ui.input.CmsSelectBox;
import org.opencms.gwt.client.ui.input.CmsTextArea;
import org.opencms.gwt.client.util.CmsDomUtil;
import org.opencms.util.CmsUUID;

import java.util.LinkedHashMap;
import java.util.Map;

import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.http.client.URL;
import com.google.gwt.uibinder.client.UiHandler;

/**
 * A widget for selecting a resource from an ADE gallery dialog.

* * @since 8.0.0 */ public class CmsImageGalleryField extends CmsGalleryField { /** Parameter to split or generate the value string. */ private static final String PARAMETER_DESC = "description="; /** Parameter to split or generate the value string. */ private static final String PARAMETER_FORMAT = "format="; /** Parameter to split or generate the value string. */ private static final String PARAMETER_SCALE = "scale="; /** The text area. */ protected CmsTextArea m_descriptionArea; /** The select box. */ protected CmsSelectBox m_formatSelection; /** Map of values for the Formats selection box. */ Map m_formats = new LinkedHashMap(); /** The description value. */ private String m_description; /** The scale values. */ private String m_scaleValue; /** The selected format. */ private String m_selectedFormat; /** * Constructs a new gallery widget.

* * @param configuration the gallery configuration * @param allowUploads states if the upload button should be enabled for this widget */ public CmsImageGalleryField(I_CmsGalleryConfiguration configuration, boolean allowUploads) { super(configuration, allowUploads); setHasImage(true); m_descriptionArea = new CmsTextArea(); m_descriptionArea.addStyleName(org.opencms.ade.galleries.client.ui.css.I_CmsLayoutBundle.INSTANCE.galleryFieldCss().descriptionField()); m_descriptionArea.getTextArea().setStyleName(I_CmsLayoutBundle.INSTANCE.globalWidgetCss().textAreaBox()); m_descriptionArea.getTextAreaContainer().addStyleName( I_CmsLayoutBundle.INSTANCE.globalWidgetCss().textAreaBoxPanel()); m_descriptionArea.setRows(3); m_descriptionArea.getTextAreaContainer().onResizeDescendant(); m_formatSelection = new CmsSelectBox(); m_formatSelection.addStyleName(org.opencms.ade.galleries.client.ui.css.I_CmsLayoutBundle.INSTANCE.galleryFieldCss().formats()); m_formatSelection.getOpener().addStyleName(I_CmsLayoutBundle.INSTANCE.globalWidgetCss().selectBoxSelected()); m_formatSelection.getSelectorPopup().addStyleName(I_CmsLayoutBundle.INSTANCE.globalWidgetCss().selectBoxPopup()); ValueChangeHandler changeHandler = new ValueChangeHandler() { public void onValueChange(ValueChangeEvent event) { fireChange(false); } }; addToMain(m_formatSelection); addToMain(m_descriptionArea); m_descriptionArea.addValueChangeHandler(changeHandler); m_formatSelection.addValueChangeHandler(changeHandler); generatesFormatSelection(); m_resourceInfoPanel.setVisible(false); addStyleName(org.opencms.ade.galleries.client.ui.css.I_CmsLayoutBundle.INSTANCE.galleryFieldCss().hasImage()); } /** * Initializes this class.

*/ public static void initClass() { // do nothing } /** * @see org.opencms.gwt.client.ui.input.I_CmsFormWidget#getFormValueAsString() */ @Override public String getFormValueAsString() { String result = m_textbox.getValue(); result += "?__" + PARAMETER_SCALE + m_scaleValue; if (m_configuration.isUseFormats()) { result += "&" + PARAMETER_FORMAT + m_formatSelection.getFormValueAsString(); m_selectedFormat = m_formatSelection.getFormValueAsString(); } result += "&" + PARAMETER_DESC + URL.encode(m_descriptionArea.getFormValueAsString()); m_description = m_descriptionArea.getFormValueAsString(); return result; } /** * On select box value change.

* * @param event the event */ @UiHandler("m_formatSelection") public void onSelectBoxChange(ValueChangeEvent event) { fireChange(false); } /** * On textarea box value change.

* * @param event the event */ @UiHandler("m_descriptionArea") public void onTextAreaBoxChange(ValueChangeEvent event) { fireChange(false); } /** * On textarea box resize.

* * @param event the event */ @UiHandler("m_descriptionArea") public void onTextAreaBoxResize(ResizeEvent event) { ResizeEvent.fire(this, event.getWidth(), event.getHeight()); } /** * Sets the name of the input field.

* * @param name of the input field * */ @Override public void setName(String name) { m_textbox.setName(name); m_descriptionArea.setName(name + "_TextArea"); } /** * Sets the widget value.

* * @param value the value to set * @param fireEvent if the change event should be fired */ @Override public void setValue(String value, boolean fireEvent) { value = parseValue(value); m_textbox.setValue(value); if (fireEvent) { fireChange(true); } } /** * Handles the focus event on the opener.

* * @param event */ @UiHandler("m_descriptionArea") protected void onFocusDescription(FocusEvent event) { CmsDomUtil.fireFocusEvent(this); } /** * Handles the focus event on the opener.

* * @param event */ @UiHandler("m_formatSelection") protected void onFocusSelect(FocusEvent event) { CmsDomUtil.fireFocusEvent(this); } /** * @see org.opencms.ade.galleries.client.ui.CmsGalleryField#setValueFromGallery(java.lang.String, org.opencms.util.CmsUUID, org.opencms.ade.galleries.client.preview.CmsCroppingParamBean) */ @Override protected void setValueFromGallery(String resourcePath, CmsUUID structureId, CmsCroppingParamBean croppingParameter) { m_croppingParam = new CmsCroppingParamBean(croppingParameter); String path = resourcePath + "?"; path += croppingParameter.toString(); path += "&" + PARAMETER_FORMAT + croppingParameter.getFormatName(); setValue(path, true); m_popup.hide(); } /** * Generates the format select box.

**/ private void generatesFormatSelection() { if (m_configuration.isUseFormats()) { String[] formats = m_configuration.getImageFormatNames().split(","); for (int i = 0; i < formats.length; i++) { m_formats.put(formats[i].split(":")[0], formats[i].split(":")[1]); } m_formatSelection.setItems(m_formats); } else { m_formatSelection.removeFromParent(); m_descriptionArea.setRowsGallery(4); } } /** * Parses the value and all its informations.

* First part is the URL of the image. The second one describes the scale of this image.

* The last one sets the selected format.

* * @param value that should be parsed * * @return the URL of the image without any parameters */ private String parseValue(String value) { m_croppingParam = CmsCroppingParamBean.parseImagePath(value); String path = ""; String params = ""; if (value.indexOf("?") > -1) { path = value.substring(0, value.indexOf("?")); params = value.substring(value.indexOf("?")); } else { path = value; } int indexofscale = params.indexOf(PARAMETER_SCALE); if (indexofscale > -1) { String scal = ""; int hasmoreValues = params.lastIndexOf("&"); if (hasmoreValues > indexofscale) { scal = params.substring(indexofscale, params.indexOf("&")).replace(PARAMETER_SCALE, ""); } else { scal = params.substring(indexofscale).replace(PARAMETER_SCALE, ""); } if (!scal.equals(m_scaleValue)) { m_scaleValue = scal; } params = params.replace(PARAMETER_SCALE + m_scaleValue, ""); } int indexofformat = params.indexOf(PARAMETER_FORMAT); if (indexofformat > -1) { int hasmoreValues = params.lastIndexOf("&"); if (hasmoreValues > indexofformat) { m_selectedFormat = params.substring(indexofformat, hasmoreValues).replace(PARAMETER_FORMAT, ""); } else { m_selectedFormat = params.substring(indexofformat).replace(PARAMETER_FORMAT, ""); } params = params.replace(PARAMETER_FORMAT + m_selectedFormat, ""); m_formatSelection.selectValue(m_selectedFormat); } int indexofdescritption = params.indexOf(PARAMETER_DESC); if (indexofdescritption > -1) { int hasmoreValues = params.lastIndexOf("&"); if (hasmoreValues > indexofdescritption) { m_description = params.substring(indexofdescritption, hasmoreValues).replace(PARAMETER_DESC, ""); } else { m_description = params.substring(indexofdescritption).replace(PARAMETER_DESC, ""); } params = params.replace(PARAMETER_DESC + m_description, ""); m_description = URL.decode(m_description); m_descriptionArea.setFormValueAsString(m_description); } updateUploadTarget(CmsResource.getFolderPath(path)); if (!path.isEmpty()) { String imageLink = CmsCoreProvider.get().link(path); setImagePreview(imageLink); } else { m_imagePreview.setInnerHTML(""); } return path; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy