diff --git a/ccm-cms-assets-imagestep/src/com/arsdigita/cms/contentassets/ItemImageAttachment.java b/ccm-cms-assets-imagestep/src/com/arsdigita/cms/contentassets/ItemImageAttachment.java
index 08236efa9..1156a1615 100755
--- a/ccm-cms-assets-imagestep/src/com/arsdigita/cms/contentassets/ItemImageAttachment.java
+++ b/ccm-cms-assets-imagestep/src/com/arsdigita/cms/contentassets/ItemImageAttachment.java
@@ -51,17 +51,12 @@ public class ItemImageAttachment extends ACSObject implements CustomCopy {
public static final String ITEM_ATTACHMENTS = "itemAttachments";
public static final String IMAGE_LINK = "imageLink";
/** Data object type for this domain object */
- public static final String BASE_DATA_OBJECT_TYPE =
- "com.arsdigita.cms.contentassets.ItemImageAttachment";
- private static final Logger s_log = Logger.getLogger(
- ItemImageAttachment.class);
- private static final ItemImageAttachmentConfig s_config =
- new ItemImageAttachmentConfig();
+ public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contentassets.ItemImageAttachment";
+ private static final Logger s_log = Logger.getLogger(ItemImageAttachment.class);
+ private static final ItemImageAttachmentConfig s_config = new ItemImageAttachmentConfig();
static {
- s_log.debug("Static initalizer starting...");
s_config.load();
- s_log.debug("Static initalizer finished.");
}
private ItemImageAttachment() {
@@ -131,8 +126,7 @@ public class ItemImageAttachment extends ACSObject implements CustomCopy {
s_log.debug("Getting attachments for " + item.getOID());
}
- DataCollection attachments = SessionManager.getSession().retrieve(
- BASE_DATA_OBJECT_TYPE);
+ DataCollection attachments = SessionManager.getSession().retrieve(BASE_DATA_OBJECT_TYPE);
attachments.addEqualsFilter(ITEM + ".id", item.getID());
return attachments;
@@ -174,16 +168,16 @@ public class ItemImageAttachment extends ACSObject implements CustomCopy {
* Automatically publish an unpublished image
*/
public boolean copyProperty(final CustomCopy source,
- final Property property,
- final ItemCopier copier) {
+ final Property property,
+ final ItemCopier copier) {
String attribute = property.getName();
- if (ItemCopier.VERSION_COPY == copier.getCopyType() && IMAGE.equals(
- attribute)) {
+ if (ItemCopier.VERSION_COPY == copier.getCopyType()
+ && IMAGE.equals(attribute)) {
ItemImageAttachment attachment = (ItemImageAttachment) source;
ReusableImageAsset image = attachment.getImage();
ReusableImageAsset liveImage =
- (ReusableImageAsset) image.getLiveVersion();
+ (ReusableImageAsset) image.getLiveVersion();
if (null == liveImage) {
liveImage = (ReusableImageAsset) image.createLiveVersion();
@@ -216,8 +210,7 @@ public class ItemImageAttachment extends ACSObject implements CustomCopy {
// when we delete the link, the image still references it in DB
// can't make it composite because then image is deleted if we delete
// link. Have to set link to null first (I think)
- DomainObject link = DomainObjectFactory.newInstance((DataObject) get(
- IMAGE_LINK));
+ DomainObject link = DomainObjectFactory.newInstance((DataObject) get(IMAGE_LINK));
set(IMAGE_LINK, null);
save();
link.delete();
diff --git a/ccm-cms-assets-imagestep/src/com/arsdigita/cms/contentassets/ItemImageAttachmentInitializer.java b/ccm-cms-assets-imagestep/src/com/arsdigita/cms/contentassets/ItemImageAttachmentInitializer.java
index 8340eb078..f01cf623e 100755
--- a/ccm-cms-assets-imagestep/src/com/arsdigita/cms/contentassets/ItemImageAttachmentInitializer.java
+++ b/ccm-cms-assets-imagestep/src/com/arsdigita/cms/contentassets/ItemImageAttachmentInitializer.java
@@ -65,45 +65,45 @@ public class ItemImageAttachmentInitializer extends ContentAssetInitializer {
}
);
- removeDeprecatedImageSteps();
+// removeDeprecatedImageSteps();
}
/**
*
*/
- private void removeDeprecatedImageSteps() {
- DataCollection steps = SessionManager.getSession().retrieve
- ( AuthoringStep.BASE_DATA_OBJECT_TYPE );
-
- // Don't use defined constant to reduce dependency on GenericArticle
- steps.addEqualsFilter( "component",
- "com.arsdigita.cms.ui.authoring.ArticleImage" );
-
- while( steps.next() ) {
- DataObject step = steps.getDataObject();
-
- DataCollection kits = SessionManager.getSession().retrieve
- ( AuthoringKitStepAssociation.BASE_DATA_OBJECT_TYPE );
- kits.addEqualsFilter( "stepId", step.get( "id" ) );
-
- while( kits.next() ) {
- DataObject kitStep = kits.getDataObject();
- AuthoringKitStepAssociation kitStepAsso = new AuthoringKitStepAssociation(kitStep);
- // Check whether the content type is (persistence-wise) subtype
- // of com.ad.cms.GenericArticle. This is lame, but I couldn't find a better API to do this:
- AuthoringKit kit = new AuthoringKit (kitStepAsso.getKitID());
- try {
- ObjectType.verifySubtype(GenericArticle.BASE_DATA_OBJECT_TYPE,
- kit.getContentType().getAssociatedObjectType());
- kitStepAsso.delete();
- } catch (PersistenceException pe) {
- // Do nothing, the content type is not subtyping com.arsdigita.cms.GenericArticle
- }
- }
-
- // DomainObjectFactory.newInstance( step ).delete();
- }
- }
+// private void removeDeprecatedImageSteps() {
+// DataCollection steps = SessionManager.getSession().retrieve
+// ( AuthoringStep.BASE_DATA_OBJECT_TYPE );
+//
+// // Don't use defined constant to reduce dependency on GenericArticle
+// steps.addEqualsFilter( "component",
+// "com.arsdigita.cms.ui.authoring.ArticleImage" );
+//
+// while( steps.next() ) {
+// DataObject step = steps.getDataObject();
+//
+// DataCollection kits = SessionManager.getSession().retrieve
+// ( AuthoringKitStepAssociation.BASE_DATA_OBJECT_TYPE );
+// kits.addEqualsFilter( "stepId", step.get( "id" ) );
+//
+// while( kits.next() ) {
+// DataObject kitStep = kits.getDataObject();
+// AuthoringKitStepAssociation kitStepAsso = new AuthoringKitStepAssociation(kitStep);
+// // Check whether the content type is (persistence-wise) subtype
+// // of com.ad.cms.GenericArticle. This is lame, but I couldn't find a better API to do this:
+// AuthoringKit kit = new AuthoringKit (kitStepAsso.getKitID());
+// try {
+// ObjectType.verifySubtype(GenericArticle.BASE_DATA_OBJECT_TYPE,
+// kit.getContentType().getAssociatedObjectType());
+// kitStepAsso.delete();
+// } catch (PersistenceException pe) {
+// // Do nothing, the content type is not subtyping com.arsdigita.cms.GenericArticle
+// }
+// }
+//
+// // DomainObjectFactory.newInstance( step ).delete();
+// }
+// }
public String getTraversalXML() {
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 4b92e3717..62ba10ff2 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
@@ -4,15 +4,22 @@ import com.arsdigita.cms.*;
object type Image extends ContentPage {
- component ImageAsset[0..1] image = join ct_images.image_id to cms_images.image_id;
- String[0..1] caption = ct_images.caption VARCHAR(400);
- String[0..1] description = ct_images.description VARCHAR(2000);
- String[0..1] artist = ct_images.artist VARCHAR(200);
- Date [0..1] publishDate = ct_images.publish_date DATE;
- String[0..1] source = ct_images.source VARCHAR(600);
- String[0..1] media = ct_images.media VARCHAR(300);
- String[0..1] copyright = ct_images.copyright VARCHAR(400);
- String[0..1] site = ct_images.site VARCHAR(500);
+ component ImageAsset[0..1] image = join ct_images.image_id to cms_images.image_id;
+ component ImageAsset[0..1] thumbnail = join ct_images.thumbnail_id to cms_images.image_id;
+ component TextAsset [0..1] textAsset = join ct_images.text_id to cms_text.text_id;
+
+ BigDecimal[0..1] width = ct_images.width INTEGER;
+ BigDecimal[0..1] height = ct_images.height INTEGER;
+
+ String[0..1] caption = ct_images.caption VARCHAR(400);
+ String[0..1] description = ct_images.description VARCHAR(500);
+ String[0..1] artist = ct_images.artist VARCHAR(200);
+ Date [0..1] publishDate = ct_images.publish_date DATE;
+ String[0..1] source = ct_images.source VARCHAR(600);
+ String[0..1] media = ct_images.media VARCHAR(300);
+ 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);
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
index 91b80dd94..5a0d96cb7 100755
--- 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
@@ -17,6 +17,13 @@
descriptionBundle="com.arsdigita.cms.CMSResources"
component="com.arsdigita.cms.contenttypes.ui.ImagePropertiesStep"/>
+
+
diff --git a/ccm-cms-types-image/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Image.xml b/ccm-cms-types-image/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Image.xml
index b3a16f1d2..698ece8ab 100644
--- a/ccm-cms-types-image/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Image.xml
+++ b/ccm-cms-types-image/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Image.xml
@@ -7,7 +7,9 @@
+
+
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 241954020..85d4c3ea8 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
@@ -20,6 +20,7 @@ package com.arsdigita.cms.contenttypes;
import com.arsdigita.cms.ContentPage;
import com.arsdigita.cms.ImageAsset;
+import com.arsdigita.cms.TextAsset;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataObject;
@@ -36,11 +37,13 @@ import java.util.Date;
public class Image extends ContentPage {
private final static org.apache.log4j.Logger s_log =
- org.apache.log4j.Logger.getLogger(GenericArticle.class);
+ org.apache.log4j.Logger.getLogger(Image.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 THUMBNAIL = "thumbnail";
+ public static final String TEXT_ASSET = "textAsset";
+ 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";
@@ -49,6 +52,8 @@ public class Image extends ContentPage {
public static final String MEDIA = "media";
public static final String COPYRIGHT = "copyright";
public static final String SITE = "site";
+ public static final String LICENSE = "license";
+ 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";
private static final ImageConfig s_config = new ImageConfig();
@@ -59,11 +64,10 @@ public class Image extends ContentPage {
s_log.debug("Static initalizer finished.");
}
- public static final ImageConfig getConfig() {
+ public static ImageConfig getConfig() {
return s_config;
}
-
public Image() {
this(BASE_DATA_OBJECT_TYPE);
}
@@ -97,6 +101,9 @@ public class Image extends ContentPage {
public void setImage(ImageAsset image) {
set(IMAGE, image);
+ setWidth(image.getWidth());
+ setHeight(image.getHeight());
+ setThumbnail();
}
public String getCaption() {
@@ -107,6 +114,76 @@ public class Image extends ContentPage {
set(CAPTION, caption);
}
+ public ImageAsset getThumbnail() {
+ DataObject dobj = (DataObject) get(THUMBNAIL);
+ if (dobj != null) {
+ return (ImageAsset) DomainObjectFactory.newInstance(dobj);
+ } else {
+ return null;
+ }
+ }
+
+ private void setThumbnail() {
+ try {
+ set(THUMBNAIL, getImage().proportionalResizeToWidth(Image.getConfig().getMaxThumbnailWidth()));
+ } catch (NullPointerException ex) {
+ }
+ }
+
+ public BigDecimal getWidth() {
+ return (BigDecimal) get(WIDTH);
+ }
+
+ private void setWidth(BigDecimal width) {
+ set(WIDTH, width);
+ }
+
+ public BigDecimal getHeight() {
+ return (BigDecimal) get(HEIGHT);
+ }
+
+ private void setHeight(BigDecimal height) {
+ set(HEIGHT, height);
+ }
+
+ /**
+ * Return the text asset for this Image. Could return
+ * null if there is no text body actually associated with the page
+ */
+ public TextAsset getTextAsset() {
+ DataObject text = (DataObject) get(TEXT_ASSET);
+ if (text == null) {
+ return null;
+ } else {
+ return new TextAsset(text);
+ }
+ }
+
+ /**
+ * Pass in a null value to remove the text of this item.
+ * Explicitly call text.delete() to remove the text from the database
+ */
+ public void setTextAsset(TextAsset text) {
+ setAssociation(TEXT_ASSET, text);
+ }
+
+ /**
+ * Return a short summary of the text body for search.
+ * This method is WRONG, because the text body could actually
+ * be extremely large, and doing substring on it is NOT safe
+ */
+ @Override
+ public String getSearchSummary() {
+ TextAsset textAsset = getTextAsset();
+
+ if (textAsset == null) {
+ return "";
+ }
+ return com.arsdigita.util.StringUtils.truncateString(textAsset.getText(),
+ SUMMARY_SIZE,
+ true);
+ }
+
@Override
public String getDescription() {
return (String) get(DESCRIPTION);
@@ -164,4 +241,12 @@ public class Image extends ContentPage {
public void setSite(String site) {
set(SITE, site);
}
+
+ public String getLicense() {
+ return (String) get(LICENSE);
+ }
+
+ public void setLicense(String license) {
+ set(LICENSE, license);
+ }
}
diff --git a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageConfig.java b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageConfig.java
index 7e0610bae..d8cb3d316 100644
--- a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageConfig.java
+++ b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageConfig.java
@@ -28,6 +28,8 @@ public class ImageConfig extends AbstractConfig {
private final Parameter m_startYear;
private final Parameter m_endYearDelta;
+ private final Parameter m_maxImageWidth;
+ private final Parameter m_maxThumbnailWidth;
public ImageConfig() {
m_startYear = new IntegerParameter(
@@ -40,8 +42,20 @@ public class ImageConfig extends AbstractConfig {
Parameter.REQUIRED,
new Integer(3));
+ m_maxImageWidth = new IntegerParameter(
+ "com.arsdigita.cms.contenttypes.image.max_image_width",
+ Parameter.REQUIRED,
+ new Integer(600));
+
+ m_maxThumbnailWidth = new IntegerParameter(
+ "com.arsdigita.cms.contenttypes.image.max_thumbnail_width",
+ Parameter.REQUIRED,
+ new Integer(150));
+
register(m_startYear);
register(m_endYearDelta);
+ register(m_maxImageWidth);
+ register(m_maxThumbnailWidth);
loadInfo();
}
@@ -53,4 +67,12 @@ public class ImageConfig extends AbstractConfig {
public final int getEndYearDelta() {
return ((Integer) get(m_endYearDelta)).intValue();
}
+
+ public final int getMaxImageWidth() {
+ return ((Integer) get(m_maxImageWidth)).intValue();
+ }
+
+ public final int getMaxThumbnailWidth() {
+ return ((Integer) get(m_maxThumbnailWidth)).intValue();
+ }
}
diff --git a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageConfig_parameter.properties b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageConfig_parameter.properties
index 1f697ed47..c75e5240d 100644
--- a/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageConfig_parameter.properties
+++ b/ccm-cms-types-image/src/com/arsdigita/cms/contenttypes/ImageConfig_parameter.properties
@@ -7,3 +7,13 @@ com.arsdigita.cms.contenttypes.image.end_year_delta.title=End Year
com.arsdigita.cms.contenttypes.image.end_year_delta.purpose=End year delta for the year select box
com.arsdigita.cms.contenttypes.image.end_year_delta.example=3
com.arsdigita.cms.contenttypes.image.end_year_delta.format=[integer]
+
+com.arsdigita.cms.contenttypes.image.max_image_width.title=Max Image Width
+com.arsdigita.cms.contenttypes.image.max_image_width.purpose=max image display width for content center
+com.arsdigita.cms.contenttypes.image.max_image_width.example=600
+com.arsdigita.cms.contenttypes.image.max_image_width.format=[integer]
+
+com.arsdigita.cms.contenttypes.image.max_image_width.title=Max thumbnail Width
+com.arsdigita.cms.contenttypes.image.max_image_width.purpose=max thumnail width
+com.arsdigita.cms.contenttypes.image.max_image_width.example=150
+com.arsdigita.cms.contenttypes.image.max_image_width.format=[integer]
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 74b087f69..a8133b233 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
@@ -7,3 +7,6 @@ cms.contenttypes.ui.image.source=Source:
cms.contenttypes.ui.image.media=Media:
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:
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 a00b93f81..06e112721 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
@@ -5,3 +5,6 @@ cms.contenttypes.ui.image.source=Quelle:
cms.contenttypes.ui.image.media=Medium:
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:
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 dea8c1771..c03a7e78f 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
@@ -108,8 +108,12 @@ public class ImagePropertiesStep extends SimpleEditStep {
@Override
protected ImageAsset getImageAsset(PageState state) {
- ImageAsset image = ((Image) itemModel.getSelectedItem(state)).getImage();
- return image;
+ try {
+ ImageAsset image = ((Image) itemModel.getSelectedItem(state)).getImage().proportionalResizeToWidth(Image.getConfig().getMaxImageWidth());
+ return image;
+ } catch (NullPointerException ex) {
+ return null;
+ }
}
});
@@ -122,6 +126,7 @@ public class ImagePropertiesStep extends SimpleEditStep {
ContentPage.LAUNCH_DATE,
new DomainObjectPropertySheet.AttributeFormatter() {
+ @Override
public String format(DomainObject item,
String attribute,
PageState state) {
@@ -135,12 +140,15 @@ public class ImagePropertiesStep extends SimpleEditStep {
});
}
+ sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.width"), Image.WIDTH);
+ sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.height"), Image.HEIGHT);
sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.caption"), Image.CAPTION);
sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.description"), Image.DESCRIPTION);
sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.artist"), Image.ARTIST);
sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.publishDate"), Image.PUBLISHDATE,
new DomainObjectPropertySheet.AttributeFormatter() {
+ @Override
public String format(DomainObject item, String attribute, PageState state) {
Image image = (Image) item;
if ((image.getPublishDate()) != null) {
@@ -154,6 +162,7 @@ public class ImagePropertiesStep extends SimpleEditStep {
sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.media"), Image.MEDIA);
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);
container.add(sheet);
@@ -172,6 +181,7 @@ public class ImagePropertiesStep extends SimpleEditStep {
class ImageUploadListerner implements FormProcessListener {
+ @Override
public void process(FormSectionEvent fse) {
FormData data = fse.getFormData();
PageState ps = fse.getPageState();
@@ -233,10 +243,12 @@ public class ImagePropertiesStep extends SimpleEditStep {
}
+ @Override
public SaveCancelSection getSaveCancelSection() {
return m_saveCancel;
}
+ @Override
public ImageAsset getImage(FormSectionEvent event)
throws FormProcessException {
PageState ps = event.getPageState();
@@ -254,6 +266,7 @@ public class ImagePropertiesStep extends SimpleEditStep {
}
}
+ @Override
public Form getForm() {
return this;
}
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 e3c65847b..3d1f18afc 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
@@ -90,7 +90,7 @@ public class ImagePropertyForm
add(new Label(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.description")));
ParameterModel descriptionParam = new StringParameter(Image.DESCRIPTION);
- descriptionParam.addParameterListener(new StringInRangeValidationListener(0, 2000));
+ descriptionParam.addParameterListener(new StringInRangeValidationListener(0, 500));
TextArea description = new TextArea(descriptionParam);
description.setRows(10);
description.setCols(60);
@@ -133,9 +133,16 @@ public class ImagePropertyForm
TextField site = new TextField(siteParam);
add(site);
+ add(new Label(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.license")));
+ ParameterModel licenseParam = new StringParameter(Image.LICENSE);
+ licenseParam.addParameterListener(new StringInRangeValidationListener(0, 300));
+ TextField license = new TextField(licenseParam);
+ add(license);
+
}
/** Form initialisation hook. Fills widgets with data. */
+ @Override
public void init(FormSectionEvent fse) {
// Do some initialization hook stuff
FormData data = fse.getFormData();
@@ -150,6 +157,7 @@ public class ImagePropertyForm
data.put(Image.MEDIA, image.getMedia());
data.put(Image.COPYRIGHT, image.getCopyright());
data.put(Image.SITE, image.getSite());
+ data.put(Image.LICENSE, image.getLicense());
}
@Override
@@ -158,6 +166,7 @@ public class ImagePropertyForm
}
/** Cancels streamlined editing. */
+ @Override
public void submitted(FormSectionEvent fse) {
if (m_step != null
&& getSaveCancelSection().getCancelButton().isSelected(fse.getPageState())) {
@@ -166,6 +175,7 @@ public class ImagePropertyForm
}
/** Form processing hook. Saves Event object. */
+ @Override
public void process(FormSectionEvent fse) {
FormData data = fse.getFormData();
PageState ps = fse.getPageState();
@@ -182,6 +192,7 @@ public class ImagePropertyForm
image.setMedia((String) data.get(Image.MEDIA));
image.setCopyright((String) data.get(Image.COPYRIGHT));
image.setSite((String) data.get(Image.SITE));
+ image.setLicense((String) data.get(Image.LICENSE));
image.save();
}
diff --git a/ccm-cms/src/WEB-INF/content-types/GenericArticle.xml b/ccm-cms/src/WEB-INF/content-types/GenericArticle.xml
index adf2d64f7..85805261e 100644
--- a/ccm-cms/src/WEB-INF/content-types/GenericArticle.xml
+++ b/ccm-cms/src/WEB-INF/content-types/GenericArticle.xml
@@ -22,6 +22,8 @@
component="com.arsdigita.cms.contenttypes.ui.GenericArticlePropertiesStep"
ordering="1"/>
+
+
diff --git a/ccm-cms/src/com/arsdigita/cms/CMSConfig_parameter.properties b/ccm-cms/src/com/arsdigita/cms/CMSConfig_parameter.properties
index a6017c654..1eff79c25 100755
--- a/ccm-cms/src/com/arsdigita/cms/CMSConfig_parameter.properties
+++ b/ccm-cms/src/com/arsdigita/cms/CMSConfig_parameter.properties
@@ -185,7 +185,7 @@ com.arsdigita.cms.search.score_title_and_keywords.format=[boolean]
com.arsdigita.cms.skip_asset_steps.title=Asset steps to skip
com.arsdigita.cms.skip_asset_steps.purpose=Specify asset steps that are not relevant for specific content types
-com.arsdigita.cms.skip_asset_steps.example=com.arsdigita.cms.contenttypes.MultiPartArticle:com.arsdigita.cms.contenttypes.ui.ImageStep,com.arsdigita.cms.contenttypes.InlineSite:com.arsdigita.cms.contenttypes.ui.ImageStep,com.arsdigita.cms.InlineSite:om.arsdigita.cms.contentassets.ui.FileAttachmentsStep
+com.arsdigita.cms.skip_asset_steps.example=com.arsdigita.cms.contenttypes.MultiPartArticle:com.arsdigita.cms.contentassets.ui.ImageStep,com.arsdigita.cms.contenttypes.InlineSite:com.arsdigita.cms.contentassets.ui.ImageStep,com.arsdigita.cms.InlineSite:com.arsdigita.cms.contentassets.ui.FileAttachmentsStep,com.arsdigita.cms.contenttypes.Image:com.arsdigita.cms.contentassets.ui.ImageStep
com.arsdigita.cms.skip_asset_steps.format=[string,string,string]
com.arsdigita.cms.mandatory_descriptions.title=Mandatory Descriptions
diff --git a/ccm-cms/src/com/arsdigita/cms/ImageAsset.java b/ccm-cms/src/com/arsdigita/cms/ImageAsset.java
index 97e8f6d67..5af94a92f 100755
--- a/ccm-cms/src/com/arsdigita/cms/ImageAsset.java
+++ b/ccm-cms/src/com/arsdigita/cms/ImageAsset.java
@@ -30,11 +30,15 @@ import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.SessionManager;
import com.arsdigita.versioning.VersionedACSObject;
import java.awt.Dimension;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
+import javax.imageio.ImageIO;
import org.apache.log4j.Logger;
/**
@@ -54,16 +58,14 @@ import org.apache.log4j.Logger;
public class ImageAsset extends BinaryAsset {
public static final String BASE_DATA_OBJECT_TYPE =
- "com.arsdigita.cms.ImageAsset";
-
+ "com.arsdigita.cms.ImageAsset";
public static final String CONTENT = "content";
public static final String HEIGHT = "height";
public static final String WIDTH = "width";
-
public static final String MIME_JPEG = "image/jpeg";
public static final String MIME_GIF = "image/gif";
+ private static final Logger s_log = Logger.getLogger(ImageAsset.class);
- private static final Logger s_log = Logger.getLogger(ImageAsset.class);
/**
* Default constructor. This creates a new image asset.
*/
@@ -133,6 +135,7 @@ public class ImageAsset extends BinaryAsset {
*
* @return the Blob content
*/
+ @Override
protected byte[] getContent() {
return (byte[]) get(CONTENT);
}
@@ -140,6 +143,7 @@ public class ImageAsset extends BinaryAsset {
/**
* Sets the Blob content.
*/
+ @Override
protected void setContent(byte[] content) {
set(CONTENT, content);
}
@@ -154,13 +158,13 @@ public class ImageAsset extends BinaryAsset {
* @param defaultMimeType The default mime type for the file
*/
public void loadFromFile(String fileName, File file, String defaultMimeType)
- throws IOException {
+ throws IOException {
// Guess mime type
MimeType mime = MimeType.guessMimeTypeFromFile(fileName);
- if(mime != null && mime instanceof ImageMimeType) {
- guessSize(file, (ImageMimeType)mime);
+ if (mime != null && mime instanceof ImageMimeType) {
+ guessSize(file, (ImageMimeType) mime);
} else {
// Set default mime type
mime = MimeType.loadMimeType(defaultMimeType);
@@ -170,12 +174,12 @@ public class ImageAsset extends BinaryAsset {
// Extract the filename
int i = fileName.lastIndexOf("/");
- if(i > 0) {
- fileName = fileName.substring(i+1);
+ if (i > 0) {
+ fileName = fileName.substring(i + 1);
}
i = fileName.lastIndexOf("\\"); // DOS-style
- if(i > 0) {
- fileName = fileName.substring(i+1);
+ if (i > 0) {
+ fileName = fileName.substring(i + 1);
}
setName(fileName);
@@ -189,8 +193,9 @@ public class ImageAsset extends BinaryAsset {
*
* @param file The file on the server to write to.
*/
+ @Override
public void writeToFile(File file)
- throws IOException {
+ throws IOException {
FileOutputStream fs = new FileOutputStream(file);
try {
fs.write(getContent());
@@ -202,7 +207,6 @@ public class ImageAsset extends BinaryAsset {
}
}
-
/**
* Guess image size by loading it from file. Set the WIDTH and HEIGHT
* attributes, if possible
@@ -212,11 +216,11 @@ public class ImageAsset extends BinaryAsset {
ImageSizer sizer = ImageSizerFactory.getImageSizer(mime.getMimeType());
try {
- if(sizer != null) {
+ if (sizer != null) {
Dimension d = sizer.computeImageSize(file);
- if(d != null) {
- width = new BigDecimal((int)d.getWidth());
- height = new BigDecimal((int)d.getHeight());
+ if (d != null) {
+ width = new BigDecimal((int) d.getWidth());
+ height = new BigDecimal((int) d.getHeight());
}
}
} catch (IOException ex) {
@@ -234,9 +238,8 @@ public class ImageAsset extends BinaryAsset {
* @return a collection of ImageAssets
*/
public static ImageAssetCollection getAllImages() {
- DataCollection da = SessionManager.getSession().retrieve
- (BASE_DATA_OBJECT_TYPE);
- da.addEqualsFilter(VersionedACSObject.IS_DELETED, new Integer(0));
+ DataCollection da = SessionManager.getSession().retrieve(BASE_DATA_OBJECT_TYPE);
+ da.addEqualsFilter(VersionedACSObject.IS_DELETED, new Integer(0));
return new ImageAssetCollection(da);
}
@@ -249,8 +252,7 @@ public class ImageAsset extends BinaryAsset {
* @return a collection of images whose name matches the keyword
*/
public static ImageAssetCollection getImagesByKeyword(
- String keyword, String context
- ) {
+ String keyword, String context) {
ImageAssetCollection c = getAllImages();
c.addOrder(Asset.NAME);
Filter f;
@@ -271,4 +273,49 @@ public class ImageAsset extends BinaryAsset {
return getImagesByKeyword(keyword, ContentItem.DRAFT);
}
+ /**
+ * Resize this ImageAsset proportional to maxThumbnailWidth, if this ImageAsset
+ * is wider then maxThumbnailWidth. Else just return this ImageAsset.
+ *
+ * @param maxThumbnailWidth max image width
+ * @return
+ */
+ public ImageAsset proportionalResizeToWidth(int maxThumbnailWidth) {
+
+ if (this.getWidth().intValue() <= maxThumbnailWidth) {
+
+ return this;
+
+ } else {
+
+ ImageAsset imageAsset = new ImageAsset();
+ imageAsset.setMimeType(this.getMimeType());
+ imageAsset.setName("Scaled" + this.getName());
+
+ ByteArrayInputStream in = new ByteArrayInputStream(this.getContent());
+ try {
+ BufferedImage origImage = ImageIO.read(in);
+
+ ByteArrayOutputStream scaledImageBuffer = new ByteArrayOutputStream();
+
+ java.awt.Image scaledImage = origImage.getScaledInstance(maxThumbnailWidth, -1, java.awt.Image.SCALE_SMOOTH);
+
+ BufferedImage scaledBufImage = new BufferedImage(scaledImage.getWidth(null), scaledImage.getHeight(null), origImage.getType());
+ scaledBufImage.getGraphics().drawImage(scaledImage, 0, 0, null);
+
+ ImageIO.write(scaledBufImage, this.getMimeType().getFileExtension(), scaledImageBuffer);
+
+ imageAsset.setContent(scaledImageBuffer.toByteArray());
+ imageAsset.setWidth(new BigDecimal(scaledImage.getWidth(null)));
+ imageAsset.setHeight(new BigDecimal(scaledImage.getHeight(null)));
+
+ } catch (IOException e) {
+ imageAsset.setContent(this.getContent());
+ imageAsset.setWidth(this.getWidth());
+ imageAsset.setHeight(this.getHeight());
+ }
+
+ return imageAsset;
+ }
+ }
}
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/authoring/GenericArticleBody.java b/ccm-cms/src/com/arsdigita/cms/ui/authoring/GenericArticleBody.java
index 8ac5bef9e..ea8699086 100755
--- a/ccm-cms/src/com/arsdigita/cms/ui/authoring/GenericArticleBody.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/authoring/GenericArticleBody.java
@@ -48,8 +48,8 @@ import com.arsdigita.util.Assert;
*/
public class GenericArticleBody extends TextAssetBody {
- private AuthoringKitWizard m_parent;
- private ItemSelectionModel m_itemModel;
+ protected AuthoringKitWizard m_parent;
+ protected ItemSelectionModel m_itemModel;
/**
* Construct a new GenericArticleBody component
@@ -68,6 +68,7 @@ public class GenericArticleBody extends TextAssetBody {
// Rest the component when it is hidden
parent.getList().addActionListener(new ActionListener() {
+ @Override
public void actionPerformed(ActionEvent e) {
PageState state = e.getPageState();
reset(state);