Several improvments for the ImageBrowser and image lists

git-svn-id: https://svn.libreccm.org/ccm/trunk@3436 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2015-05-27 16:44:32 +00:00
parent d33f690dda
commit 7b2693721b
4 changed files with 302 additions and 184 deletions

View File

@ -142,22 +142,30 @@ public class ImageStepDisplayTable extends Table {
setModelBuilder(new ImageTableModelBuilder(imageStep));
columnModel.get(TABLE_COL_INDEX_THUMBNAIL).setCellRenderer(new ThumbnailCellRenderer());
columnModel.get(TABLE_COL_INDEX_PROPS).setCellRenderer(new PropertiesCellRenderer());
columnModel.get(TABLE_COL_INDEX_THUMBNAIL).setCellRenderer(
new ThumbnailCellRenderer());
columnModel.get(TABLE_COL_INDEX_PROPS).setCellRenderer(
new PropertiesCellRenderer());
// columnModel.get(TABLE_COL_INDEX_NAME).setCellRenderer(new NameCellRenderer());
// columnModel.get(TABLE_COL_INDEX_DIMENSIONS).setCellRenderer(new DimensionsCellRenderer());
// columnModel.get(TABLE_COL_INDEX_TYPE).setCellRenderer(new TypeCellRenderer());
columnModel.get(TABLE_COL_INDEX_CAPTION).setCellRenderer(new CaptionCellRenderer());
columnModel.get(TABLE_COL_INDEX_EDIT).setCellRenderer(new EditCellRenderer());
columnModel.get(TABLE_COL_INDEX_UP).setCellRenderer(new UpCellRenderer());
columnModel.get(TABLE_COL_INDEX_DOWN).setCellRenderer(new DownCellRenderer());
columnModel.get(TABLE_COL_INDEX_DEL).setCellRenderer(new DeleteCellRenderer());
columnModel.get(TABLE_COL_INDEX_CAPTION).setCellRenderer(
new CaptionCellRenderer());
columnModel.get(TABLE_COL_INDEX_EDIT).setCellRenderer(
new EditCellRenderer());
columnModel.get(TABLE_COL_INDEX_UP)
.setCellRenderer(new UpCellRenderer());
columnModel.get(TABLE_COL_INDEX_DOWN).setCellRenderer(
new DownCellRenderer());
columnModel.get(TABLE_COL_INDEX_DEL).setCellRenderer(
new DeleteCellRenderer());
addTableActionListener(new ImageStepTableActionListener());
}
private class ImageTableModelBuilder extends LockableImpl implements TableModelBuilder {
private class ImageTableModelBuilder extends LockableImpl implements
TableModelBuilder {
private final ImageStep imageStep;
@ -204,8 +212,10 @@ public class ImageStepDisplayTable extends Table {
@Override
public Object getElementAt(final int columnIndex) {
final ItemImageAttachment image = (ItemImageAttachment) DomainObjectFactory.newInstance(
images.getDataObject());
final ItemImageAttachment image
= (ItemImageAttachment) DomainObjectFactory
.newInstance(
images.getDataObject());
switch (columnIndex) {
case TABLE_COL_INDEX_THUMBNAIL:
@ -246,7 +256,8 @@ public class ImageStepDisplayTable extends Table {
}
private class ThumbnailCellRenderer extends LockableImpl implements TableCellRenderer {
private class ThumbnailCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(final Table table,
@ -281,23 +292,56 @@ public class ImageStepDisplayTable extends Table {
protected void generateImagePropertiesXML(final ImageAsset image,
final PageState state,
final Element element) {
final Integer thumbWidth = CMS.getConfig()
.getImageBrowserThumbnailMaxWidth();
final Integer thumbHeight = CMS.getConfig()
.getImageBrowserThumbnailMaxHeight();
final Double aspectRatio = image.getWidth().doubleValue() / image
.getHeight().doubleValue();
final Double imgWidth;
final Double imgHeight;
if (image.getWidth().doubleValue() > image.getHeight().doubleValue()) {
imgWidth = (double) thumbWidth;
imgHeight = imgWidth / aspectRatio;
} else {
imgHeight = (double) thumbHeight;
imgWidth = imgHeight * aspectRatio;
}
element.addAttribute("name", image.getName());
element.addAttribute("src", URL.getDispatcherPath()
+ Service.getImageURL(image));
final BigDecimal width = image.getWidth();
if (width != null) {
element.addAttribute("width", width.toString());
}
final BigDecimal height = image.getHeight();
if (height != null) {
element.addAttribute("height", height.toString());
final String imgUrl = URL.getDispatcherPath()
+ Service.getImageURL(image);
final String src;
if (imgUrl.contains("?")) {
src = String.format("%s&maxWidth=%d&maxHeight=%d",
imgUrl,
imgWidth.intValue(),
imgHeight.intValue());
} else {
src = String.format("%s?maxWidth=%d&maxHeight=%d",
imgUrl,
imgWidth.intValue(),
imgHeight.intValue());
}
element.addAttribute("src", src);
//final BigDecimal width = image.getWidth();
//if (width != null) {
element.addAttribute("width", Integer.toString(imgWidth.intValue()));
//}
//final BigDecimal height = image.getHeight();
//if (height != null) {
element.addAttribute("height", Integer.toString(imgHeight.intValue()));
//}
element.addAttribute("plain", "true");
}
}
private class PropertiesCellRenderer extends LockableImpl implements TableCellRenderer {
private class PropertiesCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(final Table table,
@ -313,8 +357,9 @@ public class ImageStepDisplayTable extends Table {
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
panel.add(new Label(image.getName()));
panel.add(new Label(String.format("%sx%s px", image.getWidth().toString(),
image.getHeight().toString())));
panel.add(new Label(String.format("%sx%s px", image.getWidth()
.toString(),
image.getHeight().toString())));
panel.add(new Label(image.getMimeType().getLabel()));
return panel;
@ -322,7 +367,8 @@ public class ImageStepDisplayTable extends Table {
}
private class NameCellRenderer extends LockableImpl implements TableCellRenderer {
private class NameCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(final Table table,
@ -337,7 +383,8 @@ public class ImageStepDisplayTable extends Table {
}
private class DimensionsCellRenderer extends LockableImpl implements TableCellRenderer {
private class DimensionsCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(final Table table,
@ -352,7 +399,8 @@ public class ImageStepDisplayTable extends Table {
}
private class TypeCellRenderer extends LockableImpl implements TableCellRenderer {
private class TypeCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(final Table table,
@ -367,7 +415,8 @@ public class ImageStepDisplayTable extends Table {
}
private class CaptionCellRenderer extends LockableImpl implements TableCellRenderer {
private class CaptionCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(final Table table,
@ -382,7 +431,8 @@ public class ImageStepDisplayTable extends Table {
}
private class EditCellRenderer extends LockableImpl implements TableCellRenderer {
private class EditCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(final Table table,
@ -392,7 +442,8 @@ public class ImageStepDisplayTable extends Table {
final Object key,
final int row,
final int column) {
final com.arsdigita.cms.SecurityManager securityManager = CMS.getSecurityManager(state);
final com.arsdigita.cms.SecurityManager securityManager = CMS
.getSecurityManager(state);
final ContentItem item = imageStep.getItem(state);
final boolean canEdit = securityManager.canAccess(
@ -401,16 +452,19 @@ public class ImageStepDisplayTable extends Table {
item);
if (canEdit) {
final ControlLink link = new ControlLink(new Label((GlobalizedMessage) value));
final ControlLink link = new ControlLink(new Label(
(GlobalizedMessage) value));
link.setStyleAttr(CONTROL_LINK_FONT_SIZE);
return link;
} else {
return new Label("");
}
}
}
private class UpCellRenderer extends LockableImpl implements TableCellRenderer {
private class UpCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(final Table table,
@ -424,7 +478,8 @@ public class ImageStepDisplayTable extends Table {
//First row, don't show up link
return new Label("");
} else {
final ControlLink link = new ControlLink(new Label((GlobalizedMessage) value));
final ControlLink link = new ControlLink(new Label(
(GlobalizedMessage) value));
link.setStyleAttr(CONTROL_LINK_FONT_SIZE);
return link;
}
@ -432,7 +487,8 @@ public class ImageStepDisplayTable extends Table {
}
private class DownCellRenderer extends LockableImpl implements TableCellRenderer {
private class DownCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(final Table table,
@ -443,13 +499,15 @@ public class ImageStepDisplayTable extends Table {
final int row,
final int column) {
final ContentItem item = imageStep.getItem(state);
final DataCollection images = ItemImageAttachment.getImageAttachments(item);
final DataCollection images = ItemImageAttachment
.getImageAttachments(item);
if ((images.size() - 1) == row) {
//Last row in table, don't show down link
return new Label("");
} else {
final ControlLink link = new ControlLink(new Label((GlobalizedMessage) value));
final ControlLink link = new ControlLink(new Label(
(GlobalizedMessage) value));
link.setStyleAttr(CONTROL_LINK_FONT_SIZE);
return link;
}
@ -457,7 +515,8 @@ public class ImageStepDisplayTable extends Table {
}
private class DeleteCellRenderer extends LockableImpl implements TableCellRenderer {
private class DeleteCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(final Table table,
@ -467,7 +526,8 @@ public class ImageStepDisplayTable extends Table {
final Object key,
final int row,
final int column) {
final com.arsdigita.cms.SecurityManager securityManager = CMS.getSecurityManager(state);
final com.arsdigita.cms.SecurityManager securityManager = CMS
.getSecurityManager(state);
final ContentItem item = imageStep.getItem(state);
final boolean canEdit = securityManager.canAccess(
@ -476,7 +536,8 @@ public class ImageStepDisplayTable extends Table {
item);
if (canEdit) {
final ControlLink link = new ControlLink(new Label((GlobalizedMessage) value));
final ControlLink link = new ControlLink(new Label(
(GlobalizedMessage) value));
link.setConfirmation(ImageStepGlobalizationUtil.globalize(
"cms.contentassets.ui.image_step.remove_attached_image.confirm"));
link.setStyleAttr(CONTROL_LINK_FONT_SIZE);
@ -497,18 +558,21 @@ public class ImageStepDisplayTable extends Table {
@Override
public void cellSelected(final TableActionEvent event) {
final PageState state = event.getPageState();
final TableColumn column = getColumnModel().get(event.getColumn().intValue());
final TableColumn column = getColumnModel().get(event.getColumn()
.intValue());
if (TABLE_COL_EDIT.equals(column.getHeaderKey().toString())) {
imageStep.setAttachment(state, ItemImageAttachment.retrieve(OID.valueOf(event
.getRowKey().toString())));
imageStep.setAttachment(state, ItemImageAttachment.retrieve(OID
.valueOf(event
.getRowKey().toString())));
imageStep.showComponent(state, "edit");
} else if (TABLE_COL_UP.equals(column.getHeaderKey().toString())) {
move(OID.valueOf(event.getRowKey().toString()), UP, state);
} else if (TABLE_COL_DOWN.equals(column.getHeaderKey().toString())) {
move(OID.valueOf(event.getRowKey().toString()), DOWN, state);
} else if (TABLE_COL_DEL.equals(column.getHeaderKey().toString())) {
DomainObjectFactory.newInstance(OID.valueOf(event.getRowKey().toString())).delete();
DomainObjectFactory.newInstance(OID.valueOf(event.getRowKey()
.toString())).delete();
regenSortKeys(state);
}
@ -523,7 +587,8 @@ public class ImageStepDisplayTable extends Table {
private void regenSortKeys(final PageState state) {
final ContentItem item = imageStep.getItem(state);
final DataCollection images = ItemImageAttachment.getImageAttachments(item);
final DataCollection images = ItemImageAttachment.getImageAttachments(
item);
int pos = 0;
while (images.next()) {
@ -532,7 +597,8 @@ public class ImageStepDisplayTable extends Table {
.newInstance(images.getDataObject());
if (domainObject instanceof ItemImageAttachment) {
final ItemImageAttachment image = (ItemImageAttachment) domainObject;
final ItemImageAttachment image
= (ItemImageAttachment) domainObject;
if (image.getSortKey() != pos) {
image.setSortKey(pos);
image.save();
@ -542,12 +608,15 @@ public class ImageStepDisplayTable extends Table {
}
}
private void move(final OID imageOid, final int direction, final PageState state) {
private void move(final OID imageOid, final int direction,
final PageState state) {
final ContentItem item = imageStep.getItem(state);
final DataCollection images = ItemImageAttachment.getImageAttachments(item);
final DataCollection images = ItemImageAttachment.getImageAttachments(
item);
if (imageOid == null) {
throw new IllegalArgumentException("OID of ImageAttachment must not be null.");
throw new IllegalArgumentException(
"OID of ImageAttachment must not be null.");
}
// No move, nothing to do
@ -564,7 +633,8 @@ public class ImageStepDisplayTable extends Table {
// Throw an {@link IllegalArgumentxception} if the imageOid was not found
if (!images.getDataObject().getOID().equals(imageOid)) {
throw new IllegalArgumentException("OID " + imageOid + " is not in collection");
throw new IllegalArgumentException("OID " + imageOid
+ " is not in collection");
}
// Get the image to move and test if it is really an ItemImageAttachment
@ -577,8 +647,8 @@ public class ImageStepDisplayTable extends Table {
// value but respect bounds of the current list
final int newSortKey = Math.max(1,
Math.min((int) images.size(),
((ItemImageAttachment) sortDomainObject).
getSortKey() + move));
((ItemImageAttachment) sortDomainObject)
.getSortKey() + move));
((ItemImageAttachment) sortDomainObject).setSortKey(newSortKey);
sortDomainObject.save();
@ -586,11 +656,13 @@ public class ImageStepDisplayTable extends Table {
// new postition one step in the nessecary direction
if (move < 0) {
while (images.previous() && move < 0) {
final DomainObject domainObject = DomainObjectFactory.newInstance(images.
getDataObject());
final DomainObject domainObject = DomainObjectFactory
.newInstance(images.
getDataObject());
if (domainObject instanceof ItemImageAttachment) {
((ItemImageAttachment) domainObject).setSortKey(
((ItemImageAttachment) domainObject).getSortKey() + 1);
((ItemImageAttachment) domainObject).getSortKey()
+ 1);
domainObject.save();
move++;
}
@ -598,11 +670,13 @@ public class ImageStepDisplayTable extends Table {
}
if (move > 0) {
while (images.next() && move > 0) {
final DomainObject domainObject = DomainObjectFactory.newInstance(images.
getDataObject());
final DomainObject domainObject = DomainObjectFactory
.newInstance(images.
getDataObject());
if (domainObject instanceof ItemImageAttachment) {
((ItemImageAttachment) domainObject).setSortKey(
((ItemImageAttachment) domainObject).getSortKey() - 1);
((ItemImageAttachment) domainObject).getSortKey()
- 1);
domainObject.save();
move--;
}

View File

@ -73,17 +73,29 @@ public class ImageBrowser extends Table {
private ImageBrowserModelBuilder m_builder;
// match columns by (symbolic) index, makes for easier reordering
/** Index into TableColumn for Thumb column */
/**
* Index into TableColumn for Thumb column
*/
private static final int THUMB = 0;
/** Index into TableColumn for Name column */
/**
* Index into TableColumn for Name column
*/
private static final int NAME = 1;
/** Index into TableColumn for Size column */
/**
* Index into TableColumn for Size column
*/
private static final int SIZE = 2;
/** Index into TableColumn for Type column */
/**
* Index into TableColumn for Type column
*/
private static final int TYPE = 3;
/** Index into TableColumn for Select link column */
/**
* Index into TableColumn for Select link column
*/
private static final int SELECT = 4;
/** Index into TableColumn for Delete link column */
/**
* Index into TableColumn for Delete link column
*/
private static final int DELETE = 5;
private int m_numColumns = -1;
@ -91,7 +103,6 @@ public class ImageBrowser extends Table {
private Dimension m_thumbSize;
/**
* Construct a new ImageBrowser with default mode.
*
@ -125,35 +136,35 @@ public class ImageBrowser extends Table {
/* Add columns and column header to the yet empty table */
TableColumnModel model = getColumnModel();
model.add(new TableColumn(
THUMB,
new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_thumb")
) ));
THUMB,
new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_thumb")
)));
model.add(new TableColumn(
NAME,
new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_name")
) ));
NAME,
new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_name")
)));
model.add(new TableColumn(
SIZE,
new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_size")
) ));
SIZE,
new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_size")
)));
model.add(new TableColumn(
TYPE,
new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_type")
) ));
TYPE,
new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_type")
)));
model.add(new TableColumn(
SELECT,
new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_action_select")
) ));
model.add(new TableColumn( // Temporary not used due to consistency
DELETE, null // probs with images probably in use
// new Label(GlobalizationUtil.globalize(
// "cms.contentasset.image.ui.table.header_action_delete"))
));
SELECT,
new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_action_select")
)));
model.add(new TableColumn( // Temporary not used due to consistency
DELETE, null // probs with images probably in use
// new Label(GlobalizationUtil.globalize(
// "cms.contentasset.image.ui.table.header_action_delete"))
));
model.get(THUMB).setCellRenderer(new ThumbnailCellRenderer());
model.get(NAME).setCellRenderer(new DefaultTableCellRenderer(false));
@ -169,7 +180,6 @@ public class ImageBrowser extends Table {
setClassAttr("imageBrowser");
}
/**
*
* @return
@ -215,7 +225,7 @@ public class ImageBrowser extends Table {
* is clicked. Child classes should override the linkClicked method.
*/
public static abstract class LinkActionListener
extends TableActionAdapter {
extends TableActionAdapter {
/**
*
@ -236,6 +246,7 @@ public class ImageBrowser extends Table {
public abstract void linkClicked(PageState state, BigDecimal imageId);
public abstract void deleteClicked(PageState state, BigDecimal imageId);
}
/**
@ -245,29 +256,45 @@ public class ImageBrowser extends Table {
@Override
public Component getComponent(Table table, PageState state, Object value,
boolean isSelected, Object key,
int row, int column) {
boolean isSelected, Object key,
int row, int column) {
ImageAsset a = (ImageAsset) value;
Double aspectRatio = a.getWidth().doubleValue() / a.getHeight()
.doubleValue();
Double width;
Double height;
if (a.getWidth().doubleValue() > a.getHeight().doubleValue()) {
width = m_thumbSize.getWidth();
height = m_thumbSize.getWidth() / aspectRatio;
} else {
height = m_thumbSize.getHeight();
width = height * aspectRatio;
}
String url = Service.getImageURL(a);
// Sets url paramter to resize the images server-side
String resizeParam = "&maxWidth="
+ new Double(m_thumbSize.getWidth()).intValue()
+ "&maxHeight="
+ new Double(m_thumbSize.getHeight()).intValue();
String resizeParam = "&maxWidth=" + new Double(m_thumbSize
.getWidth()).intValue()
+ "&maxHeight="
+ new Double(m_thumbSize
.getHeight())
.intValue();
Image img = new Image(URL.getDispatcherPath() + url
+ resizeParam, a.getName());
Image img = new Image(URL.getDispatcherPath() + url + resizeParam,
a.getName());
img.setBorder("0");
final Double width = m_thumbSize.getWidth();
final Double height = m_thumbSize.getHeight();
// final Double width = m_thumbSize.getWidth();
// final Double height = m_thumbSize.getHeight();
img.setWidth(Integer.toString(width.intValue()));
img.setHeight(Integer.toString(height.intValue()));
return new Link(img, url);
}
}
/**
@ -288,6 +315,7 @@ public class ImageBrowser extends Table {
* @param key
* @param row
* @param column
*
* @return
*/
@Override
@ -296,7 +324,7 @@ public class ImageBrowser extends Table {
int row, int column) {
if (m_mode == ImageComponent.SELECT_IMAGE
|| m_mode == ImageComponent.ATTACH_IMAGE) {
|| m_mode == ImageComponent.ATTACH_IMAGE) {
return super.getComponent(table, state, value,
isSelected, key, row, column);
}
@ -304,11 +332,12 @@ public class ImageBrowser extends Table {
// return new Label(""); // this variant is deprecated!
return new Label();
}
}
/**
* Inner private class renders the delete link if the user has permission
* to deletethe asset and it's not used in an article.
* Inner private class renders the delete link if the user has permission to
* deletethe asset and it's not used in an article.
*/
private class DeleteCellRenderer extends DefaultTableCellRenderer {
@ -325,12 +354,13 @@ public class ImageBrowser extends Table {
* @param key
* @param row
* @param column
*
* @return
*/
@Override
public Component getComponent(Table table, PageState state, Object value,
boolean isSelected, Object key,
int row, int column) {
boolean isSelected, Object key,
int row, int column) {
// Only show delete link in admin mode
if (m_mode == ImageComponent.ADMIN_IMAGES) {
@ -342,9 +372,9 @@ public class ImageBrowser extends Table {
SecurityManager.DELETE_IMAGES)) {
try {
ImageAsset asset = (ImageAsset) DomainObjectFactory
.newInstance(new
OID(ImageAsset.BASE_DATA_OBJECT_TYPE,
(BigDecimal) key));
.newInstance(new OID(
ImageAsset.BASE_DATA_OBJECT_TYPE,
(BigDecimal) key));
//XXX Find a new way to figure out, if this image is used by any CI so we can
// decide if it can be deleted
// if (!GenericArticleImageAssociation.imageHasAssociation(asset)) {
@ -368,9 +398,10 @@ public class ImageBrowser extends Table {
}
}
// return (Component) null; // used to work for other tables but
// doesn't here for some reason.
// doesn't here for some reason.
return new Label();
}
}
/**
@ -378,7 +409,7 @@ public class ImageBrowser extends Table {
* TableModelBuilder
*/
private static class BuilderAdapter extends LockableImpl
implements TableModelBuilder {
implements TableModelBuilder {
private ImageBrowserModelBuilder m_builder;
@ -389,7 +420,7 @@ public class ImageBrowser extends Table {
@Override
public TableModel makeModel(Table t, PageState s) {
return new ImageModelAdapter(
m_builder.makeModel((ImageBrowser) t, s));
m_builder.makeModel((ImageBrowser) t, s));
}
@Override
@ -397,6 +428,7 @@ public class ImageBrowser extends Table {
m_builder.lock();
super.lock();
}
}
/**
@ -465,15 +497,15 @@ public class ImageBrowser extends Table {
// Due to current design has to be a string! Localisation
// works here nevertheless.
return (String) GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.link_select")
.localize();
"cms.contentasset.image.ui.table.link_select")
.localize();
case ImageBrowser.DELETE:
// Due to current design has to be a string! Localisation
// works here nevertheless.
return (String) GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.link_delete")
.localize();
"cms.contentasset.image.ui.table.link_delete")
.localize();
default:
return null;
@ -488,5 +520,7 @@ public class ImageBrowser extends Table {
public ImageBrowserModel getModel() {
return m_model;
}
}
}

View File

@ -29,15 +29,15 @@ import java.math.BigDecimal;
/**
* An image library component.
*
* This component can be used in different places to add an image library
* in a convinient way. This class uses a listener class which should be
* extended from {@link ImageComponentAbstractListener}.
* This component can be used in different places to add an image library in a
* convinient way. This class uses a listener class which should be extended
* from {@link ImageComponentAbstractListener}.
*
* @author unknown
* @author Sören Bernstein <quasi@quasiweb.de>
*/
public class ImageLibraryComponent extends SimpleContainer
implements ImageComponent, Resettable {
implements ImageComponent, Resettable {
private final ImageChooser m_chooser;
private final ItemSelectionModel m_imageModel;
@ -65,28 +65,34 @@ public class ImageLibraryComponent extends SimpleContainer
m_chooser = new ImageChooser(ContentItem.DRAFT, m_mode);
m_chooser.addImageActionListener(new ImageBrowser.LinkActionListener() {
@Override
public void deleteClicked(final PageState state, final BigDecimal imageID) {
@Override
public void deleteClicked(final PageState state,
final BigDecimal imageID) {
ImagesPane.S_LOG.debug("Clicked delete");
final ReusableImageAsset image = new ReusableImageAsset(imageID);
image.delete();
}
@Override
public void linkClicked(final PageState state, final BigDecimal imageID) {
@Override
public void linkClicked(final PageState state,
final BigDecimal imageID) {
ImagesPane.S_LOG.debug("Clicked select");
try {
final ReusableImageAsset image = new ReusableImageAsset(imageID);
if(m_mode == ImageComponent.SELECT_IMAGE) {
parent.getResultComponent().setResult(image, ImageComponent.LIBRARY);
final ReusableImageAsset image = new ReusableImageAsset(
imageID);
if (m_mode == ImageComponent.SELECT_IMAGE) {
parent.getResultComponent().setResult(image,
ImageComponent.LIBRARY);
}
m_imageModel.setSelectedObject(state, image);
} catch (DataObjectNotFoundException ex) {
ImagesPane.S_LOG.error("Selected non-existant image: " + imageID, ex);
ImagesPane.S_LOG.error("Selected non-existant image: "
+ imageID, ex);
}
}
});
add(m_chooser);
// Form for additional fields and submit
m_form = new Form("imageLibraryComponent", new ColumnPanel(2));
@ -102,7 +108,7 @@ public class ImageLibraryComponent extends SimpleContainer
// in image-step
if (m_mode == ImageComponent.ATTACH_IMAGE) {
m_form.add(new Label(GlobalizationUtil
.globalize("cms.contentasset.image.ui.caption")));
.globalize("cms.contentasset.image.ui.caption")));
m_caption.addValidationListener(new NotNullValidationListener());
m_caption.setSize(CMS.getConfig().getImageBrowserCaptionSize());
m_form.add(m_caption);
@ -120,26 +126,28 @@ public class ImageLibraryComponent extends SimpleContainer
* m_form.add(m_title); }
*/
m_form.add(new Label(GlobalizationUtil
.globalize("cms.contentasset.image.ui.use_context")));
.globalize("cms.contentasset.image.ui.use_context")));
m_useContext.setSize(40);
m_form.add(m_useContext);
}
// if (m_mode == ImageComponent.SELECT_IMAGE) {
// m_form.setOnSubmit("selectImage();");
// }
// save and cancel buttons
m_saveCancel = new SaveCancelSection();
m_saveCancel.getSaveButton().setOnClick("selectImage(this)");
m_saveCancel.getCancelButton().setOnClick("selectImage(this)");
if (m_mode == ImageComponent.SELECT_IMAGE
|| m_mode == ImageComponent.ATTACH_IMAGE) {
|| m_mode == ImageComponent.ATTACH_IMAGE) {
m_form.add(m_saveCancel);
}
add(m_chooser);
}
@Override
@Override
public ReusableImageAsset getImage(final FormSectionEvent event) {
final PageState state = event.getPageState();
return (ReusableImageAsset) m_imageModel.getSelectedItem(state);
@ -151,36 +159,36 @@ public class ImageLibraryComponent extends SimpleContainer
page.addComponentStateParam(this, m_imageID);
}
@Override
@Override
public String getCaption(final FormSectionEvent event) {
final PageState state = event.getPageState();
return (String) m_caption.getValue(state);
}
@Override
@Override
public String getDescription(final FormSectionEvent event) {
final PageState state = event.getPageState();
return (String) m_description.getValue(state);
}
@Override
@Override
public String getTitle(final FormSectionEvent event) {
final PageState state = event.getPageState();
return (String) m_title.getValue(state);
}
@Override
@Override
public String getUseContext(final FormSectionEvent event) {
final PageState state = event.getPageState();
return (String) m_useContext.getValue(state);
}
@Override
@Override
public Form getForm() {
return m_form;
}
@Override
@Override
public SaveCancelSection getSaveCancelSection() {
return m_saveCancel;
}
@ -193,11 +201,11 @@ public class ImageLibraryComponent extends SimpleContainer
public void addUploadLink(final ActionListener actionListener) {
// Add action link to image upload component
if (m_mode != ImageComponent.DISPLAY_ONLY) {
final ActionLink upload = new ActionLink(new
Label(GlobalizationUtil.globalize(
"cms.ui.authoring.upload_a_new_image") ));
final ActionLink upload = new ActionLink(new Label(GlobalizationUtil
.globalize(
"cms.ui.authoring.upload_a_new_image")));
upload.addActionListener(actionListener);
upload.setClassAttr("cmsContentViewMenu imageUploadLink");
upload.setClassAttr("cmsContentViewMenu imageUploadLink");
add(upload, ColumnPanel.FULL_WIDTH);
}
}
@ -205,11 +213,12 @@ public class ImageLibraryComponent extends SimpleContainer
/**
* Reset this component.
*/
@Override
@Override
public void reset(final PageState state) {
// clear selection
m_imageModel.clearSelection(state);
m_chooser.clearSelection(state);
m_chooser.clearKeyword(state);
}
}

View File

@ -23,6 +23,7 @@
exclude-result-prefixes="xsl"
version="2.0">
<xsl:import href="cms/image.xsl"/>
<xsl:import href="cms/item-summary.xsl"/>
<xsl:import href="cms/notes.xsl"/>
<xsl:import href="cms/tasks-panel.xsl"/>