diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources.properties
index 885c97e41..3f5f44539 100755
--- a/ccm-cms/src/com/arsdigita/cms/CMSResources.properties
+++ b/ccm-cms/src/com/arsdigita/cms/CMSResources.properties
@@ -1109,3 +1109,4 @@ cms.ui.images=Images
cms.ui.search.create.select_close=Select item and close
cms.ui.search.create.select_edit=Select item and edit
+cms.ui.clear=Clear
diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties
index a25061fa8..75831647c 100755
--- a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties
+++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties
@@ -1100,3 +1100,4 @@ cms.ui.images=Bilder
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
diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties
index d3b65ccb1..bf7ba4606 100755
--- a/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties
+++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties
@@ -48,3 +48,4 @@ cms.ui.images=Images
cms.ui.search.create.select_close=
cms.ui.search.create.select_edit=
+cms.ui.clear=
diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties
index 211cce154..fb5621908 100755
--- a/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties
+++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties
@@ -579,3 +579,4 @@ cms.ui.images=Images
cms.ui.search.create.select_close=
cms.ui.search.create.select_edit=
+cms.ui.clear=
diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitContactTable.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitContactTable.java
index b0d266a84..1df71202c 100644
--- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitContactTable.java
+++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitContactTable.java
@@ -43,24 +43,9 @@ import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitContactCollection
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;
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/DefaultImageBrowserModelBuilder.java b/ccm-cms/src/com/arsdigita/cms/ui/DefaultImageBrowserModelBuilder.java
index 310b6da95..482fb2e36 100755
--- a/ccm-cms/src/com/arsdigita/cms/ui/DefaultImageBrowserModelBuilder.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/DefaultImageBrowserModelBuilder.java
@@ -31,29 +31,33 @@ import com.arsdigita.util.LockableImpl;
/**
* Builds an {@link ImageBrowserModel} by selecting all images which match the
- * given keyword. The keyword is supplied by the getSelectedKey
- * method of a SingleSelectionModel. If the keyword is empty
- * or null, the builder will return an {@link EmptyImageBrowserModel}
+ * given keyword. The keyword is supplied by the
+ * getSelectedKey method of a
+ * SingleSelectionModel. If the keyword is empty or null, the
+ * builder will return an {@link EmptyImageBrowserModel}
*
* @author Stanislav Freidin (sfreidin@arsdigita.com)
- * @version $Id: DefaultImageBrowserModelBuilder.java 1940 2009-05-29 07:15:05Z terry $
+ * @author Sören Bernstein (quasimodo)
+ * @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 @@ public class DefaultImageBrowserModelBuilder extends LockableImpl
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 @@ public class DefaultImageBrowserModelBuilder extends LockableImpl
// 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 class DefaultImageBrowserModelBuilder extends LockableImpl
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;
}
-
- size = new Integer( (int) ReusableImageAsset.getReusableImagesByKeyword(key, m_context).size());
-
- c.setRange(new Integer(paginator.getFirst(state)),
- new Integer(paginator.getLast(state) + 1));
-
+ // End hack
+
+ ImageAssetCollection imageCollection = ReusableImageAsset.getReusableImagesByKeyword(key, m_context);
+ if (imageCollection != null) {
+ size = (int) imageCollection.size();
+ }
+
m_size.set(state, size);
- m_imageColl.set(state, c);
+
+ // This should not be done here.
+ imageCollection.setRange(new Integer(paginator.getFirst(state)),
+ new Integer(paginator.getLast(state) + 1));
+ m_imageColl.set(state, imageCollection);
+
+ } else {
+ size = ((Integer) m_size.get(state)).intValue();
}
- return size.intValue();
+ return size;
}
public void setImageBrowser(ImageBrowser ib) {
@@ -134,11 +162,11 @@ public class DefaultImageBrowserModelBuilder extends LockableImpl
}
/**
- * 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;
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ImageChooser.java b/ccm-cms/src/com/arsdigita/cms/ui/ImageChooser.java
index 87c73dd96..d7a83bfe9 100755
--- a/ccm-cms/src/com/arsdigita/cms/ui/ImageChooser.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/ImageChooser.java
@@ -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.bebop.parameters.StringParameter;
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 (sfreidin@arsdigita.com)
+ * @author Sören Bernstein (quasimodo)
* @version $Id: ImageChooser.java 1940 2009-05-29 07:15:05Z terry $
*/
public class ImageChooser extends BoxPanel {
@@ -56,11 +55,9 @@ public class ImageChooser extends BoxPanel {
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 @@ public class ImageChooser extends BoxPanel {
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 @@ public class ImageChooser extends BoxPanel {
/**
* 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 @@ public class ImageChooser extends BoxPanel {
/**
* 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 @@ public class ImageChooser extends BoxPanel {
}
/**
- * 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 @@ public class ImageChooser extends BoxPanel {
}
/**
- * 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 @@ public class ImageChooser extends BoxPanel {
* @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 @@ public class ImageChooser extends BoxPanel {
* 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 @@ public class ImageChooser extends BoxPanel {
/**
* 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 @@ public class ImageChooser extends BoxPanel {
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));
+ }
}
}
}
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentAbstractListener.java b/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentAbstractListener.java
index b76213cfe..f938821be 100644
--- a/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentAbstractListener.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentAbstractListener.java
@@ -81,7 +81,6 @@ public abstract class ImageComponentAbstractListener implements FormInitListener
}
protected void setImageComponent(PageState ps, final String activeKey) {
- m_imageComponent.setSelectedKey(ps, activeKey);
if (s_log.isDebugEnabled()) {
s_log.debug("Selected component: " + activeKey);
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentSelectListener.java b/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentSelectListener.java
index 9fed094fc..b173f2b5d 100644
--- a/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentSelectListener.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/ImageComponentSelectListener.java
@@ -17,18 +17,17 @@ import org.apache.log4j.Logger;
*/
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);
}
}
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ImageLibraryComponent.java b/ccm-cms/src/com/arsdigita/cms/ui/ImageLibraryComponent.java
index ab8b03d00..895340757 100644
--- a/ccm-cms/src/com/arsdigita/cms/ui/ImageLibraryComponent.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/ImageLibraryComponent.java
@@ -45,26 +45,26 @@ public class ImageLibraryComponent extends SimpleContainer implements ImageCompo
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 class ImageLibraryComponent extends SimpleContainer implements ImageCompo
}
}
- 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,20 +151,20 @@ public class ImageLibraryComponent extends SimpleContainer implements ImageCompo
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) {
+ public void reset(final PageState state) {
// clear selection
- m_imageModel.clearSelection(ps);
- m_chooser.clearSelection(ps);
- m_chooser.clearKeyword(ps);
+ m_imageModel.clearSelection(state);
+ m_chooser.clearSelection(state);
+ m_chooser.clearKeyword(state);
}
}
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectPage.java b/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectPage.java
index 33891b58b..b045401ad 100644
--- a/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectPage.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectPage.java
@@ -12,8 +12,6 @@ import com.arsdigita.bebop.SimpleContainer;
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 @@ import org.apache.log4j.Logger;
*/
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 @@ public class ImageSelectPage extends CMSPage {
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 @@ public class ImageSelectPage extends CMSPage {
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 @@ public class ImageSelectPage extends CMSPage {
if (m_tabbedPane.getCurrentPane(ps).equals(m_imageUpload)) {
m_imageComponent.setSelectedKey(ps, ImageComponent.UPLOAD);
}
-
}
});
+
+ add(m_resultPane);
+
addGlobalStateParam(m_imageComponentKey);
}
@@ -100,6 +104,13 @@ public class ImageSelectPage extends CMSPage {
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 @@ public class ImageSelectPage extends CMSPage {
* @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);
}
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectResultPane.java b/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectResultPane.java
new file mode 100644
index 000000000..0ec451d2d
--- /dev/null
+++ b/ccm-cms/src/com/arsdigita/cms/ui/ImageSelectResultPane.java
@@ -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)
+ */
+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;
+ }
+}
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ImageUploadComponent.java b/ccm-cms/src/com/arsdigita/cms/ui/ImageUploadComponent.java
index 03a38f239..f07428615 100644
--- a/ccm-cms/src/com/arsdigita/cms/ui/ImageUploadComponent.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/ImageUploadComponent.java
@@ -8,7 +8,6 @@ import com.arsdigita.bebop.ColumnPanel;
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 @@ public class ImageUploadComponent extends Form implements ImageComponent {
// 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());
}
}
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ImagesPane.java b/ccm-cms/src/com/arsdigita/cms/ui/ImagesPane.java
index 935f678be..bdf925cee 100644
--- a/ccm-cms/src/com/arsdigita/cms/ui/ImagesPane.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/ImagesPane.java
@@ -6,16 +6,28 @@ 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.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;
@@ -28,80 +40,191 @@ import org.apache.log4j.Logger;
*/
public class ImagesPane extends LayoutPanel implements Resettable {
- public static final Logger s_log = Logger.getLogger(ImagesPane.class);
+ 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 ListPanel m_listPanel;
+ final private SegmentedPanel m_body;
+ private HashMap 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();
+ final Map selectors = m_imageComponent.getComponentsMap();
m_adminListener = new ImageComponentAdminListener(m_imageComponent, this);
- 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);
- body.addSegment(
- new Label(GlobalizationUtil.globalize("cms.ui.image_upload")),
- upload);
-
- ImageLibraryComponent library = new ImageLibraryComponent(ImageComponent.ADMIN_IMAGES);
+ 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);
+ Iterator keys = m_bodySegments.keySet().iterator();
- page.setVisibleDefault(component, ImageComponent.LIBRARY.equals(key));
+ 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 ps) {
- super.reset(ps);
+ public final void reset(final PageState state) {
+ super.reset(state);
- Map componentsMap = m_imageComponent.getComponentsMap();
- m_imageComponent.setSelectedKey(ps, ImageComponent.LIBRARY);
- Iterator i = componentsMap.keySet().iterator();
- while (i.hasNext()) {
- Object key = i.next();
- Component component = (Component) componentsMap.get(key);
+ Iterator keys = m_bodySegments.keySet().iterator();
- ps.setVisible(component, ImageComponent.LIBRARY.equals(key));
+ while (keys.hasNext()) {
+ String key = keys.next();
+ state.setVisible(m_bodySegments.get(key), ImageComponent.LIBRARY.equals(key));
- // Reset all components if they are of type Resettable
- if (component instanceof Resettable) {
- ((Resettable) component).reset(ps);
+ 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);
+ }
+ }
+ }
+
+
+// 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);
+//
+// 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 class ImageAdminListModel implements ListModel {
+
+ private ArrayList 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 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);
+ }
+ }
}
diff --git a/ccm-cms/web/assets/xinha/plugins/OpenCCM/images/images.js b/ccm-cms/web/assets/xinha/plugins/OpenCCM/images/images.js
index fb378fac1..7cfffcb46 100644
--- a/ccm-cms/web/assets/xinha/plugins/OpenCCM/images/images.js
+++ b/ccm-cms/web/assets/xinha/plugins/OpenCCM/images/images.js
@@ -286,12 +286,15 @@ OpenCCM.prototype.imageRemove = function() {
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)
diff --git a/ccm-cms/web/assets/xinha/plugins/OpenCCM/links/links.js b/ccm-cms/web/assets/xinha/plugins/OpenCCM/links/links.js
index fae95f59a..1a7223c24 100644
--- a/ccm-cms/web/assets/xinha/plugins/OpenCCM/links/links.js
+++ b/ccm-cms/web/assets/xinha/plugins/OpenCCM/links/links.js
@@ -204,13 +204,13 @@ OpenCCM.prototype.linkRemove = function()
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;
}