From 2f79a0e8e6f59dd02278abc1ddab805d4134a8c8 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 21 Dec 2017 08:39:21 +0000 Subject: [PATCH] Fixed potenial cast error in ImageBrowser git-svn-id: https://svn.libreccm.org/ccm/trunk@5174 8810af33-2d31-482b-a856-94f89814c4df --- .../com/arsdigita/cms/ui/ImageBrowser.java | 188 +++++++++--------- .../cms/ui/category/CategoryAdminPane.java | 100 ++++++---- 2 files changed, 163 insertions(+), 125 deletions(-) diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ImageBrowser.java b/ccm-cms/src/com/arsdigita/cms/ui/ImageBrowser.java index 6f3ff6a2b..e41dcea6d 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/ImageBrowser.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/ImageBrowser.java @@ -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; diff --git a/ccm-cms/src/com/arsdigita/cms/ui/category/CategoryAdminPane.java b/ccm-cms/src/com/arsdigita/cms/ui/category/CategoryAdminPane.java index 01ef79e25..fc5dbee3b 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/category/CategoryAdminPane.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/category/CategoryAdminPane.java @@ -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()); } } } + }