diff --git a/ccm-cms-types-image/application.xml b/ccm-cms-types-image/application.xml new file mode 100755 index 000000000..8c0c69ecd --- /dev/null +++ b/ccm-cms-types-image/application.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + The Image Content Type for the Red Hat CCM CMS. + + diff --git a/ccm-cms-types-image/pdl/com/arsdigita/content-types/Image.pdl b/ccm-cms-types-image/pdl/com/arsdigita/content-types/Image.pdl new file mode 100755 index 000000000..ee79185e5 --- /dev/null +++ b/ccm-cms-types-image/pdl/com/arsdigita/content-types/Image.pdl @@ -0,0 +1,21 @@ +model com.arsdigita.cms.contenttypes; + +import com.arsdigita.cms.*; + +object type Image extends ContentPage { + + component ImageAsset[0..1] image = join ct_images.image_id to cms_images.image_id; +// Blob[0..1] image = ct_images.image BLOB; +// BigDecimal[0..1] width = ct_images.width INTEGER; +// BigDecimal[0..1] height = ct_images.height INTEGER; + String[0..1] caption = ct_images.caption VARCHAR(200); + String[0..1] description = ct_images.description VARCHAR(200); + String[0..1] artist = ct_images.artist VARCHAR(200); + String[0..1] publishDate = ct_images.publish_date VARCHAR(200); + String[0..1] source = ct_images.source VARCHAR(200); + String[0..1] media = ct_images.media VARCHAR(200); + String[0..1] copyright = ct_images.copyright VARCHAR(200); +// String[0..1] standort = ct_images. VARCHAR(200); + + reference key (ct_images.item_id); +} diff --git a/ccm-cms-types-image/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Image.xml b/ccm-cms-types-image/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Image.xml new file mode 100755 index 000000000..91b80dd94 --- /dev/null +++ b/ccm-cms-types-image/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Image.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + diff --git a/ccm-cms-types-image/src/ccm-cms-types-image.config b/ccm-cms-types-image/src/ccm-cms-types-image.config new file mode 100755 index 000000000..adfdba100 --- /dev/null +++ b/ccm-cms-types-image/src/ccm-cms-types-image.config @@ -0,0 +1,4 @@ + + + + diff --git a/ccm-cms-types-image/src/ccm-cms-types-image.load b/ccm-cms-types-image/src/ccm-cms-types-image.load new file mode 100755 index 000000000..595aaf2fe --- /dev/null +++ b/ccm-cms-types-image/src/ccm-cms-types-image.load @@ -0,0 +1,16 @@ + + + +
+
+ + + +
+ + + + + + + diff --git a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/Image.java b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/Image.java new file mode 100755 index 000000000..8a10fd881 --- /dev/null +++ b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/Image.java @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2002-2004 Red Hat Inc. All Rights Reserved. + * + * 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. + * + * 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 com.arsdigita.cms.contenttypes; + + +import com.arsdigita.cms.ContentPage; +import com.arsdigita.cms.ImageAsset; +import com.arsdigita.domain.DataObjectNotFoundException; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.persistence.DataObject; +import com.arsdigita.persistence.OID; +import com.arsdigita.util.Assert; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * This content type represents an article. + * + * @version $Revision: #6 $ $Date: 2004/08/17 $ + */ +public class Image extends ContentPage { + + + private final static org.apache.log4j.Logger s_log = + org.apache.log4j.Logger.getLogger(GenericArticle.class); + + /** PDL property name for lead */ + public static final String IMAGE = "image"; +// public static final String WIDTH = "width"; +// public static final String HEIGHT = "height"; + public static final String CAPTION = "caption"; + public static final String DESCRIPTION = "description"; + public static final String ARTIST = "artist"; + public static final String PUBLISHDATE = "publishDate"; + public static final String SOURCE = "source"; + public static final String MEDIA = "media"; + public static final String COPYRIGHT = "copyright"; +// public static final String LEAD = "lead"; + + /** Data object type for this domain object */ + public static final String BASE_DATA_OBJECT_TYPE + = "com.arsdigita.cms.contenttypes.Image"; + + public Image() { + this( BASE_DATA_OBJECT_TYPE ); + } + + public Image( BigDecimal id ) + throws DataObjectNotFoundException { + this( new OID( BASE_DATA_OBJECT_TYPE, id ) ); + } + + public Image( OID id ) + throws DataObjectNotFoundException { + super( id ); + } + + public Image( DataObject obj ) { + super( obj ); + } + + public Image( String type ) { + super( type ); + } + + public ImageAsset getImage() { + DataObject dobj = (DataObject) get(IMAGE); + if(dobj != null) { + return (ImageAsset) DomainObjectFactory.newInstance(dobj); + } else { + return null; + } + } + + public void setImage(ImageAsset image) { +// Assert.exists(image, ImageAsset.class); + set(IMAGE, image); + } + +// public byte[] getImage() { +// return (byte[]) get(IMAGE); +// } +// +// public void setImage(byte[] image) { +// set(IMAGE, image); +// } + +// public BigDecimal getWidth() { +// return (BigDecimal) get(WIDTH); +// } +// +// public void setWidth(BigDecimal width) { +// set(WIDTH, width); +// } +// +// public BigDecimal getHeight() { +// return (BigDecimal) get(HEIGHT); +// } +// +// public void setHeight(BigDecimal height) { +// set(HEIGHT, height); +// } + + public String getCaption() { + return (String) get(CAPTION); + } + + public void setCaption(String caption) { + set(CAPTION, caption); + } + + @Override + public String getDescription() { + return (String) get(DESCRIPTION); + } + + @Override + public void setDescription(String description) { + set(DESCRIPTION, description); + } + + public String getArtist() { + return (String) get(ARTIST); + } + + public void setArtist(String artist) { + set(ARTIST, artist); + } + + public Date getPublishDate() { + return (Date) get(PUBLISHDATE); + } + + public void setPublishDate(Date publishDate) { + set(PUBLISHDATE, publishDate); + } + + public String getSource() { + return (String) get(SOURCE); + } + + public void setSource(String source) { + set(SOURCE, source); + } + + public String getMedia() { + return (String) get(MEDIA); + } + + public void setMedia(String media) { + set(MEDIA, media); + } + + public String getCopyright() { + return (String) get(COPYRIGHT); + } + + public void setCopyright(String copyright) { + set(COPYRIGHT, copyright); + } + +// public String get() { +// return (String) get(); +// } +// +// public void set(String) { +// set(,); +// } + +} diff --git a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageInitializer.java b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageInitializer.java new file mode 100755 index 000000000..fff8d9f22 --- /dev/null +++ b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageInitializer.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved. + * + * 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. + * + * 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 com.arsdigita.cms.contenttypes; + +import com.arsdigita.cms.ContentPage; +import org.apache.log4j.Logger; + +/** + * Initializes the image content type. + * Defines the content type specific properties and just uses the super class + * methods to register the content type with the (transient) content type store + * (map). + * + * @author Sören Bernstein (sbernstein@zes.uni-bremen.de); + */ +public class ImageInitializer extends ContentTypeInitializer { + + private static final Logger s_log = Logger.getLogger(ImageInitializer.class); + + public ImageInitializer() { + super("ccm-cms-types-image.pdl.mf", ContentPage.BASE_DATA_OBJECT_TYPE); + } +} diff --git a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageLoader.java b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageLoader.java new file mode 100755 index 000000000..406b18921 --- /dev/null +++ b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageLoader.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved. + * + * 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. + * + * 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 com.arsdigita.cms.contenttypes; + +/** + * Loader. + * + * @author Sören Bernstein (sbernstein@zes.uni-bremen.de) + */ +public class ImageLoader extends AbstractContentTypeLoader { + + private static final String[] TYPES = { + "/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Image.xml" + }; + + public String[] getTypes() { + return TYPES; + } +} diff --git a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageResources.properties b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageResources.properties new file mode 100755 index 000000000..5673bcf5e --- /dev/null +++ b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageResources.properties @@ -0,0 +1,2 @@ +article.authoring.image.title=Image +article.authoring.image.description=Image \ No newline at end of file diff --git a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ui/ImagePropertiesStep.java b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ui/ImagePropertiesStep.java new file mode 100755 index 000000000..38f685e18 --- /dev/null +++ b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ui/ImagePropertiesStep.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2002-2004 Red Hat Inc. All Rights Reserved. + * + * 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. + * + * 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 com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.SimpleContainer; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ContentPage; +import com.arsdigita.cms.ContentSection; +import com.arsdigita.cms.ImageAsset; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.Image; +import com.arsdigita.cms.ui.ImageDisplay; +import com.arsdigita.domain.DomainObject; +import com.arsdigita.toolbox.ui.DomainObjectPropertySheet; +import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; +import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; +import com.arsdigita.cms.util.GlobalizationUtil; +import com.arsdigita.util.Assert; +import java.text.DateFormat; + +/** + * Authoring step to edit the simple attributes of the Image content + * type (and its subclasses). The attributes edited are 'name', 'title', + * 'article date', 'location', 'lead', and 'article type'. + * This authoring step replaces + * the com.arsdigita.ui.authoring.PageEdit step for this type. + */ +public class ImagePropertiesStep extends SimpleEditStep { + + /** The name of the editing sheet added to this step */ + public static String EDIT_SHEET_NAME = "edit"; + + public ImagePropertiesStep(ItemSelectionModel itemModel, + AuthoringKitWizard parent) { + super(itemModel, parent); + + setDefaultEditKey(EDIT_SHEET_NAME); + + BasicPageForm editSheet; + + editSheet = new ImagePropertyForm(itemModel, this); + add(EDIT_SHEET_NAME, "Edit", new WorkflowLockedComponentAccess(editSheet, itemModel), + editSheet.getSaveCancelSection().getCancelButton()); + + setDisplayComponent(getImagePropertySheet(itemModel)); + } + + /** + * Returns a component that displays the properties of the + * Image specified by the ItemSelectionModel passed in. + * @param itemModel The ItemSelectionModel to use + * @pre itemModel != null + * @return A component to display the state of the basic properties + * of the release + */ + public static Component getImagePropertySheet(final ItemSelectionModel itemModel) { + SimpleContainer container = new SimpleContainer(); + + container.add(new ImageDisplay(null) { + + @Override + protected ImageAsset getImageAsset(PageState state) { + ImageAsset image = ((Image) itemModel.getSelectedItem(state)).getImage(); + return image; + } + }); + + DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(itemModel); + + sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.name"), Image.NAME); + sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.title"), Image.TITLE); + if (!ContentSection.getConfig().getHideLaunchDate()) { + sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.launch_date"), + ContentPage.LAUNCH_DATE, + new DomainObjectPropertySheet.AttributeFormatter() { + + public String format(DomainObject item, + String attribute, + PageState state) { + ContentPage page = (ContentPage) item; + if (page.getLaunchDate() != null) { + return DateFormat.getDateInstance(DateFormat.LONG).format(page.getLaunchDate()); + } else { + return (String) GlobalizationUtil.globalize("cms.ui.unknown").localize(); + } + } + }); + } + + +// sheet.add( GlobalizationUtil.globalize("cms.contenttypes.ui.image"), new ImageDisplay(null)); + sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.caption"), Image.CAPTION); + sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.description"), Image.DESCRIPTION); + sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.artist"), Image.ARTIST); + sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.publishDate"), Image.PUBLISHDATE); + sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.source"), Image.SOURCE); + sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.media"), Image.MEDIA); + sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.copyright"), Image.COPYRIGHT); +// sheet.add( GlobalizationUtil.globalize("cms.contenttypes.ui.lead"), Image.LEAD ); + + container.add(sheet); + + return container; + } + + public ContentItem getItem( PageState ps ) { + return getItemSelectionModel().getSelectedItem( ps ); + } +} diff --git a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ui/ImagePropertyForm.java b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ui/ImagePropertyForm.java new file mode 100755 index 000000000..0937da04a --- /dev/null +++ b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ui/ImagePropertyForm.java @@ -0,0 +1,351 @@ +/* + * Copyright (C) 2002-2004 Red Hat Inc. All Rights Reserved. + * + * 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. + * + * 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 com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.ColumnPanel; +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Form; +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.MapComponentSelectionModel; +import com.arsdigita.bebop.Page; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.ParameterSingleSelectionModel; +import com.arsdigita.bebop.SaveCancelSection; +import com.arsdigita.bebop.event.FormInitListener; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSubmissionListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.form.Date; +import com.arsdigita.bebop.form.TextArea; +import com.arsdigita.bebop.form.TextField; +import com.arsdigita.bebop.parameters.DateParameter; +import com.arsdigita.bebop.parameters.NotNullValidationListener; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.bebop.parameters.StringInRangeValidationListener; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.cms.ImageAsset; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.Image; +import com.arsdigita.cms.ui.FileUploadSection; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import com.arsdigita.cms.util.GlobalizationUtil; +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/** + * Form to edit the basic properties of an article. This form can be + * extended to create forms for Image subclasses. + */ +public class ImagePropertyForm + extends BasicPageForm + implements FormProcessListener, FormInitListener, FormSubmissionListener { + + private final static org.apache.log4j.Logger s_log = + org.apache.log4j.Logger.getLogger(ImagePropertyForm.class); + private ImagePropertiesStep m_step; +// private final StringParameter m_imageComponentKey; +// private final MapComponentSelectionModel m_imageComponent; + private final String UPLOAD = "upload"; + + /** + * Creates a new form to edit the Image object specified + * by the item selection model passed in. + * @param itemModel The ItemSelectionModel to use to obtain the + * Image to work on + */ + public ImagePropertyForm(ItemSelectionModel itemModel) { + this(itemModel, null); + } + + /** + * Creates a new form to edit the Image object specified + * by the item selection model passed in. + * @param itemModel The ItemSelectionModel to use to obtain the + * Image to work on + * @param step The ImagePropertiesStep which controls this form. + */ + public ImagePropertyForm(ItemSelectionModel itemModel, ImagePropertiesStep step) { + super(ID, itemModel); + m_step = step; +// m_imageComponentKey = new StringParameter("imageComponent"); +// ParameterSingleSelectionModel componentModel = new ParameterSingleSelectionModel(m_imageComponentKey); +// m_imageComponent = new MapComponentSelectionModel(componentModel, new HashMap()); + addSubmissionListener(this); + } + + /** + * Adds widgets to the form. + */ + protected void addWidgets() { + super.addWidgets(); + +// Map selectors = m_imageComponent.getComponentsMap(); +// ImageUploadComponent upload = new ImageUploadComponent(); +// upload.getForm().addInitListener(this); +// upload.getForm().addProcessListener(this); +// selectors.put(UPLOAD, upload); +// add(upload); + + add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.caption"))); + ParameterModel captionParam = new StringParameter(Image.CAPTION); + captionParam.addParameterListener(new StringInRangeValidationListener(0, 200)); + TextField caption = new TextField(captionParam); + add(caption); + + add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.description"))); + ParameterModel descriptionParam = new StringParameter(Image.DESCRIPTION); + descriptionParam.addParameterListener(new StringInRangeValidationListener(0, 200)); + TextField description = new TextField(descriptionParam); + add(description); + + add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.artist"))); + ParameterModel artistParam = new StringParameter(Image.ARTIST); + artistParam.addParameterListener(new StringInRangeValidationListener(0, 200)); + TextField artist = new TextField(artistParam); + add(artist); + + add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.publish_date"))); + ParameterModel publishDateParam = new DateParameter(Image.PUBLISHDATE); + Date publishDate = new Date(publishDateParam); + add(publishDate); + + add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.source"))); + ParameterModel sourceParam = new StringParameter(Image.SOURCE); + sourceParam.addParameterListener(new StringInRangeValidationListener(0, 200)); + TextField source = new TextField(sourceParam); + add(source); + + add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.media"))); + ParameterModel mediaParam = new StringParameter(Image.MEDIA); + mediaParam.addParameterListener(new StringInRangeValidationListener(0, 200)); + TextField media = new TextField(mediaParam); + add(media); + + add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.copyright"))); + ParameterModel copyrightParam = new StringParameter(Image.COPYRIGHT); + copyrightParam.addParameterListener(new StringInRangeValidationListener(0, 200)); + TextField copyright = new TextField(copyrightParam); + add(copyright); + + } + + public void validate(FormSectionEvent e) throws FormProcessException { + FormData d = e.getFormData(); + } + +// @Override +// public void register(Page p) { +// super.register(p); +// +// Map componentsMap = m_imageComponent.getComponentsMap(); +// Iterator i = componentsMap.keySet().iterator(); +// while (i.hasNext()) { +// Object key = i.next(); +// Component component = (Component) componentsMap.get(key); +// +// p.setVisibleDefault(component, UPLOAD.equals(key)); +// } +// +// p.addComponentStateParam(this, m_imageComponentKey); +// } +// +// Iterator getImageComponents() { +// return m_imageComponent.getComponentsMap().values().iterator(); +// } +// +// private ImageComponent getImageComponent(PageState ps) { +// if (!m_imageComponent.isSelected(ps)) { +// if (s_log.isDebugEnabled()) { +// s_log.debug("No component selected"); +// s_log.debug("Selected: " + m_imageComponent.getComponent(ps)); +// } +// +// m_imageComponent.setSelectedKey(ps, UPLOAD); +// } +// +// return (ImageComponent) m_imageComponent.getComponent(ps); +// +// } +// +// private void setImageComponent(PageState ps, final String activeKey) { +// m_imageComponent.setSelectedKey(ps, activeKey); +// +// if (s_log.isDebugEnabled()) { +// s_log.debug("Selected component: " + activeKey); +// } +// +// Map componentsMap = m_imageComponent.getComponentsMap(); +// Iterator i = componentsMap.keySet().iterator(); +// while (i.hasNext()) { +// Object key = i.next(); +// Component component = (Component) componentsMap.get(key); +// +// boolean isVisible = activeKey.equals(key); +// +// if (s_log.isDebugEnabled()) { +// s_log.debug("Key: " + key + "; Visibility: " + isVisible); +// } +// +// ps.setVisible(component, isVisible); +// } +// } + + /** Form initialisation hook. Fills widgets with data. */ + public void init(FormSectionEvent fse) { + // Do some initialization hook stuff + FormData data = fse.getFormData(); + PageState ps = fse.getPageState(); + Image image = (Image) super.initBasicWidgets(fse); + +// ItemImageAttachment attachment = m_imageStep.getAttachment(ps); + + data.put(Image.CAPTION, image.getCaption()); + data.put(Image.DESCRIPTION, image.getDescription()); + data.put(Image.ARTIST, image.getArtist()); + data.put(Image.PUBLISHDATE, image.getPublishDate()); + data.put(Image.SOURCE, image.getSource()); + data.put(Image.MEDIA, image.getMedia()); + data.put(Image.COPYRIGHT, image.getCopyright()); +// data.put( LEAD, image.getLead() ); + } + + /** Cancels streamlined editing. */ + public void submitted(FormSectionEvent fse) { + if (m_step != null + && getSaveCancelSection().getCancelButton().isSelected(fse.getPageState())) { + m_step.cancelStreamlinedCreation(fse.getPageState()); + } + } + + /** Form processing hook. Saves Event object. */ + public void process(FormSectionEvent fse) { + FormData data = fse.getFormData(); + PageState ps = fse.getPageState(); + Image image = (Image) super.processBasicWidgets(fse); + +// ImageComponent component = getImageComponent(ps); + +// try { +// ImageAsset imageAsset = component.getImage(fse); + +// ItemImageAttachment attachment = m_imageStep.getAttachment(ps); +// if (null == attachment) { +// attachment = new ItemImageAttachment(item, imageAsset); +// } +// attachment.setCaption( component.getCaption( event ) ); +// +// // We only set the description and title based on the UI in +// // the case where getIsImageStepDescriptionAndTitleShown is true. +// // Otherwise, we leave this as the default value. This means +// // existing values are not overwritten if the image is edited when +// // isImageStepDescriptionAndTitleShown is false. +// if(ItemImageAttachment.getConfig().getIsImageStepDescriptionAndTitleShown()) { +// attachment.setDescription(component.getDescription( event )); +// attachment.setTitle(component.getTitle( event )); +// } +// attachment.setUseContext( component.getUseContext( event ) ); + +// } catch (FormProcessException ex) { +// } + + // save only if save button was pressed + if (image != null + && getSaveCancelSection().getSaveButton().isSelected(fse.getPageState())) { + + image.setCaption((String) data.get(Image.CAPTION)); + image.setDescription((String) data.get(Image.DESCRIPTION)); + image.setArtist((String) data.get(Image.ARTIST)); + image.setPublishDate((java.util.Date) data.get(Image.PUBLISHDATE)); + image.setSource((String) data.get(Image.SOURCE)); + image.setMedia((String) data.get(Image.MEDIA)); + image.setCopyright((String) data.get(Image.COPYRIGHT)); +// image.setLead( (String) data.get( LEAD ) ); + + image.save(); + } +// if (m_step != null) { +// m_step.maybeForwardToNextStep(fse.getPageState()); +// } + } + + interface ImageComponent { + + ImageAsset getImage(FormSectionEvent event) + throws FormProcessException; + + SaveCancelSection getSaveCancelSection(); + + Form getForm(); + } + + private class ImageUploadComponent extends Form + implements ImageComponent { + + private final FileUploadSection m_imageFile; + private final SaveCancelSection m_saveCancel; + + public ImageUploadComponent() { + super("imageStepEditUpload", new ColumnPanel(2)); + + setEncType("multipart/form-data"); + + // Ignoring deprecated constructor. + m_imageFile = new FileUploadSection("Image Type", "image", ImageAsset.MIME_JPEG); + m_imageFile.getFileUploadWidget().addValidationListener(new NotNullValidationListener()); + + add(m_imageFile, ColumnPanel.FULL_WIDTH); + + m_saveCancel = new SaveCancelSection(); + add(m_saveCancel); + + } + + public SaveCancelSection getSaveCancelSection() { + return m_saveCancel; + } + + public ImageAsset getImage(FormSectionEvent event) + throws FormProcessException { + PageState ps = event.getPageState(); + + String filename = (String) m_imageFile.getFileName(event); + File imageFile = m_imageFile.getFile(event); + + try { + ImageAsset image = new ImageAsset(); + image.loadFromFile(filename, imageFile, ImageAsset.MIME_JPEG); +// image.setDescription((String) m_caption.getValue(ps)); + + return image; + } catch (IOException ex) { + s_log.error("Error loading image from file", ex); + throw new FormProcessException(ex.getMessage()); + } + } + + public Form getForm() { + return this; + } + } +} diff --git a/ccm-cms-types-image/web/static/content-types/com/arsdigita/cms/contenttypes/Image.xsl b/ccm-cms-types-image/web/static/content-types/com/arsdigita/cms/contenttypes/Image.xsl new file mode 100755 index 000000000..44e1e57a6 --- /dev/null +++ b/ccm-cms-types-image/web/static/content-types/com/arsdigita/cms/contenttypes/Image.xsl @@ -0,0 +1,17 @@ + +]> + + + + + + + + + +