ImageBrowser: activated deleting of images or providing a link to the item that uses that image

git-svn-id: https://svn.libreccm.org/ccm/trunk@3973 8810af33-2d31-482b-a856-94f89814c4df
master
konermann 2016-04-04 10:15:13 +00:00
parent 4858e92f0a
commit df8c0edd1f
6 changed files with 350 additions and 92 deletions

View File

@ -28,3 +28,16 @@ association {
composite ContentItem[0..1] item composite ContentItem[0..1] item
= join cms_item_image_attachment.item_id to cms_items.item_id; = join cms_item_image_attachment.item_id to cms_items.item_id;
} }
//get All items that are using
query getAllImageUser {
Integer itemID;
do{
select item_id from cms_item_image_attachment
where image_id = :image_id
}
map{
itemID = cms_item_image_attachment.item_id;
}
}

View File

@ -0,0 +1,53 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.arsdigita.cms;
import com.arsdigita.persistence.DataQuery;
import com.arsdigita.persistence.Filter;
import com.arsdigita.persistence.SessionManager;
import static com.redhat.persistence.Expression.value;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Koalamann
*/
public class ImageInUseCheck implements ImageInUseChecker {
@Override
public boolean isImageInUse(ReusableImageAsset image) {
DataQuery q = SessionManager.getSession().retrieveQuery(
"com.arsdigita.cms.contentassets.getAllImageUser");
q.setParameter("image_id", image.getID());
if (q.isEmpty()) {
return false;
}
return true;
}
/*
* get all users(content-items) that are using the image.
*
*/
@Override
public List getImageUsers(ReusableImageAsset image) {
ArrayList list = new ArrayList();
DataQuery query = SessionManager.getSession().retrieveQuery(
"com.arsdigita.cms.contentassets.getAllImageUser");
query.setParameter("image_id", image.getID());
while (query.next()) {
Object itemID = query.get("itemID");
list.add(itemID);
}
return list;
}
}

View File

@ -18,6 +18,8 @@
package com.arsdigita.cms.contentassets; package com.arsdigita.cms.contentassets;
import com.arsdigita.cms.ContentPage; import com.arsdigita.cms.ContentPage;
import com.arsdigita.cms.ImageInUseCheck;
import com.arsdigita.cms.ReusableImageAsset;
import com.arsdigita.cms.contenttypes.ContentAssetInitializer; import com.arsdigita.cms.contenttypes.ContentAssetInitializer;
import com.arsdigita.cms.contentassets.ui.ImageStep; import com.arsdigita.cms.contentassets.ui.ImageStep;
import com.arsdigita.domain.DomainObject; import com.arsdigita.domain.DomainObject;
@ -65,6 +67,9 @@ public class ItemImageAttachmentInitializer extends ContentAssetInitializer {
}); });
//register checker in ReusableImage
ReusableImageAsset.registerImageInUseChecker(new ImageInUseCheck());
} }
/** /**

View File

@ -0,0 +1,44 @@
/*
* Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.arsdigita.cms;
import java.util.List;
/**
* This interface should be used to check if an image is still in use.
* Useful to determine if you can delete an image.
*
* @author Koalamann
*/
public interface ImageInUseChecker {
/*
* checks if the Image is currently in use
*
* @return false if the image is not used by anyone
*/
boolean isImageInUse(ReusableImageAsset image);
/*
* get all users(content-items) that are using the image.
*
*/
List<ContentItem> getImageUsers(ReusableImageAsset image);
}

View File

