Fixed potenial cast error in ImageBrowser

git-svn-id: https://svn.libreccm.org/ccm/trunk@5174 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2017-12-21 08:39:21 +00:00
parent a0b89a168d
commit 2f79a0e8e6
2 changed files with 163 additions and 125 deletions

View File

@ -113,7 +113,8 @@ public class ImageBrowser extends Table {
* Construct a new ImageBrowser with default mode.
*
* @param builder the {@link ImageBrowserModelBuilder} that will supply this
* component with its {@link ImageBrowserModel} during each request
* component with its {@link ImageBrowserModel} during each
* request
*/
public ImageBrowser(ImageBrowserModelBuilder b) {
@ -124,8 +125,9 @@ 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 request
* @param mode the component mode (see {@link ImageComponent})
* component with its {@link ImageBrowserModel} during each
* request
* @param mode the component mode (see {@link ImageComponent})
*/
public ImageBrowser(ImageBrowserModelBuilder b, int mode) {
@ -135,37 +137,37 @@ public class ImageBrowser extends Table {
m_mode = mode;
setThumbnailSize(CMS.getConfig().getImageBrowserThumbnailMaxWidth(),
CMS.getConfig().getImageBrowserThumbnailMaxHeight());
CMS.getConfig().getImageBrowserThumbnailMaxHeight());
/* 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")
)));
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
DELETE, null // probs with images probably in use
// new Label(GlobalizationUtil.globalize(
// "cms.contentasset.image.ui.table.header_action_delete"))
));
@ -229,7 +231,7 @@ public class ImageBrowser extends Table {
* is clicked. Child classes should override the linkClicked method.
*/
public static abstract class LinkActionListener
extends TableActionAdapter {
extends TableActionAdapter {
/**
*
@ -240,10 +242,10 @@ public class ImageBrowser extends Table {
int c = e.getColumn().intValue();
if (c == SELECT) {
linkClicked(e.getPageState(),
new BigDecimal((String) e.getRowKey()));
new BigDecimal((String) e.getRowKey()));
} else if (c == DELETE) {
deleteClicked(e.getPageState(),
new BigDecimal((String) e.getRowKey()));
new BigDecimal((String) e.getRowKey()));
}
}
@ -260,12 +262,12 @@ 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();
.doubleValue();
Double width;
Double height;
@ -281,14 +283,14 @@ public class ImageBrowser extends Table {
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())
.getWidth()).intValue()
+ "&maxHeight="
+ new Double(m_thumbSize
.getHeight())
.intValue();
Image img = new Image(URL.getDispatcherPath() + url + resizeParam,
a.getName());
a.getName());
img.setBorder("0");
// final Double width = m_thumbSize.getWidth();
@ -324,13 +326,13 @@ 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) {
if (m_mode == ImageComponent.SELECT_IMAGE
|| m_mode == ImageComponent.ATTACH_IMAGE) {
return super.getComponent(table, state, value,
isSelected, key, row, column);
isSelected, key, row, column);
}
// return new Label(""); // this variant is deprecated!
@ -363,8 +365,8 @@ 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) {
// Only show delete link in admin mode
if (m_mode == ImageComponent.ADMIN_IMAGES) {
@ -373,23 +375,23 @@ public class ImageBrowser extends Table {
// SecurityManager sm = Utilities.getSecurityManager(state);
SecurityManager sm = CMS.getSecurityManager(state);
if (sm.canAccess(state.getRequest(),
SecurityManager.DELETE_IMAGES)) {
SecurityManager.DELETE_IMAGES)) {
try {
//vorher war ImageAsset
ReusableImageAsset asset = (ReusableImageAsset) DomainObjectFactory
.newInstance(new OID(
ImageAsset.BASE_DATA_OBJECT_TYPE,
(BigDecimal) key));
canDelete = !asset.isInUse();
final ImageAsset asset = (ImageAsset) DomainObjectFactory
.newInstance(new OID(
ImageAsset.BASE_DATA_OBJECT_TYPE,
key));
if (asset instanceof ReusableImageAsset) {
//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)) {
// canDelete = true;
// }
} catch (DataObjectNotFoundException e) {
// can't find asset, can't delete it
final ReusableImageAsset reusable
= (ReusableImageAsset) asset;
canDelete = !reusable.isInUse();
} else {
canDelete = false;
}
} catch (DataObjectNotFoundException ex) {
throw new RuntimeException(ex);
}
}
@ -397,29 +399,33 @@ 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,
column);
state,
value,
isSelected,
key,
row,
column);
}
}
//get all items that uses the image:
try {
ReusableImageAsset asset = (ReusableImageAsset) DomainObjectFactory
.newInstance(new OID(
ImageAsset.BASE_DATA_OBJECT_TYPE,
(BigDecimal) key));
List list = asset.getImageUsers();
final ImageAsset asset = (ImageAsset) DomainObjectFactory
.newInstance(new OID(
ImageAsset.BASE_DATA_OBJECT_TYPE,
key));
if (asset instanceof ReusableImageAsset) {
final List list = ((ReusableImageAsset) asset)
.getImageUsers();
return createLabel(list, state);
} catch (DataObjectNotFoundException e) {
// can't find asset, can't delete it
return createLabel(list, state);
} else {
return new Label("");
}
} catch (DataObjectNotFoundException ex) {
throw new RuntimeException(ex);
}
return new Label("image is in use");
// return new Label("image is in use");
}
}
@ -427,8 +433,9 @@ public class ImageBrowser extends Table {
/**
* creates a BoxPanel with links to the items that are using the image
*
* @param list list with the itemIDs
* @param list list with the itemIDs
* @param state PageState
*
* @return
*/
private BoxPanel createLabel(List list, PageState state) {
@ -461,16 +468,17 @@ public class ImageBrowser extends Table {
* creates the link to an item of the list.
*
* @param state PageState
* @param list list with itemIDs
* @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))));
.newInstance(new OID(
ContentItem.BASE_DATA_OBJECT_TYPE,
new BigDecimal((Integer) list.get(index))));
ContentSection section = item.getContentSection();
ItemResolver resolver = section.getItemResolver();
@ -481,12 +489,12 @@ public class ImageBrowser extends Table {
}
Link link = new Link(
"used by " + displayName,
resolver.generateItemURL(
state,
(item.getDraftVersion()),
section,
(item.getDraftVersion()).getVersion()));
"used by " + displayName,
resolver.generateItemURL(
state,
(item.getDraftVersion()),
section,
(item.getDraftVersion()).getVersion()));
return link;
}
@ -495,7 +503,7 @@ public class ImageBrowser extends Table {
* TableModelBuilder
*/
private static class BuilderAdapter extends LockableImpl
implements TableModelBuilder {
implements TableModelBuilder {
private ImageBrowserModelBuilder m_builder;
@ -506,7 +514,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
@ -551,8 +559,8 @@ public class ImageBrowser extends Table {
String name = a.getName();
if (name.length() > 32) {
return name.substring(0, 31);
}else{
} else {
return name;
}
@ -589,15 +597,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;

View File

@ -18,8 +18,24 @@
*/
package com.arsdigita.cms.ui.category;
import com.arsdigita.bebop.*;
import com.arsdigita.bebop.event.*;
import com.arsdigita.bebop.ActionLink;
import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.List;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.ParameterSingleSelectionModel;
import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.bebop.SingleSelectionModel;
import com.arsdigita.bebop.Tree;
import com.arsdigita.bebop.event.ActionEvent;
import com.arsdigita.bebop.event.ActionListener;
import com.arsdigita.bebop.event.ChangeEvent;
import com.arsdigita.bebop.event.ChangeListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.event.PrintEvent;
import com.arsdigita.bebop.event.PrintListener;
import com.arsdigita.bebop.parameters.ParameterModel;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.categorization.CategorizedCollection;
@ -38,9 +54,13 @@ import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
import com.arsdigita.toolbox.ui.ActionGroup;
import com.arsdigita.toolbox.ui.Section;
import com.arsdigita.xml.Element;
import java.math.BigDecimal;
import org.apache.log4j.Logger;
import static com.arsdigita.web.Web.*;
/**
* A split pane for the Category Administration UI.
*
@ -50,9 +70,10 @@ import org.apache.log4j.Logger;
public final class CategoryAdminPane extends BaseAdminPane {
public static final String CONTEXT_SELECTED = "sel_context";
private static final String DEFAULT_USE_CONTEXT =
CategoryUseContextModelBuilder.DEFAULT_USE_CONTEXT;
private static final Logger s_log = Logger.getLogger(CategoryAdminPane.class);
private static final String DEFAULT_USE_CONTEXT
= CategoryUseContextModelBuilder.DEFAULT_USE_CONTEXT;
private static final Logger s_log = Logger
.getLogger(CategoryAdminPane.class);
private final SingleSelectionModel m_contextModel;
private final Tree m_categoryTree;
private final SingleSelectionModel m_model;
@ -62,16 +83,18 @@ public final class CategoryAdminPane extends BaseAdminPane {
public CategoryAdminPane() {
super();
m_contextModel = new UseContextSelectionModel(new StringParameter(CONTEXT_SELECTED));
m_contextModel = new UseContextSelectionModel(new StringParameter(
CONTEXT_SELECTED));
/* Left column */
/* Use context section */
/* Use context section */
List list = new List(new CategoryUseContextModelBuilder());
list.setSelectionModel(m_contextModel);
list.addChangeListener(new ContextSelectionListener());
/* Category tree section */
m_categoryTree = new BaseTree(new CategoryTreeModelBuilder(m_contextModel));
m_categoryTree = new BaseTree(new CategoryTreeModelBuilder(
m_contextModel));
m_categoryTree.addChangeListener(new SelectionListener());
m_model = m_categoryTree.getSelectionModel();
@ -87,7 +110,7 @@ public final class CategoryAdminPane extends BaseAdminPane {
if (CMS.getConfig().getAllowCategoryCreateUseContext()) {
ActionLink addContextAction = new ActionLink(new Label(gz(
"cms.ui.category.add_use_context")));
"cms.ui.category.add_use_context")));
Form addContextForm = new AddUseContextForm(m_contextModel);
getBody().add(addContextForm);
getBody().connect(addContextAction, addContextForm);
@ -115,8 +138,9 @@ public final class CategoryAdminPane extends BaseAdminPane {
setEdit(gz("cms.ui.category.edit"),
new CategoryEditForm(m_parent, m_category));
setDelete(new DeleteLink(new Label(gz("cms.ui.category.delete"))), new DeleteForm(
new SimpleContainer()));
setDelete(new DeleteLink(new Label(gz("cms.ui.category.delete"))),
new DeleteForm(
new SimpleContainer()));
setIntroPane(new Label(gz("cms.ui.category.intro")));
setItemPane(new CategoryItemPane(m_model,
@ -129,7 +153,6 @@ public final class CategoryAdminPane extends BaseAdminPane {
//m_contextList = new List(new ContextListModelBuilder());
//m_contextList.adChangeListener(new ContextListSelectionListener());
//m_contextModel = m_contextList.getSelectionModel();
}
@Override
@ -156,8 +179,8 @@ public final class CategoryAdminPane extends BaseAdminPane {
Category cat = m_category.getCategory(state);
String context = getUseContext(state);
boolean isDefaultContext =
(context == null) || DEFAULT_USE_CONTEXT.equals(context);
boolean isDefaultContext = (context == null) || DEFAULT_USE_CONTEXT
.equals(context);
if (cat.isRoot() || !cat.getChildren().isEmpty()) {
m_alternativeLabel.generateXML(state, parent);
@ -175,15 +198,15 @@ public final class CategoryAdminPane extends BaseAdminPane {
prompt.add(new Label(gz("cms.ui.category.delete_prompt")));
Label catLabel = new Label();
catLabel.addPrintListener(new PrintListener() {
public void prepare(PrintEvent pe) {
Label label = (Label) pe.getTarget();
Category cat =
m_category.getCategory(pe.getPageState());
Category cat = m_category.getCategory(pe.getPageState());
CategoryCollection descendants = cat.getDescendants();
final long nDescendants = descendants.size() - 1;
descendants.close();
CategorizedCollection descObjects =
cat.getDescendantObjects();
CategorizedCollection descObjects = cat
.getDescendantObjects();
final long nDescObjects = descObjects.size();
descObjects.close();
StringBuffer sb = new StringBuffer(" ");
@ -197,7 +220,8 @@ public final class CategoryAdminPane extends BaseAdminPane {
sb.append(" descendant object(s). ");
}
if (nDescendants > 0 || nDescObjects > 0) {
sb.append("Descendants will be orphaned, if this category is removed.");
sb.append(
"Descendants will be orphaned, if this category is removed.");
}
label.setLabel(sb.toString());
}
@ -207,24 +231,26 @@ public final class CategoryAdminPane extends BaseAdminPane {
}
public final void process(final FormSectionEvent e)
throws FormProcessException {
throws FormProcessException {
final PageState state = e.getPageState();
final Category category = m_category.getCategory(state);
if (category == null) {
return;
}
PermissionService.assertPermission(new PermissionDescriptor(PrivilegeDescriptor.DELETE,
category,
Kernel.getContext().
PermissionService.assertPermission(new PermissionDescriptor(
PrivilegeDescriptor.DELETE,
category,
Kernel.getContext().
getParty()));
if (category.isRoot()) {
Category root =
Category.getRootForObject(CMS.getContext().getContentSection(),
getUseContext(state));
Category root = Category.getRootForObject(CMS.getContext()
.getContentSection(),
getUseContext(state));
if (category.equals(root)) {
Category.clearRootForObject(CMS.getContext().getContentSection(),
Category.clearRootForObject(CMS.getContext()
.getContentSection(),
getUseContext(state));
}
m_contextModel.setSelectedKey(state, DEFAULT_USE_CONTEXT);
@ -268,9 +294,10 @@ public final class CategoryAdminPane extends BaseAdminPane {
final PageState state = e.getPageState();
if (!m_model.isSelected(state)) {
final Category root =
Category.getRootForObject(CMS.getContext().getContentSection(),
getUseContext(state));
final Category root = Category.getRootForObject(CMS.getContext()
.getContentSection(),
getUseContext(
state));
if (root != null) {
m_model.setSelectedKey(state, root.getID());
}
@ -306,16 +333,17 @@ public final class CategoryAdminPane extends BaseAdminPane {
public class ContextSelectionListener implements ChangeListener {
public final void stateChanged(final ChangeEvent e) {
s_log.debug("Selection state changed; I may change " + "the body's visible pane");
s_log.debug("Selection state changed; I may change "
+ "the body's visible pane");
final PageState state = e.getPageState();
getBody().reset(state);
if (m_contextModel.isSelected(state)) {
final Category root =
Category.getRootForObject(CMS.getContext().getContentSection(),
getUseContext(state));
final Category root = Category
.getRootForObject(CMS.getContext().getContentSection(),
getUseContext(state));
if (root != null) {
m_model.setSelectedKey(state, root.getID());
@ -324,11 +352,13 @@ public final class CategoryAdminPane extends BaseAdminPane {
}
if (m_model.isSelected(state)) {
s_log.debug("The selection model is selected; displaying " + "the item pane");
s_log.debug("The selection model is selected; displaying "
+ "the item pane");
getBody().push(state, getItemPane());
}
}
}
}