From a1a21afb46edaa452d0db8935eaf2260ac288cb3 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 21 Mar 2013 19:20:37 +0000 Subject: [PATCH] Component for creating export links for all publications in a category. Has to be added via JSP template. Needs mandalay revision 366 or newer to work. Export of filtered object lists are not working yet. git-svn-id: https://svn.libreccm.org/ccm/trunk@2100 8810af33-2d31-482b-a856-94f89814c4df --- .../navigation/DataCollectionDefinition.java | 4 ++ .../ui/object/CustomizableObjectList.java | 39 +++++++++--- .../navigation/ui/object/TextFilter.java | 5 -- .../application.xml | 27 ++++++++ .../src/ccm-sci-publicationsexportlinks.load | 15 +++++ .../PublicationExportLinksInitalizer.java | 33 ++++++++++ .../PublicationExportLinksLoader.java | 18 ++++++ .../ui/PublicationExportLinks.java | 61 +++++++++++++++++++ .../src/empty.pdl.mf | 0 9 files changed, 190 insertions(+), 12 deletions(-) create mode 100644 ccm-sci-publicationsexportlinks/application.xml create mode 100644 ccm-sci-publicationsexportlinks/src/ccm-sci-publicationsexportlinks.load create mode 100644 ccm-sci-publicationsexportlinks/src/com/arsdigita/cms/scipublications/PublicationExportLinksInitalizer.java create mode 100644 ccm-sci-publicationsexportlinks/src/com/arsdigita/cms/scipublications/PublicationExportLinksLoader.java create mode 100644 ccm-sci-publicationsexportlinks/src/com/arsdigita/cms/scipublications/ui/PublicationExportLinks.java create mode 100644 ccm-sci-publicationsexportlinks/src/empty.pdl.mf diff --git a/ccm-navigation/src/com/arsdigita/navigation/DataCollectionDefinition.java b/ccm-navigation/src/com/arsdigita/navigation/DataCollectionDefinition.java index 04a0db017..3a51f7032 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/DataCollectionDefinition.java +++ b/ccm-navigation/src/com/arsdigita/navigation/DataCollectionDefinition.java @@ -154,6 +154,10 @@ public class DataCollectionDefinition extends LockableImpl { m_filterCategory = filterCategory; } + public final boolean getDescendCategories() { + return m_descendCategories; + } + public final void setDescendCategories(boolean descendCategories) { Assert.isUnlocked(this); m_descendCategories = descendCategories; diff --git a/ccm-navigation/src/com/arsdigita/navigation/ui/object/CustomizableObjectList.java b/ccm-navigation/src/com/arsdigita/navigation/ui/object/CustomizableObjectList.java index d15710414..167cb55bf 100644 --- a/ccm-navigation/src/com/arsdigita/navigation/ui/object/CustomizableObjectList.java +++ b/ccm-navigation/src/com/arsdigita/navigation/ui/object/CustomizableObjectList.java @@ -4,11 +4,9 @@ import com.arsdigita.globalization.Globalization; import com.arsdigita.navigation.Navigation; import com.arsdigita.persistence.DataCollection; import com.arsdigita.xml.Element; -import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; -import java.util.logging.Level; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; @@ -215,6 +213,35 @@ public class CustomizableObjectList extends ComplexObjectList { protected DataCollection getObjects(final HttpServletRequest request, final HttpServletResponse response) { //Set filters (using the SQL) +// final StringBuilder sqlFilters = new StringBuilder(); +// for (Map.Entry filterEntry : filters.entrySet()) { +// if ((filterEntry.getValue().getFilter() == null) +// || (filterEntry.getValue().getFilter().isEmpty())) { +// continue; +// } +// +// if (sqlFilters.length() > 0) { +// sqlFilters.append(" AND "); +// } +// sqlFilters.append(filterEntry.getValue().getFilter()); +// } +// +// logger.debug(String.format("filters: %s", sqlFilters)); +// if (sqlFilters.length() > 0) { +// setSQLFilter(sqlFilters.toString()); +// } + + final String filterSql = getFilterSql(); + if (filterSql.length() > 0) { + setSQLFilter(filterSql); + } + + final DataCollection objects = super.getObjects(request, response); + + return objects; + } + + public String getFilterSql() { final StringBuilder sqlFilters = new StringBuilder(); for (Map.Entry filterEntry : filters.entrySet()) { if ((filterEntry.getValue().getFilter() == null) @@ -233,9 +260,7 @@ public class CustomizableObjectList extends ComplexObjectList { setSQLFilter(sqlFilters.toString()); } - final DataCollection objects = super.getObjects(request, response); - - return objects; + return sqlFilters.toString(); } /** @@ -309,8 +334,7 @@ public class CustomizableObjectList extends ComplexObjectList { final Element sortFieldElems = controls.newChildElement("sortFields"); sortFieldElems.addAttribute("sortBy", sortByKey); for (Map.Entry sortField : sortFields.entrySet()) { - final Element sortFieldElem = sortFieldElems.newChildElement( - "sortField"); + final Element sortFieldElem = sortFieldElems.newChildElement("sortField"); sortFieldElem.addAttribute("label", sortField.getKey()); } } @@ -320,4 +344,5 @@ public class CustomizableObjectList extends ComplexObjectList { return content; } + } diff --git a/ccm-navigation/src/com/arsdigita/navigation/ui/object/TextFilter.java b/ccm-navigation/src/com/arsdigita/navigation/ui/object/TextFilter.java index 9a63d3a83..cea954e56 100644 --- a/ccm-navigation/src/com/arsdigita/navigation/ui/object/TextFilter.java +++ b/ccm-navigation/src/com/arsdigita/navigation/ui/object/TextFilter.java @@ -1,11 +1,6 @@ package com.arsdigita.navigation.ui.object; import com.arsdigita.xml.Element; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.util.logging.Level; -import java.util.logging.Logger; /** *

