From: <mb...@re...> - 2004-11-24 16:50:35
|
Author: mbooth Date: 2004-11-24 17:42:35 +0100 (Wed, 24 Nov 2004) New Revision: 126 Modified: ccm-ldn-image-step/trunk/src/com/arsdigita/cms/contenttypes/ui/ImageStepEdit.java Log: Add input validation to prevent 2 images being attached to the same item with the same use context. TODO: Add DM constraint for the same. Modified: ccm-ldn-image-step/trunk/src/com/arsdigita/cms/contenttypes/ui/ImageStepEdit.java =================================================================== --- ccm-ldn-image-step/trunk/src/com/arsdigita/cms/contenttypes/ui/ImageStepEdit.java 2004-11-24 16:41:39 UTC (rev 125) +++ ccm-ldn-image-step/trunk/src/com/arsdigita/cms/contenttypes/ui/ImageStepEdit.java 2004-11-24 16:42:35 UTC (rev 126) @@ -38,13 +38,22 @@ import com.arsdigita.bebop.event.FormInitListener; import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.event.ParameterEvent; +import com.arsdigita.bebop.event.ParameterListener; import com.arsdigita.bebop.event.RequestEvent; import com.arsdigita.bebop.event.RequestListener; import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.parameters.BigDecimalParameter; import com.arsdigita.bebop.parameters.NotNullValidationListener; +import com.arsdigita.bebop.parameters.ParameterData; import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.bebop.table.TableCellRenderer; +import com.arsdigita.domain.DataObjectNotFoundException; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.util.Assert; +import com.arsdigita.util.StringUtils; + import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ImageAsset; import com.arsdigita.cms.ItemSelectionModel; @@ -53,9 +62,6 @@ import com.arsdigita.cms.ui.ImageBrowser; import com.arsdigita.cms.ui.ImageChooser; import com.arsdigita.cms.util.GlobalizationUtil; -import com.arsdigita.domain.DataObjectNotFoundException; -import com.arsdigita.domain.DomainObjectFactory; -import com.arsdigita.persistence.DataCollection; import java.io.File; import java.io.IOException; @@ -231,6 +237,7 @@ add(new Label("Use Context")); m_useContext = new TextField("useContext"); m_useContext.setSize(40); + m_useContext.addValidationListener( new UniqueUseContextListener() ); add(m_useContext); m_saveCancel = new SaveCancelSection(); @@ -347,6 +354,7 @@ m_form.add(new Label("Use Context")); m_useContext = new TextField("useContext"); m_useContext.setSize(40); + m_useContext.addValidationListener( new UniqueUseContextListener() ); m_form.add(m_useContext); m_saveCancel = new SaveCancelSection(); @@ -391,4 +399,46 @@ return m_saveCancel; } } + + private class UniqueUseContextListener implements ParameterListener { + public void validate( ParameterEvent ev ) + throws FormProcessException + { + PageState ps = ev.getPageState(); + ParameterData data = ev.getParameterData(); + + ContentItem item = m_imageStep.getItem( ps ); + Assert.exists( item, ContentItem.class ); + + String value = data.getValue().toString(); + value = StringUtils.trimleft( value ); + if( StringUtils.emptyString( value ) ) { + value = null; + } + data.setValue( value ); + + DataCollection attachments = + ItemImageAttachment.getImageAttachments( item ); + attachments.addEqualsFilter( ItemImageAttachment.USE_CONTEXT, + value ); + + try { + if( attachments.next() ) { + ItemImageAttachment attachment = + m_imageStep.getAttachment( ps ); + BigDecimal dupAttachmentID = (BigDecimal) + attachments.get( ItemImageAttachment.ID ); + + if( null == attachment || + !attachment.getID().equals( dupAttachmentID ) ) + { + data.addError( "There is already an image for this " + + "item with this context" ); + } + } + } finally { + attachments.close(); + } + } + } } |