* 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_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_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_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_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.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;

View File

@ -31,12 +31,15 @@ import com.arsdigita.util.LockableImpl;
/**
* 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 (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
implements ImageBrowserModelBuilder, PaginationModelBuilder {
@ -46,6 +49,7 @@ public class DefaultImageBrowserModelBuilder extends LockableImpl
new EmptyImageBrowserModel();
private ImageBrowser m_imageBrowser;
private RequestLocal m_size;
private String m_key;
private RequestLocal m_imageColl;
private String m_context;
@ -63,6 +67,7 @@ public class DefaultImageBrowserModelBuilder extends LockableImpl
m_keywordModel = keywordModel;
m_context = context;
m_size = new RequestLocal();
m_key = "";
m_imageColl = new RequestLocal();
}
@ -76,6 +81,15 @@ public class DefaultImageBrowserModelBuilder extends LockableImpl
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;
}
// End hack
size = new Integer( (int) ReusableImageAsset.getReusableImagesByKeyword(key, m_context).size());
c.setRange(new Integer(paginator.getFirst(state)),
new Integer(paginator.getLast(state) + 1));
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;

View File

@ -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) <sbernstein@zes.uni-bremen.de>
* @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
@ -211,25 +205,24 @@ public class ImageChooser extends BoxPanel {
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();
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));
}
}
}
}

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}

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.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());
}
}

View File

@ -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<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();
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<String> 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<String> 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));
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(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)
{
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)

View File

@ -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;
}