Fixing several problems with image attachments (#2484, #2485, #2486)

git-svn-id: https://svn.libreccm.org/ccm/trunk@3450 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2015-06-02 07:38:03 +00:00
parent 2ac2d9a7ff
commit 8760ac5e73
14 changed files with 464 additions and 421 deletions

View File

@ -10,9 +10,9 @@ cms.contentassets.ui.image_step.caption=Caption
cms.contentassets.ui.image_step.image_table.thumbnail=Thumbnail cms.contentassets.ui.image_step.image_table.thumbnail=Thumbnail
cms.contentassets.ui.image_step.remove_attached_image.confirm=Are you sure to remove this attached image? cms.contentassets.ui.image_step.remove_attached_image.confirm=Are you sure to remove this attached image?
cms.contentassets.ui.image_step.image_table.properties=Image properties cms.contentassets.ui.image_step.image_table.properties=Image properties
cms.contentassets.ui.image_step.table.edit_attached_image=\u270D cms.contentassets.ui.image_step.table.edit_attached_image=\u270d
cms.contentassets.ui.image_step.table.move_attached_image_up=\u2B06 cms.contentassets.ui.image_step.table.move_attached_image_up=\u2b06
cms.contentassets.ui.image_step.table.move_attached_image_down=\u2B07 cms.contentassets.ui.image_step.table.move_attached_image_down=\u2b07
cms.contentassets.ui.image_step.table.remove_attached_image=\u2716 cms.contentassets.ui.image_step.table.remove_attached_image=\u2716
cms.contentassets.ui.image_step.table.edit_attached_image.header= cms.contentassets.ui.image_step.table.edit_attached_image.header=
cms.contentassets.ui.image_step.table.move_attached_image_up.header= cms.contentassets.ui.image_step.table.move_attached_image_up.header=

View File

@ -10,9 +10,9 @@ cms.contentassets.ui.image_step.caption=Bildunterschrift
cms.contentassets.ui.image_step.image_table.thumbnail=Vorschau cms.contentassets.ui.image_step.image_table.thumbnail=Vorschau
cms.contentassets.ui.image_step.remove_attached_image.confirm=Sind Sie sicher das Sie die Zuordnung dieses Bildes entfernen m\u00f6chten? cms.contentassets.ui.image_step.remove_attached_image.confirm=Sind Sie sicher das Sie die Zuordnung dieses Bildes entfernen m\u00f6chten?
cms.contentassets.ui.image_step.image_table.properties=Bildeigenschaften cms.contentassets.ui.image_step.image_table.properties=Bildeigenschaften
cms.contentassets.ui.image_step.table.edit_attached_image=\u270D cms.contentassets.ui.image_step.table.edit_attached_image=\u270d
cms.contentassets.ui.image_step.table.move_attached_image_up=\u2B06 cms.contentassets.ui.image_step.table.move_attached_image_up=\u2b06
cms.contentassets.ui.image_step.table.move_attached_image_down=\u2B07 cms.contentassets.ui.image_step.table.move_attached_image_down=\u2b07
cms.contentassets.ui.image_step.table.remove_attached_image=\u2716 cms.contentassets.ui.image_step.table.remove_attached_image=\u2716
cms.contentassets.ui.image_step.table.edit_attached_image.header= cms.contentassets.ui.image_step.table.edit_attached_image.header=
cms.contentassets.ui.image_step.table.move_attached_image_up.header= cms.contentassets.ui.image_step.table.move_attached_image_up.header=

View File

@ -10,9 +10,9 @@ cms.contentassets.ui.image_step.caption=Caption
cms.contentassets.ui.image_step.image_table.thumbnail=Thumbnail cms.contentassets.ui.image_step.image_table.thumbnail=Thumbnail
cms.contentassets.ui.image_step.remove_attached_image.confirm=cms.contentassets.ui.image_step.remove_attached_image.confirm cms.contentassets.ui.image_step.remove_attached_image.confirm=cms.contentassets.ui.image_step.remove_attached_image.confirm
cms.contentassets.ui.image_step.image_table.properties=Image properties cms.contentassets.ui.image_step.image_table.properties=Image properties
cms.contentassets.ui.image_step.table.edit_attached_image=\u270D cms.contentassets.ui.image_step.table.edit_attached_image=\u270d
cms.contentassets.ui.image_step.table.move_attached_image_up=\u2B06 cms.contentassets.ui.image_step.table.move_attached_image_up=\u2b06
cms.contentassets.ui.image_step.table.move_attached_image_down=\u2B07 cms.contentassets.ui.image_step.table.move_attached_image_down=\u2b07
cms.contentassets.ui.image_step.table.remove_attached_image=\u2716 cms.contentassets.ui.image_step.table.remove_attached_image=\u2716
cms.contentassets.ui.image_step.table.edit_attached_image.header= cms.contentassets.ui.image_step.table.edit_attached_image.header=
cms.contentassets.ui.image_step.table.move_attached_image_up.header= cms.contentassets.ui.image_step.table.move_attached_image_up.header=

View File

@ -9,8 +9,11 @@ import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.event.FormSubmissionListener; import com.arsdigita.bebop.event.FormSubmissionListener;
import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.form.TextField;
import com.arsdigita.bebop.parameters.StringInRangeValidationListener;
import com.arsdigita.cms.CMS;
import com.arsdigita.cms.contentassets.ItemImageAttachment; import com.arsdigita.cms.contentassets.ItemImageAttachment;
import com.arsdigita.cms.contentassets.util.ImageStepGlobalizationUtil; import com.arsdigita.cms.contentassets.util.ImageStepGlobalizationUtil;
import com.arsdigita.cms.util.GlobalizationUtil;
/** /**
* *
@ -19,6 +22,9 @@ import com.arsdigita.cms.contentassets.util.ImageStepGlobalizationUtil;
public class ImageAttachmentEditForm extends Form public class ImageAttachmentEditForm extends Form
implements FormInitListener, FormProcessListener, FormSubmissionListener { implements FormInitListener, FormProcessListener, FormSubmissionListener {
private static final String CAPTION = "caption";
private static final String CONTEXT = "context";
final ImageStep imageStep; final ImageStep imageStep;
final SaveCancelSection saveCancelSection; final SaveCancelSection saveCancelSection;
@ -31,9 +37,20 @@ public class ImageAttachmentEditForm extends Form
"cms.contentassets.ui.image_step.caption")); "cms.contentassets.ui.image_step.caption"));
final TextField captionField = new TextField(CAPTION); final TextField captionField = new TextField(CAPTION);
captionField.setLabel(ImageStepGlobalizationUtil.globalize(
"cms.contentassets.ui.image_step.caption"));
captionField.setSize(CMS.getConfig().getImageBrowserCaptionSize());
captionField.addValidationListener(
new StringInRangeValidationListener(1, 100));
final TextField contextField = new TextField(CONTEXT);
contextField.setSize(40);
contextField.setLabel(GlobalizationUtil
.globalize("cms.contentasset.image.ui.use_context"));
add(label); add(label);
add(captionField); add(captionField);
add(contextField);
saveCancelSection = new SaveCancelSection(); saveCancelSection = new SaveCancelSection();
add(saveCancelSection); add(saveCancelSection);
@ -43,20 +60,24 @@ public class ImageAttachmentEditForm extends Form
} }
private static final String CAPTION = "caption";
@Override @Override
public void init(final FormSectionEvent event) throws FormProcessException { public void init(final FormSectionEvent event) throws FormProcessException {
final ItemImageAttachment attachment = imageStep.getAttachment(event.getPageState()); final ItemImageAttachment attachment = imageStep.getAttachment(event
.getPageState());
event.getFormData().put(CAPTION, attachment.getCaption()); event.getFormData().put(CAPTION, attachment.getCaption());
} }
@Override @Override
public void process(final FormSectionEvent event) throws FormProcessException { public void process(final FormSectionEvent event) throws
final ItemImageAttachment attachment = imageStep.getAttachment(event.getPageState()); FormProcessException {
final ItemImageAttachment attachment = imageStep.getAttachment(event
.getPageState());
attachment.setCaption(event.getFormData().getString(CAPTION)); attachment.setCaption(event.getFormData().getString(CAPTION));
attachment.setUseContext(event.getFormData().getString(CONTEXT));
attachment.save(); attachment.save();
@ -64,7 +85,8 @@ public class ImageAttachmentEditForm extends Form
} }
@Override @Override
public void submitted(final FormSectionEvent event) throws FormProcessException { public void submitted(final FormSectionEvent event) throws
FormProcessException {
if (saveCancelSection.getCancelButton().isSelected(event.getPageState())) { if (saveCancelSection.getCancelButton().isSelected(event.getPageState())) {
imageStep.setAttachment(event.getPageState(), null); imageStep.setAttachment(event.getPageState(), null);

View File

@ -19,6 +19,7 @@
package com.arsdigita.cms.contentassets.ui; package com.arsdigita.cms.contentassets.ui;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.MapComponentSelectionModel; import com.arsdigita.bebop.MapComponentSelectionModel;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSectionEvent;
@ -27,6 +28,7 @@ import com.arsdigita.cms.ReusableImageAsset;
import com.arsdigita.cms.contentassets.ItemImageAttachment; import com.arsdigita.cms.contentassets.ItemImageAttachment;
import com.arsdigita.cms.ui.ImageComponent; import com.arsdigita.cms.ui.ImageComponent;
import com.arsdigita.cms.ui.ImageComponentAbstractListener; import com.arsdigita.cms.ui.ImageComponentAbstractListener;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
@ -71,6 +73,7 @@ public class ImageComponentAttachListener extends ImageComponentAbstractListener
new RuntimeException()); new RuntimeException());
return; return;
} }
ItemImageAttachment attachment = m_imageStep.getAttachment(ps); ItemImageAttachment attachment = m_imageStep.getAttachment(ps);
if (null == attachment) { if (null == attachment) {
attachment = new ItemImageAttachment(item, image); attachment = new ItemImageAttachment(item, image);

View File

@ -82,7 +82,6 @@ public class ImageStepEdit extends SimpleContainer
Map selectors = m_imageComponent.getComponentsMap(); Map selectors = m_imageComponent.getComponentsMap();
m_attachListener = new ImageComponentAttachListener(m_imageComponent, m_attachListener = new ImageComponentAttachListener(m_imageComponent,
m_imageStep); m_imageStep);
/* Include CMS ImageLibrary to display existing images too select from */ /* Include CMS ImageLibrary to display existing images too select from */
ImageLibraryComponent library = new ImageLibraryComponent(); ImageLibraryComponent library = new ImageLibraryComponent();
library.getForm().addInitListener(m_attachListener); library.getForm().addInitListener(m_attachListener);

View File

@ -1112,3 +1112,4 @@ cms.ui.type.content_editing_failed=Failed to edit the content type: {0}
cms.contenttyes.link.ui.caption=Caption: cms.contenttyes.link.ui.caption=Caption:
cms.contenttyes.link.ui.option_group.caption=caption cms.contenttyes.link.ui.option_group.caption=caption
cms.contenttypes.ui.title_is_required=A title is required cms.contenttypes.ui.title_is_required=A title is required
images.no_image_selected=No image selected

View File

@ -1106,3 +1106,4 @@ cms.ui.type.content_editing_failed=Bearbeitung des Dokumenttyps: {0} ist fehlges
cms.contenttyes.link.ui.caption=Zwischentitel: cms.contenttyes.link.ui.caption=Zwischentitel:
cms.contenttyes.link.ui.option_group.caption=Zwischentitel cms.contenttyes.link.ui.option_group.caption=Zwischentitel
cms.contenttypes.ui.title_is_required=Ein Titel wird ben\u00f6tigt cms.contenttypes.ui.title_is_required=Ein Titel wird ben\u00f6tigt
images.no_image_selected=Es wurde kein Bild ausgew\u00e4hlt

View File

@ -150,3 +150,4 @@ cms.ui.type.content_editing_failed=
cms.contenttyes.link.ui.caption=Caption: cms.contenttyes.link.ui.caption=Caption:
cms.contenttyes.link.ui.option_group.caption=caption cms.contenttyes.link.ui.option_group.caption=caption
cms.contenttypes.ui.title_is_required=A title is required cms.contenttypes.ui.title_is_required=A title is required
images.no_image_selected=No image selected

View File

@ -622,3 +622,4 @@ cms.ui.type.content_editing_failed=Impossible de modifier le type de contenu: {0
cms.contenttyes.link.ui.caption=Caption: cms.contenttyes.link.ui.caption=Caption:
cms.contenttyes.link.ui.option_group.caption=caption cms.contenttyes.link.ui.option_group.caption=caption
cms.contenttypes.ui.title_is_required=A title is required cms.contenttypes.ui.title_is_required=A title is required
images.no_image_selected=No image selected

View File

@ -13,15 +13,18 @@ import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.event.FormSubmissionListener; import com.arsdigita.bebop.event.FormSubmissionListener;
import com.arsdigita.cms.ReusableImageAsset; import com.arsdigita.cms.ReusableImageAsset;
import com.arsdigita.cms.util.GlobalizationUtil;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
* An abstract listener for {@link ImageComponent}. * An abstract listener for {@link ImageComponent}.
* *
* This listener provides the base implementation which is shared between all listeners of this * This listener provides the base implementation which is shared between all
* kind. * listeners of this kind.
* *
* This listerner is used by {@link ImageSelectPage}. * This listerner is used by {@link ImageSelectPage}.
* *
@ -35,7 +38,8 @@ public abstract class ImageComponentAbstractListener implements FormInitListener
ImageComponentSelectListener.class); ImageComponentSelectListener.class);
MapComponentSelectionModel m_imageComponent; MapComponentSelectionModel m_imageComponent;
public ImageComponentAbstractListener(MapComponentSelectionModel imageComponent) { public ImageComponentAbstractListener(
MapComponentSelectionModel imageComponent) {
super(); super();
m_imageComponent = imageComponent; m_imageComponent = imageComponent;
} }
@ -50,7 +54,8 @@ public abstract class ImageComponentAbstractListener implements FormInitListener
} }
/** /**
* Call {@link #cancelled(com.arsdigita.bebop.PageState)} if the cancel button was pressed. * Call {@link #cancelled(com.arsdigita.bebop.PageState)} if the cancel
* button was pressed.
* *
* @param event the {@link FormSectionEvent} * @param event the {@link FormSectionEvent}
* *
@ -87,6 +92,10 @@ public abstract class ImageComponentAbstractListener implements FormInitListener
// try { // try {
ReusableImageAsset image = component.getImage(event); ReusableImageAsset image = component.getImage(event);
if (image == null) {
throw new FormProcessException("No image selected",
GlobalizationUtil.globalize("images.no_image_selected"));
}
processImage(event, ps, component, image); processImage(event, ps, component, image);
// } catch (FormProcessException ex) { // } catch (FormProcessException ex) {
@ -110,7 +119,8 @@ public abstract class ImageComponentAbstractListener implements FormInitListener
* @param image the {@link ReusableImageAsset} * @param image the {@link ReusableImageAsset}
*/ */
protected abstract void processImage(FormSectionEvent event, PageState ps, protected abstract void processImage(FormSectionEvent event, PageState ps,
ImageComponent component, ReusableImageAsset image); ImageComponent component,
ReusableImageAsset image);
protected ImageComponent getImageComponent(PageState ps) { protected ImageComponent getImageComponent(PageState ps) {
if (!m_imageComponent.isSelected(ps)) { if (!m_imageComponent.isSelected(ps)) {

View File

@ -18,12 +18,14 @@ import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.form.TextField;
import com.arsdigita.bebop.parameters.BigDecimalParameter; import com.arsdigita.bebop.parameters.BigDecimalParameter;
import com.arsdigita.bebop.parameters.NotNullValidationListener; import com.arsdigita.bebop.parameters.NotNullValidationListener;
import com.arsdigita.bebop.parameters.StringInRangeValidationListener;
import com.arsdigita.cms.CMS; import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ReusableImageAsset; import com.arsdigita.cms.ReusableImageAsset;
import com.arsdigita.cms.util.GlobalizationUtil; import com.arsdigita.cms.util.GlobalizationUtil;
import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DataObjectNotFoundException;
import java.math.BigDecimal; import java.math.BigDecimal;
/** /**
@ -93,7 +95,6 @@ public class ImageLibraryComponent extends SimpleContainer
}); });
// Form for additional fields and submit // Form for additional fields and submit
m_form = new Form("imageLibraryComponent", new ColumnPanel(2)); m_form = new Form("imageLibraryComponent", new ColumnPanel(2));
add(m_form); add(m_form);
@ -110,6 +111,8 @@ public class ImageLibraryComponent extends SimpleContainer
m_form.add(new Label(GlobalizationUtil m_form.add(new Label(GlobalizationUtil
.globalize("cms.contentasset.image.ui.caption"))); .globalize("cms.contentasset.image.ui.caption")));
m_caption.addValidationListener(new NotNullValidationListener()); m_caption.addValidationListener(new NotNullValidationListener());
m_caption.addValidationListener(new StringInRangeValidationListener(
1, CMS.getConfig().getImageBrowserCaptionSize()));
m_caption.setSize(CMS.getConfig().getImageBrowserCaptionSize()); m_caption.setSize(CMS.getConfig().getImageBrowserCaptionSize());
m_form.add(m_caption); m_form.add(m_caption);
m_description.addValidationListener(new NotNullValidationListener()); m_description.addValidationListener(new NotNullValidationListener());
@ -128,10 +131,11 @@ public class ImageLibraryComponent extends SimpleContainer
m_form.add(new Label(GlobalizationUtil m_form.add(new Label(GlobalizationUtil
.globalize("cms.contentasset.image.ui.use_context"))); .globalize("cms.contentasset.image.ui.use_context")));
m_useContext.setSize(40); m_useContext.setSize(40);
m_useContext.addValidationListener(
new StringInRangeValidationListener(0, 40));
m_form.add(m_useContext); m_form.add(m_useContext);
} }
// if (m_mode == ImageComponent.SELECT_IMAGE) { // if (m_mode == ImageComponent.SELECT_IMAGE) {
// m_form.setOnSubmit("selectImage();"); // m_form.setOnSubmit("selectImage();");
// } // }

View File

@ -51,6 +51,7 @@ public class CCMTransformerFactory extends TransformerFactory {
final XMLConfig config = XMLConfig.getConfig(); final XMLConfig config = XMLConfig.getConfig();
//Get the classname //Get the classname
final String classname = config.getXSLTransformerFactoryClassname(); final String classname = config.getXSLTransformerFactoryClassname();
LOGGER.warn(String.format("XSL Transformer Factory classname is %s", classname));
if (classname == null || classname.isEmpty()) { if (classname == null || classname.isEmpty()) {
//To make this class errorprone we check for null and empty string. Normally this //To make this class errorprone we check for null and empty string. Normally this