CT Image
* Thumbnails werden nun automatisch erzeugt und gespeichert * Anzeige im CC wird nun auf ein definiertes Maß proportional verkleinert * Lizenzfeld * TextAsset-Feld für den ausführlichen Text * Beschribungsfeld auf 500 Zeichen gekürzt * AuthoringStep "Bild hinzufügen" läßt sich per cms.properties Schlüssel ausblenden git-svn-id: https://svn.libreccm.org/ccm/trunk@764 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
dd645e695c
commit
b78a52057d
|
|
@ -51,17 +51,12 @@ public class ItemImageAttachment extends ACSObject implements CustomCopy {
|
||||||
public static final String ITEM_ATTACHMENTS = "itemAttachments";
|
public static final String ITEM_ATTACHMENTS = "itemAttachments";
|
||||||
public static final String IMAGE_LINK = "imageLink";
|
public static final String IMAGE_LINK = "imageLink";
|
||||||
/** Data object type for this domain object */
|
/** Data object type for this domain object */
|
||||||
public static final String BASE_DATA_OBJECT_TYPE =
|
public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contentassets.ItemImageAttachment";
|
||||||
"com.arsdigita.cms.contentassets.ItemImageAttachment";
|
private static final Logger s_log = Logger.getLogger(ItemImageAttachment.class);
|
||||||
private static final Logger s_log = Logger.getLogger(
|
private static final ItemImageAttachmentConfig s_config = new ItemImageAttachmentConfig();
|
||||||
ItemImageAttachment.class);
|
|
||||||
private static final ItemImageAttachmentConfig s_config =
|
|
||||||
new ItemImageAttachmentConfig();
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
s_log.debug("Static initalizer starting...");
|
|
||||||
s_config.load();
|
s_config.load();
|
||||||
s_log.debug("Static initalizer finished.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ItemImageAttachment() {
|
private ItemImageAttachment() {
|
||||||
|
|
@ -131,8 +126,7 @@ public class ItemImageAttachment extends ACSObject implements CustomCopy {
|
||||||
s_log.debug("Getting attachments for " + item.getOID());
|
s_log.debug("Getting attachments for " + item.getOID());
|
||||||
}
|
}
|
||||||
|
|
||||||
DataCollection attachments = SessionManager.getSession().retrieve(
|
DataCollection attachments = SessionManager.getSession().retrieve(BASE_DATA_OBJECT_TYPE);
|
||||||
BASE_DATA_OBJECT_TYPE);
|
|
||||||
attachments.addEqualsFilter(ITEM + ".id", item.getID());
|
attachments.addEqualsFilter(ITEM + ".id", item.getID());
|
||||||
|
|
||||||
return attachments;
|
return attachments;
|
||||||
|
|
@ -174,16 +168,16 @@ public class ItemImageAttachment extends ACSObject implements CustomCopy {
|
||||||
* Automatically publish an unpublished image
|
* Automatically publish an unpublished image
|
||||||
*/
|
*/
|
||||||
public boolean copyProperty(final CustomCopy source,
|
public boolean copyProperty(final CustomCopy source,
|
||||||
final Property property,
|
final Property property,
|
||||||
final ItemCopier copier) {
|
final ItemCopier copier) {
|
||||||
String attribute = property.getName();
|
String attribute = property.getName();
|
||||||
if (ItemCopier.VERSION_COPY == copier.getCopyType() && IMAGE.equals(
|
if (ItemCopier.VERSION_COPY == copier.getCopyType()
|
||||||
attribute)) {
|
&& IMAGE.equals(attribute)) {
|
||||||
ItemImageAttachment attachment = (ItemImageAttachment) source;
|
ItemImageAttachment attachment = (ItemImageAttachment) source;
|
||||||
ReusableImageAsset image = attachment.getImage();
|
ReusableImageAsset image = attachment.getImage();
|
||||||
|
|
||||||
ReusableImageAsset liveImage =
|
ReusableImageAsset liveImage =
|
||||||
(ReusableImageAsset) image.getLiveVersion();
|
(ReusableImageAsset) image.getLiveVersion();
|
||||||
|
|
||||||
if (null == liveImage) {
|
if (null == liveImage) {
|
||||||
liveImage = (ReusableImageAsset) image.createLiveVersion();
|
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
|
// 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
|
// can't make it composite because then image is deleted if we delete
|
||||||
// link. Have to set link to null first (I think)
|
// link. Have to set link to null first (I think)
|
||||||
DomainObject link = DomainObjectFactory.newInstance((DataObject) get(
|
DomainObject link = DomainObjectFactory.newInstance((DataObject) get(IMAGE_LINK));
|
||||||
IMAGE_LINK));
|
|
||||||
set(IMAGE_LINK, null);
|
set(IMAGE_LINK, null);
|
||||||
save();
|
save();
|
||||||
link.delete();
|
link.delete();
|
||||||
|
|
|
||||||
|
|
@ -65,45 +65,45 @@ public class ItemImageAttachmentInitializer extends ContentAssetInitializer {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
removeDeprecatedImageSteps();
|
// removeDeprecatedImageSteps();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private void removeDeprecatedImageSteps() {
|
// private void removeDeprecatedImageSteps() {
|
||||||
DataCollection steps = SessionManager.getSession().retrieve
|
// DataCollection steps = SessionManager.getSession().retrieve
|
||||||
( AuthoringStep.BASE_DATA_OBJECT_TYPE );
|
// ( AuthoringStep.BASE_DATA_OBJECT_TYPE );
|
||||||
|
//
|
||||||
// Don't use defined constant to reduce dependency on GenericArticle
|
// // Don't use defined constant to reduce dependency on GenericArticle
|
||||||
steps.addEqualsFilter( "component",
|
// steps.addEqualsFilter( "component",
|
||||||
"com.arsdigita.cms.ui.authoring.ArticleImage" );
|
// "com.arsdigita.cms.ui.authoring.ArticleImage" );
|
||||||
|
//
|
||||||
while( steps.next() ) {
|
// while( steps.next() ) {
|
||||||
DataObject step = steps.getDataObject();
|
// DataObject step = steps.getDataObject();
|
||||||
|
//
|
||||||
DataCollection kits = SessionManager.getSession().retrieve
|
// DataCollection kits = SessionManager.getSession().retrieve
|
||||||
( AuthoringKitStepAssociation.BASE_DATA_OBJECT_TYPE );
|
// ( AuthoringKitStepAssociation.BASE_DATA_OBJECT_TYPE );
|
||||||
kits.addEqualsFilter( "stepId", step.get( "id" ) );
|
// kits.addEqualsFilter( "stepId", step.get( "id" ) );
|
||||||
|
//
|
||||||
while( kits.next() ) {
|
// while( kits.next() ) {
|
||||||
DataObject kitStep = kits.getDataObject();
|
// DataObject kitStep = kits.getDataObject();
|
||||||
AuthoringKitStepAssociation kitStepAsso = new AuthoringKitStepAssociation(kitStep);
|
// AuthoringKitStepAssociation kitStepAsso = new AuthoringKitStepAssociation(kitStep);
|
||||||
// Check whether the content type is (persistence-wise) subtype
|
// // 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:
|
// // 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());
|
// AuthoringKit kit = new AuthoringKit (kitStepAsso.getKitID());
|
||||||
try {
|
// try {
|
||||||
ObjectType.verifySubtype(GenericArticle.BASE_DATA_OBJECT_TYPE,
|
// ObjectType.verifySubtype(GenericArticle.BASE_DATA_OBJECT_TYPE,
|
||||||
kit.getContentType().getAssociatedObjectType());
|
// kit.getContentType().getAssociatedObjectType());
|
||||||
kitStepAsso.delete();
|
// kitStepAsso.delete();
|
||||||
} catch (PersistenceException pe) {
|
// } catch (PersistenceException pe) {
|
||||||
// Do nothing, the content type is not subtyping com.arsdigita.cms.GenericArticle
|
// // Do nothing, the content type is not subtyping com.arsdigita.cms.GenericArticle
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// DomainObjectFactory.newInstance( step ).delete();
|
// // DomainObjectFactory.newInstance( step ).delete();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
public String getTraversalXML() {
|
public String getTraversalXML() {
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,22 @@ import com.arsdigita.cms.*;
|
||||||
|
|
||||||
object type Image extends ContentPage {
|
object type Image extends ContentPage {
|
||||||
|
|
||||||
component ImageAsset[0..1] image = join ct_images.image_id to cms_images.image_id;
|
component ImageAsset[0..1] image = join ct_images.image_id to cms_images.image_id;
|
||||||
String[0..1] caption = ct_images.caption VARCHAR(400);
|
component ImageAsset[0..1] thumbnail = join ct_images.thumbnail_id to cms_images.image_id;
|
||||||
String[0..1] description = ct_images.description VARCHAR(2000);
|
component TextAsset [0..1] textAsset = join ct_images.text_id to cms_text.text_id;
|
||||||
String[0..1] artist = ct_images.artist VARCHAR(200);
|
|
||||||
Date [0..1] publishDate = ct_images.publish_date DATE;
|
BigDecimal[0..1] width = ct_images.width INTEGER;
|
||||||
String[0..1] source = ct_images.source VARCHAR(600);
|
BigDecimal[0..1] height = ct_images.height INTEGER;
|
||||||
String[0..1] media = ct_images.media VARCHAR(300);
|
|
||||||
String[0..1] copyright = ct_images.copyright VARCHAR(400);
|
String[0..1] caption = ct_images.caption VARCHAR(400);
|
||||||
String[0..1] site = ct_images.site VARCHAR(500);
|
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);
|
reference key (ct_images.item_id);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,13 @@
|
||||||
descriptionBundle="com.arsdigita.cms.CMSResources"
|
descriptionBundle="com.arsdigita.cms.CMSResources"
|
||||||
component="com.arsdigita.cms.contenttypes.ui.ImagePropertiesStep"/>
|
component="com.arsdigita.cms.contenttypes.ui.ImagePropertiesStep"/>
|
||||||
|
|
||||||
|
<ctd:authoring-step
|
||||||
|
labelKey="cms.contenttypes.shared.body_text.title"
|
||||||
|
labelBundle="com.arsdigita.cms.CMSResources"
|
||||||
|
descriptionKey="cms.contenttypes.shared.body_text.description"
|
||||||
|
descriptionBundle="com.arsdigita.cms.CMSResources"
|
||||||
|
component="com.arsdigita.cms.contenttypes.ui.ImageTextBody"/>
|
||||||
|
|
||||||
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
|
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
|
||||||
</ctd:authoring-kit>
|
</ctd:authoring-kit>
|
||||||
</ctd:content-type>
|
</ctd:content-type>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,9 @@
|
||||||
<xrd:formatter property="/object/publishDate"
|
<xrd:formatter property="/object/publishDate"
|
||||||
class="com.arsdigita.xml.formatters.DateFormatter"/>
|
class="com.arsdigita.xml.formatters.DateFormatter"/>
|
||||||
<xrd:associations rule="include">
|
<xrd:associations rule="include">
|
||||||
|
<xrd:property name="/object/thumbnail"/>
|
||||||
<xrd:property name="/object/image"/>
|
<xrd:property name="/object/image"/>
|
||||||
|
<xrd:property name="/object/textAsset"/>
|
||||||
</xrd:associations>
|
</xrd:associations>
|
||||||
</xrd:adapter>
|
</xrd:adapter>
|
||||||
</xrd:context>
|
</xrd:context>
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ package com.arsdigita.cms.contenttypes;
|
||||||
|
|
||||||
import com.arsdigita.cms.ContentPage;
|
import com.arsdigita.cms.ContentPage;
|
||||||
import com.arsdigita.cms.ImageAsset;
|
import com.arsdigita.cms.ImageAsset;
|
||||||
|
import com.arsdigita.cms.TextAsset;
|
||||||
import com.arsdigita.domain.DataObjectNotFoundException;
|
import com.arsdigita.domain.DataObjectNotFoundException;
|
||||||
import com.arsdigita.domain.DomainObjectFactory;
|
import com.arsdigita.domain.DomainObjectFactory;
|
||||||
import com.arsdigita.persistence.DataObject;
|
import com.arsdigita.persistence.DataObject;
|
||||||
|
|
@ -36,11 +37,13 @@ import java.util.Date;
|
||||||
public class Image extends ContentPage {
|
public class Image extends ContentPage {
|
||||||
|
|
||||||
private final static org.apache.log4j.Logger s_log =
|
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 */
|
/** PDL property name for lead */
|
||||||
public static final String IMAGE = "image";
|
public static final String IMAGE = "image";
|
||||||
// public static final String WIDTH = "width";
|
public static final String THUMBNAIL = "thumbnail";
|
||||||
// public static final String HEIGHT = "height";
|
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 CAPTION = "caption";
|
||||||
public static final String DESCRIPTION = "description";
|
public static final String DESCRIPTION = "description";
|
||||||
public static final String ARTIST = "artist";
|
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 MEDIA = "media";
|
||||||
public static final String COPYRIGHT = "copyright";
|
public static final String COPYRIGHT = "copyright";
|
||||||
public static final String SITE = "site";
|
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 */
|
/** Data object type for this domain object */
|
||||||
public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.Image";
|
public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.Image";
|
||||||
private static final ImageConfig s_config = new ImageConfig();
|
private static final ImageConfig s_config = new ImageConfig();
|
||||||
|
|
@ -59,11 +64,10 @@ public class Image extends ContentPage {
|
||||||
s_log.debug("Static initalizer finished.");
|
s_log.debug("Static initalizer finished.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final ImageConfig getConfig() {
|
public static ImageConfig getConfig() {
|
||||||
return s_config;
|
return s_config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Image() {
|
public Image() {
|
||||||
this(BASE_DATA_OBJECT_TYPE);
|
this(BASE_DATA_OBJECT_TYPE);
|
||||||
}
|
}
|
||||||
|
|
@ -97,6 +101,9 @@ public class Image extends ContentPage {
|
||||||
|
|
||||||
public void setImage(ImageAsset image) {
|
public void setImage(ImageAsset image) {
|
||||||
set(IMAGE, image);
|
set(IMAGE, image);
|
||||||
|
setWidth(image.getWidth());
|
||||||
|
setHeight(image.getHeight());
|
||||||
|
setThumbnail();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCaption() {
|
public String getCaption() {
|
||||||
|
|
@ -107,6 +114,76 @@ public class Image extends ContentPage {
|
||||||
set(CAPTION, caption);
|
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 <code>Image</code>. 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
|
@Override
|
||||||
public String getDescription() {
|
public String getDescription() {
|
||||||
return (String) get(DESCRIPTION);
|
return (String) get(DESCRIPTION);
|
||||||
|
|
@ -164,4 +241,12 @@ public class Image extends ContentPage {
|
||||||
public void setSite(String site) {
|
public void setSite(String site) {
|
||||||
set(SITE, site);
|
set(SITE, site);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getLicense() {
|
||||||
|
return (String) get(LICENSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLicense(String license) {
|
||||||
|
set(LICENSE, license);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,8 @@ public class ImageConfig extends AbstractConfig {
|
||||||
|
|
||||||
private final Parameter m_startYear;
|
private final Parameter m_startYear;
|
||||||
private final Parameter m_endYearDelta;
|
private final Parameter m_endYearDelta;
|
||||||
|
private final Parameter m_maxImageWidth;
|
||||||
|
private final Parameter m_maxThumbnailWidth;
|
||||||
|
|
||||||
public ImageConfig() {
|
public ImageConfig() {
|
||||||
m_startYear = new IntegerParameter(
|
m_startYear = new IntegerParameter(
|
||||||
|
|
@ -40,8 +42,20 @@ public class ImageConfig extends AbstractConfig {
|
||||||
Parameter.REQUIRED,
|
Parameter.REQUIRED,
|
||||||
new Integer(3));
|
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_startYear);
|
||||||
register(m_endYearDelta);
|
register(m_endYearDelta);
|
||||||
|
register(m_maxImageWidth);
|
||||||
|
register(m_maxThumbnailWidth);
|
||||||
|
|
||||||
loadInfo();
|
loadInfo();
|
||||||
}
|
}
|
||||||
|
|
@ -53,4 +67,12 @@ public class ImageConfig extends AbstractConfig {
|
||||||
public final int getEndYearDelta() {
|
public final int getEndYearDelta() {
|
||||||
return ((Integer) get(m_endYearDelta)).intValue();
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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.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.example=3
|
||||||
com.arsdigita.cms.contenttypes.image.end_year_delta.format=[integer]
|
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]
|
||||||
|
|
|
||||||
|
|
@ -7,3 +7,6 @@ cms.contenttypes.ui.image.source=Source:
|
||||||
cms.contenttypes.ui.image.media=Media:
|
cms.contenttypes.ui.image.media=Media:
|
||||||
cms.contenttypes.ui.image.copyright=Copyright:
|
cms.contenttypes.ui.image.copyright=Copyright:
|
||||||
cms.contenttypes.ui.image.site=Site:
|
cms.contenttypes.ui.image.site=Site:
|
||||||
|
cms.contenttypes.ui.image.license=License:
|
||||||
|
cms.contenttypes.ui.image.width=Width:
|
||||||
|
cms.contenttypes.ui.image.height=Height:
|
||||||
|
|
|
||||||
|
|
@ -5,3 +5,6 @@ cms.contenttypes.ui.image.source=Quelle:
|
||||||
cms.contenttypes.ui.image.media=Medium:
|
cms.contenttypes.ui.image.media=Medium:
|
||||||
cms.contenttypes.ui.image.copyright=Copyright:
|
cms.contenttypes.ui.image.copyright=Copyright:
|
||||||
cms.contenttypes.ui.image.site=Standort:
|
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:
|
||||||
|
|
|
||||||
|
|
@ -108,8 +108,12 @@ public class ImagePropertiesStep extends SimpleEditStep {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ImageAsset getImageAsset(PageState state) {
|
protected ImageAsset getImageAsset(PageState state) {
|
||||||
ImageAsset image = ((Image) itemModel.getSelectedItem(state)).getImage();
|
try {
|
||||||
return image;
|
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,
|
ContentPage.LAUNCH_DATE,
|
||||||
new DomainObjectPropertySheet.AttributeFormatter() {
|
new DomainObjectPropertySheet.AttributeFormatter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
public String format(DomainObject item,
|
public String format(DomainObject item,
|
||||||
String attribute,
|
String attribute,
|
||||||
PageState state) {
|
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.image.caption"), Image.CAPTION);
|
||||||
sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.description"), Image.DESCRIPTION);
|
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.artist"), Image.ARTIST);
|
||||||
sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.publishDate"), Image.PUBLISHDATE,
|
sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.publishDate"), Image.PUBLISHDATE,
|
||||||
new DomainObjectPropertySheet.AttributeFormatter() {
|
new DomainObjectPropertySheet.AttributeFormatter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
public String format(DomainObject item, String attribute, PageState state) {
|
public String format(DomainObject item, String attribute, PageState state) {
|
||||||
Image image = (Image) item;
|
Image image = (Image) item;
|
||||||
if ((image.getPublishDate()) != null) {
|
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.media"), Image.MEDIA);
|
||||||
sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.copyright"), Image.COPYRIGHT);
|
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.site"), Image.SITE);
|
||||||
|
sheet.add(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.image.license"), Image.LICENSE);
|
||||||
|
|
||||||
container.add(sheet);
|
container.add(sheet);
|
||||||
|
|
||||||
|
|
@ -172,6 +181,7 @@ public class ImagePropertiesStep extends SimpleEditStep {
|
||||||
|
|
||||||
class ImageUploadListerner implements FormProcessListener {
|
class ImageUploadListerner implements FormProcessListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
public void process(FormSectionEvent fse) {
|
public void process(FormSectionEvent fse) {
|
||||||
FormData data = fse.getFormData();
|
FormData data = fse.getFormData();
|
||||||
PageState ps = fse.getPageState();
|
PageState ps = fse.getPageState();
|
||||||
|
|
@ -233,10 +243,12 @@ public class ImagePropertiesStep extends SimpleEditStep {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public SaveCancelSection getSaveCancelSection() {
|
public SaveCancelSection getSaveCancelSection() {
|
||||||
return m_saveCancel;
|
return m_saveCancel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public ImageAsset getImage(FormSectionEvent event)
|
public ImageAsset getImage(FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
PageState ps = event.getPageState();
|
PageState ps = event.getPageState();
|
||||||
|
|
@ -254,6 +266,7 @@ public class ImagePropertiesStep extends SimpleEditStep {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Form getForm() {
|
public Form getForm() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ public class ImagePropertyForm
|
||||||
|
|
||||||
add(new Label(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.description")));
|
add(new Label(ImageGlobalizationUtil.globalize("cms.contenttypes.ui.description")));
|
||||||
ParameterModel descriptionParam = new StringParameter(Image.DESCRIPTION);
|
ParameterModel descriptionParam = new StringParameter(Image.DESCRIPTION);
|
||||||
descriptionParam.addParameterListener(new StringInRangeValidationListener(0, 2000));
|
descriptionParam.addParameterListener(new StringInRangeValidationListener(0, 500));
|
||||||
TextArea description = new TextArea(descriptionParam);
|
TextArea description = new TextArea(descriptionParam);
|
||||||
description.setRows(10);
|
description.setRows(10);
|
||||||
description.setCols(60);
|
description.setCols(60);
|
||||||
|
|
@ -133,9 +133,16 @@ public class ImagePropertyForm
|
||||||
TextField site = new TextField(siteParam);
|
TextField site = new TextField(siteParam);
|
||||||
add(site);
|
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. */
|
/** Form initialisation hook. Fills widgets with data. */
|
||||||
|
@Override
|
||||||
public void init(FormSectionEvent fse) {
|
public void init(FormSectionEvent fse) {
|
||||||
// Do some initialization hook stuff
|
// Do some initialization hook stuff
|
||||||
FormData data = fse.getFormData();
|
FormData data = fse.getFormData();
|
||||||
|
|
@ -150,6 +157,7 @@ public class ImagePropertyForm
|
||||||
data.put(Image.MEDIA, image.getMedia());
|
data.put(Image.MEDIA, image.getMedia());
|
||||||
data.put(Image.COPYRIGHT, image.getCopyright());
|
data.put(Image.COPYRIGHT, image.getCopyright());
|
||||||
data.put(Image.SITE, image.getSite());
|
data.put(Image.SITE, image.getSite());
|
||||||
|
data.put(Image.LICENSE, image.getLicense());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -158,6 +166,7 @@ public class ImagePropertyForm
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Cancels streamlined editing. */
|
/** Cancels streamlined editing. */
|
||||||
|
@Override
|
||||||
public void submitted(FormSectionEvent fse) {
|
public void submitted(FormSectionEvent fse) {
|
||||||
if (m_step != null
|
if (m_step != null
|
||||||
&& getSaveCancelSection().getCancelButton().isSelected(fse.getPageState())) {
|
&& getSaveCancelSection().getCancelButton().isSelected(fse.getPageState())) {
|
||||||
|
|
@ -166,6 +175,7 @@ public class ImagePropertyForm
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Form processing hook. Saves Event object. */
|
/** Form processing hook. Saves Event object. */
|
||||||
|
@Override
|
||||||
public void process(FormSectionEvent fse) {
|
public void process(FormSectionEvent fse) {
|
||||||
FormData data = fse.getFormData();
|
FormData data = fse.getFormData();
|
||||||
PageState ps = fse.getPageState();
|
PageState ps = fse.getPageState();
|
||||||
|
|
@ -182,6 +192,7 @@ public class ImagePropertyForm
|
||||||
image.setMedia((String) data.get(Image.MEDIA));
|
image.setMedia((String) data.get(Image.MEDIA));
|
||||||
image.setCopyright((String) data.get(Image.COPYRIGHT));
|
image.setCopyright((String) data.get(Image.COPYRIGHT));
|
||||||
image.setSite((String) data.get(Image.SITE));
|
image.setSite((String) data.get(Image.SITE));
|
||||||
|
image.setLicense((String) data.get(Image.LICENSE));
|
||||||
|
|
||||||
image.save();
|
image.save();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,8 @@
|
||||||
component="com.arsdigita.cms.contenttypes.ui.GenericArticlePropertiesStep"
|
component="com.arsdigita.cms.contenttypes.ui.GenericArticlePropertiesStep"
|
||||||
ordering="1"/>
|
ordering="1"/>
|
||||||
|
|
||||||
|
<ctd:include href="/WEB-INF/content-types/edit-body-text-step.xml"/>
|
||||||
|
|
||||||
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
|
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
|
||||||
</ctd:authoring-kit>
|
</ctd:authoring-kit>
|
||||||
</ctd:content-type>
|
</ctd:content-type>
|
||||||
|
|
|
||||||
|
|
@ -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.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.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.skip_asset_steps.format=[string,string,string]
|
||||||
|
|
||||||
com.arsdigita.cms.mandatory_descriptions.title=Mandatory Descriptions
|
com.arsdigita.cms.mandatory_descriptions.title=Mandatory Descriptions
|
||||||
|
|
|
||||||
|
|
@ -30,11 +30,15 @@ import com.arsdigita.persistence.OID;
|
||||||
import com.arsdigita.persistence.SessionManager;
|
import com.arsdigita.persistence.SessionManager;
|
||||||
import com.arsdigita.versioning.VersionedACSObject;
|
import com.arsdigita.versioning.VersionedACSObject;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -54,16 +58,14 @@ import org.apache.log4j.Logger;
|
||||||
public class ImageAsset extends BinaryAsset {
|
public class ImageAsset extends BinaryAsset {
|
||||||
|
|
||||||
public static final String BASE_DATA_OBJECT_TYPE =
|
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 CONTENT = "content";
|
||||||
public static final String HEIGHT = "height";
|
public static final String HEIGHT = "height";
|
||||||
public static final String WIDTH = "width";
|
public static final String WIDTH = "width";
|
||||||
|
|
||||||
public static final String MIME_JPEG = "image/jpeg";
|
public static final String MIME_JPEG = "image/jpeg";
|
||||||
public static final String MIME_GIF = "image/gif";
|
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.
|
* Default constructor. This creates a new image asset.
|
||||||
*/
|
*/
|
||||||
|
|
@ -133,6 +135,7 @@ public class ImageAsset extends BinaryAsset {
|
||||||
*
|
*
|
||||||
* @return the Blob content
|
* @return the Blob content
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected byte[] getContent() {
|
protected byte[] getContent() {
|
||||||
return (byte[]) get(CONTENT);
|
return (byte[]) get(CONTENT);
|
||||||
}
|
}
|
||||||
|
|
@ -140,6 +143,7 @@ public class ImageAsset extends BinaryAsset {
|
||||||
/**
|
/**
|
||||||
* Sets the Blob content.
|
* Sets the Blob content.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected void setContent(byte[] content) {
|
protected void setContent(byte[] content) {
|
||||||
set(CONTENT, content);
|
set(CONTENT, content);
|
||||||
}
|
}
|
||||||
|
|
@ -154,13 +158,13 @@ public class ImageAsset extends BinaryAsset {
|
||||||
* @param defaultMimeType The default mime type for the file
|
* @param defaultMimeType The default mime type for the file
|
||||||
*/
|
*/
|
||||||
public void loadFromFile(String fileName, File file, String defaultMimeType)
|
public void loadFromFile(String fileName, File file, String defaultMimeType)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
||||||
// Guess mime type
|
// Guess mime type
|
||||||
MimeType mime = MimeType.guessMimeTypeFromFile(fileName);
|
MimeType mime = MimeType.guessMimeTypeFromFile(fileName);
|
||||||
|
|
||||||
if(mime != null && mime instanceof ImageMimeType) {
|
if (mime != null && mime instanceof ImageMimeType) {
|
||||||
guessSize(file, (ImageMimeType)mime);
|
guessSize(file, (ImageMimeType) mime);
|
||||||
} else {
|
} else {
|
||||||
// Set default mime type
|
// Set default mime type
|
||||||
mime = MimeType.loadMimeType(defaultMimeType);
|
mime = MimeType.loadMimeType(defaultMimeType);
|
||||||
|
|
@ -170,12 +174,12 @@ public class ImageAsset extends BinaryAsset {
|
||||||
|
|
||||||
// Extract the filename
|
// Extract the filename
|
||||||
int i = fileName.lastIndexOf("/");
|
int i = fileName.lastIndexOf("/");
|
||||||
if(i > 0) {
|
if (i > 0) {
|
||||||
fileName = fileName.substring(i+1);
|
fileName = fileName.substring(i + 1);
|
||||||
}
|
}
|
||||||
i = fileName.lastIndexOf("\\"); // DOS-style
|
i = fileName.lastIndexOf("\\"); // DOS-style
|
||||||
if(i > 0) {
|
if (i > 0) {
|
||||||
fileName = fileName.substring(i+1);
|
fileName = fileName.substring(i + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
setName(fileName);
|
setName(fileName);
|
||||||
|
|
@ -189,8 +193,9 @@ public class ImageAsset extends BinaryAsset {
|
||||||
*
|
*
|
||||||
* @param file The file on the server to write to.
|
* @param file The file on the server to write to.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public void writeToFile(File file)
|
public void writeToFile(File file)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
FileOutputStream fs = new FileOutputStream(file);
|
FileOutputStream fs = new FileOutputStream(file);
|
||||||
try {
|
try {
|
||||||
fs.write(getContent());
|
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
|
* Guess image size by loading it from file. Set the WIDTH and HEIGHT
|
||||||
* attributes, if possible
|
* attributes, if possible
|
||||||
|
|
@ -212,11 +216,11 @@ public class ImageAsset extends BinaryAsset {
|
||||||
ImageSizer sizer = ImageSizerFactory.getImageSizer(mime.getMimeType());
|
ImageSizer sizer = ImageSizerFactory.getImageSizer(mime.getMimeType());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(sizer != null) {
|
if (sizer != null) {
|
||||||
Dimension d = sizer.computeImageSize(file);
|
Dimension d = sizer.computeImageSize(file);
|
||||||
if(d != null) {
|
if (d != null) {
|
||||||
width = new BigDecimal((int)d.getWidth());
|
width = new BigDecimal((int) d.getWidth());
|
||||||
height = new BigDecimal((int)d.getHeight());
|
height = new BigDecimal((int) d.getHeight());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
|
|
@ -234,9 +238,8 @@ public class ImageAsset extends BinaryAsset {
|
||||||
* @return a collection of ImageAssets
|
* @return a collection of ImageAssets
|
||||||
*/
|
*/
|
||||||
public static ImageAssetCollection getAllImages() {
|
public static ImageAssetCollection getAllImages() {
|
||||||
DataCollection da = SessionManager.getSession().retrieve
|
DataCollection da = SessionManager.getSession().retrieve(BASE_DATA_OBJECT_TYPE);
|
||||||
(BASE_DATA_OBJECT_TYPE);
|
da.addEqualsFilter(VersionedACSObject.IS_DELETED, new Integer(0));
|
||||||
da.addEqualsFilter(VersionedACSObject.IS_DELETED, new Integer(0));
|
|
||||||
return new ImageAssetCollection(da);
|
return new ImageAssetCollection(da);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -249,8 +252,7 @@ public class ImageAsset extends BinaryAsset {
|
||||||
* @return a collection of images whose name matches the keyword
|
* @return a collection of images whose name matches the keyword
|
||||||
*/
|
*/
|
||||||
public static ImageAssetCollection getImagesByKeyword(
|
public static ImageAssetCollection getImagesByKeyword(
|
||||||
String keyword, String context
|
String keyword, String context) {
|
||||||
) {
|
|
||||||
ImageAssetCollection c = getAllImages();
|
ImageAssetCollection c = getAllImages();
|
||||||
c.addOrder(Asset.NAME);
|
c.addOrder(Asset.NAME);
|
||||||
Filter f;
|
Filter f;
|
||||||
|
|
@ -271,4 +273,49 @@ public class ImageAsset extends BinaryAsset {
|
||||||
return getImagesByKeyword(keyword, ContentItem.DRAFT);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,8 +48,8 @@ import com.arsdigita.util.Assert;
|
||||||
*/
|
*/
|
||||||
public class GenericArticleBody extends TextAssetBody {
|
public class GenericArticleBody extends TextAssetBody {
|
||||||
|
|
||||||
private AuthoringKitWizard m_parent;
|
protected AuthoringKitWizard m_parent;
|
||||||
private ItemSelectionModel m_itemModel;
|
protected ItemSelectionModel m_itemModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a new GenericArticleBody component
|
* Construct a new GenericArticleBody component
|
||||||
|
|
@ -68,6 +68,7 @@ public class GenericArticleBody extends TextAssetBody {
|
||||||
|
|
||||||
// Rest the component when it is hidden
|
// Rest the component when it is hidden
|
||||||
parent.getList().addActionListener(new ActionListener() {
|
parent.getList().addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
PageState state = e.getPageState();
|
PageState state = e.getPageState();
|
||||||
reset(state);
|
reset(state);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue