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 index 62ba10ff2..655dec8a1 100755 --- a/ccm-cms-types-image/pdl/com/arsdigita/content-types/Image.pdl +++ b/ccm-cms-types-image/pdl/com/arsdigita/content-types/Image.pdl @@ -20,6 +20,10 @@ object type Image extends ContentPage { String[0..1] copyright = ct_images.copyright VARCHAR(400); String[0..1] site = ct_images.site VARCHAR(500); String[0..1] license = ct_images.license VARCHAR(300); + String[0..1] material = ct_images.material VARCHAR(200); + String[0..1] technique = ct_images.technique VARCHAR(200); + String[0..1] origin = ct_images.origin VARCHAR(200); + String[0..1] origSize = ct_images.origSize VARCHAR(100); reference key (ct_images.item_id); } 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 index 85d4c3ea8..5e937b7b5 100755 --- a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/Image.java +++ b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/Image.java @@ -53,6 +53,11 @@ public class Image extends ContentPage { public static final String COPYRIGHT = "copyright"; public static final String SITE = "site"; public static final String LICENSE = "license"; + public static final String MATERIAL = "material"; + public static final String TECHNIQUE = "technique"; + public static final String ORIGIN = "origin"; + public static final String ORIGSIZE = "origSize"; + protected static final int SUMMARY_SIZE = 1024; /** Data object type for this domain object */ public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.Image"; @@ -249,4 +254,36 @@ public class Image extends ContentPage { public void setLicense(String license) { set(LICENSE, license); } + + public String getMaterial() { + return (String) get(MATERIAL); + } + + public void setMaterial(String material) { + set(MATERIAL, material); + } + public String getTechnique() { + return (String) get(TECHNIQUE); + } + + public void setTechnique(String technique) { + set(TECHNIQUE, technique); + } + + public String getOrigin() { + return (String) get(ORIGIN); + } + + public void setOrigin(String origin) { + set(ORIGIN, origin); + } + + public String getOriginalSize() { + return (String) get(ORIGSIZE); + } + + public void setOriginalSize(String origSize) { + set(ORIGSIZE, origSize); + } + } 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 index a8133b233..fd7e32405 100755 --- a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageResources.properties +++ b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageResources.properties @@ -4,9 +4,13 @@ cms.contenttypes.ui.image.caption=Caption: cms.contenttypes.ui.image.artist=Artist: cms.contenttypes.ui.image.publishDate=Publishing Date: cms.contenttypes.ui.image.source=Source: -cms.contenttypes.ui.image.media=Media: +cms.contenttypes.ui.image.media=Type of Object: cms.contenttypes.ui.image.copyright=Copyright: cms.contenttypes.ui.image.site=Site: cms.contenttypes.ui.image.license=License: cms.contenttypes.ui.image.width=Width: cms.contenttypes.ui.image.height=Height: +cms.contenttypes.ui.image.material=Material: +cms.contenttypes.ui.image.technique=Technique: +cms.contenttypes.ui.image.origin=Point of Origin: +cms.contenttypes.ui.image.origSize=Size of Original: diff --git a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageResources_de.properties b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageResources_de.properties index 06e112721..f771fadf5 100644 --- a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageResources_de.properties +++ b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageResources_de.properties @@ -2,9 +2,13 @@ cms.contenttypes.ui.image.caption=Bilduntertitel: cms.contenttypes.ui.image.artist=K\u00fcnstler: cms.contenttypes.ui.image.publishDate=Ver\u00f6ffentlichungsdatum: cms.contenttypes.ui.image.source=Quelle: -cms.contenttypes.ui.image.media=Medium: +cms.contenttypes.ui.image.media=Art des Objektes: cms.contenttypes.ui.image.copyright=Copyright: cms.contenttypes.ui.image.site=Standort: cms.contenttypes.ui.image.license=Lizenz: cms.contenttypes.ui.image.width=Breite: cms.contenttypes.ui.image.height=H\u00f6he: +cms.contenttypes.ui.image.material=Material: +cms.contenttypes.ui.image.technique=Technik: +cms.contenttypes.ui.image.origin=Ort der Entstehung: +cms.contenttypes.ui.image.origSize=Gr\u00f6\u00dfe des Originals: 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 index c03a7e78f..ee33de006 100755 --- 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 @@ -163,6 +163,10 @@ public class ImagePropertiesStep extends SimpleEditStep { sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.copyright"), Image.COPYRIGHT); sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.site"), Image.SITE); sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.license"), Image.LICENSE); + sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.material"), Image.MATERIAL); + sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.technique"), Image.TECHNIQUE); + sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.origin"), Image.ORIGIN); + sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.origSize"), Image.ORIGSIZE); container.add(sheet); 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 index 3d1f18afc..14bc23c63 100755 --- 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 @@ -139,6 +139,30 @@ public class ImagePropertyForm TextField license = new TextField(licenseParam); add(license); + add(new Label(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.material"))); + ParameterModel materialParam = new StringParameter(Image.MATERIAL); + materialParam.addParameterListener(new StringInRangeValidationListener(0, 200)); + TextField material = new TextField(materialParam); + add(material); + + add(new Label(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.technique"))); + ParameterModel techniqueParam = new StringParameter(Image.TECHNIQUE); + techniqueParam.addParameterListener(new StringInRangeValidationListener(0, 200)); + TextField technique = new TextField(techniqueParam); + add(technique); + + add(new Label(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.origin"))); + ParameterModel originParam = new StringParameter(Image.ORIGIN); + originParam.addParameterListener(new StringInRangeValidationListener(0, 200)); + TextField origin = new TextField(originParam); + add(origin); + + add(new Label(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.origSize"))); + ParameterModel origSizeParam = new StringParameter(Image.ORIGSIZE); + origSizeParam.addParameterListener(new StringInRangeValidationListener(0, 100)); + TextField origSize = new TextField(origSizeParam); + add(origSize); + } /** Form initialisation hook. Fills widgets with data. */ @@ -158,6 +182,10 @@ public class ImagePropertyForm data.put(Image.COPYRIGHT, image.getCopyright()); data.put(Image.SITE, image.getSite()); data.put(Image.LICENSE, image.getLicense()); + data.put(Image.MATERIAL, image.getMaterial()); + data.put(Image.TECHNIQUE, image.getTechnique()); + data.put(Image.ORIGIN, image.getOrigin()); + data.put(Image.ORIGSIZE, image.getOriginalSize()); } @Override @@ -193,6 +221,10 @@ public class ImagePropertyForm image.setCopyright((String) data.get(Image.COPYRIGHT)); image.setSite((String) data.get(Image.SITE)); image.setLicense((String) data.get(Image.LICENSE)); + image.setMaterial((String) data.get(Image.MATERIAL)); + image.setTechnique((String) data.get(Image.TECHNIQUE)); + image.setOrigin((String) data.get(Image.ORIGIN)); + image.setOriginalSize((String) data.get(Image.ORIGSIZE)); image.save(); } diff --git a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ui/ImageTextBody.java b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ui/ImageTextBody.java new file mode 100644 index 000000000..6b30579fa --- /dev/null +++ b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ui/ImageTextBody.java @@ -0,0 +1,195 @@ +/* + * Copyright (C) 2001-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.PageState; +import com.arsdigita.bebop.RequestLocal; +import com.arsdigita.bebop.event.ActionEvent; +import com.arsdigita.bebop.event.ActionListener; +import com.arsdigita.bebop.form.Option; +import com.arsdigita.bebop.form.SingleSelect; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.TextAsset; +import com.arsdigita.cms.contenttypes.Image; +import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; +import com.arsdigita.cms.ui.authoring.TextAssetBody; +import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; +import com.arsdigita.cms.util.GlobalizationUtil; +import com.arsdigita.domain.DomainObject; +import com.arsdigita.util.Assert; + + +/** + * Displays the current text body of the article and allows the user + * to edit it, by uploading a file or entering text in a textbox. + * + * The {@link com.arsdigita.bebop.PropertySheet} class is often used + * as the display component in the default authoring kit steps of + * this class. + * + * @author Stanislav Freidin (sfreidin@arsdigita.com) + * @version $Id: ImageTextBody.java 1949 2009-06-25 08:30:50Z terry $ + */ +public class ImageTextBody extends TextAssetBody { + + protected AuthoringKitWizard m_parent; + protected ItemSelectionModel m_itemModel; + + /** + * Construct a new ImageTextBody component + * + * @param itemModel The {@link ItemSelectionModel} which will + * be responsible for loading the current item + * + * @param parent The parent wizard which contains the form. The form + * may use the wizard's methods, such as stepForward and stepBack, + * in its process listener. + */ + public ImageTextBody(ItemSelectionModel itemModel, AuthoringKitWizard parent) { + super(new ItemAssetModel(itemModel)); + m_itemModel = itemModel; + m_parent = parent; + + // Rest the component when it is hidden + parent.getList().addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + PageState state = e.getPageState(); + reset(state); + } + }); + + // Set the right component access on the forms + Component f = getComponent(FILE_UPLOAD); + if (f != null) { + setComponentAccess(FILE_UPLOAD, + new WorkflowLockedComponentAccess(f, itemModel)); + } + Component t = getComponent(TEXT_ENTRY); + setComponentAccess(TEXT_ENTRY, + new WorkflowLockedComponentAccess(t, itemModel)); + } + + /** + * Adds the options for the mime type select widget of + * GenericArticleForm and sets the default mime type. + **/ + @Override + protected void setMimeTypeOptions(SingleSelect mimeSelect) { + mimeSelect.addOption(new Option("text/html", "HTML Text")); + mimeSelect.setOptionSelected("text/html"); + } + + /** + * Create a new text asset and associate it with the current item + * + * @param s the current page state + * @return a valid TextAsset + */ + @Override + protected TextAsset createTextAsset(PageState s) { + Image item = getImage(s); + TextAsset t = new TextAsset(); + t.setName(item.getName() + "_text_" + item.getID()); + // no need - cg. Text doesn't need a security context, + // and ownership of text is recorded in text_pages + // t.setParent(item); + return t; + } + + /** + * Set additional parameters of a brand new text asset, such as the + * parent ID, after the asset has been successfully uploaded + * + * @param s the current page state + * @param a the new TextAsset + */ + @Override + protected void updateTextAsset(PageState s, TextAsset a) { + Image t = getImage(s); + Assert.exists(t); + // no need - cg. Text doesn't need a security context, + // and ownership of text is recorded in text_pages + + // a.setParent(t); + t.setTextAsset(a); + a.save(); + t.save(); + } + + /** + * Get the current Image + */ + protected Image getImage(PageState s) { + return (Image)m_itemModel.getSelectedObject(s); + } + + /** + * An ACSObjectSelectionModel that selects the current text asset for + * the text page + */ + private static class ItemAssetModel extends ItemSelectionModel { + + private RequestLocal m_asset; + + public ItemAssetModel(ItemSelectionModel m) { + super(m); + + m_asset = new RequestLocal() { + @Override + protected Object initialValue(PageState s) { + Image t = (Image) + ((ItemSelectionModel)getSingleSelectionModel()) + .getSelectedObject(s); + Assert.exists(t); + return t.getTextAsset(); + } + }; + } + + @Override + public Object getSelectedKey(PageState s) { + TextAsset a = (TextAsset)getSelectedObject(s); + return (a == null) ? null : a.getID(); + } + + @Override + public DomainObject getSelectedObject(PageState s) { + return (DomainObject)m_asset.get(s); + } + + @Override + public void setSelectedObject(PageState s, DomainObject o) { + m_asset.set(s, o); + } + + @Override + public void setSelectedKey(PageState s, Object key) { + throw new UnsupportedOperationException( (String) GlobalizationUtil.globalize("cms.ui.authoring.not_implemented").localize()); + } + + @Override + public boolean isSelected(PageState s) { + return (getSelectedObject(s) != null); + } + } + +}