diff --git a/ccm-sci-publicationsexportlinks/application.xml b/ccm-sci-publicationsexportlinks/application.xml new file mode 100644 index 000000000..8ebffeb8b --- /dev/null +++ b/ccm-sci-publicationsexportlinks/application.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + Provides a component which creates links for exporting all publications assigned to a category. + + + diff --git a/ccm-sci-publicationsexportlinks/src/ccm-sci-publicationsexportlinks.load b/ccm-sci-publicationsexportlinks/src/ccm-sci-publicationsexportlinks.load new file mode 100644 index 000000000..697071a3d --- /dev/null +++ b/ccm-sci-publicationsexportlinks/src/ccm-sci-publicationsexportlinks.load @@ -0,0 +1,15 @@ + + + +
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/ccm-sci-publicationsexportlinks/src/com/arsdigita/cms/scipublications/PublicationExportLinksInitalizer.java b/ccm-sci-publicationsexportlinks/src/com/arsdigita/cms/scipublications/PublicationExportLinksInitalizer.java new file mode 100644 index 000000000..917bd98f7 --- /dev/null +++ b/ccm-sci-publicationsexportlinks/src/com/arsdigita/cms/scipublications/PublicationExportLinksInitalizer.java @@ -0,0 +1,33 @@ +package com.arsdigita.cms.scipublications; + +import com.arsdigita.db.DbHelper; +import com.arsdigita.persistence.pdl.ManifestSource; +import com.arsdigita.persistence.pdl.NameFilter; +import com.arsdigita.runtime.CompoundInitializer; +import com.arsdigita.runtime.DomainInitEvent; +import com.arsdigita.runtime.PDLInitializer; +import com.arsdigita.runtime.RuntimeConfig; + +/** + * @author Jens Pelzetter + * @version $Id$ + */ +public class PublicationExportLinksInitalizer extends CompoundInitializer { + + public PublicationExportLinksInitalizer() { + + final String jdbcUrl = RuntimeConfig.getConfig().getJDBCURL(); + final int database = DbHelper.getDatabaseFromURL(jdbcUrl); + + add(new PDLInitializer(new ManifestSource("empty.pdl.mf", + new NameFilter(DbHelper. + getDatabaseSuffix(database), "pdl")))); + + } + + @Override + public void init(final DomainInitEvent event) { + super.init(event); + } + +} \ No newline at end of file diff --git a/ccm-sci-publicationsexportlinks/src/com/arsdigita/cms/scipublications/PublicationExportLinksLoader.java b/ccm-sci-publicationsexportlinks/src/com/arsdigita/cms/scipublications/PublicationExportLinksLoader.java new file mode 100644 index 000000000..18b8064d4 --- /dev/null +++ b/ccm-sci-publicationsexportlinks/src/com/arsdigita/cms/scipublications/PublicationExportLinksLoader.java @@ -0,0 +1,18 @@ +package com.arsdigita.cms.scipublications; + +import com.arsdigita.loader.PackageLoader; +import com.arsdigita.runtime.ScriptContext; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PublicationExportLinksLoader extends PackageLoader { + + @Override + public void run(final ScriptContext ctx) { + //Nothing to do. + } + +} diff --git a/ccm-sci-publicationsexportlinks/src/com/arsdigita/cms/scipublications/ui/PublicationExportLinks.java b/ccm-sci-publicationsexportlinks/src/com/arsdigita/cms/scipublications/ui/PublicationExportLinks.java new file mode 100644 index 000000000..8a8922cfc --- /dev/null +++ b/ccm-sci-publicationsexportlinks/src/com/arsdigita/cms/scipublications/ui/PublicationExportLinks.java @@ -0,0 +1,61 @@ +package com.arsdigita.cms.scipublications.ui; + +import com.arsdigita.categorization.Category; +import com.arsdigita.cms.scipublications.exporter.SciPublicationsExporters; +import com.arsdigita.cms.scipublications.imexporter.PublicationFormat; +import com.arsdigita.navigation.ui.AbstractComponent; +import com.arsdigita.navigation.ui.object.CustomizableObjectList; +import com.arsdigita.xml.Element; +import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PublicationExportLinks extends AbstractComponent { + + private CustomizableObjectList objList; + + public Element generateXML(final HttpServletRequest request, + final HttpServletResponse response) { + + final Element parent = new Element("publicationExportLinks"); + + final List formats = SciPublicationsExporters.getInstance().getSupportedFormats(); + + for (PublicationFormat format : formats) { + createExportLink(format, parent, getCategory()); + } + + return parent; + + } + + public void setObjList(final CustomizableObjectList objList) { + this.objList = objList; + } + + private void createExportLink(final PublicationFormat format, + final Element parent, + final Category category) { + final Element exportLinkElem = parent.newChildElement("publicationExportLink"); + final Element formatKeyElem = exportLinkElem.newChildElement("formatKey"); + formatKeyElem.setText(format.getName().toLowerCase()); + final Element formatNameElem = exportLinkElem.newChildElement("formatName"); + formatNameElem.setText(format.getName()); + final Element categoryIdElem = exportLinkElem.newChildElement("categoryId"); + categoryIdElem.setText(category.getID().toString()); + final Element filterSqlElem = exportLinkElem.newChildElement("filterSql"); + filterSqlElem.setText(objList.getFilterSql()); + final Element desCatsElem = exportLinkElem.newChildElement("descendCategories"); + if (objList.getDefinition().getDescendCategories()) { + desCatsElem.setText("true"); + } else { + desCatsElem.setText("false"); + } + } + +} diff --git a/ccm-sci-publicationsexportlinks/src/empty.pdl.mf b/ccm-sci-publicationsexportlinks/src/empty.pdl.mf new file mode 100644 index 000000000..e69de29bb