* Einige Übersetzungen für ccm-cms, insb. für die neuen Teile
 * ResultPane für ImageSelectPage hinzugefügt, die das Javascript mit den entscprechenden Parametern ausgibt
 * DefaultImageModelBuilder provisorisch repariert, so daß der Paginator zurückgesetzt wird.
 * ImagesPane umgestellt, so daß die beiden Subformulare über die linke Spalte ausgewählt werden können (defekt)


Xinha-Plugin

 * kleine Detail-Verbesserungen
 * Verknüpfung mit ImageSelectPage
 * Fenster vergrößert 
 * Fenster sind nun scrollbar

git-svn-id: https://svn.libreccm.org/ccm/trunk@1781 8810af33-2d31-482b-a856-94f89814c4df
master
quasi 2012-07-24 05:23:26 +00:00
parent 16c44cea88
commit 19cd652bbf
16 changed files with 416 additions and 181 deletions

View File

@ -1109,3 +1109,4 @@ cms.ui.images=Images
cms.ui.search.create.select_close=Select item and close cms.ui.search.create.select_close=Select item and close
cms.ui.search.create.select_edit=Select item and edit cms.ui.search.create.select_edit=Select item and edit
cms.ui.clear=Clear

View File

@ -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_close=Item ausw\u00e4hlen und schlie\u00dfen
cms.ui.search.create.select_edit=Item ausw\u00e4hlen und weiter bearbeiten cms.ui.search.create.select_edit=Item ausw\u00e4hlen und weiter bearbeiten
cms.ui.clear=Zur\u00fccksetzen

View File

@ -48,3 +48,4 @@ cms.ui.images=Images
cms.ui.search.create.select_close= cms.ui.search.create.select_close=
cms.ui.search.create.select_edit= cms.ui.search.create.select_edit=
cms.ui.clear=

View File

@ -579,3 +579,4 @@ cms.ui.images=Images
cms.ui.search.create.select_close= cms.ui.search.create.select_close=
cms.ui.search.create.select_edit= cms.ui.search.create.select_edit=
cms.ui.clear=

View File

@ -43,24 +43,9 @@ import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitContactCollection
import com.arsdigita.cms.contenttypes.util.ContenttypesGlobalizationUtil; import com.arsdigita.cms.contenttypes.util.ContenttypesGlobalizationUtil;
import com.arsdigita.cms.dispatcher.ItemResolver; import com.arsdigita.cms.dispatcher.ItemResolver;
import com.arsdigita.cms.dispatcher.Utilities; import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.cms.util.GlobalizationUtil; import com.arsdigita.cms.util.GlobalizationUtil;
import com.arsdigita.domain.DataObjectNotFoundException;
;import com.arsdigita.globalization.GlobalizationHelper;
import com.arsdigita.util.LockableImpl;
import java.math.BigDecimal;
import org.apache.log4j.Logger;
import com.arsdigita.globalization.GlobalizationHelper; 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 com.arsdigita.util.LockableImpl;
import java.math.BigDecimal; import java.math.BigDecimal;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;

View File

