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}. * An abstract listener for {@link ImageComponent}.
* *
* This listener provides the base implementation which is shared between all * This listener provides the base implementation which is shared between all listeners of this
* listeners of this kind. * kind.
* *
* This listerner is used by {@link ImageSelectPage}. * This listerner is used by {@link ImageSelectPage}.
* *
* @author Sören Bernstein <quasi@quasiweb.de> * @author Sören Bernstein <quasi@quasiweb.de>
*/ */
public abstract class ImageComponentAbstractListener implements FormInitListener, public abstract class ImageComponentAbstractListener implements FormInitListener,
FormProcessListener, FormProcessListener,
FormSubmissionListener { FormSubmissionListener {
private static final Logger s_log = Logger.getLogger( private static final Logger s_log = Logger.getLogger(
ImageComponentSelectListener.class); ImageComponentSelectListener.class);
MapComponentSelectionModel m_imageComponent; MapComponentSelectionModel m_imageComponent;
public ImageComponentAbstractListener(MapComponentSelectionModel imageComponent) { public ImageComponentAbstractListener(MapComponentSelectionModel imageComponent) {
super(); super();
m_imageComponent = imageComponent; m_imageComponent = imageComponent;
} }
@Override @Override
public void init(FormSectionEvent event) public void init(FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
PageState ps = event.getPageState(); PageState ps = event.getPageState();
if (!m_imageComponent.isSelected(ps)) { if (!m_imageComponent.isSelected(ps)) {
setImageComponent(ps, ImageComponent.LIBRARY); setImageComponent(ps, ImageComponent.LIBRARY);
} }
} }
/** /**
* Call {@link #cancelled(com.arsdigita.bebop.PageState)} if the cancel * Call {@link #cancelled(com.arsdigita.bebop.PageState)} if the cancel button was pressed.
* button was pressed. *
* * @param event the {@link FormSectionEvent}
* @param event the {@link FormSectionEvent} *
* @throws FormProcessException * @throws FormProcessException
*/ */
@Override @Override
public void submitted(FormSectionEvent event) throws FormProcessException { public void submitted(FormSectionEvent event) throws FormProcessException {
PageState ps = event.getPageState(); PageState ps = event.getPageState();
ImageComponent component = getImageComponent(ps); ImageComponent component = getImageComponent(ps);
if (component.getSaveCancelSection().getCancelButton().isSelected(ps)) { if (component.getSaveCancelSection().getCancelButton().isSelected(ps)) {
cancelled(ps); cancelled(ps);
} }
} }
/** /**
* Call {@link #processImage(com.arsdigita.bebop.event.FormSectionEvent, * Call {@link #processImage(com.arsdigita.bebop.event.FormSectionEvent,
* com.arsdigita.bebop.PageState, com.arsdigita.cms.ui.ImageComponent, * com.arsdigita.bebop.PageState, com.arsdigita.cms.ui.ImageComponent,
* com.arsdigita.cms.ReusableImageAsset) } * com.arsdigita.cms.ReusableImageAsset) }
* if the save button was pressed. * if the save button was pressed.
* *
* @param event the {@link FormSectionEvent} * @param event the {@link FormSectionEvent}
* @throws FormProcessException *
*/ * @throws FormProcessException
@Override */
public void process(FormSectionEvent event) throws FormProcessException { @Override
PageState ps = event.getPageState(); public void process(FormSectionEvent event) throws FormProcessException {
ImageComponent component = getImageComponent(ps); PageState ps = event.getPageState();
ImageComponent component = getImageComponent(ps);
if (!component.getSaveCancelSection().getSaveButton().isSelected(ps)) { if (!component.getSaveCancelSection().getSaveButton().isSelected(ps)) {
return; return;
} }
// try { // try {
ReusableImageAsset image = component.getImage(event); ReusableImageAsset image = component.getImage(event);
processImage(event, ps, component, image); processImage(event, ps, component, image);
// } catch (FormProcessException ex) { // } catch (FormProcessException ex) {
// } // }
} }
/** /**
* To be overridden by child if neccessary. * To be overridden by child if neccessary.
* *
* @param ps * @param ps
*/ */
protected void cancelled(PageState ps) { protected void cancelled(PageState ps) {
} }
/** /**
* Process the input. * Process the input.
* *
* @param event the {@link FormSectionEvent} * @param event the {@link FormSectionEvent}
* @param ps {@link PageState} * @param ps {@link PageState}
* @param component an {@link ImageComponent} * @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) { protected ImageComponent getImageComponent(PageState ps) {
if (!m_imageComponent.isSelected(ps)) { if (!m_imageComponent.isSelected(ps)) {
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("No component selected"); s_log.debug("No component selected");
s_log.debug("Selected: " + m_imageComponent.getComponent(ps)); 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 * Sets the active component
* *
* @param ps Page state * @param ps Page state
* @param activeKey the key of the active component * @param activeKey the key of the active component
*/ */
protected void setImageComponent(PageState ps, final String activeKey) { protected void setImageComponent(PageState ps, final String activeKey) {
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Selected component: " + activeKey); s_log.debug("Selected component: " + activeKey);
} }
Map componentsMap = m_imageComponent.getComponentsMap(); Map componentsMap = m_imageComponent.getComponentsMap();
Iterator i = componentsMap.keySet().iterator(); Iterator i = componentsMap.keySet().iterator();
while (i.hasNext()) { while (i.hasNext()) {
Object key = i.next(); Object key = i.next();
Component component = (Component) componentsMap.get(key); Component component = (Component) componentsMap.get(key);
boolean isVisible = activeKey.equals(key); boolean isVisible = activeKey.equals(key);
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Key: " + key + "; Visibility: " + isVisible); 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. * A {@link CMSPage} to select and upload images.
* *
* This page is used by * This page is used by /web/templates/ccm-cms/content-section/admin/image_select.jsp which is used
* /web/templates/ccm-cms/content-section/admin/image_select.jsp which is used
* by the OpenCCM plugin for Xinha editor. * by the OpenCCM plugin for Xinha editor.
* *
* @author Sören Bernstein <quasi@quasiweb.de> * @author Sören Bernstein <quasi@quasiweb.de>
*/ */
public class ImageSelectPage extends CMSPage { public class ImageSelectPage extends CMSPage {
private 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 LayoutPanel m_imageLibrary; private LayoutPanel m_imageLibrary;
private ImageUploadComponent m_imageUpload; private ImageUploadComponent m_imageUpload;
private ImageSelectResultComponent m_result; private ImageSelectResultComponent m_result;
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;
private final ImageComponentSelectListener m_selectListener; private final ImageComponentSelectListener m_selectListener;
private static final CMSConfig s_conf = CMSConfig.getInstanceOf(); private static final CMSConfig s_conf = CMSConfig.getInstanceOf();
public static final String CONTENT_SECTION = "section_id"; public static final String CONTENT_SECTION = "section_id";
public static final String RESULT = "result"; public static final String RESULT = "result";
public ImageSelectPage() { public ImageSelectPage() {
super(GlobalizationUtil.globalize( super(GlobalizationUtil.globalize(
"cms.ui.image_select.page_title") "cms.ui.image_select.page_title")
.localize().toString(), .localize().toString(),
new SimpleContainer()); new SimpleContainer());
setClassAttr("cms-admin"); setClassAttr("cms-admin");
m_sectionId = new BigDecimalParameter(CONTENT_SECTION); m_sectionId = new BigDecimalParameter(CONTENT_SECTION);
addGlobalStateParam(m_sectionId); addGlobalStateParam(m_sectionId);
m_imageComponentKey = new StringParameter("imageComponent"); m_imageComponentKey = new StringParameter("imageComponent");
ParameterSingleSelectionModel componentModel = ParameterSingleSelectionModel componentModel = new ParameterSingleSelectionModel(
new ParameterSingleSelectionModel(m_imageComponentKey); 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,
getResultComponent()); getResultComponent());
m_tabbedPane = createTabbedPane(); m_tabbedPane = createTabbedPane();
m_tabbedPane.setIdAttr("page-body"); m_tabbedPane.setIdAttr("page-body");
add(m_tabbedPane); add(m_tabbedPane);
// ActionListener to change the image component state param to the // ActionListener to change the image component state param to the
// right value // right value
addActionListener(new ActionListener() { addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent event) { public void actionPerformed(ActionEvent event) {
final PageState ps = event.getPageState(); final PageState ps = event.getPageState();
if (m_tabbedPane.getCurrentPane(ps).equals(m_imageLibrary)) { if (m_tabbedPane.getCurrentPane(ps).equals(m_imageLibrary)) {
m_imageComponent.setSelectedKey(ps, ImageComponent.LIBRARY); m_imageComponent.setSelectedKey(ps, ImageComponent.LIBRARY);
} }
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_result); });
addGlobalStateParam(m_imageComponentKey); add(m_result);
}
/** addGlobalStateParam(m_imageComponentKey);
* 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;
}
/** /**
* Create the image upload pane * Create the image library pane
* *
* @return m_imageUpload * @return m_imageLibrary
*/ */
protected ImageUploadComponent getImageUploadPane() { protected LayoutPanel getImageLibraryPane() {
if (m_imageLibrary == null) {
m_imageLibrary = new LayoutPanel();
if (m_imageUpload == null) { ImageLibraryComponent libComp = new ImageLibraryComponent(ImageComponent.SELECT_IMAGE,
m_imageUpload = new ImageUploadComponent(ImageComponent.SELECT_IMAGE); this);
m_imageUpload.getForm().addInitListener(m_selectListener); libComp.getForm().addInitListener(m_selectListener);
m_imageUpload.getForm().addProcessListener(m_selectListener); libComp.getForm().addProcessListener(m_selectListener);
m_imageComponent.getComponentsMap().put(ImageComponent.UPLOAD, m_imageLibrary.setBody(libComp);
m_imageUpload); m_imageComponent.getComponentsMap().put(ImageComponent.LIBRARY,
} // m_imageLibrary);
return m_imageUpload; libComp);
} }
return m_imageLibrary;
}
/** /**
* Creates an {@link ImageSelectResultComponent} * Create the image upload pane
* *
* @return m_resultPane * @return m_imageUpload
*/ */
protected ImageSelectResultComponent getResultComponent() { protected ImageUploadComponent getImageUploadPane() {
if (m_result == null) {
m_result = new ImageSelectResultComponent();
}
return m_result;
}
/** if (m_imageUpload == null) {
* Create the tabbed pane m_imageUpload = new ImageUploadComponent(ImageComponent.SELECT_IMAGE);
*/ m_imageUpload.getForm().addInitListener(m_selectListener);
protected TabbedPane createTabbedPane() { m_imageUpload.getForm().addProcessListener(m_selectListener);
TabbedPane pane = new TabbedPane(); m_imageComponent.getComponentsMap().put(ImageComponent.UPLOAD,
pane.setClassAttr(XSL_CLASS); m_imageUpload);
}
return m_imageUpload;
}
addToPane(pane, ImageComponent.LIBRARY, getImageLibraryPane()); /**
addToPane(pane, ImageComponent.UPLOAD, getImageUploadPane()); * Creates an {@link ImageSelectResultComponent}
pane.setDefaultPane(m_imageLibrary); *
* @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; import com.arsdigita.xml.Element;
/** /**
* A component which will insert a javascript to the xml output with the image * A component which will insert a javascript to the xml output with the image information for the
* information for the OpenCCM plugin for Xinha editor. * OpenCCM plugin for Xinha editor.
* *
* @author Sören Bernstein <quasi@quasiweb.de> * @author Sören Bernstein <quasi@quasiweb.de>
*/ */
public class ImageSelectResultComponent extends SimpleContainer public class ImageSelectResultComponent extends SimpleContainer
implements Resettable { implements Resettable {
boolean m_valid = false; boolean m_valid = false;
ImageAsset m_image; ImageAsset m_image;
String m_lastImageComponent; String m_lastImageComponent;
public ImageSelectResultComponent() { public ImageSelectResultComponent() {
super(); super();
} }
/** /**
* Save image imformation * Save image imformation
* *
* @param image an {@link ImageAsset} * @param image an {@link ImageAsset}
*/ */
public void setResult(final ImageAsset image, final String lastComponent) { public void setResult(final ImageAsset image, final String lastComponent) {
m_image = image; m_image = image;
m_lastImageComponent = lastComponent; m_lastImageComponent = lastComponent;
m_valid = (m_image != null); m_valid = (m_image != null);
} }
/** /**
* Insert a script tag to the xml output with a JavaScript function to * Insert a script tag to the xml output with a JavaScript function to send the image
* send the image information back to the Xinha plugin. * information back to the Xinha plugin.
* *
* @param state The current {@link PageState} * @param state The current {@link PageState}
* @param parent The parent {@link Element} * @param parent The parent {@link Element}
*/ */
@Override @Override
public void generateXML(PageState state, Element parent) { public void generateXML(PageState state, Element parent) {
Element scriptElem = parent.newChildElement("script"); Element scriptElem = parent.newChildElement("script");
scriptElem.addAttribute("type", "text/javascript"); scriptElem.addAttribute("type", "text/javascript");
StringBuilder script = new StringBuilder(1000); StringBuilder script = new StringBuilder(1000);
// Create function // Create function
script.append("function selectImage(button) {"); script.append("function selectImage(button) {");
// If there is a valid image // If there is a valid image
if (m_valid) { if (m_valid) {
// If in library mode, only listen to save button // If in library mode, only listen to save button
if (m_lastImageComponent.equals(ImageComponent.LIBRARY)) { if (m_lastImageComponent.equals(ImageComponent.LIBRARY)) {
script.append("if(button.id != \"save\" ) { return false; } "); script.append("if(button.id != \"save\" ) { return false; } ");
} }
// Send image parameters to xinha plugin // Send image parameters to xinha plugin
script.append("window.opener.openCCM.imageSet({"); script.append("window.opener.openCCM.imageSet({");
script.append(" src : \""); script.append(" src : \"");
script.append(URL.getDispatcherPath()); script.append(URL.getDispatcherPath());
script.append(Service.getImageURL(m_image)); script.append(Service.getImageURL(m_image));
script.append("\", "); script.append("\", ");
script.append(" name : \""); script.append(" name : \"");
script.append(m_image.getDisplayName()); script.append(m_image.getDisplayName());
script.append("\", "); script.append("\", ");
script.append(" width : \""); script.append(" width : \"");
script.append(m_image.getWidth()); script.append(m_image.getWidth());
script.append("\", "); script.append("\", ");
script.append(" height : \""); script.append(" height : \"");
script.append(m_image.getHeight()); script.append(m_image.getHeight());
script.append("\""); script.append("\"");
script.append("});"); script.append("});");
// Close window // Close window
script.append("self.close();"); script.append("self.close();");
} }
script.append("return false;"); script.append("return false;");
script.append("}"); script.append("}");
// If in upload mode and if there is a valid image, execute the // If in upload mode and if there is a valid image, execute the
// javascript function // javascript function
if (m_valid && ImageComponent.UPLOAD.equals(m_lastImageComponent)) { if (m_valid && ImageComponent.UPLOAD.equals(m_lastImageComponent)) {
script.append("selectImage();"); script.append("selectImage();");
} }
scriptElem.setText(script.toString()); scriptElem.setText(script.toString());
// Reset ImageSelectResultComponent // Reset ImageSelectResultComponent
reset(state); 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:call-template>
</xsl:variable> </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:choose>
<xsl:when test="(string-length($subsiteBannerText) &lt; 1) or (contains(subsiteBannerText, 'Missing translation'))"> <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"/> <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:value-of select="$subsiteBannerText"/>
</xsl:otherwise> </xsl:otherwise>
</xsl:choose> </xsl:choose>
</xsl:if>
</div> </div>
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>

View File

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

View File

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