From: <pb...@fe...> - 2012-12-16 18:04:16
|
Author: pboy Date: 2012-12-16 18:04:05 +0000 (Sun, 16 Dec 2012) New Revision: 2379 Added: trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentAdminListener.java trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectResultPane.java Modified: trunk/ccm-cms/src/com/arsdigita/cms/CMSResources.properties trunk/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties trunk/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties trunk/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties trunk/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitContactTable.java trunk/ccm-cms/src/com/arsdigita/cms/ui/DefaultImageBrowserModelBuilder.java trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageChooser.java trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentAbstractListener.java trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentSelectListener.java trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageLibraryComponent.java trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectPage.java trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageUploadComponent.java trunk/ccm-cms/src/com/arsdigita/cms/ui/ImagesPane.java trunk/ccm-cms/web/assets/xinha/plugins/OpenCCM/images/images.js trunk/ccm-cms/web/assets/xinha/plugins/OpenCCM/links/links.js trunk/ccm-core/src/com/arsdigita/bebop/Paginator.java trunk/ccm-core/src/com/arsdigita/bebop/SaveCancelSection.java trunk/ccm-core/src/com/arsdigita/bebop/ui/BebopResources.properties trunk/ccm-core/src/com/arsdigita/bebop/ui/BebopResources_de.properties trunk/ccm-core/src/com/arsdigita/bebop/ui/BebopResources_fr.properties Log: On behalf of quasimodo: ccm-cms * Added ImageComponentAdminListener * ImagePane: Fixed Reste & Cancel * Improved various localisations * Added ResultPane for ImageSelectPage which creates Javascript including required parameter * Fixed DefaultImageModelBuilder (reset paginator) * Enhanced ImagesPane ccm-core * Enhanced localization Xinha-Plugin * Various minor enhancements * Enlarged window * Window scrollable Modified: trunk/ccm-cms/src/com/arsdigita/cms/CMSResources.properties =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/CMSResources.properties 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/CMSResources.properties 2012-12-16 18:04:05 UTC (rev 2379) @@ -1109,3 +1109,4 @@ cms.ui.search.create.select_close=Select item and close cms.ui.search.create.select_edit=Select item and edit +cms.ui.clear=Clear Modified: trunk/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties 2012-12-16 18:04:05 UTC (rev 2379) @@ -1100,3 +1100,4 @@ cms.ui.search.create.select_close=Item ausw\u00e4hlen und schlie\u00dfen cms.ui.search.create.select_edit=Item ausw\u00e4hlen und weiter bearbeiten +cms.ui.clear=Zur\u00fccksetzen Modified: trunk/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties 2012-12-16 18:04:05 UTC (rev 2379) @@ -48,3 +48,4 @@ cms.ui.search.create.select_close= cms.ui.search.create.select_edit= +cms.ui.clear= Modified: trunk/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties 2012-12-16 18:04:05 UTC (rev 2379) @@ -579,3 +579,4 @@ cms.ui.search.create.select_close= cms.ui.search.create.select_edit= +cms.ui.clear= Modified: trunk/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitContactTable.java =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitContactTable.java 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitContactTable.java 2012-12-16 18:04:05 UTC (rev 2379) @@ -43,27 +43,12 @@ import com.arsdigita.cms.contenttypes.util.ContenttypesGlobalizationUtil; import com.arsdigita.cms.dispatcher.ItemResolver; import com.arsdigita.cms.dispatcher.Utilities; -import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.cms.util.GlobalizationUtil; - -;import com.arsdigita.globalization.GlobalizationHelper; -import com.arsdigita.util.LockableImpl; -import java.math.BigDecimal; -import org.apache.log4j.Logger; +import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.globalization.GlobalizationHelper; - -import com.arsdigita.globalization.GlobalizationHelper; import com.arsdigita.util.LockableImpl; - import java.math.BigDecimal; - import org.apache.log4j.Logger; -import com.arsdigita.util.LockableImpl; -import java.math.BigDecimal; -import org.apache.log4j.Logger; -import com.arsdigita.util.LockableImpl; -import java.math.BigDecimal; -import org.apache.log4j.Logger; /** * Table for showing the contacts associated with an organization. Modified: trunk/ccm-cms/src/com/arsdigita/cms/ui/DefaultImageBrowserModelBuilder.java =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/ui/DefaultImageBrowserModelBuilder.java 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/ui/DefaultImageBrowserModelBuilder.java 2012-12-16 18:04:05 UTC (rev 2379) @@ -31,29 +31,33 @@ /** * Builds an {@link ImageBrowserModel} by selecting all images which match the - * given keyword. The keyword is supplied by the <code>getSelectedKey</code> - * method of a <code>SingleSelectionModel</code>. If the keyword is empty - * or null, the builder will return an {@link EmptyImageBrowserModel} + * given keyword. The keyword is supplied by the + * <code>getSelectedKey</code> method of a + * <code>SingleSelectionModel</code>. If the keyword is empty or null, the + * builder will return an {@link EmptyImageBrowserModel} * * @author Stanislav Freidin (sfr...@ar...) - * @version $Id$ + * @author Sören Bernstein (quasimodo) <sbe...@ze...> + * @version $Id: DefaultImageBrowserModelBuilder.java 1940 2009-05-29 07:15:05Z + * terry $ */ public class DefaultImageBrowserModelBuilder extends LockableImpl implements ImageBrowserModelBuilder, PaginationModelBuilder { private SingleSelectionModel m_keywordModel; private static ImageBrowserModel EMPTY_MODEL = - new EmptyImageBrowserModel(); + new EmptyImageBrowserModel(); private ImageBrowser m_imageBrowser; private RequestLocal m_size; + private String m_key; private RequestLocal m_imageColl; private String m_context; /** - * Construct a new DefaultImageBrowserModelBuilder + * Construct a new DefaultImageBrowserModelBuilder * * @param keywordModel The SingleSelectionModel whose getSelectedKey(state) - * method returns a string keyword + * method returns a string keyword * @param context the context for the retrieved items. Should be * {@link ContentItem#DRAFT} or {@link ContentItem#LIVE} */ @@ -63,19 +67,29 @@ m_keywordModel = keywordModel; m_context = context; m_size = new RequestLocal(); + m_key = ""; m_imageColl = new RequestLocal(); } /** - * Construct a new DefaultImageBrowserModelBuilder + * Construct a new DefaultImageBrowserModelBuilder * * @param keywordModel The SingleSelectionModel whose getSelectedKey(state) - * method returns a string keyword + * method returns a string keyword */ public DefaultImageBrowserModelBuilder(SingleSelectionModel keywordModel) { this(keywordModel, ContentItem.DRAFT); } + public ImageAssetCollection getImageCollectionByKeyword(PageState state) { + String key = (String) m_keywordModel.getSelectedKey(state); + if (!m_key.equals(key)) { + m_key = key; + + } + return ReusableImageAsset.getReusableImagesByKeyword(key, m_context); + } + /** * Construct an ImageBrowserModel for the current request */ @@ -84,8 +98,7 @@ // pass through key even if null -- null key will return all rows in m_context. //ImageAssetCollection c = ReusableImageAsset.getReusableImagesByKeyword(key, m_context); - return new DefaultImageBrowserModel((ImageAssetCollection) m_imageColl. - get(s)); + return new DefaultImageBrowserModel((ImageAssetCollection) m_imageColl.get(s)); } /** @@ -106,27 +119,42 @@ public int getTotalSize(Paginator paginator, PageState state) { - Integer size = (Integer) m_size.get(state); + int size = 0; - if (size == null) { + if (m_size.get(state) == null) { String key = (String) m_keywordModel.getSelectedKey(state); - ImageAssetCollection c = ReusableImageAsset. - getReusableImagesByKeyword(key, m_context); - if (c == null) { - return 0; + + //HACK: (by Quasimodo) + // So, there is something broken. The selectedPage has to be resettet to + // 1, if the keyword changes and therefor the imageCollection changes its + // size. + // Also, setting the imaheCollection range in this method seems to be + // wrong, because it changes the funtionality from a getter method to + // something more complex. + if (m_key == null || (key != null && !m_key.equalsIgnoreCase(key))) { + paginator.setSelectedPageNum(state, 1); + m_key = key; } + // End hack + + ImageAssetCollection imageCollection = ReusableImageAsset.getReusableImagesByKeyword(key, m_context); + if (imageCollection != null) { + size = (int) imageCollection.size(); + } + + m_size.set(state, size); - size = new Integer( (int) ReusableImageAsset.getReusableImagesByKeyword(key, m_context).size()); + // This should not be done here. + imageCollection.setRange(new Integer(paginator.getFirst(state)), + new Integer(paginator.getLast(state) + 1)); + m_imageColl.set(state, imageCollection); - c.setRange(new Integer(paginator.getFirst(state)), - new Integer(paginator.getLast(state) + 1)); - - m_size.set(state, size); - m_imageColl.set(state, c); + } else { + size = ((Integer) m_size.get(state)).intValue(); } - return size.intValue(); + return size; } public void setImageBrowser(ImageBrowser ib) { @@ -134,11 +162,11 @@ } /** - * Indicates whether the paginator should be visible, - * based on the visibility of the image browser itself. + * Indicates whether the paginator should be visible, based on the + * visibility of the image browser itself. * - * @return true if image browser is visible, or if the - * associated image browser is unknown. + * @return true if image browser is visible, or if the associated image + * browser is unknown. */ public boolean isVisible(PageState state) { return (m_imageBrowser != null) ? m_imageBrowser.isVisible(state) : true; Modified: trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageChooser.java =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageChooser.java 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageChooser.java 2012-12-16 18:04:05 UTC (rev 2379) @@ -18,7 +18,6 @@ */ package com.arsdigita.cms.ui; - import com.arsdigita.bebop.BoxPanel; import com.arsdigita.bebop.Form; import com.arsdigita.bebop.FormData; @@ -41,12 +40,12 @@ import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.util.GlobalizationUtil; - /** - * Sticks a form at the top of an {@link ImageBrowser} in order to - * search images by keyword + * Sticks a form at the top of an {@link ImageBrowser} in order to search images + * by keyword * * @author Stanislav Freidin (sfr...@ar...) + * @author Sören Bernstein (quasimodo) <sbe...@ze...> * @version $Id$ */ public class ImageChooser extends BoxPanel { @@ -56,11 +55,9 @@ private Paginator m_paginator; private StringParameter m_keyword; private SingleSelectionModel m_sel; - public static final String KEYWORD = "kw"; public static int LIST_SIZE = 20; - /** * Construct a new ImageChooser * @@ -74,15 +71,12 @@ m_keyword = new StringParameter(KEYWORD); m_sel = new ParameterSingleSelectionModel(m_keyword); m_form = new ImageKeywordForm(m_sel); - DefaultImageBrowserModelBuilder modelBuilder = - new DefaultImageBrowserModelBuilder(m_sel, context); + DefaultImageBrowserModelBuilder modelBuilder = new DefaultImageBrowserModelBuilder(m_sel, context); m_browser = new ImageBrowser(modelBuilder, mode); modelBuilder.setImageBrowser(m_browser); - m_paginator = new Paginator - (modelBuilder, - LIST_SIZE); + m_paginator = new Paginator(modelBuilder, LIST_SIZE); super.add(m_form); super.add(m_paginator); super.add(m_browser); @@ -112,6 +106,7 @@ /** * Add the "keyword" parameter to the page state */ + @Override public void register(Page p) { p.addComponent(this); p.addComponentStateParam(this, m_keyword); @@ -119,8 +114,7 @@ /** * Add an action listener to the browser. The inner class - * {@link ImageBrowser.LinkActionListener} will probably be - * used here. + * {@link ImageBrowser.LinkActionListener} will probably be used here. * * @param l the action listener. */ @@ -129,8 +123,8 @@ } /** - * Add a submission listener to the form. The listener will - * fire whenever a button on the form is clicked. + * Add a submission listener to the form. The listener will fire whenever a + * button on the form is clicked. * * @param l the action listener. */ @@ -153,8 +147,8 @@ } /** - * Set the specified keyword. All images matching the keyword - * will be displayed in the browser. + * Set the specified keyword. All images matching the keyword will be + * displayed in the browser. * * @param state The page state * @param word The new keyword @@ -177,7 +171,7 @@ * @return the current keyword */ public String getKeyword(PageState state) { - return (String)m_sel.getSelectedKey(state); + return (String) m_sel.getSelectedKey(state); } /** @@ -207,29 +201,28 @@ * The form which specifies a keyword for the image browser. */ public static class ImageKeywordForm extends Form - implements FormProcessListener, FormInitListener { + implements FormProcessListener, FormInitListener { private SingleSelectionModel m_sel; private SaveCancelSection m_saveCancel; - public static String WORD = "word"; /** * Construct a new ImageKeywordForm - * @param sel The SingleSelectionModel which the form will use to - * set the keyword + * + * @param sel The SingleSelectionModel which the form will use to set + * the keyword */ public ImageKeywordForm(SingleSelectionModel sel) { super("ImageKeywordForm", new BoxPanel(BoxPanel.HORIZONTAL)); m_sel = sel; add(new Label(GlobalizationUtil.globalize("cms.ui.enter_a_keyword"))); - TextField t = new TextField(WORD); - // allow null keyword field for view all - //t.addValidationListener(new NotNullValidationListener("keyword")); - add(t); + final TextField keyword = new TextField(WORD); + add(keyword); m_saveCancel = new SaveCancelSection(); - m_saveCancel.getSaveButton().setButtonLabel("Search"); + m_saveCancel.getSaveButton().setButtonLabel(GlobalizationUtil.globalize("cms.ui.search")); + m_saveCancel.getCancelButton().setButtonLabel(GlobalizationUtil.globalize("cms.ui.clear")); add(m_saveCancel); addProcessListener(this); @@ -241,10 +234,10 @@ /** * Set the keyword in the text widget */ - public void init(FormSectionEvent e) throws FormProcessException { - PageState s = e.getPageState(); - FormData data = e.getFormData(); - data.put(WORD, m_sel.getSelectedKey(s)); + public void init(final FormSectionEvent event) throws FormProcessException { + final PageState state = event.getPageState(); + final FormData data = event.getFormData(); + data.put(WORD, m_sel.getSelectedKey(state)); } /** @@ -261,10 +254,15 @@ return m_sel; } - public void process(FormSectionEvent e) { - FormData data = e.getFormData(); - PageState state = e.getPageState(); - m_sel.setSelectedKey(state, (String)data.get(WORD)); + public void process(final FormSectionEvent event) { + final FormData data = event.getFormData(); + final PageState state = event.getPageState(); + if (m_saveCancel.getCancelButton().isSelected(state)) { + m_sel.clearSelection(event.getPageState()); + data.put(WORD, null); + } else { + m_sel.setSelectedKey(state, (String) data.get(WORD)); + } } } } Modified: trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentAbstractListener.java =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentAbstractListener.java 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentAbstractListener.java 2012-12-16 18:04:05 UTC (rev 2379) @@ -11,6 +11,7 @@ import com.arsdigita.bebop.event.FormInitListener; import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.event.FormSubmissionListener; import com.arsdigita.cms.ReusableImageAsset; import java.util.Iterator; import java.util.Map; @@ -20,7 +21,7 @@ * * @author Sören Bernstein (quasimodo) <sbe...@ze...> */ -public abstract class ImageComponentAbstractListener implements FormInitListener, FormProcessListener { +public abstract class ImageComponentAbstractListener implements FormInitListener, FormProcessListener, FormSubmissionListener { private static final Logger s_log = Logger.getLogger(ImageComponentSelectListener.class); MapComponentSelectionModel m_imageComponent; @@ -38,6 +39,15 @@ } } + public void submitted(FormSectionEvent event) throws FormProcessException { + PageState ps = event.getPageState(); + ImageComponent component = getImageComponent(ps); + + if(component.getSaveCancelSection().getCancelButton().isSelected(ps)) { + cancelled(ps); + } + } + public void process(FormSectionEvent event) throws FormProcessException { PageState ps = event.getPageState(); ImageComponent component = getImageComponent(ps); @@ -51,6 +61,9 @@ processImage(event, ps, component, image); } + + protected void cancelled(PageState ps) {}; + protected abstract void processImage(FormSectionEvent event, PageState ps, ImageComponent component, ReusableImageAsset image); protected ImageComponent getImageComponent(PageState ps) { @@ -68,7 +81,6 @@ } protected void setImageComponent(PageState ps, final String activeKey) { - m_imageComponent.setSelectedKey(ps, activeKey); if (s_log.isDebugEnabled()) { s_log.debug("Selected component: " + activeKey); Added: trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentAdminListener.java =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentAdminListener.java (rev 0) +++ trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentAdminListener.java 2012-12-16 18:04:05 UTC (rev 2379) @@ -0,0 +1,41 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.arsdigita.cms.ui; + +import com.arsdigita.bebop.MapComponentSelectionModel; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.event.ActionEvent; +import com.arsdigita.bebop.event.ActionListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.cms.ReusableImageAsset; +import com.arsdigita.toolbox.ui.ComponentMap; + +/** + * + * @author Sören Bernstein (quasimodo) <sbe...@ze...> + */ +class ImageComponentAdminListener extends ImageComponentAbstractListener implements ActionListener { + + private final ComponentMap m_pane; + + public ImageComponentAdminListener(MapComponentSelectionModel imageComponent, ComponentMap pane) { + super(imageComponent); + m_pane = pane; + } + + @Override + protected void cancelled(PageState ps) { + m_pane.reset(ps); + } + + @Override + protected void processImage(FormSectionEvent event, PageState ps, ImageComponent component, ReusableImageAsset image) { + m_pane.reset(ps); + } + + public void actionPerformed(ActionEvent ev) { + setImageComponent(ev.getPageState(), ImageComponent.UPLOAD); + } +} Modified: trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentSelectListener.java =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentSelectListener.java 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentSelectListener.java 2012-12-16 18:04:05 UTC (rev 2379) @@ -17,18 +17,17 @@ */ 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; - public ImageComponentSelectListener(MapComponentSelectionModel imageComponent) { + public ImageComponentSelectListener(MapComponentSelectionModel imageComponent, ImageSelectResultPane resultPane) { super(imageComponent); + m_resultPane = resultPane; } protected void processImage(FormSectionEvent event, PageState ps, ImageComponent component, ReusableImageAsset image) { - // SELECT { - String name = image.getDisplayName(); - BigDecimal id = image.getID(); - BigDecimal width = image.getWidth(); - BigDecimal height = image.getHeight(); - // SELECT } + m_resultPane.setResult(image.getDisplayName(), image.getID(), image.getWidth(), image.getHeight()); + + m_imageComponent.setSelectedKey(ps, ImageSelectPage.RESULT); } } Modified: trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageLibraryComponent.java =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageLibraryComponent.java 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageLibraryComponent.java 2012-12-16 18:04:05 UTC (rev 2379) @@ -45,26 +45,26 @@ this(ImageComponent.ATTACH_IMAGE); } - public ImageLibraryComponent(int mode) { + public ImageLibraryComponent(final int mode) { m_mode = mode; m_imageID = new BigDecimalParameter("imageID"); m_imageModel = new ItemSelectionModel(m_imageID); m_chooser = new ImageChooser(ContentItem.DRAFT, m_mode); m_chooser.addImageActionListener(new ImageBrowser.LinkActionListener() { - public void deleteClicked(PageState ps, BigDecimal imageID) { - ImagesPane.s_log.debug("Clicked delete"); - ReusableImageAsset image = new ReusableImageAsset(imageID); + public void deleteClicked(final PageState state, final BigDecimal imageID) { + ImagesPane.S_LOG.debug("Clicked delete"); + final ReusableImageAsset image = new ReusableImageAsset(imageID); image.delete(); } - public void linkClicked(PageState ps, BigDecimal imageID) { - ImagesPane.s_log.debug("Clicked select"); + public void linkClicked(final PageState state, final BigDecimal imageID) { + ImagesPane.S_LOG.debug("Clicked select"); try { - ReusableImageAsset image = new ReusableImageAsset(imageID); - m_imageModel.setSelectedObject(ps, image); + final ReusableImageAsset image = new ReusableImageAsset(imageID); + m_imageModel.setSelectedObject(state, image); } catch (DataObjectNotFoundException ex) { - ImagesPane.s_log.error("Selected non-existant image: " + imageID, ex); + ImagesPane.S_LOG.error("Selected non-existant image: " + imageID, ex); } } }); @@ -112,35 +112,35 @@ } } - public ReusableImageAsset getImage(FormSectionEvent event) { - PageState ps = event.getPageState(); - return (ReusableImageAsset) m_imageModel.getSelectedItem(ps); + public ReusableImageAsset getImage(final FormSectionEvent event) { + final PageState state = event.getPageState(); + return (ReusableImageAsset) m_imageModel.getSelectedItem(state); } @Override - public void register(Page p) { - super.register(p); - p.addComponentStateParam(this, m_imageID); + public void register(final Page page) { + super.register(page); + page.addComponentStateParam(this, m_imageID); } - public String getCaption(FormSectionEvent event) { - PageState ps = event.getPageState(); - return (String) m_caption.getValue(ps); + public String getCaption(final FormSectionEvent event) { + final PageState state = event.getPageState(); + return (String) m_caption.getValue(state); } - public String getDescription(FormSectionEvent event) { - PageState ps = event.getPageState(); - return (String) m_description.getValue(ps); + public String getDescription(final FormSectionEvent event) { + final PageState state = event.getPageState(); + return (String) m_description.getValue(state); } - public String getTitle(FormSectionEvent event) { - PageState ps = event.getPageState(); - return (String) m_title.getValue(ps); + public String getTitle(final FormSectionEvent event) { + final PageState state = event.getPageState(); + return (String) m_title.getValue(state); } - public String getUseContext(FormSectionEvent event) { - PageState ps = event.getPageState(); - return (String) m_useContext.getValue(ps); + public String getUseContext(final FormSectionEvent event) { + final PageState state = event.getPageState(); + return (String) m_useContext.getValue(state); } public Form getForm() { @@ -151,19 +151,20 @@ return m_saveCancel; } - public void addUploadLink(ActionListener actionListener) { + public void addUploadLink(final ActionListener actionListener) { // Add action link to image upload component if (m_mode != ImageComponent.DISPLAY_ONLY) { - ActionLink upload = new ActionLink("Upload new image"); + final ActionLink upload = new ActionLink("Upload new image"); upload.addActionListener(actionListener); add(upload, ColumnPanel.FULL_WIDTH); } } - // Reset this component - public void reset(PageState ps) { + // Reset this component + public void reset(final PageState state) { // clear selection - m_imageModel.clearSelection(ps); - m_chooser.clearKeyword(ps); + m_imageModel.clearSelection(state); + m_chooser.clearSelection(state); + m_chooser.clearKeyword(state); } } Modified: trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectPage.java =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectPage.java 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectPage.java 2012-12-16 18:04:05 UTC (rev 2379) @@ -12,8 +12,6 @@ import com.arsdigita.bebop.TabbedPane; import com.arsdigita.bebop.event.ActionEvent; import com.arsdigita.bebop.event.ActionListener; -import com.arsdigita.bebop.event.RequestEvent; -import com.arsdigita.bebop.event.RequestListener; import com.arsdigita.bebop.parameters.BigDecimalParameter; import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.cms.CMSConfig; @@ -28,11 +26,13 @@ */ public class ImageSelectPage extends CMSPage { - public static final Logger s_log = Logger.getLogger(ImagesPane.class); + private static final Logger S_LOG = Logger.getLogger(ImagesPane.class); + private final static String XSL_CLASS = "CMS Admin"; private TabbedPane m_tabbedPane; private ImageLibraryComponent m_imageLibrary; private ImageUploadComponent m_imageUpload; + private ImageSelectResultPane m_resultPane; private BigDecimalParameter m_sectionId; private final StringParameter m_imageComponentKey; private final MapComponentSelectionModel m_imageComponent; @@ -40,9 +40,10 @@ private static final CMSConfig s_conf = CMSConfig.getInstance(); private static final boolean LIMIT_TO_CONTENT_SECTION = false; public static final String CONTENT_SECTION = "section_id"; + public static final String RESULT = "result"; public ImageSelectPage() { - super(GlobalizationUtil.globalize("cms.ui.image_selelect.page_title").localize().toString(), new SimpleContainer()); + super(GlobalizationUtil.globalize("cms.ui.image_select.page_title").localize().toString(), new SimpleContainer()); setClassAttr("cms-admin"); @@ -55,7 +56,8 @@ new ParameterSingleSelectionModel(m_imageComponentKey); m_imageComponent = new MapComponentSelectionModel(componentModel, new HashMap()); - m_selectListener = new ImageComponentSelectListener(m_imageComponent); + + m_selectListener = new ImageComponentSelectListener(m_imageComponent, getResultPane()); m_tabbedPane = createTabbedPane(); m_tabbedPane.setIdAttr("page-body"); @@ -73,9 +75,11 @@ if (m_tabbedPane.getCurrentPane(ps).equals(m_imageUpload)) { m_imageComponent.setSelectedKey(ps, ImageComponent.UPLOAD); } - } }); + + add(m_resultPane); + addGlobalStateParam(m_imageComponentKey); } @@ -100,6 +104,13 @@ return m_imageUpload; } + protected ImageSelectResultPane getResultPane() { + if (m_resultPane == null) { + m_resultPane = new ImageSelectResultPane(); + } + return m_resultPane; + } + protected TabbedPane createTabbedPane() { TabbedPane pane = new TabbedPane(); pane.setClassAttr(XSL_CLASS); @@ -119,7 +130,7 @@ * @param tabName The name of the tab if it's added * @param comp The component to add to the pane */ - protected void addToPane(TabbedPane pane, String tabName, Component comp) { + protected void addToPane(final TabbedPane pane, final String tabName, final Component comp) { if (comp != null) { pane.addTab(GlobalizationUtil.globalize("cms.ui.image_" + tabName).localize().toString(), comp); } Added: trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectResultPane.java =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectResultPane.java (rev 0) +++ trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectResultPane.java 2012-12-16 18:04:05 UTC (rev 2379) @@ -0,0 +1,86 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.arsdigita.cms.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Resettable; +import com.arsdigita.bebop.SimpleContainer; +import com.arsdigita.xml.Element; +import java.math.BigDecimal; + +/** + * + * @author Sören Bernstein (quasimodo) <sbe...@ze...> + */ +public class ImageSelectResultPane extends SimpleContainer implements Resettable { + + public static final int UNSET = 0; + public static final int CANCEL = 1; + public static final int SELECT = 2; + int m_state = UNSET; + String m_name; + BigDecimal m_id; + BigDecimal m_width; + BigDecimal m_height; + + public ImageSelectResultPane() { + super(); + } + + public void setResult(final String name, final BigDecimal id, final BigDecimal width, final BigDecimal height) { + m_name = name; + m_id = id; + m_width = width; + m_height = height; + m_state = SELECT; + } + + @Override + public void generateXML(PageState state, Element parent) { + + if (m_state != UNSET) { + + Element scriptElem = parent.newChildElement("script"); + scriptElem.addAttribute("type", "text/javascript"); + scriptElem.addAttribute("eventHandler", "onload"); + + StringBuilder script = new StringBuilder(1000); + + script.append("alert(\"SCRIPT\");"); + + if (m_state == SELECT) { +// script.append("window.opener.document.OpenCCM.imageSet("); + script.append("window.openCCM.imageSet("); + script.append("{"); + script.append(" src : \"/theme/mandalay/ccm/cms-service/stream/image/?image_id="); + script.append(m_id); + script.append("\", "); + script.append(" name : \""); + script.append(m_name); + script.append("\", "); + script.append(" width : \""); + script.append(m_width); + script.append("\", "); + script.append(" height : \""); + script.append(m_height); + script.append("\""); + script.append(" });"); + } + + script.append("self.close();"); + script.append("return false;"); + scriptElem.setText(script.toString()); + + } + } + + public void reset(PageState state) { + m_name = null; + m_id = null; + m_width = null; + m_height = null; + m_state = UNSET; + } +} Modified: trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageUploadComponent.java =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageUploadComponent.java 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/ui/ImageUploadComponent.java 2012-12-16 18:04:05 UTC (rev 2379) @@ -8,7 +8,6 @@ import com.arsdigita.bebop.Form; import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.MapComponentSelectionModel; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.SaveCancelSection; import com.arsdigita.bebop.event.FormSectionEvent; @@ -114,7 +113,7 @@ // image.setDescription((String) m_caption.getValue(ps)); return image; } catch (IOException ex) { - ImagesPane.s_log.error("Error loading image from file", ex); + ImagesPane.S_LOG.error("Error loading image from file", ex); throw new FormProcessException(ex.getMessage()); } } Modified: trunk/ccm-cms/src/com/arsdigita/cms/ui/ImagesPane.java =================================================================== --- trunk/ccm-cms/src/com/arsdigita/cms/ui/ImagesPane.java 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/src/com/arsdigita/cms/ui/ImagesPane.java 2012-12-16 18:04:05 UTC (rev 2379) @@ -4,20 +4,32 @@ */ package com.arsdigita.cms.ui; +import com.arsdigita.bebop.Component; import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.List; +import com.arsdigita.bebop.ListPanel; import com.arsdigita.bebop.MapComponentSelectionModel; import com.arsdigita.bebop.Page; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.ParameterSingleSelectionModel; import com.arsdigita.bebop.Resettable; import com.arsdigita.bebop.SegmentedPanel; -import com.arsdigita.bebop.SimpleComponent; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.event.FormSubmissionListener; +import com.arsdigita.bebop.SegmentedPanel.Segment; +import com.arsdigita.bebop.SimpleContainer; +import com.arsdigita.bebop.SingleSelectionModel; +import com.arsdigita.bebop.event.ChangeEvent; +import com.arsdigita.bebop.event.ChangeListener; +import com.arsdigita.bebop.list.ListModel; +import com.arsdigita.bebop.list.ListModelBuilder; import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.cms.util.GlobalizationUtil; +import com.arsdigita.toolbox.ui.ActionGroup; import com.arsdigita.toolbox.ui.LayoutPanel; +import com.arsdigita.toolbox.ui.Section; +import com.arsdigita.util.LockableImpl; +import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import org.apache.log4j.Logger; @@ -28,114 +40,191 @@ */ public class ImagesPane extends LayoutPanel implements Resettable { - public static final Logger s_log = Logger.getLogger(ImagesPane.class); - //private ImageChooser imageChooser; + public static final Logger S_LOG = Logger.getLogger(ImagesPane.class); private final StringParameter m_imageComponentKey; private final MapComponentSelectionModel m_imageComponent; -// private final ImageComponentAdminListener m_adminListener; + private final ImageComponentAdminListener m_adminListener; + private ListPanel m_listPanel; + final private SegmentedPanel m_body; + private HashMap<String, Segment> m_bodySegments = new HashMap(); + private final SingleSelectionModel m_model; + private final List m_links; public ImagesPane() { - // Left column is empty, this is only to provide the same layout for all - // tabs in ContentSectionPage - setLeft(new SimpleComponent()); + super(); - SegmentedPanel body = new SegmentedPanel(); - setBody(body); + m_model = new ParameterSingleSelectionModel(new StringParameter(List.SELECTED)); + m_model.addChangeListener(new ImageAdminSelectionListener()); + + m_links = new List(new ImageAdminListModelBuilder()); + m_links.setSelectionModel(m_model); + + final SimpleContainer left = new SimpleContainer(); + setLeft(left); + + final LinksSection staff = new LinksSection(); + left.add(staff); + + m_body = new SegmentedPanel(); + setBody(m_body); + m_imageComponentKey = new StringParameter("imageComponent"); - ParameterSingleSelectionModel componentModel = new ParameterSingleSelectionModel(m_imageComponentKey); + final ParameterSingleSelectionModel componentModel = new ParameterSingleSelectionModel(m_imageComponentKey); m_imageComponent = new MapComponentSelectionModel(componentModel, new HashMap()); - Map selectors = m_imageComponent.getComponentsMap(); -// m_adminListener = new ImageComponentAdminListener(m_imageComponent); - - ImageUploadComponent upload = new ImageUploadComponent(ImageComponent.ADMIN_IMAGES); - // For future use - //upload.getForm().addInitListener(m_adminListener); - // upload.addProcessListener(m_adminListener); - selectors.put(ImageComponent.UPLOAD, upload); - body.addSegment( - new Label(GlobalizationUtil.globalize("cms.ui.image_upload")), - upload); + final Map selectors = m_imageComponent.getComponentsMap(); + m_adminListener = new ImageComponentAdminListener(m_imageComponent, this); - ImageLibraryComponent library = new ImageLibraryComponent(ImageComponent.ADMIN_IMAGES); - // For future use - //library.getForm().addInitListener(m_adminListener); - // library.getForm().addProcessListener(m_adminListener); -// library.addUploadLink(new ActionListener() { -// -// public void actionPerformed(ActionEvent ev) { -// setImageComponent(ev.getPageState(), ImageComponent.UPLOAD); -// } -// }); + final ImageLibraryComponent library = new ImageLibraryComponent(ImageComponent.ADMIN_IMAGES); + library.getForm().addInitListener(m_adminListener); + library.getForm().addProcessListener(m_adminListener); + library.addUploadLink(m_adminListener); selectors.put(ImageComponent.LIBRARY, library); - body.addSegment( + m_bodySegments.put(ImageComponent.LIBRARY, m_body.addSegment( new Label(GlobalizationUtil.globalize("cms.ui.image_library")), - library); + library)); + final ImageUploadComponent upload = new ImageUploadComponent(ImageComponent.ADMIN_IMAGES); + upload.getForm().addInitListener(m_adminListener); + upload.getForm().addSubmissionListener(m_adminListener); + upload.getForm().addProcessListener(m_adminListener); + selectors.put(ImageComponent.UPLOAD, upload); + m_bodySegments.put(ImageComponent.UPLOAD, m_body.addSegment( + new Label(GlobalizationUtil.globalize("cms.ui.image_upload")), + upload)); + } @Override - public final void register(Page page) { + public final void register(final Page page) { super.register(page); - Map componentsMap = m_imageComponent.getComponentsMap(); -// Iterator i = componentsMap.keySet().iterator(); -// while (i.hasNext()) { -// Object key = i.next(); -// Component component = (Component) componentsMap.get(key); -// -// page.setVisibleDefault(component, ImageComponent.LIBRARY.equals(key)); -// } + Iterator<String> keys = m_bodySegments.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + page.setVisibleDefault(m_bodySegments.get(key), ImageComponent.LIBRARY.equals(key)); +// for (int index = 0; index < m_bodySegments.get(key).size(); index++) { + +// Component component = m_bodySegments.get(key).get(index); +// page.setVisibleDefault(component, ImageComponent.LIBRARY.equals(key)); +// } + } + + // final Map componentsMap = m_imageComponent.getComponentsMap(); + // + // final Iterator keyIter = componentsMap.keySet().iterator(); + // while (keyIter.hasNext()) { + // final Object key = keyIter.next(); + // final Component component = (Component) componentsMap.get(key); + // + // page.setVisibleDefault(component, ImageComponent.LIBRARY.equals(key)); + // } + // page.addComponentStateParam(this, m_imageComponentKey); } @Override - public final void reset(PageState state) { + public final void reset(final PageState state) { super.reset(state); - } - private final class SubmissionListener implements FormSubmissionListener { + Iterator<String> keys = m_bodySegments.keySet().iterator(); - public final void submitted(final FormSectionEvent e) { - final PageState s = e.getPageState(); + while (keys.hasNext()) { + String key = keys.next(); + state.setVisible(m_bodySegments.get(key), ImageComponent.LIBRARY.equals(key)); + for (int index = 0; index < m_bodySegments.get(key).size(); index++) { + + Component component = m_bodySegments.get(key).get(index); +// state.setVisible(component, ImageComponent.LIBRARY.equals(key)); + // Reset all components if they are of type Resettable + + if (component instanceof Resettable) { + ((Resettable) component).reset(state); + } + } } - } - -// private void setImageComponent(PageState ps, final String activeKey) { -// m_imageComponent.setSelectedKey(ps, activeKey); + + +// final Map componentsMap = m_imageComponent.getComponentsMap(); +// m_imageComponent.setSelectedKey(state, ImageComponent.LIBRARY); +// final Iterator keyIter = componentsMap.keySet().iterator(); +// while (keyIter.hasNext()) { +// final Object key = keyIter.next(); +// final Component component = (Component) componentsMap.get(key); // -// if (s_log.isDebugEnabled()) { -// s_log.debug("Selected component: " + activeKey); -// } +// state.setVisible(component, ImageComponent.LIBRARY.equals(key)); // -// Map componentsMap = m_imageComponent.getComponentsMap(); -// Iterator i = componentsMap.keySet().iterator(); -// while (i.hasNext()) { -// Object key = i.next(); -// Component component = (Component) componentsMap.get(key); -// -// boolean isVisible = activeKey.equals(key); -// -// if (s_log.isDebugEnabled()) { -// s_log.debug("Key: " + key + "; Visibility: " + isVisible); +// // Reset all components if they are of type Resettable +// if (component instanceof Resettable) { +// ((Resettable) component).reset(state); // } -// -// ps.setVisible(component, isVisible); // } -// } + } -// public void init(FormSectionEvent event) -// throws FormProcessException { -// PageState ps = event.getPageState(); -// setImageComponent(ps, ImageComponent.LIBRARY); -// -//// ItemImageAttachment attachment = m_imageStep.getAttachment(ps); -//// if (null == attachment) { -// // XXX: Do something -//// } -// } + private class ImageAdminListModel implements ListModel { + + private ArrayList<String> m_keys; + private int m_index = -1; + + public ImageAdminListModel(ArrayList keys) { + m_keys = keys; + } + + public boolean next() { + return (m_index++ < m_keys.size() - 1); + } + + public Object getElement() { + return GlobalizationUtil.globalize("cms.ui.image_" + m_keys.get(m_index)).localize(); + } + + public String getKey() { + return m_keys.get(m_index); + } + } + + private class ImageAdminListModelBuilder extends LockableImpl implements ListModelBuilder { + + public ListModel makeModel(final List list, final PageState state) { + ArrayList<String> keys = new ArrayList(2); + keys.add(ImageComponent.LIBRARY); + keys.add(ImageComponent.UPLOAD); + return new ImageAdminListModel(keys); + } + } + + private class ImageAdminSelectionListener implements ChangeListener { + + public final void stateChanged(final ChangeEvent e) { + S_LOG.debug("Selection state changed; I may change " + + "the body's visible pane"); + + final PageState state = e.getPageState(); + +// getBody().reset(state); + + if (m_model.isSelected(state)) { + S_LOG.debug("The selection model is selected; displaying " + + "the item pane"); + +// getBody().push(state, getItemPane()); + } + } + } + + private class LinksSection extends Section { + + LinksSection() { + setHeading(GlobalizationUtil.globalize("cms.ui.images_links")); + + final ActionGroup group = new ActionGroup(); + setBody(group); + + group.setSubject(m_links); + } + } } Modified: trunk/ccm-cms/web/assets/xinha/plugins/OpenCCM/images/images.js =================================================================== --- trunk/ccm-cms/web/assets/xinha/plugins/OpenCCM/images/images.js 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/web/assets/xinha/plugins/OpenCCM/images/images.js 2012-12-16 18:04:05 UTC (rev 2379) @@ -286,12 +286,15 @@ OpenCCM.prototype.imageBrowse = function(window) { - this.imageSet({ - src : "/theme/mandalay/ccm/cms-service/stream/image/?image_id=9001", - width : "304", - height : "420", - name : "Schild.jpg" - }); + var baseURL = window.location.href; + var offset = baseURL.lastIndexOf("/"); + var destURL = baseURL.slice(0, offset+1) + "image_select.jsp"; + +// var searchDialog = new Xinha.Dialog(this.editor, destURL, '');//,{width:800, height:600}, {'closable':true}); +// searchDialog.show(); + var selectWindow = window.open(destURL, "_blank", "scrollbars=yes,directories=no,toolbar=no,width=800,height=600,status=no,menubar=no"); + selectWindow.openCCM = this; +// return false; }; OpenCCM.prototype.imageSet = function(imageData) Modified: trunk/ccm-cms/web/assets/xinha/plugins/OpenCCM/links/links.js =================================================================== --- trunk/ccm-cms/web/assets/xinha/plugins/OpenCCM/links/links.js 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-cms/web/assets/xinha/plugins/OpenCCM/links/links.js 2012-12-16 18:04:05 UTC (rev 2379) @@ -204,13 +204,13 @@ OpenCCM.prototype.linkBrowse = function(window) { - baseURL = window.location.href;//.pathname; - offset = baseURL.lastIndexOf("/"); - destURL = baseURL.slice(0, offset+1) + "search.jsp?useURL=true&widget=getElementById('" + this.dialogs["links"].id["ci_href"] + "')"; + var baseURL = window.location.href; + var offset = baseURL.lastIndexOf("/"); + var destURL = baseURL.slice(0, offset+1) + "search.jsp?useURL=true&widget=getElementById('" + this.dialogs["links"].id["ci_href"] + "')"; // var searchDialog = new Xinha.Dialog(this.editor, destURL, '');//,{width:800, height:600}, {'closable':true}); // searchDialog.show(); - window.open(destURL, "_blank", "directories=no,toolbar=no,width=600,height=400,status=no,menubar=no"); + window.open(destURL, "_blank", "scrollbars=yes,directories=no,toolbar=no,width=800,height=600,status=no,menubar=no"); return false; } Modified: trunk/ccm-core/src/com/arsdigita/bebop/Paginator.java =================================================================== --- trunk/ccm-core/src/com/arsdigita/bebop/Paginator.java 2012-12-16 17:51:19 UTC (rev 2378) +++ trunk/ccm-core/src/com/arsdigita/bebop/Paginator.java 2012-12-16 18:04:05 UTC (rev 2379) @@ -18,7 +18,6 @@ */ package com.arsdigita.bebop; - import com.arsdigita.bebop.list.ListModel; import com.arsdigita.bebop.list.ListModelBuilder; import com.arsdigita.bebop.parameters.IntegerParameter; @@ -27,12 +26,12 @@ import com.arsdigita.xml.Element; /** - * A pagination component - * used to select different page views from a list of items. + * A pagination component used to select different page views from a list of + * items. * * <p>In most cases, this component will be used with either a {@link - * List} or a {@link Table}. Here is an example on how to use this - * pagination component with a Table: + * List} or a {@link Table}. Here is an example on how to use this pagination + * component with a Table: * * <blockquote><pre><code> * Table myTable = new Table(new myTableModelBuilder(), @@ -44,11 +43,11 @@ * p.add(myTable); * </code></pre></blockquote> * - * <p>The model builder that is used in <code>myTable</code> was designed - * to also implement the {@link PaginationModelBuilder} - * interface. With both interfaces being implemented by the same - * class, it is much easier to cache the results of operations - * performed on the {@link com.arsdigita.persistence.DataQuery} used to generate the results. + * <p>The model builder that is used in + * <code>myTable</code> was designed to also implement the {@link PaginationModelBuilder} + * interface. With both interfaces being implemented by the same class, it is + * much easier to cache the results of operations performed on the {@link com.arsdigita.persistence.DataQuery} + * used to generate the results. * * <blockquote><pre><code> * public class myTableModelBuilder extends LockableImpl @@ -79,16 +78,16 @@ * } * </code></pre></blockquote> * - * <p>Subclasses that wish to render the page links in a different format - * will override the {@link #buildPaginationDisplay()} method. The - * implementation of this method must set the selection model used to - * retrieve the page number by calling the {@link - * #setPageNumSelectionModel(SingleSelectionModel)} method. Aside from - * changing the display, this pagination component will hide itself if - * {@link PaginationModelBuilder#getTotalSize(Paginator, PageState)} - * is less than the page size (i.e., a single page can be used to - * display the entire results). This default behavior can be changed - * by calling {@link #setHiddenIfSinglePage(boolean)} with + * <p>Subclasses that wish to render the page links in a different format will + * override the {@link #buildPaginationDisplay()} method. The implementation of + * this method must set the selection model used to retrieve the page number by + * calling the {@link + * #setPageNumSelectionModel(SingleSelectionModel)} method. Aside from changing + * the display, this pagination component will hide itself if + * {@link PaginationModelBuilder#getTotalSize(Paginator, PageState)} is less + * than the page size (i.e., a single page can be used to display the entire + * results). This default behavior can be changed by calling {@link #setHiddenIfSinglePage(boolean)} + * with * <code>false</code>. * * @see PaginationModelBuilder @@ -96,48 +95,44 @@ * @author Phong Nguyen * @version $Id$ * @since 4.6.10 - **/ + * + */ public class Paginator extends SimpleContainer implements Resettable { // $Change: 44247 $ // $Revision: #16 $ // $DateTime: 2004/08/16 18:10:38 $ // $Author$ - // The builder which returns the total number of items to // paginate. private PaginationModelBuilder m_builder; - // The selection model that returns the selected page number. The // contained ParameterModel should be a StringParameter, since // this is the default for List and Table. private SingleSelectionModel m_pageNumModel; - // The selection model that returns the number of items to display // for one page. private SingleSelectionModel m_pageSizeModel; - // This is used to determine if this component should be hidden // when there is only a single page to display. Defaults to true. private boolean m_hiddenIfSinglePage; - // A label that contains a space, " ". This is used to insert // spaces between the page links from within the list's // generateXML() method. private BoxPanel m_spacePanel; private Label m_space; - // defined in List.java private static final String _SELECT_EVENT = "s"; /** * Constructor. * - * @param builder The builder used to retrieve the total number of - * results to paginate. - * @param defaultPageSize The default number of results to display on - * each page. - **/ + * @param builder The builder used to retrieve the total number of results + * to paginate. + * @param defaultPageSize The default number of results to display on each + * page. + * + */ public Paginator(PaginationModelBuilder builder, int defaultPageSize) { super(); @@ -157,16 +152,15 @@ } /** - * Builds the display for rendering the page links. Subclasses can - * override this method to provide a different rendering of the - * page links. If this is the case, make sure that the {@link - * #setPageNumSelectionModel(SingleSelectionModel)} method is - * called to set the selection model for retrieving the selected - * page number. - **/ + * Builds the display for rendering the page links. Subclasses can override + * this method to provide a different rendering of the page links. If this + * is the case, make sure that the {@link + * #setPageNumSelectionModel(SingleSelectionModel)} method is called to set + * the selection model for retrieving the selected page number. + * + */ protected void buildPaginationDisplay() { - PaginatorList list = new PaginatorList - (new PageListModelBuilder(this, getPaginationModelBuilder())); + PaginatorList list = new PaginatorList(new PageListModelBuilder(this, getPaginationModelBuilder())); setPageNumSelectionModel(list.getSelectionModel()); // This is used within the list's generateXML() method to @@ -183,14 +177,14 @@ } /** - * Sets the selection model that is used for returning the - * selected page number. Subclasses that override the {@link - * #buildPaginationDisplay()} method will need to call this - * method. + * Sets the selection model that is used for returning the selected page + * number. Subclasses that override the {@link + * #buildPaginationDisplay()} method will need to call this method. * - * @param pageNumModel The selection model used for returning the - * selected page number. - **/ + * @param pageNumModel The selection model used for returning the selected + * page number. + * + */ protected void setPageNumSelectionModel(SingleSelectionModel pageNumModel) { m_pageNumModel = pageNumModel; } @@ -200,7 +194,8 @@ * * @param state Represents the current state of the request. * @return The selected page number. - **/ + * + */ public int getSelectedPageNum(PageState state) { String pageNum = (String) m_pageNumModel.getSelectedKey(state); if (pageNum == null) { @@ -215,7 +210,8 @@ * * @param state Represents the current state of the request. * @param pageNum The number of the page to set as selected. - **/ + * + */ public void setSelectedPageNum(PageState state, int pageNum) { m_pageNumModel.setSelectedKey(state, String.valueOf(pageNum)); } @@ -225,7 +221,8 @@ * * @param state Represents the current state of the request. * @return The number of items to display per page. - **/ + * + */ public int getPageSize(PageState state) { return ((Integer) m_pageSizeModel.getSelectedKey(state)).intValue(); } @@ -235,22 +232,23 @@ * * @param state Represents the current state of the request. * @param pageSize The number of items to display per page. - **/ + * + */ public void setPageSize(PageState state, int pageSize) { m_pageSizeModel.setSelectedKey(state, new Integer(pageSize)); } /** - * This returns the total number of pages that will be displayed - * by this paginator. + * This returns the total ... [truncated message content] |