Kommentare und einige Aufräumarbeiten

git-svn-id: https://svn.libreccm.org/ccm/trunk@1791 8810af33-2d31-482b-a856-94f89814c4df
master
quasi 2012-07-31 05:42:30 +00:00
parent c4969bff47
commit b96f23ecba
13 changed files with 314 additions and 186 deletions

View File

@ -15,7 +15,7 @@ cms.contenttypes.ui.person.edit_basic_properties=Bearbeiten
cms.contenttypes.ui.person.surname=Nachname cms.contenttypes.ui.person.surname=Nachname
cms.contenttypes.ui.person.givenname=Vorname cms.contenttypes.ui.person.givenname=Vorname
cms.contenttypes.ui.person.titlepre=Titel cms.contenttypes.ui.person.titlepre=Titel
cms.contenttypes.ui.person.titlepost=Namesanhang cms.contenttypes.ui.person.titlepost=Namensanhang
cms.contenttypes.ui.person.birthdate=Geburtstag cms.contenttypes.ui.person.birthdate=Geburtstag
cms.contenttypes.ui.person.description=Beschreibung cms.contenttypes.ui.person.description=Beschreibung

View File

@ -34,7 +34,6 @@ import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ImageAsset; import com.arsdigita.cms.ImageAsset;
import com.arsdigita.cms.SecurityManager; import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.Service; import com.arsdigita.cms.Service;
import com.arsdigita.cms.ui.ImageComponent;
import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.mimetypes.MimeType; import com.arsdigita.mimetypes.MimeType;
@ -62,6 +61,7 @@ import org.apache.log4j.Logger;
* </code></pre></blockquote> * </code></pre></blockquote>
* *
* @author Stanislav Freidin * @author Stanislav Freidin
* @author Sören Bernstein (quasimodo) <sbernstein@quasiweb.de>
* @version $Id: ImageBrowser.java 1940 2009-05-29 07:15:05Z terry $ * @version $Id: ImageBrowser.java 1940 2009-05-29 07:15:05Z terry $
*/ */
public class ImageBrowser extends Table { public class ImageBrowser extends Table {
@ -80,7 +80,7 @@ public class ImageBrowser extends Table {
private static final Logger s_log = Logger.getLogger(ImageBrowser.class); private static final Logger s_log = Logger.getLogger(ImageBrowser.class);
/** /**
* Construct a new ImageBrowser * 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 request * component with its {@link ImageBrowserModel} during each request
@ -90,6 +90,13 @@ public class ImageBrowser extends Table {
this(b, ImageComponent.ATTACH_IMAGE); this(b, ImageComponent.ATTACH_IMAGE);
} }
/**
* Construct a new ImageBrowser 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})
*/
public ImageBrowser(ImageBrowserModelBuilder b, int mode) { public ImageBrowser(ImageBrowserModelBuilder b, int mode) {
super(new BuilderAdapter(b), HEADERS); super(new BuilderAdapter(b), HEADERS);
m_mode = mode; m_mode = mode;

View File

@ -1,6 +1,5 @@
/* /*
* To change this template, choose Tools | Templates *
* and open the template in the editor.
*/ */
package com.arsdigita.cms.ui; package com.arsdigita.cms.ui;
@ -11,11 +10,18 @@ import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.ReusableImageAsset; import com.arsdigita.cms.ReusableImageAsset;
/** /**
* * Interface for ImageCompnents.
*
* All components for image handling (like {@link ImageLibraryComponent} or
* {@link ImageUploadComponent}) should implement this interface.
*
* @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de> * @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de>
*/ */
public interface ImageComponent { public interface ImageComponent {
/**
* The modes
*/
public static final int DISPLAY_ONLY = 0; public static final int DISPLAY_ONLY = 0;
public static final int SELECT_IMAGE = 1; public static final int SELECT_IMAGE = 1;
public static final int ATTACH_IMAGE = 2; public static final int ATTACH_IMAGE = 2;

View File

@ -18,7 +18,13 @@ import java.util.Map;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
* * An abstract listener for {@link ImageComponent}.
*
* This listener provides the base implementation which is shared between all
* listeners of this kind.
*
* This listerner is used by {@link ImageSelectPage}.
*
* @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de> * @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de>
*/ */
public abstract class ImageComponentAbstractListener implements FormInitListener, FormProcessListener, FormSubmissionListener { public abstract class ImageComponentAbstractListener implements FormInitListener, FormProcessListener, FormSubmissionListener {
@ -39,6 +45,13 @@ public abstract class ImageComponentAbstractListener implements FormInitListener
} }
} }
/**
* Call {@link #cancelled(com.arsdigita.bebop.PageState)} if the cancel button
* was pressed.
*
* @param event the {@link FormSectionEvent}
* @throws FormProcessException
*/
public void submitted(FormSectionEvent event) throws FormProcessException { public void submitted(FormSectionEvent event) throws FormProcessException {
PageState ps = event.getPageState(); PageState ps = event.getPageState();
ImageComponent component = getImageComponent(ps); ImageComponent component = getImageComponent(ps);
@ -48,6 +61,13 @@ public abstract class ImageComponentAbstractListener implements FormInitListener
} }
} }
/**
* Call {@link #processImage(com.arsdigita.bebop.event.FormSectionEvent, com.arsdigita.bebop.PageState, com.arsdigita.cms.ui.ImageComponent, com.arsdigita.cms.ReusableImageAsset) }
* if the save button was pressed.
*
* @param event the {@link FormSectionEvent}
* @throws FormProcessException
*/
public void process(FormSectionEvent event) throws FormProcessException { public void process(FormSectionEvent event) throws FormProcessException {
PageState ps = event.getPageState(); PageState ps = event.getPageState();
ImageComponent component = getImageComponent(ps); ImageComponent component = getImageComponent(ps);
@ -62,8 +82,21 @@ public abstract class ImageComponentAbstractListener implements FormInitListener
} }
/**
* To be overridden by child if neccessary.
*
* @param ps
*/
protected void cancelled(PageState ps) {}; protected void cancelled(PageState ps) {};
/**
* Process the input.
*
* @param event the {@link FormSectionEvent}
* @param ps {@link PageState}
* @param component an {@link ImageComponent}
* @param image the {@link ReusableImageAsset}
*/
protected abstract void processImage(FormSectionEvent event, PageState ps, ImageComponent component, ReusableImageAsset image); protected abstract void processImage(FormSectionEvent event, PageState ps, ImageComponent component, ReusableImageAsset image);
protected ImageComponent getImageComponent(PageState ps) { protected ImageComponent getImageComponent(PageState ps) {
@ -80,6 +113,12 @@ public abstract class ImageComponentAbstractListener implements FormInitListener
} }
/**
* Sets the active component
*
* @param ps Page state
* @param activeKey the key of the active component
*/
protected void setImageComponent(PageState ps, final String activeKey) { protected void setImageComponent(PageState ps, final String activeKey) {
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {

View File

@ -13,7 +13,10 @@ import com.arsdigita.cms.ReusableImageAsset;
import com.arsdigita.toolbox.ui.ComponentMap; import com.arsdigita.toolbox.ui.ComponentMap;
/** /**
* * A listener to administer images.
*
* This listerner is used by {@link ImagesPane}.
*
* @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de> * @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de>
*/ */
class ImageComponentAdminListener extends ImageComponentAbstractListener implements ActionListener { class ImageComponentAdminListener extends ImageComponentAbstractListener implements ActionListener {

View File

@ -4,7 +4,6 @@
*/ */
package com.arsdigita.cms.ui; package com.arsdigita.cms.ui;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.MapComponentSelectionModel; import com.arsdigita.bebop.MapComponentSelectionModel;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSectionEvent;
@ -12,15 +11,18 @@ import com.arsdigita.cms.ReusableImageAsset;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
* * A listener to select an image and save it for later use.
*
* This listerner is used by {@link ImageSelectPage}.
*
* @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de> * @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de>
*/ */
public class ImageComponentSelectListener extends ImageComponentAbstractListener { public class ImageComponentSelectListener extends ImageComponentAbstractListener {
private static final Logger S_LOG = Logger.getLogger(ImageComponentSelectListener.class); private static final Logger S_LOG = Logger.getLogger(ImageComponentSelectListener.class);
private final ImageSelectResultPane m_resultPane; private final ImageSelectResultComponent m_resultPane;
public ImageComponentSelectListener(MapComponentSelectionModel imageComponent, ImageSelectResultPane resultPane) { public ImageComponentSelectListener(MapComponentSelectionModel imageComponent, ImageSelectResultComponent resultPane) {
super(imageComponent); super(imageComponent);
m_resultPane = resultPane; m_resultPane = resultPane;
} }

View File

@ -25,7 +25,13 @@ import com.arsdigita.domain.DataObjectNotFoundException;
import java.math.BigDecimal; 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}.
*
* @author unknown
* @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de> * @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de>
*/ */
public class ImageLibraryComponent extends SimpleContainer implements ImageComponent, Resettable { public class ImageLibraryComponent extends SimpleContainer implements ImageComponent, Resettable {
@ -67,7 +73,7 @@ public class ImageLibraryComponent extends SimpleContainer implements ImageCompo
try { try {
final ReusableImageAsset image = new ReusableImageAsset(imageID); final ReusableImageAsset image = new ReusableImageAsset(imageID);
if(m_mode == ImageComponent.SELECT_IMAGE) { if(m_mode == ImageComponent.SELECT_IMAGE) {
parent.getResultPane().setResult(image.getDisplayName(), image.getID(), image.getWidth(), image.getHeight()); parent.getResultComponent().setResult(image);
} }
m_imageModel.setSelectedObject(state, image); m_imageModel.setSelectedObject(state, image);
} catch (DataObjectNotFoundException ex) { } catch (DataObjectNotFoundException ex) {
@ -164,6 +170,11 @@ public class ImageLibraryComponent extends SimpleContainer implements ImageCompo
return m_saveCancel; return m_saveCancel;
} }
/**
* Add a link to an {@link ImageUploadComponent}
*
* @param actionListener
*/
public void addUploadLink(final ActionListener actionListener) { public void addUploadLink(final ActionListener actionListener) {
// Add action link to image upload component // Add action link to image upload component
if (m_mode != ImageComponent.DISPLAY_ONLY) { if (m_mode != ImageComponent.DISPLAY_ONLY) {
@ -173,7 +184,9 @@ public class ImageLibraryComponent extends SimpleContainer implements ImageCompo
} }
} }
// Reset this component /**
* Reset this component.
*/
public void reset(final PageState state) { public void reset(final PageState state) {
// clear selection // clear selection
m_imageModel.clearSelection(state); m_imageModel.clearSelection(state);

View File

@ -21,7 +21,11 @@ import java.util.HashMap;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
* * A {@link CMSPage} to select and upload images.
*
* This page is used by /web/templates/ccm-cms/content-section/admin/image_select.jsp
* which is used by the OpenCCM plugin for Xihna editor.
*
* @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de> * @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de>
*/ */
public class ImageSelectPage extends CMSPage { public class ImageSelectPage extends CMSPage {
@ -32,7 +36,7 @@ public class ImageSelectPage extends CMSPage {
private TabbedPane m_tabbedPane; private TabbedPane m_tabbedPane;
private ImageLibraryComponent m_imageLibrary; private ImageLibraryComponent m_imageLibrary;
private ImageUploadComponent m_imageUpload; private ImageUploadComponent m_imageUpload;
private ImageSelectResultPane m_resultPane; private ImageSelectResultComponent m_result;
private BigDecimalParameter m_sectionId; private BigDecimalParameter m_sectionId;
private final StringParameter m_imageComponentKey; private final StringParameter m_imageComponentKey;
private final MapComponentSelectionModel m_imageComponent; private final MapComponentSelectionModel m_imageComponent;
@ -56,7 +60,7 @@ public class ImageSelectPage extends CMSPage {
m_imageComponent = m_imageComponent =
new MapComponentSelectionModel(componentModel, new HashMap()); new MapComponentSelectionModel(componentModel, new HashMap());
m_selectListener = new ImageComponentSelectListener(m_imageComponent, getResultPane()); m_selectListener = new ImageComponentSelectListener(m_imageComponent, getResultComponent());
m_tabbedPane = createTabbedPane(); m_tabbedPane = createTabbedPane();
m_tabbedPane.setIdAttr("page-body"); m_tabbedPane.setIdAttr("page-body");
@ -77,11 +81,16 @@ public class ImageSelectPage extends CMSPage {
} }
}); });
add(m_resultPane); add(m_result);
addGlobalStateParam(m_imageComponentKey); addGlobalStateParam(m_imageComponentKey);
} }
/**
* Create the image library pane
*
* @return m_imageLibrary
*/
protected ImageLibraryComponent getImageLibraryPane() { protected ImageLibraryComponent getImageLibraryPane() {
if (m_imageLibrary == null) { if (m_imageLibrary == null) {
m_imageLibrary = new ImageLibraryComponent(ImageComponent.SELECT_IMAGE, this); m_imageLibrary = new ImageLibraryComponent(ImageComponent.SELECT_IMAGE, this);
@ -92,6 +101,11 @@ public class ImageSelectPage extends CMSPage {
return m_imageLibrary; return m_imageLibrary;
} }
/**
* Create the image upload pane
*
* @return m_imageUpload
*/
protected ImageUploadComponent getImageUploadPane() { protected ImageUploadComponent getImageUploadPane() {
if (m_imageUpload == null) { if (m_imageUpload == null) {
@ -103,13 +117,21 @@ public class ImageSelectPage extends CMSPage {
return m_imageUpload; return m_imageUpload;
} }
protected ImageSelectResultPane getResultPane() { /**
if (m_resultPane == null) { * Creates an {@link ImageSelectResultComponent}
m_resultPane = new ImageSelectResultPane(); *
* @return m_resultPane
*/
protected ImageSelectResultComponent getResultComponent() {
if (m_result == null) {
m_result = new ImageSelectResultComponent();
} }
return m_resultPane; return m_result;
} }
/**
* Create the tabbed pane
*/
protected TabbedPane createTabbedPane() { protected TabbedPane createTabbedPane() {
TabbedPane pane = new TabbedPane(); TabbedPane pane = new TabbedPane();
pane.setClassAttr(XSL_CLASS); pane.setClassAttr(XSL_CLASS);

View File

@ -7,31 +7,33 @@ package com.arsdigita.cms.ui;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Resettable; import com.arsdigita.bebop.Resettable;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.cms.ImageAsset;
import com.arsdigita.cms.Service;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
import java.math.BigDecimal;
/** /**
* * A component which will insert a javascript to the xml output with the
* image information for the OpenCCM plugin for Xinha editor.
*
* @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de> * @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de>
*/ */
public class ImageSelectResultPane extends SimpleContainer implements Resettable { public class ImageSelectResultComponent extends SimpleContainer implements Resettable {
boolean m_valid = false; boolean m_valid = false;
String m_name; ImageAsset m_image;
BigDecimal m_id;
BigDecimal m_width;
BigDecimal m_height;
public ImageSelectResultPane() { public ImageSelectResultComponent() {
super(); super();
} }
public void setResult(final String name, final BigDecimal id, final BigDecimal width, final BigDecimal height) { /**
m_name = name; * Save image imformation
m_id = id; *
m_width = width; * @param iamge an {@link ImageAsset}
m_height = height; */
m_valid = true; public void setResult(final ImageAsset image/*, final String name, final BigDecimal id, final BigDecimal width, final BigDecimal height*/) {
m_image = image;
m_valid = (m_image != null);
} }
@Override @Override
@ -48,17 +50,17 @@ public class ImageSelectResultPane extends SimpleContainer implements Resettable
script.append("if(button.id == \"save\" ) {"); script.append("if(button.id == \"save\" ) {");
script.append("window.opener.openCCM.imageSet({"); script.append("window.opener.openCCM.imageSet({");
script.append(" src : \"/ccm/cms-service/stream/image/?image_id="); script.append(" src : \"");
script.append(m_id); script.append(Service.getImageURL(m_image));
script.append("\", "); script.append("\", ");
script.append(" name : \""); script.append(" name : \"");
script.append(m_name); script.append(m_image.getDisplayName());
script.append("\", "); script.append("\", ");
script.append(" width : \""); script.append(" width : \"");
script.append(m_width); script.append(m_image.getWidth());
script.append("\", "); script.append("\", ");
script.append(" height : \""); script.append(" height : \"");
script.append(m_height); script.append(m_image.getHeight());
script.append("\""); script.append("\"");
script.append("});"); script.append("});");
script.append("}"); script.append("}");
@ -71,11 +73,12 @@ public class ImageSelectResultPane extends SimpleContainer implements Resettable
scriptElem.setText(script.toString()); scriptElem.setText(script.toString());
} }
/**
* Reset this component.
*
* @param state Page state
*/
public void reset(PageState state) { public void reset(PageState state) {
m_name = null; setResult(null);
m_id = null;
m_width = null;
m_height = null;
m_valid = false;
} }
} }

View File

@ -21,7 +21,13 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
/** /**
* An image upload component.
* *
* This component can be used in different places to add image upload capabilities
* in a convinient way. This class uses a listener class which should be extended
* from {@link ImageComponentAbstractListener}.
*
* @author unknown
* @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de> * @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de>
*/ */
public class ImageUploadComponent extends Form implements ImageComponent { public class ImageUploadComponent extends Form implements ImageComponent {
@ -34,10 +40,18 @@ public class ImageUploadComponent extends Form implements ImageComponent {
private final SaveCancelSection m_saveCancel; private final SaveCancelSection m_saveCancel;
private int m_mode; private int m_mode;
/**
* Creates an ImageUploadComponent in attach mode.
*/
public ImageUploadComponent() { public ImageUploadComponent() {
this(ImageComponent.ATTACH_IMAGE); this(ImageComponent.ATTACH_IMAGE);
} }
/**
* Creates an ImageUploadComponent with the selected mode.
*
* @param mode The operation mode (see {@link ImageComponent)
*/
public ImageUploadComponent(int mode) { public ImageUploadComponent(int mode) {
super("imageUploadComponent", new ColumnPanel(2)); super("imageUploadComponent", new ColumnPanel(2));
m_mode = mode; m_mode = mode;

View File

@ -34,7 +34,7 @@ import java.util.Map;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
* A LayoutPanel to insert into ContentSectionPage or ImageSelectPage * A {@link LayoutPanel} to insert into {@link ContentSectionPage}.
* *
* @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de> * @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de>
*/ */
@ -77,6 +77,7 @@ public class ImagesPane extends LayoutPanel implements Resettable {
final Map selectors = m_imageComponent.getComponentsMap(); final Map selectors = m_imageComponent.getComponentsMap();
m_adminListener = new ImageComponentAdminListener(m_imageComponent, this); m_adminListener = new ImageComponentAdminListener(m_imageComponent, this);
// Image library component
final ImageLibraryComponent library = new ImageLibraryComponent(ImageComponent.ADMIN_IMAGES); final ImageLibraryComponent library = new ImageLibraryComponent(ImageComponent.ADMIN_IMAGES);
library.getForm().addInitListener(m_adminListener); library.getForm().addInitListener(m_adminListener);
library.getForm().addProcessListener(m_adminListener); library.getForm().addProcessListener(m_adminListener);
@ -86,6 +87,7 @@ public class ImagesPane extends LayoutPanel implements Resettable {
new Label(GlobalizationUtil.globalize("cms.ui.image_library")), new Label(GlobalizationUtil.globalize("cms.ui.image_library")),
library)); library));
// Image upload component
final ImageUploadComponent upload = new ImageUploadComponent(ImageComponent.ADMIN_IMAGES); final ImageUploadComponent upload = new ImageUploadComponent(ImageComponent.ADMIN_IMAGES);
upload.getForm().addInitListener(m_adminListener); upload.getForm().addInitListener(m_adminListener);
upload.getForm().addSubmissionListener(m_adminListener); upload.getForm().addSubmissionListener(m_adminListener);
@ -126,6 +128,11 @@ public class ImagesPane extends LayoutPanel implements Resettable {
page.addComponentStateParam(this, m_imageComponentKey); page.addComponentStateParam(this, m_imageComponentKey);
} }
/**
* Resets this pane and all its resettable components.
*
* @param state Page state
*/
@Override @Override
public final void reset(final PageState state) { public final void reset(final PageState state) {
super.reset(state); super.reset(state);

View File

@ -75,20 +75,17 @@ import org.apache.log4j.Logger;
* @version $Id: CategoryItemPane.java 1967 2009-08-29 21:05:51Z pboy $ * @version $Id: CategoryItemPane.java 1967 2009-08-29 21:05:51Z pboy $
*/ */
class CategoryItemPane extends BaseItemPane { class CategoryItemPane extends BaseItemPane {
private static final Logger s_log = Logger.getLogger private static final Logger s_log = Logger.getLogger(CategoryItemPane.class);
(CategoryItemPane.class);
private final SingleSelectionModel m_model; private final SingleSelectionModel m_model;
private final CategoryRequestLocal m_category; private final CategoryRequestLocal m_category;
private final SimpleContainer m_detailPane; private final SimpleContainer m_detailPane;
public CategoryItemPane(final SingleSelectionModel model, public CategoryItemPane(final SingleSelectionModel model,
final CategoryRequestLocal category, final CategoryRequestLocal category,
final ActionLink addLink, final ActionLink addLink,
final ActionLink editLink, final ActionLink editLink,
final ActionLink deleteLink) { final ActionLink deleteLink) {
m_model = model; m_model = model;
m_category = category; m_category = category;
@ -99,16 +96,15 @@ class CategoryItemPane extends BaseItemPane {
setDefault(m_detailPane); setDefault(m_detailPane);
final ActionLink orderItemsLink = new ActionLink(new Label( final ActionLink orderItemsLink = new ActionLink(new Label(
gz("cms.ui.category.categorized_objects"))) { gz("cms.ui.category.categorized_objects"))) {
@Override @Override
public boolean isVisible(PageState state) { public boolean isVisible(PageState state) {
// update for live items only // update for live items only
if (!super.isVisible(state)) { if (!super.isVisible(state)) {
return false; return false;
} }
CategorizedCollection items = m_category.getCategory CategorizedCollection items = m_category.getCategory(state).getObjects(ContentItem.BASE_DATA_OBJECT_TYPE);
(state).getObjects(ContentItem.BASE_DATA_OBJECT_TYPE); items.addEqualsFilter(ContentItem.VERSION, ContentItem.LIVE);
items.addEqualsFilter(ContentItem.VERSION,ContentItem.LIVE);
boolean canOrder = items.size() > 1; boolean canOrder = items.size() > 1;
items.close(); items.close();
return canOrder; return canOrder;
@ -123,55 +119,53 @@ class CategoryItemPane extends BaseItemPane {
// Change index item // Change index item
final ActionLink indexLink = new ActionLink(new Label(gz( final ActionLink indexLink = new ActionLink(new Label(gz(
"cms.ui.category.change_index_item"))); "cms.ui.category.change_index_item")));
final Form indexForm = new IndexItemSelectionForm(m_category); final Form indexForm = new IndexItemSelectionForm(m_category);
add(indexForm); add(indexForm);
ViewItemLink viewIndexLink = new ViewItemLink(new Label(gz( ViewItemLink viewIndexLink = new ViewItemLink(new Label(gz(
"cms.ui.category.view_index_item")),""); "cms.ui.category.view_index_item")), "");
EditItemLink editIndexLink = new EditItemLink(new Label(gz( EditItemLink editIndexLink = new EditItemLink(new Label(gz(
"cms.ui.category.edit_index_item")),""); "cms.ui.category.edit_index_item")), "");
// Summary // Summary
m_detailPane.add(new SummarySection(editLink, deleteLink, indexLink, m_detailPane.add(new SummarySection(editLink, deleteLink, indexLink,
viewIndexLink, editIndexLink, orderItemsLink)); viewIndexLink, editIndexLink, orderItemsLink));
// Quasimodo: BEGIN // Quasimodo: BEGIN
// Localizations // Localizations
ActionLink addCategoryLocalizationLink = new ActionLink(new Label(gz( ActionLink addCategoryLocalizationLink = new ActionLink(new Label(gz(
"cms.ui.category.localization_add"))) { "cms.ui.category.localization_add"))) {
@Override @Override
public boolean isVisible(PageState state) { public boolean isVisible(PageState state) {
// Only show addLanguage button, if there are langauges to add // Only show addLanguage button, if there are langauges to add
int countSupportedLanguages = ( int countSupportedLanguages = (Kernel.getConfig()).getSupportedLanguagesTokenizer()
Kernel.getConfig()).getSupportedLanguagesTokenizer() .countTokens();
.countTokens(); long countLanguages =
long countLanguages =
m_category.getCategory(state) m_category.getCategory(state)
.getCategoryLocalizationCollection().size(); .getCategoryLocalizationCollection().size();
if(countLanguages < countSupportedLanguages) { if (countLanguages < countSupportedLanguages) {
return true; return true;
} else { } else {
return false; return false;
} }
} }
}; };
CategoryLocalizationAddForm addCategoryLocalizationForm = CategoryLocalizationAddForm addCategoryLocalizationForm =
new CategoryLocalizationAddForm(m_category); new CategoryLocalizationAddForm(m_category);
m_detailPane.add(new CategoryLocalizationSection(addCategoryLocalizationLink)); m_detailPane.add(new CategoryLocalizationSection(addCategoryLocalizationLink));
add(addCategoryLocalizationForm); add(addCategoryLocalizationForm);
connect(addCategoryLocalizationLink, addCategoryLocalizationForm); connect(addCategoryLocalizationLink, addCategoryLocalizationForm);
connect(addCategoryLocalizationForm); connect(addCategoryLocalizationForm);
// Quasimodo: END // Quasimodo: END
// Subcategories // Subcategories
m_detailPane.add(new SubcategorySection(addLink)); m_detailPane.add(new SubcategorySection(addLink));
// Linked categories // Linked categories
final ActionLink linkAddLink = new ActionLink final ActionLink linkAddLink = new ActionLink(new Label(gz("cms.ui.category.linked_add")));
(new Label(gz("cms.ui.category.linked_add")));
final Form linkForm = new LinkForm(m_category); final Form linkForm = new LinkForm(m_category);
add(linkForm); add(linkForm);
@ -196,6 +190,7 @@ class CategoryItemPane extends BaseItemPane {
} }
private class EditVisible extends VisibilityComponent { private class EditVisible extends VisibilityComponent {
EditVisible(final Component child) { EditVisible(final Component child) {
super(child, null); super(child, null);
} }
@ -207,6 +202,7 @@ class CategoryItemPane extends BaseItemPane {
} }
private class AdminVisible extends VisibilityComponent { private class AdminVisible extends VisibilityComponent {
AdminVisible(final Component child) { AdminVisible(final Component child) {
super(child, null); super(child, null);
} }
@ -220,9 +216,9 @@ class CategoryItemPane extends BaseItemPane {
private class SummarySection extends Section { private class SummarySection extends Section {
SummarySection(final ActionLink editLink, SummarySection(final ActionLink editLink,
final ActionLink deleteLink, final ActionLink deleteLink,
final ActionLink indexLink, final ActionLink indexLink,
final ActionLink orderItemsLink) { final ActionLink orderItemsLink) {
setHeading(new Label(gz("cms.ui.category.details"))); setHeading(new Label(gz("cms.ui.category.details")));
final ActionGroup group = new ActionGroup(); final ActionGroup group = new ActionGroup();
@ -241,11 +237,11 @@ class CategoryItemPane extends BaseItemPane {
* the user to view and edit the content index item. * the user to view and edit the content index item.
*/ */
SummarySection(final ActionLink editLink, SummarySection(final ActionLink editLink,
final ActionLink deleteLink, final ActionLink deleteLink,
final ActionLink indexLink, final ActionLink indexLink,
final BaseLink viewIndexItem, final BaseLink viewIndexItem,
final BaseLink editIndexItem, final BaseLink editIndexItem,
final ActionLink orderItemsLink) { final ActionLink orderItemsLink) {
setHeading(new Label(gz("cms.ui.category.details"))); setHeading(new Label(gz("cms.ui.category.details")));
final ActionGroup group = new ActionGroup(); final ActionGroup group = new ActionGroup();
@ -262,6 +258,7 @@ class CategoryItemPane extends BaseItemPane {
} }
private class Properties extends PropertyList { private class Properties extends PropertyList {
@Override @Override
protected final java.util.List properties(final PageState state) { protected final java.util.List properties(final PageState state) {
final java.util.List props = super.properties(state); final java.util.List props = super.properties(state);
@ -272,20 +269,19 @@ class CategoryItemPane extends BaseItemPane {
if (item != null) { if (item != null) {
itemTitle = item.getDisplayName(); itemTitle = item.getDisplayName();
} else if (!category.ignoreParentIndexItem() } else if (!category.ignoreParentIndexItem()
&& category.getParentCategoryCount() > 0) && category.getParentCategoryCount() > 0) {
{ Category ancestor = findParentCategoryWithNonInheritedIndexItem(category);
Category ancestor = findParentCategoryWithNonInheritedIndexItem(category); if (ancestor != null) {
if (ancestor != null) { if (ancestor.getIndexObject() != null) {
if (ancestor.getIndexObject() != null) { itemTitle = ancestor.getIndexObject().getDisplayName();
itemTitle = ancestor.getIndexObject().getDisplayName(); }
} itemTitle += " (Inherited from "
itemTitle += " (Inherited from " + ancestor.getDisplayName() + ")";
+ ancestor.getDisplayName() + ")"; } else {
} else { // The complete hierarchy is set to inherit.
// The complete hierarchy is set to inherit. // Just leave the itemTitle as None.
// Just leave the itemTitle as None. }
}
} }
props.add(new Property(gz("cms.ui.name"), props.add(new Property(gz("cms.ui.name"),
@ -295,57 +291,67 @@ class CategoryItemPane extends BaseItemPane {
props.add(new Property(gz("cms.ui.category.url"), props.add(new Property(gz("cms.ui.category.url"),
category.getURL(""))); category.getURL("")));
props.add(new Property(gz("cms.ui.category.is_not_abstract"), props.add(new Property(gz("cms.ui.category.is_not_abstract"),
category.isAbstract() ? category.isAbstract()
gz("cms.ui.no") : ? gz("cms.ui.no")
gz("cms.ui.yes"))); : gz("cms.ui.yes")));
props.add(new Property(gz("cms.ui.category.is_enabled"), props.add(new Property(gz("cms.ui.category.is_enabled"),
category.isEnabled("") ? category.isEnabled("")
gz("cms.ui.yes") : ? gz("cms.ui.yes")
gz("cms.ui.no"))); : gz("cms.ui.no")));
props.add(new Property(gz("cms.ui.category.index_item"), props.add(new Property(gz("cms.ui.category.index_item"),
itemTitle)); itemTitle));
return props; return props;
} }
} }
} }
// Loop over the parents and recurse up the hierarchy the find the first // Loop over the parents and recurse up the hierarchy the find the first
// parent with an explicit index item ignoreParentIndexItem is true. // parent with an explicit index item ignoreParentIndexItem is true.
private Category findParentCategoryWithNonInheritedIndexItem(Category c) { private Category findParentCategoryWithNonInheritedIndexItem(Category c) {
if (c.getParentCategoryCount() == 0) { if (c.getParentCategoryCount() == 0) {
return null; return null;
} }
CategoryCollection parents = c.getParents(); CategoryCollection parents = c.getParents();
while (parents.next()) { while (parents.next()) {
Category p = parents.getCategory(); Category p = parents.getCategory();
if (p.getDirectIndexObject() != null || p.ignoreParentIndexItem()) { if (p.getDirectIndexObject() != null || p.ignoreParentIndexItem()) {
return p; return p;
} }
// Try the parents of this parent. // Try the parents of this parent.
Category gp = findParentCategoryWithNonInheritedIndexItem(p); Category gp = findParentCategoryWithNonInheritedIndexItem(p);
if (gp != null) { if (gp != null) {
return gp; return gp;
} }
} }
return null; return null;
} }
// Quasimodo: BEGIN // Quasimodo: BEGIN
// CategoryLocalizationSection // CategoryLocalizationSection
private class CategoryLocalizationSection extends Section { private class CategoryLocalizationSection extends Section {
private CategoryLocalizationTable m_catLocalizationTable;
private CategoryLocalizationEditForm m_editCategoryLocalizationForm;
CategoryLocalizationSection(ActionLink addLink) { CategoryLocalizationSection(ActionLink addLink) {
setHeading(new Label(gz("cms.ui.category.localizations"))); setHeading(new Label(gz("cms.ui.category.localizations")));
final ActionGroup group = new ActionGroup(); final ActionGroup group = new ActionGroup();
setBody(group); setBody(group);
m_catLocalizationTable = new CategoryLocalizationTable(m_category, m_model);
group.setSubject(new CategoryLocalizationTable(m_category, m_model)); group.setSubject(m_catLocalizationTable);
group.addAction(new AdminVisible(addLink), ActionGroup.ADD); group.addAction(new AdminVisible(addLink), ActionGroup.ADD);
m_editCategoryLocalizationForm = new CategoryLocalizationEditForm(m_category, "de");
connect(m_editCategoryLocalizationForm);
connect(m_catLocalizationTable, 0, m_editCategoryLocalizationForm);
} }
} }
private class SubcategorySection extends Section { private class SubcategorySection extends Section {
SubcategorySection(final ActionLink addLink) { SubcategorySection(final ActionLink addLink) {
setHeading(new Label(gz("cms.ui.category.subcategories"))); setHeading(new Label(gz("cms.ui.category.subcategories")));
@ -358,6 +364,7 @@ class CategoryItemPane extends BaseItemPane {
} }
private class LinkedCategorySection extends Section { private class LinkedCategorySection extends Section {
LinkedCategorySection(final ActionLink linkAddLink) { LinkedCategorySection(final ActionLink linkAddLink) {
setHeading(new Label(gz("cms.ui.category.linked"))); setHeading(new Label(gz("cms.ui.category.linked")));
@ -375,6 +382,7 @@ class CategoryItemPane extends BaseItemPane {
} }
private class CategoryTemplateSection extends Section { private class CategoryTemplateSection extends Section {
CategoryTemplateSection() { CategoryTemplateSection() {
setHeading(new Label(gz("cms.ui.category.templates"))); setHeading(new Label(gz("cms.ui.category.templates")));
@ -388,6 +396,7 @@ class CategoryItemPane extends BaseItemPane {
} }
private class PermissionsSection extends Section { private class PermissionsSection extends Section {
@Override @Override
public boolean isVisible(PageState ps) { public boolean isVisible(PageState ps) {
Category cat = m_category.getCategory(ps); Category cat = m_category.getCategory(ps);
@ -400,7 +409,7 @@ class CategoryItemPane extends BaseItemPane {
final ActionGroup group = new ActionGroup(); final ActionGroup group = new ActionGroup();
setBody(group); setBody(group);
PrivilegeDescriptor[] privs = new PrivilegeDescriptor[] { PrivilegeDescriptor[] privs = new PrivilegeDescriptor[]{
PrivilegeDescriptor.EDIT, PrivilegeDescriptor.EDIT,
Category.MAP_DESCRIPTOR, Category.MAP_DESCRIPTOR,
PrivilegeDescriptor.DELETE, PrivilegeDescriptor.DELETE,
@ -413,8 +422,7 @@ class CategoryItemPane extends BaseItemPane {
privMap.put(Category.MAP_DESCRIPTOR.getName(), "Categorize Items"); privMap.put(Category.MAP_DESCRIPTOR.getName(), "Categorize Items");
privMap.put("admin", "Admin"); privMap.put("admin", "Admin");
final CMSPermissionsPane permPane = new CMSPermissionsPane final CMSPermissionsPane permPane = new CMSPermissionsPane(privs, privMap, new ACSObjectSelectionModel(m_model)) {
(privs, privMap, new ACSObjectSelectionModel(m_model)) {
@Override @Override
public void showAdmin(PageState ps) { public void showAdmin(PageState ps) {
Assert.exists(m_model.getSelectedKey(ps)); Assert.exists(m_model.getSelectedKey(ps));
@ -425,7 +433,7 @@ class CategoryItemPane extends BaseItemPane {
}; };
final ActionLink restoreDefault = new ActionLink(new Label(gz( final ActionLink restoreDefault = new ActionLink(new Label(gz(
"cms.ui.restore_default_permissions"))) { "cms.ui.restore_default_permissions"))) {
@Override @Override
public boolean isVisible(PageState ps) { public boolean isVisible(PageState ps) {
Category cat = m_category.getCategory(ps); Category cat = m_category.getCategory(ps);
@ -434,7 +442,7 @@ class CategoryItemPane extends BaseItemPane {
}; };
final ActionLink useCustom = new ActionLink(new Label(gz( final ActionLink useCustom = new ActionLink(new Label(gz(
"cms.ui.use_custom_permissions"))) { "cms.ui.use_custom_permissions"))) {
@Override @Override
public boolean isVisible(PageState ps) { public boolean isVisible(PageState ps) {
Category cat = m_category.getCategory(ps); Category cat = m_category.getCategory(ps);
@ -460,18 +468,18 @@ class CategoryItemPane extends BaseItemPane {
parent = cat.getDefaultParentCategory(); parent = cat.getDefaultParentCategory();
} catch (CategoryNotFoundException ce) { } catch (CategoryNotFoundException ce) {
throw new IllegalStateException( throw new IllegalStateException(
"link shouldn't exist for root categories"); "link shouldn't exist for root categories");
} }
PermissionService.setContext(cat, parent); PermissionService.setContext(cat, parent);
// revoke all direct permissions so category will only // revoke all direct permissions so category will only
// have inherited permissions // have inherited permissions
ObjectPermissionCollection perms = ObjectPermissionCollection perms =
PermissionService.getDirectGrantedPermissions( PermissionService.getDirectGrantedPermissions(
cat.getOID()); cat.getOID());
while (perms.next()) { while (perms.next()) {
PermissionService.revokePermission( PermissionService.revokePermission(
new PermissionDescriptor( new PermissionDescriptor(
perms.getPrivilege(), cat.getOID(), perms.getPrivilege(), cat.getOID(),
perms.getGranteeOID())); perms.getGranteeOID()));
} }
@ -510,15 +518,15 @@ class CategoryItemPane extends BaseItemPane {
add(new Submit("Done")); add(new Submit("Done"));
} }
} }
/* /*
* This private class creates a link to the index item for a category. * This private class creates a link to the index item for a category.
*/ */
private class ViewItemLink extends Link { private class ViewItemLink extends Link {
ViewItemLink(Component c, String s) { ViewItemLink(Component c, String s) {
super(c,s); super(c, s);
} }
// Build the preview link. This uses a standard redirect link to find // Build the preview link. This uses a standard redirect link to find
@ -526,10 +534,10 @@ class CategoryItemPane extends BaseItemPane {
@Override @Override
protected String prepareURL(final PageState state, String location) { protected String prepareURL(final PageState state, String location) {
ContentItem indexItem = ((ContentBundle)(m_category.getCategory(state) ContentItem indexItem = ((ContentBundle) (m_category.getCategory(state)
.getDirectIndexObject())) .getDirectIndexObject()))
.getPrimaryInstance(); .getPrimaryInstance();
if(indexItem==null) { if (indexItem == null) {
return ""; return "";
} else { } else {
return "/redirect/?oid=" + URLEncoder.encode(indexItem.getOID().toString()); return "/redirect/?oid=" + URLEncoder.encode(indexItem.getOID().toString());
@ -543,7 +551,7 @@ class CategoryItemPane extends BaseItemPane {
return false; return false;
} }
ACSObject indexItem = m_category.getCategory(state).getDirectIndexObject(); ACSObject indexItem = m_category.getCategory(state).getDirectIndexObject();
if(indexItem==null) { if (indexItem == null) {
return false; return false;
} else { } else {
return true; return true;
@ -552,36 +560,38 @@ class CategoryItemPane extends BaseItemPane {
}; };
private class EditItemLink extends Link { private class EditItemLink extends Link {
EditItemLink(Component c, String s) { EditItemLink(Component c, String s) {
super(c,s); super(c, s);
} }
/** /**
* Build the preview link. This is based on code in the * Build the preview link. This is based on code in the
* ContentSoonExpiredPane class. The prepareURL method of the parent * ContentSoonExpiredPane class. The prepareURL method of the parent is
* is overwritten. This method is called by the printwriter * overwritten. This method is called by the printwriter
*/ */
@Override @Override
protected String prepareURL(final PageState state, String location) { protected String prepareURL(final PageState state, String location) {
boolean canEdit = false; boolean canEdit = false;
ContentItem indexItem = ((ContentBundle)(m_category.getCategory(state) ContentItem indexItem = ((ContentBundle) (m_category.getCategory(state)
.getDirectIndexObject())) .getDirectIndexObject()))
.getPrimaryInstance(); .getPrimaryInstance();
if(indexItem==null) { if (indexItem == null) {
return ""; return "";
} }
if (!isItemEditable(indexItem,state)) { if (!isItemEditable(indexItem, state)) {
return ""; return "";
} else { } else {
BigDecimal draftID = indexItem.getDraftVersion().getID(); BigDecimal draftID = indexItem.getDraftVersion().getID();
return "item.jsp?item_id=" + draftID + "&set_tab=" + return "item.jsp?item_id=" + draftID + "&set_tab="
ContentItemPage.AUTHORING_TAB; + ContentItemPage.AUTHORING_TAB;
} }
} }
/** /**
* We only show this link when an index item exists for this category * We only show this link when an index item exists for this category
* and the user is allowed to edit this item. * and the user is allowed to edit this item.
*
* @param state * @param state
* @return * @return
*/ */
@ -591,16 +601,16 @@ class CategoryItemPane extends BaseItemPane {
return false; return false;
} }
ACSObject indexItem = m_category.getCategory(state).getDirectIndexObject(); ACSObject indexItem = m_category.getCategory(state).getDirectIndexObject();
if(indexItem==null) { if (indexItem == null) {
return false; return false;
} else { } else {
return isItemEditable((ContentItem)indexItem,state); return isItemEditable((ContentItem) indexItem, state);
} }
} }
/** /**
* This method checks whether a usern is allowed to edit a * This method checks whether a usern is allowed to edit a particular
* particular item. * item.
* *
* @param item * @param item
* @param state * @param state
@ -610,13 +620,13 @@ class CategoryItemPane extends BaseItemPane {
BigDecimal id = item.getID(); BigDecimal id = item.getID();
User user = Web.getContext().getUser(); User user = Web.getContext().getUser();
ContentItem ci = new ContentItem(new OID(ContentItem.class.getName(), ContentItem ci = new ContentItem(new OID(ContentItem.class.getName(),
Integer.parseInt(id.toString()))); Integer.parseInt(id.toString())));
Iterator permissions = PermissionService.getImpliedPrivileges( Iterator permissions = PermissionService.getImpliedPrivileges(
ci.getOID(), user.getOID()); ci.getOID(), user.getOID());
while (permissions.hasNext()) { while (permissions.hasNext()) {
PrivilegeDescriptor permission = (PrivilegeDescriptor)permissions.next(); PrivilegeDescriptor permission = (PrivilegeDescriptor) permissions.next();
if (permission.equals(PrivilegeDescriptor.ADMIN) || if (permission.equals(PrivilegeDescriptor.ADMIN)
permission.equals(PrivilegeDescriptor.EDIT)) { || permission.equals(PrivilegeDescriptor.EDIT)) {
return true; return true;
} }
} }

View File

@ -27,6 +27,7 @@ import com.arsdigita.bebop.SingleSelectionModel;
import com.arsdigita.bebop.Table; import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.TableActionEvent; import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener; import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.table.DefaultTableCellRenderer;
import com.arsdigita.bebop.table.TableCellRenderer; import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn; import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel; import com.arsdigita.bebop.table.TableColumnModel;
@ -49,8 +50,8 @@ import java.util.Locale;
/** /**
* Lists all existing localizations for a selected category. * Lists all existing localizations for a selected category.
* *
* This class is part of the admin GUI of CCM and extends the standard form * This class is part of the admin GUI of CCM and extends the standard form in
* in order to present forms for managing the multi-language categories. * order to present forms for managing the multi-language categories.
* *
* @author Sören Bernstein (quasimodo) quasi@zes.uni-bremen.de * @author Sören Bernstein (quasimodo) quasi@zes.uni-bremen.de
*/ */
@ -75,7 +76,7 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
// if table is empty: // if table is empty:
setEmptyView(new Label(GlobalizationUtil.globalize( setEmptyView(new Label(GlobalizationUtil.globalize(
"cms.ui.category.localization_none"))); "cms.ui.category.localization_none")));
TableColumnModel tab_model = getColumnModel(); TableColumnModel tab_model = getColumnModel();
// define columns // define columns
// XXX globalize // XXX globalize
@ -139,7 +140,7 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
/** /**
* Check collection for the existence of another row. * Check collection for the existence of another row.
* *
* If exists, fetch the value of current CategoryLocalization object * If exists, fetch the value of current CategoryLocalization object
* into m_categoryLocalization class variable. * into m_categoryLocalization class variable.
*/ */
@ -158,6 +159,7 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
/** /**
* Return the * Return the
*
* @see com.arsdigita.bebop.table.TableModel#getElementAt(int) * @see com.arsdigita.bebop.table.TableModel#getElementAt(int)
*/ */
public Object getElementAt(int columnIndex) { public Object getElementAt(int columnIndex) {
@ -197,22 +199,22 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
boolean isSelected, Object key, boolean isSelected, Object key,
int row, int column) { int row, int column) {
//
// if (canEdit) { // if (canEdit) {
// CategoryLocalization cl; // CategoryLocalization cl;
//
// try { // try {
// cl = new CategoryLocalization((BigDecimal) key); // cl = new CategoryLocalization((BigDecimal) key);
// } catch (DataObjectNotFoundException ex) { // } catch (DataObjectNotFoundException ex) {
// return new Label(value.toString()); // return new Label(value.toString());
// } // }
//
// ContentSection section = CMS.getContext().getContentSection(); // ContentSection section = CMS.getContext().getContentSection();
// ItemResolver resolver = section.getItemResolver(); // ItemResolver resolver = section.getItemResolver();
//
// return new Link(value.toString(), resolver.generateItemURL(state, cl, section, cl.getVersion())); // return new Link(value.toString(), resolver.generateItemURL(state, cl, section, cl.getVersion()));
ControlLink link = new ControlLink(value.toString()); ControlLink link = new ControlLink(value.toString());
return link; return link;
} }
} }
@ -230,9 +232,9 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
} }
/** /**
* Provide implementation to TableActionListener method. * Provide implementation to TableActionListener method. Code that comes
* Code that comes into picture when a link on the table is clicked. * into picture when a link on the table is clicked. Handles edit and delete
* Handles edit and delete event. * event.
*/ */
public void cellSelected(TableActionEvent evt) { public void cellSelected(TableActionEvent evt) {
@ -260,8 +262,8 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
} }
/** /**
* provide Implementation to TableActionListener method. * provide Implementation to TableActionListener method. Does nothing in our
* Does nothing in our case. * case.
*/ */
public void headSelected(TableActionEvent e) { public void headSelected(TableActionEvent e) {
throw new UnsupportedOperationException("Not Implemented"); throw new UnsupportedOperationException("Not Implemented");