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,48 +292,83 @@ 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,
final PageState state,
final Object value,
public Component getComponent(final Table table,
final PageState state,
final Object value,
final boolean isSelected,
final Object key,
final int row,
final Object key,
final int row,
final int column) {
final ItemImageAttachment attachment = (ItemImageAttachment) value;
final ReusableImageAsset image = attachment.getImage();
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;
}
}
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,12 +103,11 @@ public class ImageBrowser extends Table {
private Dimension m_thumbSize;
/**
* Construct a new ImageBrowser with default mode.
*
* @param builder the {@link ImageBrowserModelBuilder} that will supply this
* component with its {@link ImageBrowserModel} during each
* component with its {@link ImageBrowserModel} during each
* request
*/
public ImageBrowser(ImageBrowserModelBuilder b) {
@ -108,7 +119,7 @@ public class ImageBrowser extends Table {
* Construct a new ImageBrowser table with requested mode.
*
* @param builder the {@link ImageBrowserModelBuilder} that will supply this
* component with its {@link ImageBrowserModel} during each
* component with its {@link ImageBrowserModel} during each
* request
* @param mode the component mode (see {@link ImageComponent})
*/
@ -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,10 +180,9 @@ public class ImageBrowser extends Table {
setClassAttr("imageBrowser");
}
/**
*
* @return
*
* @return
*/
public int getNumColumns() {
return m_numColumns;
@ -215,20 +225,20 @@ public class ImageBrowser extends Table {
* is clicked. Child classes should override the linkClicked method.
*/
public static abstract class LinkActionListener
extends TableActionAdapter {
extends TableActionAdapter {
/**
*
* @param e
*
* @param e
*/
@Override
public void cellSelected(TableActionEvent e) {
int c = e.getColumn().intValue();
if (c == SELECT) {
linkClicked(e.getPageState(),
linkClicked(e.getPageState(),
new BigDecimal((String) e.getRowKey()));
} else if (c == DELETE) {
deleteClicked(e.getPageState(),
deleteClicked(e.getPageState(),
new BigDecimal((String) e.getRowKey()));
}
}
@ -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);
}
}
/**
@ -280,7 +307,7 @@ public class ImageBrowser extends Table {
}
/**
*
*
* @param table
* @param state
* @param value
@ -288,27 +315,29 @@ public class ImageBrowser extends Table {
* @param key
* @param row
* @param column
* @return
*
* @return
*/
@Override
public Component getComponent(Table table, PageState state, Object value,
boolean isSelected, Object key,
int row, int column) {
if (m_mode == ImageComponent.SELECT_IMAGE
|| m_mode == ImageComponent.ATTACH_IMAGE) {
return super.getComponent(table, state, value,
if (m_mode == ImageComponent.SELECT_IMAGE
|| m_mode == ImageComponent.ATTACH_IMAGE) {
return super.getComponent(table, state, value,
isSelected, key, row, column);
}
// 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 {
@ -317,7 +346,7 @@ public class ImageBrowser extends Table {
}
/**
*
*
* @param table
* @param state
* @param value
@ -325,12 +354,13 @@ public class ImageBrowser extends Table {
* @param key
* @param row
* @param column
* @return
*
* @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) {
@ -338,13 +368,13 @@ public class ImageBrowser extends Table {
boolean canDelete = false;
// SecurityManager sm = Utilities.getSecurityManager(state);
SecurityManager sm = CMS.getSecurityManager(state);
if (sm.canAccess(state.getRequest(),
if (sm.canAccess(state.getRequest(),
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)) {
@ -358,27 +388,28 @@ public class ImageBrowser extends Table {
// can delete image because it's not in use
if (canDelete) {
return super.getComponent(table,
state,
value,
isSelected,
key,
row,
return super.getComponent(table,
state,
value,
isSelected,
key,
row,
column);
}
}
// 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();
}
}
/**
* Inner private class converts an ImageBrowserModelBuilder to a
* Inner private class converts an ImageBrowserModelBuilder to a
* 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 {
public class ImageLibraryComponent extends SimpleContainer
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) {
if (m_mode == ImageComponent.SELECT_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,53 +159,53 @@ 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;
}
/**
* Add a link to an {@link ImageUploadComponent}
*
* @param actionListener
*
* @param actionListener
*/
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"/>