Several improvments for the ImageBrowser and image lists
git-svn-id: https://svn.libreccm.org/ccm/trunk@3436 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
d33f690dda
commit
7b2693721b
|
|
@ -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--;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"/>
|
||||
|
|
|
|||
Loading…
Reference in New Issue