@ -31,12 +31,15 @@ import com.arsdigita.util.LockableImpl;
/** /**
* Builds an {@link ImageBrowserModel} by selecting all images which match the * Builds an {@link ImageBrowserModel} by selecting all images which match the
* given keyword. The keyword is supplied by the <code>getSelectedKey</code> * given keyword. The keyword is supplied by the
* method of a <code>SingleSelectionModel</code>. If the keyword is empty * <code>getSelectedKey</code> method of a
* or null, the builder will return an {@link EmptyImageBrowserModel} * <code>SingleSelectionModel</code>. If the keyword is empty or null, the
* builder will return an {@link EmptyImageBrowserModel}
* *
* @author Stanislav Freidin (sfreidin@arsdigita.com) * @author Stanislav Freidin (sfreidin@arsdigita.com)
* @version $Id: DefaultImageBrowserModelBuilder.java 1940 2009-05-29 07:15:05Z terry $ * @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de>
* @version $Id: DefaultImageBrowserModelBuilder.java 1940 2009-05-29 07:15:05Z
* terry $
*/ */
public class DefaultImageBrowserModelBuilder extends LockableImpl public class DefaultImageBrowserModelBuilder extends LockableImpl
implements ImageBrowserModelBuilder, PaginationModelBuilder { implements ImageBrowserModelBuilder, PaginationModelBuilder {
@ -46,6 +49,7 @@ public class DefaultImageBrowserModelBuilder extends LockableImpl
new EmptyImageBrowserModel(); new EmptyImageBrowserModel();
private ImageBrowser m_imageBrowser; private ImageBrowser m_imageBrowser;
private RequestLocal m_size; private RequestLocal m_size;
private String m_key;
private RequestLocal m_imageColl; private RequestLocal m_imageColl;
private String m_context; private String m_context;
@ -63,6 +67,7 @@ public class DefaultImageBrowserModelBuilder extends LockableImpl
m_keywordModel = keywordModel; m_keywordModel = keywordModel;
m_context = context; m_context = context;
m_size = new RequestLocal(); m_size = new RequestLocal();
m_key = "";
m_imageColl = new RequestLocal(); m_imageColl = new RequestLocal();
} }
@ -76,6 +81,15 @@ public class DefaultImageBrowserModelBuilder extends LockableImpl
this(keywordModel, ContentItem.DRAFT); 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 * 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. // pass through key even if null -- null key will return all rows in m_context.
//ImageAssetCollection c = ReusableImageAsset.getReusableImagesByKeyword(key, m_context); //ImageAssetCollection c = ReusableImageAsset.getReusableImagesByKeyword(key, m_context);
return new DefaultImageBrowserModel((ImageAssetCollection) m_imageColl. return new DefaultImageBrowserModel((ImageAssetCollection) m_imageColl.get(s));
get(s));
} }
/** /**
@ -106,27 +119,42 @@ public class DefaultImageBrowserModelBuilder extends LockableImpl
public int getTotalSize(Paginator paginator, PageState state) { 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); String key = (String) m_keywordModel.getSelectedKey(state);
ImageAssetCollection c = ReusableImageAsset.
getReusableImagesByKeyword(key, m_context); //HACK: (by Quasimodo)
if (c == null) { // So, there is something broken. The selectedPage has to be resettet to
return 0; // 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
size = new Integer( (int) ReusableImageAsset.getReusableImagesByKeyword(key, m_context).size()); ImageAssetCollection imageCollection = ReusableImageAsset.getReusableImagesByKeyword(key, m_context);
if (imageCollection != null) {
c.setRange(new Integer(paginator.getFirst(state)), size = (int) imageCollection.size();
new Integer(paginator.getLast(state) + 1)); }
m_size.set(state, 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) { public void setImageBrowser(ImageBrowser ib) {
@ -134,11 +162,11 @@ public class DefaultImageBrowserModelBuilder extends LockableImpl
} }
/** /**
* Indicates whether the paginator should be visible, * Indicates whether the paginator should be visible, based on the
* based on the visibility of the image browser itself. * visibility of the image browser itself.
* *
* @return true if image browser is visible, or if the * @return true if image browser is visible, or if the associated image
* associated image browser is unknown. * browser is unknown.
*/ */
public boolean isVisible(PageState state) { public boolean isVisible(PageState state) {
return (m_imageBrowser != null) ? m_imageBrowser.isVisible(state) : true; return (m_imageBrowser != null) ? m_imageBrowser.isVisible(state) : true;

View File

@ -18,7 +18,6 @@
*/ */
package com.arsdigita.cms.ui; package com.arsdigita.cms.ui;
import com.arsdigita.bebop.BoxPanel; import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.Form; import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData; import com.arsdigita.bebop.FormData;
@ -41,12 +40,12 @@ import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.util.GlobalizationUtil; import com.arsdigita.cms.util.GlobalizationUtil;
/** /**
* Sticks a form at the top of an {@link ImageBrowser} in order to * Sticks a form at the top of an {@link ImageBrowser} in order to search images
* search images by keyword * by keyword
* *
* @author Stanislav Freidin (sfreidin@arsdigita.com) * @author Stanislav Freidin (sfreidin@arsdigita.com)
* @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de>
* @version $Id: ImageChooser.java 1940 2009-05-29 07:15:05Z terry $ * @version $Id: ImageChooser.java 1940 2009-05-29 07:15:05Z terry $
*/ */
public class ImageChooser extends BoxPanel { public class ImageChooser extends BoxPanel {
@ -56,11 +55,9 @@ public class ImageChooser extends BoxPanel {
private Paginator m_paginator; private Paginator m_paginator;
private StringParameter m_keyword; private StringParameter m_keyword;
private SingleSelectionModel m_sel; private SingleSelectionModel m_sel;
public static final String KEYWORD = "kw"; public static final String KEYWORD = "kw";
public static int LIST_SIZE = 20; public static int LIST_SIZE = 20;
/** /**
* Construct a new ImageChooser * Construct a new ImageChooser
* *
@ -74,15 +71,12 @@ public class ImageChooser extends BoxPanel {
m_keyword = new StringParameter(KEYWORD); m_keyword = new StringParameter(KEYWORD);
m_sel = new ParameterSingleSelectionModel(m_keyword); m_sel = new ParameterSingleSelectionModel(m_keyword);
m_form = new ImageKeywordForm(m_sel); m_form = new ImageKeywordForm(m_sel);
DefaultImageBrowserModelBuilder modelBuilder = DefaultImageBrowserModelBuilder modelBuilder = new DefaultImageBrowserModelBuilder(m_sel, context);
new DefaultImageBrowserModelBuilder(m_sel, context);
m_browser = new ImageBrowser(modelBuilder, mode); m_browser = new ImageBrowser(modelBuilder, mode);
modelBuilder.setImageBrowser(m_browser); modelBuilder.setImageBrowser(m_browser);
m_paginator = new Paginator m_paginator = new Paginator(modelBuilder, LIST_SIZE);
(modelBuilder,
LIST_SIZE);
super.add(m_form); super.add(m_form);
super.add(m_paginator); super.add(m_paginator);
super.add(m_browser); super.add(m_browser);
@ -112,6 +106,7 @@ public class ImageChooser extends BoxPanel {
/** /**
* Add the "keyword" parameter to the page state * Add the "keyword" parameter to the page state
*/ */
@Override
public void register(Page p) { public void register(Page p) {
p.addComponent(this); p.addComponent(this);
p.addComponentStateParam(this, m_keyword); p.addComponentStateParam(this, m_keyword);
@ -119,8 +114,7 @@ public class ImageChooser extends BoxPanel {
/** /**
* Add an action listener to the browser. The inner class * Add an action listener to the browser. The inner class
* {@link ImageBrowser.LinkActionListener} will probably be * {@link ImageBrowser.LinkActionListener} will probably be used here.
* used here.
* *
* @param l the action listener. * @param l the action listener.
*/ */
@ -129,8 +123,8 @@ public class ImageChooser extends BoxPanel {
} }
/** /**
* Add a submission listener to the form. The listener will * Add a submission listener to the form. The listener will fire whenever a
* fire whenever a button on the form is clicked. * button on the form is clicked.
* *
* @param l the action listener. * @param l the action listener.
*/ */
@ -153,8 +147,8 @@ public class ImageChooser extends BoxPanel {
} }
/** /**
* Set the specified keyword. All images matching the keyword * Set the specified keyword. All images matching the keyword will be
* will be displayed in the browser. * displayed in the browser.
* *
* @param state The page state * @param state The page state
* @param word The new keyword * @param word The new keyword
@ -211,25 +205,24 @@ public class ImageChooser extends BoxPanel {
private SingleSelectionModel m_sel; private SingleSelectionModel m_sel;
private SaveCancelSection m_saveCancel; private SaveCancelSection m_saveCancel;
public static String WORD = "word"; public static String WORD = "word";
/** /**
* Construct a new ImageKeywordForm * 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) { public ImageKeywordForm(SingleSelectionModel sel) {
super("ImageKeywordForm", new BoxPanel(BoxPanel.HORIZONTAL)); super("ImageKeywordForm", new BoxPanel(BoxPanel.HORIZONTAL));
m_sel = sel; m_sel = sel;
add(new Label(GlobalizationUtil.globalize("cms.ui.enter_a_keyword"))); add(new Label(GlobalizationUtil.globalize("cms.ui.enter_a_keyword")));
TextField t = new TextField(WORD); final TextField keyword = new TextField(WORD);
// allow null keyword field for view all add(keyword);
//t.addValidationListener(new NotNullValidationListener("keyword"));
add(t);
m_saveCancel = new SaveCancelSection(); 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); add(m_saveCancel);
addProcessListener(this); addProcessListener(this);
@ -241,10 +234,10 @@ public class ImageChooser extends BoxPanel {
/** /**
* Set the keyword in the text widget * Set the keyword in the text widget
*/ */
public void init(FormSectionEvent e) throws FormProcessException { public void init(final FormSectionEvent event) throws FormProcessException {
PageState s = e.getPageState(); final PageState state = event.getPageState();
FormData data = e.getFormData(); final FormData data = event.getFormData();
data.put(WORD, m_sel.getSelectedKey(s)); data.put(WORD, m_sel.getSelectedKey(state));
} }
/** /**
@ -261,10 +254,15 @@ public class ImageChooser extends BoxPanel {
return m_sel; return m_sel;
} }
public void process(FormSectionEvent e) { public void process(final FormSectionEvent event) {
FormData data = e.getFormData(); final FormData data = event.getFormData();
PageState state = e.getPageState(); 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)); m_sel.setSelectedKey(state, (String) data.get(WORD));
} }
} }
} }
}

View File

@ -81,7 +81,6 @@ public abstract class ImageComponentAbstractListener implements FormInitListener
} }
protected void setImageComponent(PageState ps, final String activeKey) { protected void setImageComponent(PageState ps, final String activeKey) {
m_imageComponent.setSelectedKey(ps, activeKey);
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Selected component: " + activeKey); s_log.debug("Selected component: " + activeKey);

View File

@ -17,18 +17,17 @@ import org.apache.log4j.Logger;
*/ */
public class ImageComponentSelectListener extends ImageComponentAbstractListener { public class ImageComponentSelectListener extends ImageComponentAbstractListener {
private static final Logger s_log = Logger.getLogger(ImageComponentSelectListener.class); private static final Logger S_LOG = Logger.getLogger(ImageComponentSelectListener.class);
private final ImageSelectResultPane m_resultPane;
public ImageComponentSelectListener(MapComponentSelectionModel imageComponent) { public ImageComponentSelectListener(MapComponentSelectionModel imageComponent, ImageSelectResultPane resultPane) {
super(imageComponent); super(imageComponent);
m_resultPane = resultPane;
} }
protected void processImage(FormSectionEvent event, PageState ps, ImageComponent component, ReusableImageAsset image) { protected void processImage(FormSectionEvent event, PageState ps, ImageComponent component, ReusableImageAsset image) {
// SELECT { m_resultPane.setResult(image.getDisplayName(), image.getID(), image.getWidth(), image.getHeight());
String name = image.getDisplayName();
BigDecimal id = image.getID(); m_imageComponent.setSelectedKey(ps, ImageSelectPage.RESULT);
BigDecimal width = image.getWidth();
BigDecimal height = image.getHeight();
// SELECT }
} }
} }

View File

@ -45,26 +45,26 @@ public class ImageLibraryComponent extends SimpleContainer implements ImageCompo
this(ImageComponent.ATTACH_IMAGE); this(ImageComponent.ATTACH_IMAGE);
} }
public ImageLibraryComponent(int mode) { public ImageLibraryComponent(final int mode) {
m_mode = mode; m_mode = mode;
m_imageID = new BigDecimalParameter("imageID"); m_imageID = new BigDecimalParameter("imageID");
m_imageModel = new ItemSelectionModel(m_imageID); m_imageModel = new ItemSelectionModel(m_imageID);
m_chooser = new ImageChooser(ContentItem.DRAFT, m_mode); m_chooser = new ImageChooser(ContentItem.DRAFT, m_mode);
m_chooser.addImageActionListener(new ImageBrowser.LinkActionListener() { m_chooser.addImageActionListener(new ImageBrowser.LinkActionListener() {
public void deleteClicked(PageState ps, BigDecimal imageID) { public void deleteClicked(final PageState state, final BigDecimal imageID) {
ImagesPane.s_log.debug("Clicked delete"); ImagesPane.S_LOG.debug("Clicked delete");
ReusableImageAsset image = new ReusableImageAsset(imageID); final ReusableImageAsset image = new ReusableImageAsset(imageID);
image.delete(); image.delete();
} }
public void linkClicked(PageState ps, BigDecimal imageID) { public void linkClicked(final PageState state, final BigDecimal imageID) {
ImagesPane.s_log.debug("Clicked select"); ImagesPane.S_LOG.debug("Clicked select");
try { try {
ReusableImageAsset image = new ReusableImageAsset(imageID); final ReusableImageAsset image = new ReusableImageAsset(imageID);
m_imageModel.setSelectedObject(ps, image); m_imageModel.setSelectedObject(state, image);
} catch (DataObjectNotFoundException ex) { } 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) { public ReusableImageAsset getImage(final FormSectionEvent event) {
PageState ps = event.getPageState(); final PageState state = event.getPageState();
return (ReusableImageAsset) m_imageModel.getSelectedItem(ps); return (ReusableImageAsset) m_imageModel.getSelectedItem(state);
} }
@Override @Override
public void register(Page p) { public void register(final Page page) {
super.register(p); super.register(page);
p.addComponentStateParam(this, m_imageID); page.addComponentStateParam(this, m_imageID);
} }
public String getCaption(FormSectionEvent event) { public String getCaption(final FormSectionEvent event) {
PageState ps = event.getPageState(); final PageState state = event.getPageState();
return (String) m_caption.getValue(ps); return (String) m_caption.getValue(state);
} }
public String getDescription(FormSectionEvent event) { public String getDescription(final FormSectionEvent event) {
PageState ps = event.getPageState(); final PageState state = event.getPageState();
return (String) m_description.getValue(ps); return (String) m_description.getValue(state);
} }
public String getTitle(FormSectionEvent event) { public String getTitle(final FormSectionEvent event) {
PageState ps = event.getPageState(); final PageState state = event.getPageState();
return (String) m_title.getValue(ps); return (String) m_title.getValue(state);
} }
public String getUseContext(FormSectionEvent event) { public String getUseContext(final FormSectionEvent event) {
PageState ps = event.getPageState(); final PageState state = event.getPageState();
return (String) m_useContext.getValue(ps); return (String) m_useContext.getValue(state);
} }
public Form getForm() { public Form getForm() {
@ -151,20 +151,20 @@ public class ImageLibraryComponent extends SimpleContainer implements ImageCompo
return m_saveCancel; return m_saveCancel;
} }
public void addUploadLink(ActionListener actionListener) { public void addUploadLink(final ActionListener actionListener) {
// Add action link to image upload component // Add action link to image upload component
if (m_mode != ImageComponent.DISPLAY_ONLY) { if (m_mode != ImageComponent.DISPLAY_ONLY) {
ActionLink upload = new ActionLink("Upload new image"); final ActionLink upload = new ActionLink("Upload new image");
upload.addActionListener(actionListener); upload.addActionListener(actionListener);
add(upload, ColumnPanel.FULL_WIDTH); add(upload, ColumnPanel.FULL_WIDTH);
} }
} }
// Reset this component // Reset this component
public void reset(PageState ps) { public void reset(final PageState state) {
// clear selection // clear selection
m_imageModel.clearSelection(ps); m_imageModel.clearSelection(state);
m_chooser.clearSelection(ps); m_chooser.clearSelection(state);
m_chooser.clearKeyword(ps); m_chooser.clearKeyword(state);
} }
} }

View File

@ -12,8 +12,6 @@ import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.bebop.TabbedPane; import com.arsdigita.bebop.TabbedPane;
import com.arsdigita.bebop.event.ActionEvent; import com.arsdigita.bebop.event.ActionEvent;
import com.arsdigita.bebop.event.ActionListener; 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.BigDecimalParameter;
import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.cms.CMSConfig; import com.arsdigita.cms.CMSConfig;
@ -28,11 +26,13 @@ import org.apache.log4j.Logger;
*/ */
public class ImageSelectPage extends CMSPage { 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 final static String XSL_CLASS = "CMS Admin";
private TabbedPane m_tabbedPane; private TabbedPane m_tabbedPane;
private ImageLibraryComponent m_imageLibrary; private ImageLibraryComponent m_imageLibrary;
private ImageUploadComponent m_imageUpload; private ImageUploadComponent m_imageUpload;
private ImageSelectResultPane m_resultPane;
private BigDecimalParameter m_sectionId; private BigDecimalParameter m_sectionId;
private final StringParameter m_imageComponentKey; private final StringParameter m_imageComponentKey;
private final MapComponentSelectionModel m_imageComponent; private final MapComponentSelectionModel m_imageComponent;
@ -40,9 +40,10 @@ public class ImageSelectPage extends CMSPage {
private static final CMSConfig s_conf = CMSConfig.getInstance(); private static final CMSConfig s_conf = CMSConfig.getInstance();
private static final boolean LIMIT_TO_CONTENT_SECTION = false; private static final boolean LIMIT_TO_CONTENT_SECTION = false;
public static final String CONTENT_SECTION = "section_id"; public static final String CONTENT_SECTION = "section_id";
public static final String RESULT = "result";
public ImageSelectPage() { 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"); setClassAttr("cms-admin");
@ -55,7 +56,8 @@ public class ImageSelectPage extends CMSPage {
new ParameterSingleSelectionModel(m_imageComponentKey); new ParameterSingleSelectionModel(m_imageComponentKey);
m_imageComponent = m_imageComponent =
new MapComponentSelectionModel(componentModel, new HashMap()); new MapComponentSelectionModel(componentModel, new HashMap());
m_selectListener = new ImageComponentSelectListener(m_imageComponent);
m_selectListener = new ImageComponentSelectListener(m_imageComponent, getResultPane());
m_tabbedPane = createTabbedPane(); m_tabbedPane = createTabbedPane();
m_tabbedPane.setIdAttr("page-body"); m_tabbedPane.setIdAttr("page-body");
@ -73,9 +75,11 @@ public class ImageSelectPage extends CMSPage {
if (m_tabbedPane.getCurrentPane(ps).equals(m_imageUpload)) { if (m_tabbedPane.getCurrentPane(ps).equals(m_imageUpload)) {
m_imageComponent.setSelectedKey(ps, ImageComponent.UPLOAD); m_imageComponent.setSelectedKey(ps, ImageComponent.UPLOAD);
} }
} }
}); });
add(m_resultPane);
addGlobalStateParam(m_imageComponentKey); addGlobalStateParam(m_imageComponentKey);
} }
@ -100,6 +104,13 @@ public class ImageSelectPage extends CMSPage {
return m_imageUpload; return m_imageUpload;
} }
protected ImageSelectResultPane getResultPane() {
if (m_resultPane == null) {
m_resultPane = new ImageSelectResultPane();
}
return m_resultPane;
}
protected TabbedPane createTabbedPane() { protected TabbedPane createTabbedPane() {
TabbedPane pane = new TabbedPane(); TabbedPane pane = new TabbedPane();
pane.setClassAttr(XSL_CLASS); 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 tabName The name of the tab if it's added
* @param comp The component to add to the pane * @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) { if (comp != null) {
pane.addTab(GlobalizationUtil.globalize("cms.ui.image_" + tabName).localize().toString(), comp); pane.addTab(GlobalizationUtil.globalize("cms.ui.image_" + tabName).localize().toString(), comp);
} }

View File

@ -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) <sbernstein@zes.uni-bremen.de>
*/
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;
}
}

View File

@ -8,7 +8,6 @@ import com.arsdigita.bebop.ColumnPanel;
import com.arsdigita.bebop.Form; import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.MapComponentSelectionModel;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SaveCancelSection; import com.arsdigita.bebop.SaveCancelSection;
import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSectionEvent;
@ -114,7 +113,7 @@ public class ImageUploadComponent extends Form implements ImageComponent {
// image.setDescription((String) m_caption.getValue(ps)); // image.setDescription((String) m_caption.getValue(ps));
return image; return image;
} catch (IOException ex) { } 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()); throw new FormProcessException(ex.getMessage());
} }
} }