@ -27,13 +27,14 @@ import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.SessionManager; import com.arsdigita.persistence.SessionManager;
import com.arsdigita.versioning.VersionedACSObject; import com.arsdigita.versioning.VersionedACSObject;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
* <p>An {@link com.arsdigita.cms.Asset asset} representing a reusable * <p>
* image.</p> * An {@link com.arsdigita.cms.Asset asset} representing a reusable image.</p>
* *
* @see com.arsdigita.cms.ImageAsset * @see com.arsdigita.cms.ImageAsset
* *
@ -44,10 +45,12 @@ import org.apache.log4j.Logger;
*/ */
public class ReusableImageAsset extends ImageAsset { public class ReusableImageAsset extends ImageAsset {
private static final Logger s_log = private static final Logger s_log
Logger.getLogger(ReusableImageAsset.class); = Logger.getLogger(ReusableImageAsset.class);
public static final String BASE_DATA_OBJECT_TYPE = public static final String BASE_DATA_OBJECT_TYPE
"com.arsdigita.cms.ReusableImageAsset"; = "com.arsdigita.cms.ReusableImageAsset";
private static ArrayList<ImageInUseChecker> imageInUseCheckerList = new ArrayList<ImageInUseChecker>();
/** /**
* Default constructor. This creates a new image asset. * Default constructor. This creates a new image asset.
@ -57,9 +60,9 @@ public class ReusableImageAsset extends ImageAsset {
} }
/** /**
* Constructor. The contained <code>DataObject</code> is retrieved * Constructor. The contained <code>DataObject</code> is retrieved from the
* from the persistent storage mechanism with an <code>OID</code> * persistent storage mechanism with an <code>OID</code> specified by
* specified by <i>oid</i>. * <i>oid</i>.
* *
* @param oid The <code>OID</code> for the retrieved * @param oid The <code>OID</code> for the retrieved
* <code>DataObject</code>. * <code>DataObject</code>.
@ -69,14 +72,13 @@ public class ReusableImageAsset extends ImageAsset {
} }
/** /**
* Constructor. The contained <code>DataObject</code> is retrieved * Constructor. The contained <code>DataObject</code> is retrieved from the
* from the persistent storage mechanism with an <code>OID</code> * persistent storage mechanism with an <code>OID</code> specified by
* specified by <i>id</i> and * <i>id</i> and <code>ReusableImageAsset.BASE_DATA_OBJECT_TYPE</code>.
* <code>ReusableImageAsset.BASE_DATA_OBJECT_TYPE</code>.
* *
* @param id The <code>id</code> for the retrieved * @param id The <code>id</code> for the retrieved <code>DataObject</code>.
* <code>DataObject</code>. *
**/ */
public ReusableImageAsset(BigDecimal id) throws DataObjectNotFoundException { public ReusableImageAsset(BigDecimal id) throws DataObjectNotFoundException {
this(new OID(BASE_DATA_OBJECT_TYPE, id)); this(new OID(BASE_DATA_OBJECT_TYPE, id));
} }
@ -91,9 +93,9 @@ public class ReusableImageAsset extends ImageAsset {
/** /**
* @return the base PDL object type for this item. Child classes should * @return the base PDL object type for this item. Child classes should
* override this method to return the correct value * override this method to return the correct value
*/ */
@Override @Override
public String getBaseDataObjectType() { public String getBaseDataObjectType() {
return BASE_DATA_OBJECT_TYPE; return BASE_DATA_OBJECT_TYPE;
} }
@ -109,11 +111,11 @@ public class ReusableImageAsset extends ImageAsset {
//da.addEqualsFilter(VersionedACSObject.IS_DELETED, new Integer(0)); //da.addEqualsFilter(VersionedACSObject.IS_DELETED, new Integer(0));
//da.addEqualsFilter(ACSObject.OBJECT_TYPE, BASE_DATA_OBJECT_TYPE); //da.addEqualsFilter(ACSObject.OBJECT_TYPE, BASE_DATA_OBJECT_TYPE);
da.addFilter(String.format("%s = '%s'", da.addFilter(String.format("%s = '%s'",
VersionedACSObject.IS_DELETED, VersionedACSObject.IS_DELETED,
"0")); "0"));
da.addFilter(String.format("%s = '%s'", da.addFilter(String.format("%s = '%s'",
ACSObject.OBJECT_TYPE, ACSObject.OBJECT_TYPE,
BASE_DATA_OBJECT_TYPE)); BASE_DATA_OBJECT_TYPE));
return new ImageAssetCollection(da); return new ImageAssetCollection(da);
} }
@ -122,7 +124,7 @@ public class ReusableImageAsset extends ImageAsset {
* *
* @param keyword a String keyword * @param keyword a String keyword
* @param context the context for the retrieved items. Should be * @param context the context for the retrieved items. Should be
* {@link ContentItem#DRAFT} or {@link ContentItem#LIVE} * {@link ContentItem#DRAFT} or {@link ContentItem#LIVE}
* @return a collection of images whose name matches the keyword * @return a collection of images whose name matches the keyword
*/ */
public static ImageAssetCollection getReusableImagesByKeyword( public static ImageAssetCollection getReusableImagesByKeyword(
@ -148,4 +150,53 @@ public class ReusableImageAsset extends ImageAsset {
public static ImageAssetCollection getReusableImagesByKeyword(String keyword) { public static ImageAssetCollection getReusableImagesByKeyword(String keyword) {
return getReusableImagesByKeyword(keyword, ContentItem.DRAFT); return getReusableImagesByKeyword(keyword, ContentItem.DRAFT);
} }
public static void registerImageInUseChecker(ImageInUseChecker checker) {
//check if the checker is already registered
if (imageInUseCheckerList.contains(checker)) {
//do nothing
return;
}
//register checker
imageInUseCheckerList.add(checker);
}
//
// public ImageInUseChecker getChecker(ImageInUseChecker checker) {
// for (Iterator it = imageInUseCheckerList.iterator(); it.hasNext();) {
// Object check = it.next();
// if (check.equals(checker)) {
// return (ImageInUseChecker)check;
// }
// }
// return checker;
// }
/*
*checks if the ReusableImageAsset is in use
*/
public boolean isInUse() {
boolean isInUse = false;
//get Checker:
//TODO: getting the right checker
for (ImageInUseChecker checker : imageInUseCheckerList) {
if (checker != null) {
if (checker.isImageInUse(this)) {
isInUse = true;
}
}
}
return isInUse;
}
public List<ContentItem> getImageUsers() {
List<ContentItem> list = new ArrayList();
for (ImageInUseChecker checker : imageInUseCheckerList) {
if (checker != null) {
list = checker.getImageUsers(this);
}
}
return list;
}
} }

View File

@ -18,6 +18,7 @@
*/ */
package com.arsdigita.cms.ui; package com.arsdigita.cms.ui;
import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.Component; import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.Image; import com.arsdigita.bebop.Image;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
@ -33,9 +34,13 @@ import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.bebop.table.TableModel; import com.arsdigita.bebop.table.TableModel;
import com.arsdigita.bebop.table.TableModelBuilder; import com.arsdigita.bebop.table.TableModelBuilder;
import com.arsdigita.cms.CMS; import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.ContentSection;
import com.arsdigita.cms.ImageAsset; import com.arsdigita.cms.ImageAsset;
import com.arsdigita.cms.ReusableImageAsset;
import com.arsdigita.cms.SecurityManager; import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.Service; import com.arsdigita.cms.Service;
import com.arsdigita.cms.dispatcher.ItemResolver;
import com.arsdigita.cms.util.GlobalizationUtil; import com.arsdigita.cms.util.GlobalizationUtil;
import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectFactory;
@ -45,6 +50,7 @@ import com.arsdigita.util.LockableImpl;
import com.arsdigita.web.URL; import com.arsdigita.web.URL;
import com.arsdigita.util.Dimension; import com.arsdigita.util.Dimension;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
@ -107,8 +113,7 @@ public class ImageBrowser extends Table {
* Construct a new ImageBrowser with default mode. * Construct a new ImageBrowser with default mode.
* *
* @param builder the {@link ImageBrowserModelBuilder} that will supply this * @param builder the {@link ImageBrowserModelBuilder} that will supply this
* component with its {@link ImageBrowserModel} during each * component with its {@link ImageBrowserModel} during each request
* request
*/ */
public ImageBrowser(ImageBrowserModelBuilder b) { public ImageBrowser(ImageBrowserModelBuilder b) {
@ -119,9 +124,8 @@ public class ImageBrowser extends Table {
* Construct a new ImageBrowser table with requested mode. * Construct a new ImageBrowser table with requested mode.
* *
* @param builder the {@link ImageBrowserModelBuilder} that will supply this * @param builder the {@link ImageBrowserModelBuilder} that will supply this
* component with its {@link ImageBrowserModel} during each * component with its {@link ImageBrowserModel} during each request
* request * @param mode the component mode (see {@link ImageComponent})
* @param mode the component mode (see {@link ImageComponent})
*/ */
public ImageBrowser(ImageBrowserModelBuilder b, int mode) { public ImageBrowser(ImageBrowserModelBuilder b, int mode) {
@ -131,37 +135,37 @@ public class ImageBrowser extends Table {
m_mode = mode; m_mode = mode;
setThumbnailSize(CMS.getConfig().getImageBrowserThumbnailMaxWidth(), setThumbnailSize(CMS.getConfig().getImageBrowserThumbnailMaxWidth(),
CMS.getConfig().getImageBrowserThumbnailMaxHeight()); CMS.getConfig().getImageBrowserThumbnailMaxHeight());
/* Add columns and column header to the yet empty table */ /* Add columns and column header to the yet empty table */
TableColumnModel model = getColumnModel(); TableColumnModel model = getColumnModel();
model.add(new TableColumn( model.add(new TableColumn(
THUMB, THUMB,
new Label(GlobalizationUtil.globalize( new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_thumb") "cms.contentasset.image.ui.table.header_thumb")
))); )));
model.add(new TableColumn( model.add(new TableColumn(
NAME, NAME,
new Label(GlobalizationUtil.globalize( new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_name") "cms.contentasset.image.ui.table.header_name")
))); )));
model.add(new TableColumn( model.add(new TableColumn(
SIZE, SIZE,
new Label(GlobalizationUtil.globalize( new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_size") "cms.contentasset.image.ui.table.header_size")
))); )));
model.add(new TableColumn( model.add(new TableColumn(
TYPE, TYPE,
new Label(GlobalizationUtil.globalize( new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_type") "cms.contentasset.image.ui.table.header_type")
))); )));
model.add(new TableColumn( model.add(new TableColumn(
SELECT, SELECT,
new Label(GlobalizationUtil.globalize( new Label(GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.header_action_select") "cms.contentasset.image.ui.table.header_action_select")
))); )));
model.add(new TableColumn( // Temporary not used due to consistency model.add(new TableColumn( // Temporary not used due to consistency
DELETE, null // probs with images probably in use DELETE, null // probs with images probably in use
// new Label(GlobalizationUtil.globalize( // new Label(GlobalizationUtil.globalize(
// "cms.contentasset.image.ui.table.header_action_delete")) // "cms.contentasset.image.ui.table.header_action_delete"))
)); ));
@ -225,7 +229,7 @@ public class ImageBrowser extends Table {
* is clicked. Child classes should override the linkClicked method. * is clicked. Child classes should override the linkClicked method.
*/ */
public static abstract class LinkActionListener public static abstract class LinkActionListener
extends TableActionAdapter { extends TableActionAdapter {
/** /**
* *
@ -236,10 +240,10 @@ public class ImageBrowser extends Table {
int c = e.getColumn().intValue(); int c = e.getColumn().intValue();
if (c == SELECT) { if (c == SELECT) {
linkClicked(e.getPageState(), linkClicked(e.getPageState(),
new BigDecimal((String) e.getRowKey())); new BigDecimal((String) e.getRowKey()));
} else if (c == DELETE) { } else if (c == DELETE) {
deleteClicked(e.getPageState(), deleteClicked(e.getPageState(),
new BigDecimal((String) e.getRowKey())); new BigDecimal((String) e.getRowKey()));
} }
} }
@ -256,12 +260,12 @@ public class ImageBrowser extends Table {
@Override @Override
public Component getComponent(Table table, PageState state, Object value, public Component getComponent(Table table, PageState state, Object value,
boolean isSelected, Object key, boolean isSelected, Object key,
int row, int column) { int row, int column) {
ImageAsset a = (ImageAsset) value; ImageAsset a = (ImageAsset) value;
Double aspectRatio = a.getWidth().doubleValue() / a.getHeight() Double aspectRatio = a.getWidth().doubleValue() / a.getHeight()
.doubleValue(); .doubleValue();
Double width; Double width;
Double height; Double height;
@ -277,14 +281,14 @@ public class ImageBrowser extends Table {
String url = Service.getImageURL(a); String url = Service.getImageURL(a);
// Sets url paramter to resize the images server-side // Sets url paramter to resize the images server-side
String resizeParam = "&maxWidth=" + new Double(m_thumbSize String resizeParam = "&maxWidth=" + new Double(m_thumbSize
.getWidth()).intValue() .getWidth()).intValue()
+ "&maxHeight=" + "&maxHeight="
+ new Double(m_thumbSize + new Double(m_thumbSize
.getHeight()) .getHeight())
.intValue(); .intValue();
Image img = new Image(URL.getDispatcherPath() + url + resizeParam, Image img = new Image(URL.getDispatcherPath() + url + resizeParam,
a.getName()); a.getName());
img.setBorder("0"); img.setBorder("0");
// final Double width = m_thumbSize.getWidth(); // final Double width = m_thumbSize.getWidth();
@ -320,13 +324,13 @@ public class ImageBrowser extends Table {
*/ */
@Override @Override
public Component getComponent(Table table, PageState state, Object value, public Component getComponent(Table table, PageState state, Object value,
boolean isSelected, Object key, boolean isSelected, Object key,
int row, int column) { int row, int column) {
if (m_mode == ImageComponent.SELECT_IMAGE if (m_mode == ImageComponent.SELECT_IMAGE
|| m_mode == ImageComponent.ATTACH_IMAGE) { || m_mode == ImageComponent.ATTACH_IMAGE) {
return super.getComponent(table, state, value, return super.getComponent(table, state, value,
isSelected, key, row, column); isSelected, key, row, column);
} }
// return new Label(""); // this variant is deprecated! // return new Label(""); // this variant is deprecated!
@ -337,7 +341,7 @@ public class ImageBrowser extends Table {
/** /**
* Inner private class renders the delete link if the user has permission to * Inner private class renders the delete link if the user has permission to
* deletethe asset and it's not used in an article. * delete the asset and it's not used in an article.
*/ */
private class DeleteCellRenderer extends DefaultTableCellRenderer { private class DeleteCellRenderer extends DefaultTableCellRenderer {
@ -359,8 +363,8 @@ public class ImageBrowser extends Table {
*/ */
@Override @Override
public Component getComponent(Table table, PageState state, Object value, public Component getComponent(Table table, PageState state, Object value,
boolean isSelected, Object key, boolean isSelected, Object key,
int row, int column) { int row, int column) {
// Only show delete link in admin mode // Only show delete link in admin mode
if (m_mode == ImageComponent.ADMIN_IMAGES) { if (m_mode == ImageComponent.ADMIN_IMAGES) {
@ -369,12 +373,16 @@ public class ImageBrowser extends Table {
// SecurityManager sm = Utilities.getSecurityManager(state); // SecurityManager sm = Utilities.getSecurityManager(state);
SecurityManager sm = CMS.getSecurityManager(state); SecurityManager sm = CMS.getSecurityManager(state);
if (sm.canAccess(state.getRequest(), if (sm.canAccess(state.getRequest(),
SecurityManager.DELETE_IMAGES)) { SecurityManager.DELETE_IMAGES)) {
try { try {
ImageAsset asset = (ImageAsset) DomainObjectFactory //vorher war ImageAsset
.newInstance(new OID( ReusableImageAsset asset = (ReusableImageAsset) DomainObjectFactory
ImageAsset.BASE_DATA_OBJECT_TYPE, .newInstance(new OID(
(BigDecimal) key)); ImageAsset.BASE_DATA_OBJECT_TYPE,
(BigDecimal) key));
canDelete = !asset.isInUse();
//XXX Find a new way to figure out, if this image is used by any CI so we can //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 // decide if it can be deleted
// if (!GenericArticleImageAssociation.imageHasAssociation(asset)) { // if (!GenericArticleImageAssociation.imageHasAssociation(asset)) {
@ -389,27 +397,105 @@ public class ImageBrowser extends Table {
// can delete image because it's not in use // can delete image because it's not in use
if (canDelete) { if (canDelete) {
return super.getComponent(table, return super.getComponent(table,
state, state,
value, value,
isSelected, isSelected,
key, key,
row, row,
column); column);
} }
} }
// return (Component) null; // used to work for other tables but //get all items that uses the image:
// doesn't here for some reason. try {
return new Label(); ReusableImageAsset asset = (ReusableImageAsset) DomainObjectFactory
.newInstance(new OID(
ImageAsset.BASE_DATA_OBJECT_TYPE,
(BigDecimal) key));
List list = asset.getImageUsers();
return createLabel(list, state);
} catch (DataObjectNotFoundException e) {
// can't find asset, can't delete it
}
return new Label("image is in use");
} }
} }
/**
* creates a BoxPanel with links to the items that are using the image
*
* @param list list with the itemIDs
* @param state PageState
* @return
*/
private BoxPanel createLabel(List list, PageState state) {
int size = list.size();
BoxPanel links = new BoxPanel();
if (size == 0) {
links.add(new Label("currently not in use"));
return links;
}
if (size >= 1) {
links.add(createLink(state, list, 0));
}
if (size >= 2) {
links.add(createLink(state, list, 1));
}
if (size >= 3) {
links.add(createLink(state, list, 2));
}
if (size > 3) {
int size2 = size - 3;
links.add(new Label("and " + size2 + " more"));
}
return links;
}
/**
* creates the link to an item of the list.
*
* @param state PageState
* @param list list with itemIDs
* @param index
* @return
*/
private Link createLink(PageState state, List list, int index) {
ContentItem item = (ContentItem) DomainObjectFactory
.newInstance(new OID(
ContentItem.BASE_DATA_OBJECT_TYPE,
new BigDecimal((Integer) list.get(index))));
ContentSection section = item.getContentSection();
ItemResolver resolver = section.getItemResolver();
String displayName = item.getDisplayName();
if (displayName.length() > 20) {
displayName = displayName.substring(0, 15);
}
Link link = new Link(
"used by " + displayName,
resolver.generateItemURL(
state,
(item.getDraftVersion()),
section,
(item.getDraftVersion()).getVersion()));
return link;
}
/** /**
* Inner private class converts an ImageBrowserModelBuilder to a * Inner private class converts an ImageBrowserModelBuilder to a
* TableModelBuilder * TableModelBuilder
*/ */
private static class BuilderAdapter extends LockableImpl private static class BuilderAdapter extends LockableImpl
implements TableModelBuilder { implements TableModelBuilder {
private ImageBrowserModelBuilder m_builder; private ImageBrowserModelBuilder m_builder;
@ -420,7 +506,7 @@ public class ImageBrowser extends Table {
@Override @Override
public TableModel makeModel(Table t, PageState s) { public TableModel makeModel(Table t, PageState s) {
return new ImageModelAdapter( return new ImageModelAdapter(
m_builder.makeModel((ImageBrowser) t, s)); m_builder.makeModel((ImageBrowser) t, s));
} }
@Override @Override
@ -462,7 +548,13 @@ public class ImageBrowser extends Table {
return a; return a;
case ImageBrowser.NAME: case ImageBrowser.NAME:
return a.getName(); String name = a.getName();
if (name.length() > 32) {
return name.substring(0, 31);
}else{
return name;
}
case ImageBrowser.SIZE: case ImageBrowser.SIZE:
StringBuilder buf = new StringBuilder(); StringBuilder buf = new StringBuilder();
@ -497,15 +589,15 @@ public class ImageBrowser extends Table {
// Due to current design has to be a string! Localisation // Due to current design has to be a string! Localisation
// works here nevertheless. // works here nevertheless.
return (String) GlobalizationUtil.globalize( return (String) GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.link_select") "cms.contentasset.image.ui.table.link_select")
.localize(); .localize();
case ImageBrowser.DELETE: case ImageBrowser.DELETE:
// Due to current design has to be a string! Localisation // Due to current design has to be a string! Localisation
// works here nevertheless. // works here nevertheless.
return (String) GlobalizationUtil.globalize( return (String) GlobalizationUtil.globalize(
"cms.contentasset.image.ui.table.link_delete") "cms.contentasset.image.ui.table.link_delete")
.localize(); .localize();
default: default:
return null; return null;