From d02a207bba107ecf402fe2ac62af950a429df5e0 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 18 Nov 2010 08:54:26 +0000 Subject: [PATCH] =?UTF-8?q?MultiPartArticle=20l=C3=A4sst=20sich,=20unter?= =?UTF-8?q?=20Nutzung=20der=20Template=20mparticle-index.jsp=20(zuzuweisen?= =?UTF-8?q?=20unter=20navigation/admin)=20jetzt=20als=20IndexItem=20nutzen?= =?UTF-8?q?.=20Daf=C3=BCr=20waren=20einige=20kleinere=20=C3=84nderungen=20?= =?UTF-8?q?in=20ArticleSectionPanel=20notwendig,=20unter=20anderem=20die?= =?UTF-8?q?=20M=C3=B6glichkeit=20den=20anzuzeigenden=20MultiPartArticle=20?= =?UTF-8?q?von=20au=C3=9Fen=20zu=20setzen.=20Das=20ist=20notwendig,=20da?= =?UTF-8?q?=20sich=20das=20Index-Item=20nicht=20=C3=BCber=20einen=20der=20?= =?UTF-8?q?im=20Modul=20MultiPartArticle=20verf=C3=BCgbaren=20Wege=20abfra?= =?UTF-8?q?gen=20l=C3=A4sst.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@622 8810af33-2d31-482b-a856-94f89814c4df --- .../ui/mparticle/ArticleSectionPanel.java | 158 +++++++++++------- .../london/navigation/ui/GreetingItem.java | 4 +- .../src/com/arsdigita/aplaws/Loader.java | 8 +- .../navigation/templates/mparticle-index.jsp | 65 +++++++ 4 files changed, 175 insertions(+), 60 deletions(-) create mode 100644 ccm-zes-aplaws/web/packages/navigation/templates/mparticle-index.jsp diff --git a/ccm-cms-types-mparticle/src/com/arsdigita/cms/contenttypes/ui/mparticle/ArticleSectionPanel.java b/ccm-cms-types-mparticle/src/com/arsdigita/cms/contenttypes/ui/mparticle/ArticleSectionPanel.java index 1f3906d42..2156eae7b 100755 --- a/ccm-cms-types-mparticle/src/com/arsdigita/cms/contenttypes/ui/mparticle/ArticleSectionPanel.java +++ b/ccm-cms-types-mparticle/src/com/arsdigita/cms/contenttypes/ui/mparticle/ArticleSectionPanel.java @@ -25,6 +25,7 @@ import com.arsdigita.bebop.parameters.ParameterModel; import com.arsdigita.cms.CMS; import com.arsdigita.cms.CMSContext; import com.arsdigita.cms.CMSExcursion; +import com.arsdigita.cms.ContentBundle; import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentSection; import com.arsdigita.cms.ExtraXMLGenerator; @@ -33,6 +34,7 @@ import com.arsdigita.cms.contenttypes.ArticleSectionCollection; import com.arsdigita.cms.contenttypes.MultiPartArticle; import com.arsdigita.cms.dispatcher.XMLGenerator; import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.web.Web; import com.arsdigita.xml.Element; import java.io.IOException; @@ -52,25 +54,29 @@ import org.apache.log4j.Logger; * @version $Revision: #7 $ $Date: 2004/08/17 $ * @version $Id: ArticleSectionPanel.java 1167 2006-06-14 12:27:28Z fabrice $ */ -public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGenerator { - - private static final Logger s_log = Logger.getLogger(ArticleSectionPanel.class); +public class ArticleSectionPanel extends SimpleComponent implements + ExtraXMLGenerator { + private static final Logger s_log = Logger.getLogger( + ArticleSectionPanel.class); private PageParameter m_page; private boolean m_showAllSections = false; - + /** + * Variable for holding an injected item. + */ + private ContentItem m_item = null; public static final String PAGE_NUMBER_PARAM = "page"; public ArticleSectionPanel() { super(); - + m_page = new PageParameter(PAGE_NUMBER_PARAM); } @Override public void register(Page p) { super.register(p); - + addGlobalStateParams(p); } @@ -94,7 +100,8 @@ public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGene } if (section == null) { if (s_log.isDebugEnabled()) { - s_log.debug("Item id ; "+item.getOID()+" - "+item.getContentSection()+" - "+item); + s_log.debug("Item id ; " + item.getOID() + " - " + item. + getContentSection() + " - " + item); } section = item.getContentSection(); CMS.getContext().setContentSection(section); @@ -108,14 +115,47 @@ public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGene protected ContentItem getContentItem(PageState state) { CMSContext context = CMS.getContext(); - + + if (m_item != null) { + return m_item; + } + if (!context.hasContentItem()) { return null; } return context.getContentItem(); } - protected ArticleSection[] getSections(ContentItem item, final PageState state) { + /** + * This method provides a way for injecting the item to show if the other + * ways for retrieving the item to show do not work. An example for this + * is the index/greeting item of a category. + * + * @param item The item to inject. + */ + public void setContentItem(ContentItem item) { + if (item instanceof ContentBundle) { + ContentBundle bundle; + HttpServletRequest request; + ContentItem resolved = null; + String lang; + + bundle = (ContentBundle) item; + request = Web.getRequest(); + + if (request == null) { + resolved = bundle.getPrimaryInstance(); + } else { + resolved = bundle.negotiate(request.getLocales()); + } + m_item = resolved; + } else { + m_item = item; + } + } + + protected ArticleSection[] getSections(ContentItem item, + final PageState state) { PageNumber number = null; try { number = (PageNumber) state.getValue(m_page); @@ -132,7 +172,7 @@ public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGene if (number == null) { number = new PageNumber("1"); } - + MultiPartArticle mpa = (MultiPartArticle) item; if (!number.wantAllSections()) { if (s_log.isDebugEnabled()) { @@ -144,16 +184,16 @@ public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGene if (s_log.isDebugEnabled()) { s_log.debug("No page number provided"); } - ArticleSection[] page = new ArticleSection[(int)sections.size()]; + ArticleSection[] page = new ArticleSection[(int) sections.size()]; int i = 0; while (sections.next()) { - page[i] = (ArticleSection)sections.getArticleSection(); + page[i] = (ArticleSection) sections.getArticleSection(); i++; } return page; } } - + // Get the section based on position in list of sections protected ArticleSection[] getSections(ContentItem item, PageState state, @@ -175,9 +215,10 @@ public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGene if (s_log.isDebugEnabled()) { s_log.debug("Hit end of section list"); } - return new ArticleSection[] {}; + return new ArticleSection[]{}; } - ArticleSection section = (ArticleSection)sections.getArticleSection(); + ArticleSection section = (ArticleSection) sections. + getArticleSection(); if (s_log.isDebugEnabled()) { s_log.debug("Skipping " + section.getOID()); } @@ -199,7 +240,8 @@ public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGene } break; } - ArticleSection section = (ArticleSection)sections.getArticleSection(); + ArticleSection section = (ArticleSection) sections. + getArticleSection(); page.add(section); if (s_log.isDebugEnabled()) { s_log.debug("Keeping section " + section.getOID()); @@ -218,8 +260,8 @@ public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGene if (s_log.isDebugEnabled()) { s_log.debug("All done " + page.size() + " sections found"); } - - return (ArticleSection[])page.toArray(new ArticleSection[page.size()]); + + return (ArticleSection[]) page.toArray(new ArticleSection[page.size()]); } /** @@ -230,24 +272,23 @@ public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGene * @see com.arsdigita.cms.dispatcher.XMLGenerator */ @Override - public void generateXML(final PageState state, + public void generateXML(final PageState state, final Element parent) { ContentItem item = getContentItem(state); - if (!isVisible(state) || item == null || - !(item instanceof MultiPartArticle)) { + if (!isVisible(state) || item == null + || !(item instanceof MultiPartArticle)) { if (s_log.isDebugEnabled()) { - s_log.debug("Skipping generate XML isVisible: " + - isVisible(state) + - " item " + - (item == null ? null : item.getOID())); + s_log.debug("Skipping generate XML isVisible: " + isVisible( + state) + " item " + + (item == null ? null : item.getOID())); } return; } generateXML(item, parent, state); } - + /** * Specify the XML for a given content item. * @param item @@ -256,31 +297,33 @@ public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGene */ @Override public void generateXML(ContentItem item, Element element, PageState state) { - - Element content = element.newChildElement("cms:articleSectionPanel", CMS.CMS_XML_NS); + + Element content = element.newChildElement("cms:articleSectionPanel", + CMS.CMS_XML_NS); exportAttributes(content); - + XMLGenerator xmlGenerator = getXMLGenerator(state, item); - + ArticleSection sections[] = getSections(item, state); - for (int i= 0 ; i < sections.length ; i++) { - generateSectionXML(state, - content, + for (int i = 0; i < sections.length; i++) { + generateSectionXML(state, + content, sections[i], xmlGenerator); } } - + protected void generateSectionXML(final PageState state, final Element parent, final ContentItem section, final XMLGenerator xmlGenerator) { CMSExcursion excursion = new CMSExcursion() { - public void excurse() { - setContentItem(section); - xmlGenerator.generateXML(state, parent, null); - } - }; + + public void excurse() { + setContentItem(section); + xmlGenerator.generateXML(state, parent, null); + } + }; try { excursion.run(); } catch (ServletException ex) { @@ -293,13 +336,13 @@ public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGene // A class representing either an Integer number indicating // the position in the list of sections, or the string 'all' private class PageNumber { - + private boolean m_all; private Integer m_number; - - public PageNumber(String number) - throws NumberFormatException { - + + public PageNumber(String number) + throws NumberFormatException { + if ("all".equals(number.toLowerCase())) { m_all = true; m_number = null; @@ -308,32 +351,32 @@ public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGene m_number = new Integer(number); } } - + public boolean wantAllSections() { return m_all; } - + public Integer getPageNumber() { return m_number; } } - + // A parameter which is either an Integer number indicating // the position in the list of sections, or the string 'all' private class PageParameter extends ParameterModel { - + public PageParameter(String name) { super(name); } - + public Object transformValue(HttpServletRequest request) - throws IllegalArgumentException { + throws IllegalArgumentException { return transformSingleValue(request); } - + public Object unmarshal(String encoded) - throws IllegalArgumentException { - + throws IllegalArgumentException { + if (encoded == null || encoded.length() == 0) { return null; } @@ -341,15 +384,14 @@ public class ArticleSectionPanel extends SimpleComponent implements ExtraXMLGene return new PageNumber(encoded); } catch (NumberFormatException e) { e.printStackTrace(); - throw new IllegalArgumentException - (getName() + " should be a BigDecimal: '" + encoded + "'"); + throw new IllegalArgumentException(getName() + + " should be a BigDecimal: '" + + encoded + "'"); } } - + public Class getValueClass() { return PageNumber.class; } - } - } diff --git a/ccm-ldn-navigation/src/com/arsdigita/london/navigation/ui/GreetingItem.java b/ccm-ldn-navigation/src/com/arsdigita/london/navigation/ui/GreetingItem.java index eff4409b9..3e04afac4 100755 --- a/ccm-ldn-navigation/src/com/arsdigita/london/navigation/ui/GreetingItem.java +++ b/ccm-ldn-navigation/src/com/arsdigita/london/navigation/ui/GreetingItem.java @@ -89,7 +89,8 @@ public class GreetingItem extends AbstractComponent { ContentBundle bundle = (ContentBundle) item; /* Fix by Jens Pelzetter, 2009-08-28 - * bundle.getPrimaryInstance() does not about the preferred languages + * bundle.getPrimaryInstance() does not care about the preferred + * languages * of the User Client, instead it returns the primary instance of * a ContentItem (the first language created). * @@ -137,4 +138,5 @@ public class GreetingItem extends AbstractComponent { renderer.walk(item, SimpleXMLGenerator.ADAPTER_CONTEXT); } + } diff --git a/ccm-zes-aplaws/src/com/arsdigita/aplaws/Loader.java b/ccm-zes-aplaws/src/com/arsdigita/aplaws/Loader.java index c1509c672..77d488e20 100644 --- a/ccm-zes-aplaws/src/com/arsdigita/aplaws/Loader.java +++ b/ccm-zes-aplaws/src/com/arsdigita/aplaws/Loader.java @@ -230,7 +230,7 @@ public class Loader extends PackageLoader { "ZeS Welcome Page", "ZeS Welcome Page for navigation", "/packages/navigation/templates/zes-welcome.jsp"); - + template = Template.create( "SciProject List", "List of SciProjects", @@ -352,6 +352,12 @@ public class Loader extends PackageLoader { + "subdepartments", "/packages/navigation/templates/SciDepartmentFinishedProjects.jsp"); + template = + Template.create( + "MultiPartArticle as Index Item", + "Display a MultiPartArticle as index item", + "/packages/navigation/templates/mparticle-index.jsp"); + } /** diff --git a/ccm-zes-aplaws/web/packages/navigation/templates/mparticle-index.jsp b/ccm-zes-aplaws/web/packages/navigation/templates/mparticle-index.jsp new file mode 100644 index 000000000..70e1e089a --- /dev/null +++ b/ccm-zes-aplaws/web/packages/navigation/templates/mparticle-index.jsp @@ -0,0 +1,65 @@ + + + + + + + + + + long age = Navigation.getConfig().getIndexPageCacheLifetime(); + if (age == 0) { + DispatcherHelper.cacheDisable(response); + } else { + DispatcherHelper.cacheForWorld(response, (int)age); + } + + + + + + + + com.arsdigita.cms.ContentItem item = (com.arsdigita.cms.ContentItem)((com.arsdigita.london.navigation.ui.GreetingItem) greetingItem).getObject(); + ((com.arsdigita.cms.contenttypes.ui.mparticle.ArticleSectionPanel) sectionXML).setContentItem(item); + + + + + + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).setDefinition(new CMSDataCollectionDefinition()); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).setRenderer(new CMSDataCollectionRenderer()); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getDefinition().setObjectType("com.arsdigita.cms.ContentPage"); + + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getDefinition().setDescendCategories(false); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getDefinition().addOrder("parent.categories.link.sortKey"); + + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getRenderer().setPageSize(30); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getRenderer().addAttribute("objectType"); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getRenderer().addAttribute("title"); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getRenderer().addAttribute( "definition"); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getRenderer().addAttribute( "summary"); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getRenderer().addAttribute( "lead"); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getRenderer().addAttribute( "description"); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getRenderer().addAttribute( "eventDate"); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getRenderer().addAttribute( "startDate" ); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getRenderer().addAttribute( "endDate"); + ((com.arsdigita.london.navigation.ui.object.SimpleObjectList) itemList).getRenderer().addAttribute( "newsDate"); + + + + + + + +