Serveral small bug fixes and cleanups.

git-svn-id: https://svn.libreccm.org/ccm/trunk@2594 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2014-04-01 16:59:52 +00:00
parent 77f8047586
commit 069be900f6
6 changed files with 316 additions and 297 deletions

View File

@ -20,135 +20,138 @@ import org.apache.log4j.Logger;
/**
* An abstract listener for {@link ImageComponent}.
*
* This listener provides the base implementation which is shared between all
* listeners of this kind.
* This listener provides the base implementation which is shared between all listeners of this
* kind.
*
* This listerner is used by {@link ImageSelectPage}.
*
* @author Sören Bernstein <quasi@quasiweb.de>
*/
public abstract class ImageComponentAbstractListener implements FormInitListener,
FormProcessListener,
FormSubmissionListener {
FormProcessListener,
FormSubmissionListener {
private static final Logger s_log = Logger.getLogger(
ImageComponentSelectListener.class);
MapComponentSelectionModel m_imageComponent;
private static final Logger s_log = Logger.getLogger(
ImageComponentSelectListener.class);
MapComponentSelectionModel m_imageComponent;
public ImageComponentAbstractListener(MapComponentSelectionModel imageComponent) {
super();
m_imageComponent = imageComponent;
}
public ImageComponentAbstractListener(MapComponentSelectionModel imageComponent) {
super();
m_imageComponent = imageComponent;
}
@Override
public void init(FormSectionEvent event)
throws FormProcessException {
PageState ps = event.getPageState();
if (!m_imageComponent.isSelected(ps)) {
setImageComponent(ps, ImageComponent.LIBRARY);
}
}
@Override
public void init(FormSectionEvent event)
throws FormProcessException {
PageState ps = event.getPageState();
if (!m_imageComponent.isSelected(ps)) {
setImageComponent(ps, ImageComponent.LIBRARY);
}
}
/**
* Call {@link #cancelled(com.arsdigita.bebop.PageState)} if the cancel
* button was pressed.
*
* @param event the {@link FormSectionEvent}
* @throws FormProcessException
*/
@Override
public void submitted(FormSectionEvent event) throws FormProcessException {
PageState ps = event.getPageState();
ImageComponent component = getImageComponent(ps);
/**
* Call {@link #cancelled(com.arsdigita.bebop.PageState)} if the cancel button was pressed.
*
* @param event the {@link FormSectionEvent}
*
* @throws FormProcessException
*/
@Override
public void submitted(FormSectionEvent event) throws FormProcessException {
PageState ps = event.getPageState();
ImageComponent component = getImageComponent(ps);
if (component.getSaveCancelSection().getCancelButton().isSelected(ps)) {
cancelled(ps);
}
}
if (component.getSaveCancelSection().getCancelButton().isSelected(ps)) {
cancelled(ps);
}
}
/**
* Call {@link #processImage(com.arsdigita.bebop.event.FormSectionEvent,
* com.arsdigita.bebop.PageState, com.arsdigita.cms.ui.ImageComponent,
* com.arsdigita.cms.ReusableImageAsset) }
* if the save button was pressed.
*
* @param event the {@link FormSectionEvent}
* @throws FormProcessException
*/
@Override
public void process(FormSectionEvent event) throws FormProcessException {
PageState ps = event.getPageState();
ImageComponent component = getImageComponent(ps);
/**
* Call {@link #processImage(com.arsdigita.bebop.event.FormSectionEvent,
* com.arsdigita.bebop.PageState, com.arsdigita.cms.ui.ImageComponent,
* com.arsdigita.cms.ReusableImageAsset) }
* if the save button was pressed.
*
* @param event the {@link FormSectionEvent}
*
* @throws FormProcessException
*/
@Override
public void process(FormSectionEvent event) throws FormProcessException {
PageState ps = event.getPageState();
ImageComponent component = getImageComponent(ps);
if (!component.getSaveCancelSection().getSaveButton().isSelected(ps)) {
return;
}
if (!component.getSaveCancelSection().getSaveButton().isSelected(ps)) {
return;
}
// try {
ReusableImageAsset image = component.getImage(event);
ReusableImageAsset image = component.getImage(event);
processImage(event, ps, component, image);
processImage(event, ps, component, image);
// } catch (FormProcessException ex) {
// }
}
}
/**
* To be overridden by child if neccessary.
*
* @param ps
*/
protected void cancelled(PageState ps) {
}
/**
* To be overridden by child if neccessary.
*
* @param ps
*/
protected void cancelled(PageState ps) {
}
/**
* Process the input.
*
* @param event the {@link FormSectionEvent}
* @param ps {@link PageState}
*
* @param event the {@link FormSectionEvent}
* @param ps {@link PageState}
* @param component an {@link ImageComponent}
* @param image the {@link ReusableImageAsset}
* @param image the {@link ReusableImageAsset}
*/
protected abstract void processImage(FormSectionEvent event, PageState ps, ImageComponent component, ReusableImageAsset image);
protected abstract void processImage(FormSectionEvent event, PageState ps,
ImageComponent component, ReusableImageAsset image);
protected ImageComponent getImageComponent(PageState ps) {
if (!m_imageComponent.isSelected(ps)) {
if (s_log.isDebugEnabled()) {
s_log.debug("No component selected");
s_log.debug("Selected: " + m_imageComponent.getComponent(ps));
}
protected ImageComponent getImageComponent(PageState ps) {
if (!m_imageComponent.isSelected(ps)) {
if (s_log.isDebugEnabled()) {
s_log.debug("No component selected");
s_log.debug("Selected: " + m_imageComponent.getComponent(ps));
}
m_imageComponent.setSelectedKey(ps, ImageComponent.UPLOAD);
}
m_imageComponent.setSelectedKey(ps, ImageComponent.UPLOAD);
}
return (ImageComponent) m_imageComponent.getComponent(ps);
return (ImageComponent) m_imageComponent.getComponent(ps);
}
}
/**
* Sets the active component
*
* @param ps Page state
* @param activeKey the key of the active component
*/
protected void setImageComponent(PageState ps, final String activeKey) {
/**
* Sets the active component
*
* @param ps Page state
* @param activeKey the key of the active component
*/
protected void setImageComponent(PageState ps, final String activeKey) {
if (s_log.isDebugEnabled()) {
s_log.debug("Selected component: " + activeKey);
}
if (s_log.isDebugEnabled()) {
s_log.debug("Selected component: " + activeKey);
}
Map componentsMap = m_imageComponent.getComponentsMap();
Iterator i = componentsMap.keySet().iterator();
while (i.hasNext()) {
Object key = i.next();
Component component = (Component) componentsMap.get(key);
Map componentsMap = m_imageComponent.getComponentsMap();
Iterator i = componentsMap.keySet().iterator();
while (i.hasNext()) {
Object key = i.next();
Component component = (Component) componentsMap.get(key);
boolean isVisible = activeKey.equals(key);
boolean isVisible = activeKey.equals(key);
if (s_log.isDebugEnabled()) {
s_log.debug("Key: " + key + "; Visibility: " + isVisible);
}
if (s_log.isDebugEnabled()) {
s_log.debug("Key: " + key + "; Visibility: " + isVisible);
}
ps.setVisible(component, isVisible);
}
}
ps.setVisible(component, isVisible);
}
}
}

View File

@ -24,151 +24,152 @@ import org.apache.log4j.Logger;
/**
* A {@link CMSPage} to select and upload images.
*
* This page is used by
* /web/templates/ccm-cms/content-section/admin/image_select.jsp which is used
* This page is used by /web/templates/ccm-cms/content-section/admin/image_select.jsp which is used
* by the OpenCCM plugin for Xinha editor.
*
* @author Sören Bernstein <quasi@quasiweb.de>
*/
public class ImageSelectPage extends CMSPage {
private static final Logger S_LOG = Logger.getLogger(ImagesPane.class);
private final static String XSL_CLASS = "CMS Admin";
private TabbedPane m_tabbedPane;
private LayoutPanel m_imageLibrary;
private ImageUploadComponent m_imageUpload;
private ImageSelectResultComponent m_result;
private BigDecimalParameter m_sectionId;
private final StringParameter m_imageComponentKey;
private final MapComponentSelectionModel m_imageComponent;
private final ImageComponentSelectListener m_selectListener;
private static final CMSConfig s_conf = CMSConfig.getInstanceOf();
public static final String CONTENT_SECTION = "section_id";
public static final String RESULT = "result";
private static final Logger S_LOG = Logger.getLogger(ImagesPane.class);
private final static String XSL_CLASS = "CMS Admin";
private TabbedPane m_tabbedPane;
private LayoutPanel m_imageLibrary;
private ImageUploadComponent m_imageUpload;
private ImageSelectResultComponent m_result;
private BigDecimalParameter m_sectionId;
private final StringParameter m_imageComponentKey;
private final MapComponentSelectionModel m_imageComponent;
private final ImageComponentSelectListener m_selectListener;
private static final CMSConfig s_conf = CMSConfig.getInstanceOf();
public static final String CONTENT_SECTION = "section_id";
public static final String RESULT = "result";
public ImageSelectPage() {
super(GlobalizationUtil.globalize(
"cms.ui.image_select.page_title")
.localize().toString(),
new SimpleContainer());
public ImageSelectPage() {
super(GlobalizationUtil.globalize(
"cms.ui.image_select.page_title")
.localize().toString(),
new SimpleContainer());
setClassAttr("cms-admin");
setClassAttr("cms-admin");
m_sectionId = new BigDecimalParameter(CONTENT_SECTION);
addGlobalStateParam(m_sectionId);
m_sectionId = new BigDecimalParameter(CONTENT_SECTION);
addGlobalStateParam(m_sectionId);
m_imageComponentKey = new StringParameter("imageComponent");
m_imageComponentKey = new StringParameter("imageComponent");
ParameterSingleSelectionModel componentModel =
new ParameterSingleSelectionModel(m_imageComponentKey);
m_imageComponent =
new MapComponentSelectionModel(componentModel, new HashMap());
ParameterSingleSelectionModel componentModel = new ParameterSingleSelectionModel(
m_imageComponentKey);
m_imageComponent = new MapComponentSelectionModel(componentModel, new HashMap());
m_selectListener = new ImageComponentSelectListener(m_imageComponent,
getResultComponent());
m_selectListener = new ImageComponentSelectListener(m_imageComponent,
getResultComponent());
m_tabbedPane = createTabbedPane();
m_tabbedPane.setIdAttr("page-body");
m_tabbedPane = createTabbedPane();
m_tabbedPane.setIdAttr("page-body");
add(m_tabbedPane);
// ActionListener to change the image component state param to the
// right value
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
final PageState ps = event.getPageState();
add(m_tabbedPane);
// ActionListener to change the image component state param to the
// right value
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
final PageState ps = event.getPageState();
if (m_tabbedPane.getCurrentPane(ps).equals(m_imageLibrary)) {
m_imageComponent.setSelectedKey(ps, ImageComponent.LIBRARY);
}
if (m_tabbedPane.getCurrentPane(ps).equals(m_imageUpload)) {
m_imageComponent.setSelectedKey(ps, ImageComponent.UPLOAD);
}
}
});
if (m_tabbedPane.getCurrentPane(ps).equals(m_imageLibrary)) {
m_imageComponent.setSelectedKey(ps, ImageComponent.LIBRARY);
}
if (m_tabbedPane.getCurrentPane(ps).equals(m_imageUpload)) {
m_imageComponent.setSelectedKey(ps, ImageComponent.UPLOAD);
}
}
add(m_result);
});
addGlobalStateParam(m_imageComponentKey);
}
add(m_result);
/**
* Create the image library pane
*
* @return m_imageLibrary
*/
protected LayoutPanel getImageLibraryPane() {
if (m_imageLibrary == null) {
m_imageLibrary = new LayoutPanel();
ImageLibraryComponent libComp = new ImageLibraryComponent(ImageComponent.SELECT_IMAGE,
this);
libComp.getForm().addInitListener(m_selectListener);
libComp.getForm().addProcessListener(m_selectListener);
m_imageLibrary.setBody(libComp);
m_imageComponent.getComponentsMap().put(ImageComponent.LIBRARY,
m_imageLibrary);
}
return m_imageLibrary;
}
addGlobalStateParam(m_imageComponentKey);
}
/**
* Create the image upload pane
*
* @return m_imageUpload
*/
protected ImageUploadComponent getImageUploadPane() {
/**
* Create the image library pane
*
* @return m_imageLibrary
*/
protected LayoutPanel getImageLibraryPane() {
if (m_imageLibrary == null) {
m_imageLibrary = new LayoutPanel();
if (m_imageUpload == null) {
m_imageUpload = new ImageUploadComponent(ImageComponent.SELECT_IMAGE);
m_imageUpload.getForm().addInitListener(m_selectListener);
m_imageUpload.getForm().addProcessListener(m_selectListener);
m_imageComponent.getComponentsMap().put(ImageComponent.UPLOAD,
m_imageUpload);
}
return m_imageUpload;
}
ImageLibraryComponent libComp = new ImageLibraryComponent(ImageComponent.SELECT_IMAGE,
this);
libComp.getForm().addInitListener(m_selectListener);
libComp.getForm().addProcessListener(m_selectListener);
m_imageLibrary.setBody(libComp);
m_imageComponent.getComponentsMap().put(ImageComponent.LIBRARY,
// m_imageLibrary);
libComp);
}
return m_imageLibrary;
}
/**
* Creates an {@link ImageSelectResultComponent}
*
* @return m_resultPane
*/
protected ImageSelectResultComponent getResultComponent() {
if (m_result == null) {
m_result = new ImageSelectResultComponent();
}
return m_result;
}
/**
* Create the image upload pane
*
* @return m_imageUpload
*/
protected ImageUploadComponent getImageUploadPane() {
/**
* Create the tabbed pane
*/
protected TabbedPane createTabbedPane() {
TabbedPane pane = new TabbedPane();
pane.setClassAttr(XSL_CLASS);
if (m_imageUpload == null) {
m_imageUpload = new ImageUploadComponent(ImageComponent.SELECT_IMAGE);
m_imageUpload.getForm().addInitListener(m_selectListener);
m_imageUpload.getForm().addProcessListener(m_selectListener);
m_imageComponent.getComponentsMap().put(ImageComponent.UPLOAD,
m_imageUpload);
}
return m_imageUpload;
}
addToPane(pane, ImageComponent.LIBRARY, getImageLibraryPane());
addToPane(pane, ImageComponent.UPLOAD, getImageUploadPane());
pane.setDefaultPane(m_imageLibrary);
/**
* Creates an {@link ImageSelectResultComponent}
*
* @return m_resultPane
*/
protected ImageSelectResultComponent getResultComponent() {
if (m_result == null) {
m_result = new ImageSelectResultComponent();
}
return m_result;
}
return pane;
}
/**
* Create the tabbed pane
*/
protected TabbedPane createTabbedPane() {
TabbedPane pane = new TabbedPane();
pane.setClassAttr(XSL_CLASS);
addToPane(pane, ImageComponent.LIBRARY, getImageLibraryPane());
addToPane(pane, ImageComponent.UPLOAD, getImageUploadPane());
pane.setDefaultPane(m_imageLibrary);
return pane;
}
/**
* Adds the specified component, with the specified tab name, to the tabbed pane only if it is
* not null.
*
* @param pane The pane to which to add the tab
* @param tabName The name of the tab if it's added
* @param comp The component to add to the pane
*/
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);
}
}
/**
* Adds the specified component, with the specified tab name, to the
* tabbed pane only if it is not null.
*
* @param pane The pane to which to add the tab
* @param tabName The name of the tab if it's added
* @param comp The component to add to the pane
*/
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