View File

@ -6,16 +6,28 @@ package com.arsdigita.cms.ui;
import com.arsdigita.bebop.Component; import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.List;
import com.arsdigita.bebop.ListPanel;
import com.arsdigita.bebop.MapComponentSelectionModel; import com.arsdigita.bebop.MapComponentSelectionModel;
import com.arsdigita.bebop.Page; import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.ParameterSingleSelectionModel; import com.arsdigita.bebop.ParameterSingleSelectionModel;
import com.arsdigita.bebop.Resettable; import com.arsdigita.bebop.Resettable;
import com.arsdigita.bebop.SegmentedPanel; 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.bebop.parameters.StringParameter;
import com.arsdigita.cms.util.GlobalizationUtil; import com.arsdigita.cms.util.GlobalizationUtil;
import com.arsdigita.toolbox.ui.ActionGroup;
import com.arsdigita.toolbox.ui.LayoutPanel; 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.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
@ -28,80 +40,191 @@ import org.apache.log4j.Logger;
*/ */
public class ImagesPane extends LayoutPanel implements Resettable { 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 StringParameter m_imageComponentKey;
private final MapComponentSelectionModel m_imageComponent; 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() { public ImagesPane() {
// Left column is empty, this is only to provide the same layout for all super();
// tabs in ContentSectionPage
setLeft(new SimpleComponent());
SegmentedPanel body = new SegmentedPanel(); m_model = new ParameterSingleSelectionModel(new StringParameter(List.SELECTED));
setBody(body);
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"); 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()); 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); m_adminListener = new ImageComponentAdminListener(m_imageComponent, this);
ImageUploadComponent upload = new ImageUploadComponent(ImageComponent.ADMIN_IMAGES); final ImageLibraryComponent library = new ImageLibraryComponent(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);
library.getForm().addInitListener(m_adminListener); library.getForm().addInitListener(m_adminListener);
library.getForm().addProcessListener(m_adminListener); library.getForm().addProcessListener(m_adminListener);
library.addUploadLink(m_adminListener); library.addUploadLink(m_adminListener);
selectors.put(ImageComponent.LIBRARY, library); selectors.put(ImageComponent.LIBRARY, library);
body.addSegment( m_bodySegments.put(ImageComponent.LIBRARY, m_body.addSegment(
new Label(GlobalizationUtil.globalize("cms.ui.image_library")), 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 @Override
public final void register(Page page) { public final void register(final Page page) {
super.register(page); super.register(page);
Map componentsMap = m_imageComponent.getComponentsMap();
Iterator i = componentsMap.keySet().iterator(); Iterator<String> keys = m_bodySegments.keySet().iterator();
while (i.hasNext()) {
Object key = i.next();
Component component = (Component) componentsMap.get(key);
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); page.addComponentStateParam(this, m_imageComponentKey);
} }
@Override @Override
public final void reset(PageState ps) { public final void reset(final PageState state) {
super.reset(ps); super.reset(state);
Map componentsMap = m_imageComponent.getComponentsMap(); Iterator<String> keys = m_bodySegments.keySet().iterator();
m_imageComponent.setSelectedKey(ps, ImageComponent.LIBRARY);
Iterator i = componentsMap.keySet().iterator();
while (i.hasNext()) {
Object key = i.next();
Component component = (Component) componentsMap.get(key);
ps.setVisible(component, ImageComponent.LIBRARY.equals(key)); 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 // Reset all components if they are of type Resettable
if (component instanceof Resettable) { if (component instanceof Resettable) {
((Resettable) component).reset(ps); ((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<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);
}
}
} }

View File

@ -286,12 +286,15 @@ OpenCCM.prototype.imageRemove = function() {
OpenCCM.prototype.imageBrowse = function(window) OpenCCM.prototype.imageBrowse = function(window)
{ {
this.imageSet({ var baseURL = window.location.href;
src : "/theme/mandalay/ccm/cms-service/stream/image/?image_id=9001", var offset = baseURL.lastIndexOf("/");
width : "304", var destURL = baseURL.slice(0, offset+1) + "image_select.jsp";
height : "420",
name : "Schild.jpg" // 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) OpenCCM.prototype.imageSet = function(imageData)

View File

@ -204,13 +204,13 @@ OpenCCM.prototype.linkRemove = function()
OpenCCM.prototype.linkBrowse = function(window) OpenCCM.prototype.linkBrowse = function(window)
{ {
baseURL = window.location.href;//.pathname; var baseURL = window.location.href;
offset = baseURL.lastIndexOf("/"); var offset = baseURL.lastIndexOf("/");
destURL = baseURL.slice(0, offset+1) + "search.jsp?useURL=true&widget=getElementById('" + this.dialogs["links"].id["ci_href"] + "')"; 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}); // var searchDialog = new Xinha.Dialog(this.editor, destURL, '');//,{width:800, height:600}, {'closable':true});
// searchDialog.show(); // 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; return false;
} }