@ -13,102 +13,103 @@ import com.arsdigita.web.URL;
import com.arsdigita.xml.Element;
/**
* A component which will insert a javascript to the xml output with the image
* information for the OpenCCM plugin for Xinha editor.
* A component which will insert a javascript to the xml output with the image information for the
* OpenCCM plugin for Xinha editor.
*
* @author Sören Bernstein <quasi@quasiweb.de>
*/
public class ImageSelectResultComponent extends SimpleContainer
implements Resettable {
implements Resettable {
boolean m_valid = false;
ImageAsset m_image;
String m_lastImageComponent;
boolean m_valid = false;
ImageAsset m_image;
String m_lastImageComponent;
public ImageSelectResultComponent() {
super();
}
public ImageSelectResultComponent() {
super();
}
/**
* Save image imformation
*
* @param image an {@link ImageAsset}
*/
public void setResult(final ImageAsset image, final String lastComponent) {
m_image = image;
m_lastImageComponent = lastComponent;
m_valid = (m_image != null);
}
/**
* Save image imformation
*
* @param image an {@link ImageAsset}
*/
public void setResult(final ImageAsset image, final String lastComponent) {
m_image = image;
m_lastImageComponent = lastComponent;
m_valid = (m_image != null);
}
/**
* Insert a script tag to the xml output with a JavaScript function to
* send the image information back to the Xinha plugin.
*
* @param state The current {@link PageState}
* @param parent The parent {@link Element}
*/
@Override
public void generateXML(PageState state, Element parent) {
/**
* Insert a script tag to the xml output with a JavaScript function to send the image
* information back to the Xinha plugin.
*
* @param state The current {@link PageState}
* @param parent The parent {@link Element}
*/
@Override
public void generateXML(PageState state, Element parent) {
Element scriptElem = parent.newChildElement("script");
scriptElem.addAttribute("type", "text/javascript");
Element scriptElem = parent.newChildElement("script");
scriptElem.addAttribute("type", "text/javascript");
StringBuilder script = new StringBuilder(1000);
StringBuilder script = new StringBuilder(1000);
// Create function
script.append("function selectImage(button) {");
// Create function
script.append("function selectImage(button) {");
// If there is a valid image
if (m_valid) {
// If there is a valid image
if (m_valid) {
// If in library mode, only listen to save button
if (m_lastImageComponent.equals(ImageComponent.LIBRARY)) {
script.append("if(button.id != \"save\" ) { return false; } ");
}
// If in library mode, only listen to save button
if (m_lastImageComponent.equals(ImageComponent.LIBRARY)) {
script.append("if(button.id != \"save\" ) { return false; } ");
}
// Send image parameters to xinha plugin
script.append("window.opener.openCCM.imageSet({");
script.append(" src : \"");
script.append(URL.getDispatcherPath());
script.append(Service.getImageURL(m_image));
script.append("\", ");
script.append(" name : \"");
script.append(m_image.getDisplayName());
script.append("\", ");
script.append(" width : \"");
script.append(m_image.getWidth());
script.append("\", ");
script.append(" height : \"");
script.append(m_image.getHeight());
script.append("\"");
script.append("});");
// Send image parameters to xinha plugin
script.append("window.opener.openCCM.imageSet({");
script.append(" src : \"");
script.append(URL.getDispatcherPath());
script.append(Service.getImageURL(m_image));
script.append("\", ");
script.append(" name : \"");
script.append(m_image.getDisplayName());
script.append("\", ");
script.append(" width : \"");
script.append(m_image.getWidth());
script.append("\", ");
script.append(" height : \"");
script.append(m_image.getHeight());
script.append("\"");
script.append("});");
// Close window
script.append("self.close();");
// Close window
script.append("self.close();");
}
script.append("return false;");
script.append("}");
}
script.append("return false;");
script.append("}");
// If in upload mode and if there is a valid image, execute the
// javascript function
if (m_valid && ImageComponent.UPLOAD.equals(m_lastImageComponent)) {
script.append("selectImage();");
}
// javascript function
if (m_valid && ImageComponent.UPLOAD.equals(m_lastImageComponent)) {
script.append("selectImage();");
}
scriptElem.setText(script.toString());
scriptElem.setText(script.toString());
// Reset ImageSelectResultComponent
reset(state);
}
// Reset ImageSelectResultComponent
reset(state);
}
/**
* Reset this component.
*
* @param state Page state
*/
@Override
public void reset(PageState state) {
setResult(null, null);
}
/**
* Reset this component.
*
* @param state Page state
*/
@Override
public void reset(PageState state) {
setResult(null, null);
}
}

View File

@ -22,6 +22,18 @@
</xsl:call-template>
</xsl:variable>
<xsl:variable name="exclude">
<xsl:call-template name="mandalay:getSetting">
<xsl:with-param name="module"
select="'subSiteBanner'"/>
<xsl:with-param name="setting"
select="concat($resultTree//ui:siteBanner[@bebop:classname='com.arsdigita.subsite.ui.SubSiteBanner']/@sitename, '/exclude')"/>
<xsl:with-param name="default"
select="'false'"/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="$exclude != 'true'">
<xsl:choose>
<xsl:when test="(string-length($subsiteBannerText) &lt; 1) or (contains(subsiteBannerText, 'Missing translation'))">
<xsl:value-of select="$resultTree//ui:siteBanner[@bebop:classname='com.arsdigita.subsite.ui.SubSiteBanner']/@sitename"/>
@ -30,6 +42,7 @@
<xsl:value-of select="$subsiteBannerText"/>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</div>
</xsl:if>
</xsl:template>

View File

@ -50,7 +50,7 @@ public class WorkingPaperConverter extends AbstractRisConverter {
workingPaper = (WorkingPaper) publication;
getRisBuilder().setType(RisType.UNPD);
getRisBuilder().setType(RisType.UNPB);
convertAuthors(publication);
convertTitle(publication);

View File

@ -153,6 +153,7 @@ namespace com.arsdigita.cms {
ContentItem <|-- Folder
ImageAsset <|-- ReusableImageAsset
MimeType <|-- ImageMimeType
MimeType <|-- TextMimeType
TextAsset <|-- Template
Asset -- MimeType