From c5306b93b194426240ae6594dd117114c699f000 Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 26 Jul 2013 13:16:20 +0000 Subject: [PATCH] =?UTF-8?q?-=20Filter=20f=C3=BCr=20die=20Publikationen=20e?= =?UTF-8?q?iner=20Reihe=20in=20der=20Detailansicht=20von=20Series=20-=20Co?= =?UTF-8?q?de=20Cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@2273 8810af33-2d31-482b-a856-94f89814c4df --- .../arsdigita/content-types/Publication.pdl | 44 ++- .../arsdigita/cms/contenttypes/Series.java | 1 + .../VolumeInSeriesCollection.java | 31 +- .../ui/SeriesExtraXmlGenerator.java | 176 +++++++++++- .../contenttypes/ui/SeriesVolumeAddForm.java | 80 +++--- .../contenttypes/ui/SeriesVolumesStep.java | 32 +-- .../contenttypes/ui/SeriesVolumesTable.java | 271 +++++++++--------- 7 files changed, 409 insertions(+), 226 deletions(-) diff --git a/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl b/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl index 74e00c158..27a106995 100644 --- a/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl +++ b/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl @@ -89,7 +89,7 @@ association { Integer[0..1] publicationOrder = cms_organizationalunits_publications_map.publication_order INTEGER; } -//Retrieves the publications (the ids). Allows filtering for a orgaunit id +//Retrieves the publications of an organizational unit (the ids). Allows filtering for a orgaunit id //The authors are merged into one field in the result, each publication will //only appear one time query getIdsOfPublicationsForOrgaUnit { @@ -107,12 +107,52 @@ query getIdsOfPublicationsForOrgaUnit { join cms_organizationalunits_publications_map on ct_publication_bundles.bundle_id = cms_organizationalunits_publications_map.publication_id where cms_organizationalunits_publications_map.orgaunit_id in :orgaunitIds } map { - publicationId =ct_publication_bundles.bundle_id; + publicationId = ct_publication_bundles.bundle_id; orgaunitId = cms_organizationalunits_publications_map.orgaunit_id; name = cms_items.name; } } +//Retrieves the publications of a series (the ids). Allows filtering for a orgaunit id +//The authors are merged into one field in the result, each publication will +//only appear one time +query getIdsOfPublicationsForSeries { + BigDecimal publicationId; + BigDecimal seriesId; + String name; + String volumeOfSeries; + + do { + select distinct on (ct_publication_bundles.bundle_id) + ct_publication_bundles.bundle_id, + cms_items.name, + ct_publications_volume_in_series.series_id, + ct_publications_volume_in_series.volumeOfSeries + from ct_publication_bundles + join cms_items on ct_publication_bundles.bundle_id = cms_items.item_id + join ct_publications_volume_in_series on ct_publication_bundles.bundle_id = ct_publications_volume_in_series.publication_id + where ct_publications_volume_in_series.series_id = :seriesId + } map { + publicationId = ct_publication_bundles.bundle_id; + seriesId = ct_publications_volume_in_series.series_id; + name = cms_items.name; + volumeOfSeries = ct_publications_volume_in_series.volumeOfSeries; + } +} + +query getVolumeOfSeries { + String volumeOfSeries; + + do { + select ct_publications_volume_in_series.volumeOfSeries + from ct_publications_volume_in_series + where ct_publications_volume_in_series.series_id = :seriesId + and ct_publications_volume_in_series.publication_id = :publicationId + } map { + volumeOfSeries = ct_publications_volume_in_series.volumeOfSeries; + } +} + //Retrieves all publications of an author query getPublicationsForAuthor { BigDecimal publicationId; diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Series.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Series.java index 27a5d480a..5eceb3f82 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Series.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Series.java @@ -31,6 +31,7 @@ import java.util.List; /** * * @author Jens Pelzetter + * @version $Id$ */ public class Series extends ContentPage { diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/VolumeInSeriesCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/VolumeInSeriesCollection.java index 257a2eac3..87986a915 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/VolumeInSeriesCollection.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/VolumeInSeriesCollection.java @@ -27,37 +27,40 @@ import org.apache.log4j.Logger; /** * * @author Jens Pelzetter + * @version $Id$ */ public class VolumeInSeriesCollection extends DomainCollection { - public static final String LINK_VOLUME_OF_SERIES = "link.volumeOfSeries"; + public static final String LINK_VOLUME = "link.volumeOfSeries"; public static final String VOLUME_OF_SERIES = "volumeOfSeries"; - public static final Logger s_log = - Logger.getLogger(VolumeInSeriesCollection.class); + public static final Logger LOGGER = Logger.getLogger(VolumeInSeriesCollection.class); - public VolumeInSeriesCollection(DataCollection dataCollection) { + public VolumeInSeriesCollection(final DataCollection dataCollection) { super(dataCollection); - m_dataCollection.addOrder(LINK_VOLUME_OF_SERIES); + m_dataCollection.addOrder(LINK_VOLUME); } - public Integer getVolumeOfSeries() { - return (Integer) m_dataCollection.get(LINK_VOLUME_OF_SERIES); + public String getVolumeOfSeries() { + return (String) m_dataCollection.get(LINK_VOLUME); } - public void setVolumeOfSeries(Integer volumeOfSeries) { - DataObject link = (DataObject) this.get("link"); + public void setVolumeOfSeries(final String volumeOfSeries) { + final DataObject link = (DataObject) this.get("link"); link.set(VOLUME_OF_SERIES, volumeOfSeries); } - + public Publication getPublication() { - final PublicationBundle bundle = (PublicationBundle) DomainObjectFactory.newInstance(m_dataCollection.getDataObject()); + final PublicationBundle bundle = (PublicationBundle) DomainObjectFactory.newInstance(m_dataCollection. + getDataObject()); return (Publication) bundle.getPrimaryInstance(); } - - public Publication getPublication(final String language) { - final PublicationBundle bundle = (PublicationBundle) DomainObjectFactory.newInstance(m_dataCollection.getDataObject()); + + public Publication getPublication(final String language) { + final PublicationBundle bundle = (PublicationBundle) DomainObjectFactory.newInstance(m_dataCollection. + getDataObject()); return (Publication) bundle.getInstance(language); } + } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesExtraXmlGenerator.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesExtraXmlGenerator.java index 7d3cde95d..58bb39eac 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesExtraXmlGenerator.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesExtraXmlGenerator.java @@ -21,19 +21,32 @@ package com.arsdigita.cms.contenttypes.ui; import com.arsdigita.bebop.Page; import com.arsdigita.bebop.PageState; import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ContentPage; import com.arsdigita.cms.ExtraXMLGenerator; import com.arsdigita.cms.contenttypes.EditshipCollection; import com.arsdigita.cms.contenttypes.GenericPerson; import com.arsdigita.cms.contenttypes.Publication; import com.arsdigita.cms.contenttypes.Series; -import com.arsdigita.cms.contenttypes.VolumeInSeriesCollection; +import com.arsdigita.cms.contenttypes.ui.panels.SelectFilter; +import com.arsdigita.cms.contenttypes.ui.panels.TextFilter; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.globalization.Globalization; import com.arsdigita.globalization.GlobalizationHelper; +import com.arsdigita.kernel.Kernel; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.DataQuery; +import com.arsdigita.persistence.Filter; +import com.arsdigita.persistence.FilterFactory; +import com.arsdigita.persistence.OID; +import com.arsdigita.persistence.SessionManager; import com.arsdigita.xml.Element; +import java.math.BigDecimal; import java.text.DateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; +import javax.servlet.http.HttpServletRequest; /** * @@ -43,6 +56,25 @@ import java.util.Locale; public class SeriesExtraXmlGenerator implements ExtraXMLGenerator { private boolean listMode = false; + private static final String YEAR_PARAM = "yearOfPublication"; + private static final String TITLE_PARAM = "title"; + private static final String AUTHOR_PARAM = "author"; + private final SelectFilter yearFilter = new SelectFilter(YEAR_PARAM, + YEAR_PARAM, + true, + true, + false, + true, + true); + private final TextFilter titleFilter = new TextFilter(TITLE_PARAM, + ContentPage.TITLE); + private final TextFilter authorFilter; + + public SeriesExtraXmlGenerator() { + super(); + + authorFilter = new TextFilter(AUTHOR_PARAM, "authorsStr"); + } public void generateXML(final ContentItem item, final Element element, @@ -114,18 +146,46 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator { private void createVolumesXml(final Series series, final Element parent, final PageState state) { - final VolumeInSeriesCollection volumes = series.getVolumes(); - if ((volumes == null) || volumes.isEmpty()) { + //final VolumeInSeriesCollection volumes = series.getVolumes(); + final DataQuery volumes = getData(series); + if ((volumes == null)) { return; } + final HttpServletRequest request = state.getRequest(); + final String yearValue = Globalization.decodeParameter(request, YEAR_PARAM); + final String titleValue = Globalization.decodeParameter(request, TITLE_PARAM); + final String authorValue = Globalization.decodeParameter(request, AUTHOR_PARAM); + + final Element filtersElem = parent.newChildElement("filters"); + + yearFilter.setDataQuery(volumes, YEAR_PARAM); + applyYearFilter(volumes, request); + applyTitleFilter(volumes, request); + applyAuthorFilter(volumes, request); + + yearFilter.generateXml(filtersElem); + titleFilter.generateXml(filtersElem); + authorFilter.generateXml(filtersElem); + + if (volumes.isEmpty()) { + return; + } + + final Element volumesElem = parent.newChildElement("volumes"); while (volumes.next()) { - createVolumeXml(volumes.getPublication(GlobalizationHelper. - getNegotiatedLocale().getLanguage()), - volumes.getVolumeOfSeries(), +// createVolumeXml(volumes.getPublication(GlobalizationHelper. +// getNegotiatedLocale().getLanguage()), +// volumes.getVolumeOfSeries(), +// volumesElem, +// state); + createVolumeXml((BigDecimal) volumes.get("id"), + series.getSeriesBundle().getID(), + (String) volumes.get("objectType"), volumesElem, state); + } } @@ -154,19 +214,39 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator { longDateFormat.format(date)); generator.addItemAttribute(String.format("%sMonthName", prefix), cal.getDisplayName(Calendar.MONTH, - Calendar.LONG, + Calendar.LONG, locale)); } + private void createVolumeXml(final BigDecimal publicationId, + final BigDecimal seriesId, + final String objectType, + final Element parent, + final PageState state) { + final Publication publication = (Publication) DomainObjectFactory. + newInstance(new OID(objectType, publicationId)); + + final DataQuery query = SessionManager.getSession().retrieveQuery( + "com.arsdigita.cms.contenttypes.getVolumeOfSeries"); + query.setParameter("seriesId", seriesId); + query.setParameter("publicationId", publication.getPublicationBundle().getID()); + + query.next(); + final String volume = (String) query.get("volumeOfSeries"); + query.close(); + + createVolumeXml(publication, volume, parent, state); + } + private void createVolumeXml(final Publication publication, - final Integer volume, + final String volume, final Element volumesElem, final PageState state) { final XmlGenerator generator = new XmlGenerator(publication); generator.setItemElemName("publication", ""); if (volume != null) { - generator.addItemAttribute("volumeNr", volume.toString()); + generator.addItemAttribute("volumeNr", volume); } generator.setListMode(true); generator.generateXML(state, volumesElem, ""); @@ -180,6 +260,83 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator { this.listMode = listMode; } + private void applyYearFilter(final DataQuery publications, + final HttpServletRequest request) { + final String yearValue = Globalization.decodeParameter(request, YEAR_PARAM); + if ((yearValue != null) && !(yearValue.trim().isEmpty())) { + yearFilter.setValue(yearValue); + } + + if ((yearFilter.getFilter() != null) + && !(yearFilter.getFilter().isEmpty())) { + publications.addFilter(yearFilter.getFilter()); + } + } + + private void applyTitleFilter(final DataQuery publications, + final HttpServletRequest request) { + final String titleValue = Globalization.decodeParameter(request, TITLE_PARAM); + if ((titleValue != null) && !(titleValue.trim().isEmpty())) { + titleFilter.setValue(titleValue); + } + + if ((titleFilter.getFilter() != null) + && !(titleFilter.getFilter().isEmpty())) { + publications.addFilter(titleFilter.getFilter()); + } + } + + private void applyAuthorFilter(final DataQuery publications, + final HttpServletRequest request) { + final String authorValue = Globalization.decodeParameter(request, AUTHOR_PARAM); + if ((authorValue != null) && !(authorValue.trim().isEmpty())) { + authorFilter.setValue(authorValue); + } + + if ((authorFilter.getFilter() != null) + && !(authorFilter.getFilter().isEmpty())) { + publications.addFilter(authorFilter.getFilter()); + } + } + + private DataCollection getData(final Series series) { + final DataQuery publicationBundlesQuery = SessionManager.getSession().retrieveQuery( + "com.arsdigita.cms.contenttypes.getIdsOfPublicationsForSeries"); + + publicationBundlesQuery.setParameter("seriesId", series.getSeriesBundle().getID().toString()); + + final StringBuilder filterBuilder = new StringBuilder(); + while (publicationBundlesQuery.next()) { + if (filterBuilder.length() > 0) { + filterBuilder.append(','); + } + filterBuilder.append(publicationBundlesQuery.get("publicationId").toString()); + } + final DataCollection publicationsQuery = SessionManager.getSession().retrieve(Publication.BASE_DATA_OBJECT_TYPE); + + if (filterBuilder.length() == 0) { + //No publications return null to indicate + return null; + } + + publicationsQuery.addFilter(String.format("parent.id in (%s)", filterBuilder.toString())); + + if (Kernel.getConfig().languageIndependentItems()) { + final FilterFactory filterFactory = publicationsQuery.getFilterFactory(); + final Filter filter = filterFactory.or(). + addFilter(filterFactory.equals("language", GlobalizationHelper.getNegotiatedLocale().getLanguage())). + addFilter(filterFactory.and(). + addFilter(filterFactory.equals("language", GlobalizationHelper.LANG_INDEPENDENT)). + addFilter(filterFactory.notIn("parent", "com.arsdigita.navigation.getParentIDsOfMatchedItems").set( + "language", GlobalizationHelper.getNegotiatedLocale().getLanguage()))); + publicationsQuery.addFilter(filter); + } else { + publicationsQuery.addEqualsFilter("language", GlobalizationHelper.getNegotiatedLocale().getLanguage()); + } + + return publicationsQuery; + } + private class XmlGenerator extends SimpleXMLGenerator { private final ContentItem item; @@ -193,5 +350,6 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator { protected ContentItem getContentItem(final PageState state) { return item; } + } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumeAddForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumeAddForm.java index 4d7bf84c2..784c2917f 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumeAddForm.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumeAddForm.java @@ -22,11 +22,10 @@ import com.arsdigita.bebop.FormData; import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.Label; import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.SaveCancelSection; import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.form.TextField; -import com.arsdigita.bebop.parameters.IntegerParameter; import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.cms.ContentType; import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.contenttypes.Publication; @@ -35,68 +34,61 @@ import com.arsdigita.cms.contenttypes.VolumeInSeriesCollection; import com.arsdigita.cms.ui.ItemSearchWidget; import com.arsdigita.cms.ui.authoring.BasicItemForm; import com.arsdigita.cms.ui.authoring.SimpleEditStep; -import org.apache.log4j.Logger; /** * * @author Jens Pelzetter * @version $Id$ */ +@SuppressWarnings("PMD.LongVariable") public class SeriesVolumeAddForm extends BasicItemForm { - private static final Logger s_log = Logger.getLogger( - SeriesVolumeAddForm.class); - private SeriesPropertiesStep m_step; - private ItemSearchWidget m_itemSearch; - private SaveCancelSection m_saveCancelSection; - private final String ITEM_SEARCH = "volumes"; - private ItemSelectionModel m_itemModel; - private SimpleEditStep editStep; + private static final String ITEM_SEARCH = "volumes"; + //private final SeriesPropertiesStep seriesStep; + private ItemSearchWidget itemSearch; + //private final SaveCancelSection saveCancelSection; + //private final ItemSelectionModel itemModel; + private final SimpleEditStep editStep; private Label selectedVolumeLabel; private TextField volumeOfSeries; - public SeriesVolumeAddForm(ItemSelectionModel itemModel, - SimpleEditStep editStep) { + public SeriesVolumeAddForm(final ItemSelectionModel itemModel, final SimpleEditStep editStep) { super("VolumesEntryForm", itemModel); - m_itemModel = itemModel; + //itemModel = itemModel; this.editStep = editStep; } @Override protected void addWidgets() { - add(new Label((String) PublicationGlobalizationUtil.globalize( - "publications.ui.series.volumes.select_publication"). - localize())); - m_itemSearch = new ItemSearchWidget( + add(new Label(PublicationGlobalizationUtil.globalize( + "publications.ui.series.volumes.select_publication"))); + itemSearch = new ItemSearchWidget( ITEM_SEARCH, ContentType.findByAssociatedObjectType( Publication.class.getName())); - m_itemSearch.setDisableCreatePane(true); - add(m_itemSearch); + itemSearch.setDisableCreatePane(true); + add(itemSearch); selectedVolumeLabel = new Label(""); add(selectedVolumeLabel); - add(new Label((String) PublicationGlobalizationUtil.globalize( - "publications.ui.series.volume_of_series").localize())); - ParameterModel volumeOfSeriesParam = new IntegerParameter( - VolumeInSeriesCollection.VOLUME_OF_SERIES); + add(new Label(PublicationGlobalizationUtil.globalize("publications.ui.series.volume_of_series"))); + ParameterModel volumeOfSeriesParam = new StringParameter(VolumeInSeriesCollection.VOLUME_OF_SERIES); volumeOfSeries = new TextField(volumeOfSeriesParam); add(volumeOfSeries); } @Override - public void init(FormSectionEvent fse) throws FormProcessException { - FormData data = fse.getFormData(); - PageState state = fse.getPageState(); + public void init(final FormSectionEvent fse) throws FormProcessException { + final FormData data = fse.getFormData(); + final PageState state = fse.getPageState(); final Publication publication = ((SeriesVolumesStep) editStep). getSelectedPublication(); - final Integer volume = - ((SeriesVolumesStep) editStep).getSelectedVolume(); + final String volume = ((SeriesVolumesStep) editStep).getSelectedVolume(); if (publication == null) { - m_itemSearch.setVisible(state, true); + itemSearch.setVisible(state, true); selectedVolumeLabel.setVisible(state, false); } else { data.put(ITEM_SEARCH, publication); @@ -106,7 +98,7 @@ public class SeriesVolumeAddForm extends BasicItemForm { volumeOfSeries.setValue(state, volume); } - m_itemSearch.setVisible(state, false); + itemSearch.setVisible(state, false); selectedVolumeLabel.setLabel(publication.getTitle()); selectedVolumeLabel.setVisible(state, true); } @@ -115,23 +107,21 @@ public class SeriesVolumeAddForm extends BasicItemForm { } @Override - public void process(FormSectionEvent fse) throws FormProcessException { - FormData data = fse.getFormData(); - PageState state = fse.getPageState(); - Series series = (Series) getItemSelectionModel(). - getSelectedObject(state); + public void process(final FormSectionEvent fse) throws FormProcessException { + final FormData data = fse.getFormData(); + final PageState state = fse.getPageState(); + final Series series = (Series) getItemSelectionModel().getSelectedObject(state); if (!(this.getSaveCancelSection().getCancelButton(). isSelected(state))) { Publication volume = ((SeriesVolumesStep) editStep). getSelectedPublication(); - Integer volOfSeries; + final String volOfSeries; if (this.volumeOfSeries.getValue(state) == null) { volOfSeries = null; } else { - volOfSeries = data.getInteger( - VolumeInSeriesCollection.VOLUME_OF_SERIES); + volOfSeries = data.getString(VolumeInSeriesCollection.VOLUME_OF_SERIES); } if (volume == null) { @@ -141,7 +131,7 @@ public class SeriesVolumeAddForm extends BasicItemForm { series.addVolume(volume, (String) data.get(VolumeInSeriesCollection.VOLUME_OF_SERIES)); } else { - VolumeInSeriesCollection volumes = series.getVolumes(); + final VolumeInSeriesCollection volumes = series.getVolumes(); while (volumes.next()) { if (volumes.getPublication().equals(volume)) { @@ -162,7 +152,7 @@ public class SeriesVolumeAddForm extends BasicItemForm { } @Override - public void validate(FormSectionEvent fse) throws FormProcessException { + public void validate(final FormSectionEvent fse) throws FormProcessException { final PageState state = fse.getPageState(); final FormData data = fse.getFormData(); boolean editing = false; @@ -175,8 +165,7 @@ public class SeriesVolumeAddForm extends BasicItemForm { return; } - Series series = (Series) getItemSelectionModel(). - getSelectedObject(state); + final Series series = (Series) getItemSelectionModel().getSelectedObject(state); Publication volume = (Publication) data.get(ITEM_SEARCH); if (volume == null) { volume = ((SeriesVolumesStep) editStep).getSelectedPublication(); @@ -185,9 +174,8 @@ public class SeriesVolumeAddForm extends BasicItemForm { if (!editing) { - VolumeInSeriesCollection volumes = series.getVolumes(); - volumes.addFilter( - String.format("id = %s", volume.getID().toString())); + final VolumeInSeriesCollection volumes = series.getVolumes(); + volumes.addFilter(String.format("id = %s", volume.getID().toString())); if (volumes.size() > 0) { data.addError(PublicationGlobalizationUtil.globalize( "publications.ui.series.volume_of_series.already_added")); diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesStep.java index 64450f8e6..c9c176b15 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesStep.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesStep.java @@ -32,32 +32,30 @@ import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; */ public class SeriesVolumesStep extends SimpleEditStep { + @SuppressWarnings("PMD.LongVariable") protected static final String ADD_VOLUME_SHEET_NAME = "addVolume"; + @SuppressWarnings("PMD.LongVariable") private Publication selectedPublication; - private Integer selectedVolume; + private String selectedVolume; - public SeriesVolumesStep( - ItemSelectionModel itemModel, - AuthoringKitWizard parent) { + public SeriesVolumesStep(final ItemSelectionModel itemModel, + final AuthoringKitWizard parent) { this(itemModel, parent, null); } - public SeriesVolumesStep( - ItemSelectionModel itemModel, - AuthoringKitWizard parent, - String prefix) { + public SeriesVolumesStep(final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final String prefix) { super(itemModel, parent, prefix); - BasicItemForm addVolumeSheet = - new SeriesVolumeAddForm(itemModel, this); + final BasicItemForm addVolumeSheet = + new SeriesVolumeAddForm(itemModel, this); add(ADD_VOLUME_SHEET_NAME, - (String) PublicationGlobalizationUtil.globalize( - "publications.ui.series.add_volume").localize(), + PublicationGlobalizationUtil.globalize("publications.ui.series.add_volume"), new WorkflowLockedComponentAccess(addVolumeSheet, itemModel), addVolumeSheet.getSaveCancelSection().getCancelButton()); - SeriesVolumesTable volumesTable = new SeriesVolumesTable( - itemModel, this); + final SeriesVolumesTable volumesTable = new SeriesVolumesTable(itemModel, this); setDisplayComponent(volumesTable); } @@ -65,15 +63,17 @@ public class SeriesVolumesStep extends SimpleEditStep { return selectedPublication; } + @SuppressWarnings("PMD.LongVariable") public void setSelectedPublication(final Publication selectedPublication) { this.selectedPublication = selectedPublication; } - public Integer getSelectedVolume() { + public String getSelectedVolume() { return selectedVolume; } - public void setSelectedVolume(final Integer selectedVolume) { + public void setSelectedVolume(final String selectedVolume) { this.selectedVolume = selectedVolume; } + } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesTable.java index 21ec7f0ea..52fd164dc 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesTable.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesTable.java @@ -50,27 +50,26 @@ import org.apache.log4j.Logger; * @author Jens Pelzetter * @version $Id$ */ -public class SeriesVolumesTable extends Table implements TableActionListener { +public class SeriesVolumesTable extends Table { - private static final Logger s_log = - Logger.getLogger(SeriesVolumesTable.class); - private final String TABLE_COL_EDIT = "table_col_edit"; - private final String TABLE_COL_EDIT_ASSOC = "table_col_edit_assoc"; - private final String TABLE_COL_DEL = "table_col_del"; - private ItemSelectionModel m_itemModel; - private SimpleEditStep editStep; + private static final Logger LOGGER = Logger.getLogger(SeriesVolumesTable.class); + private static final String TABLE_COL_EDIT = "table_col_edit"; + @SuppressWarnings("PMD.LongVariable") + private static final String TABLE_COL_EDIT_ASSOC = "table_col_edit_assoc"; + private static final String TABLE_COL_DEL = "table_col_del"; + private final ItemSelectionModel m_itemModel; + private final SimpleEditStep editStep; - public SeriesVolumesTable(ItemSelectionModel itemModel, - SimpleEditStep editStep) { + public SeriesVolumesTable(final ItemSelectionModel itemModel, + final SimpleEditStep editStep) { super(); m_itemModel = itemModel; this.editStep = editStep; - setEmptyView( - new Label(PublicationGlobalizationUtil.globalize( + setEmptyView(new Label(PublicationGlobalizationUtil.globalize( "publications.ui.series.volumes.none"))); - TableColumnModel colModel = getColumnModel(); + final TableColumnModel colModel = getColumnModel(); colModel.add(new TableColumn( 0, PublicationGlobalizationUtil.globalize( @@ -97,54 +96,48 @@ public class SeriesVolumesTable extends Table implements TableActionListener { colModel.get(2).setCellRenderer(new EditAssocCellRenderer()); colModel.get(3).setCellRenderer(new DeleteCellRenderer()); - addTableActionListener(this); + addTableActionListener(new ActionListener()); } - private class SeriesVolumesTableModelBuilder - extends LockableImpl - implements TableModelBuilder { + private class SeriesVolumesTableModelBuilder extends LockableImpl implements TableModelBuilder { - private ItemSelectionModel m_itemModel; + private final ItemSelectionModel m_itemModel; - public SeriesVolumesTableModelBuilder( - ItemSelectionModel itemModel) { + public SeriesVolumesTableModelBuilder(final ItemSelectionModel itemModel) { m_itemModel = itemModel; } - public TableModel makeModel(Table table, PageState state) { + public TableModel makeModel(final Table table, final PageState state) { table.getRowSelectionModel().clearSelection(state); - Series series = - (Series) m_itemModel.getSelectedObject(state); - return new SeriesVolumesTableModel(table, state, series); + final Series series = (Series) m_itemModel.getSelectedObject(state); + return new SeriesVolumesTableModel(table, series); } + } private class SeriesVolumesTableModel implements TableModel { - private final int MAX_DESC_LENGTH = 25; - private Table m_table; - private VolumeInSeriesCollection m_volumesCollection; - private Publication m_publication; + private final Table table; + private final VolumeInSeriesCollection volumesCollection; + private Publication publication; - private SeriesVolumesTableModel( - Table table, - PageState state, - Series series) { - m_table = table; - m_volumesCollection = series.getVolumes(); + public SeriesVolumesTableModel(final Table table, + final Series series) { + this.table = table; + volumesCollection = series.getVolumes(); } @Override public int getColumnCount() { - return m_table.getColumnModel().size(); + return table.getColumnModel().size(); } @Override public boolean nextRow() { boolean ret; - if ((m_volumesCollection != null) && m_volumesCollection.next()) { - m_publication = m_volumesCollection.getPublication(); + if ((volumesCollection != null) && volumesCollection.next()) { + publication = volumesCollection.getPublication(); ret = true; } else { ret = false; @@ -154,16 +147,15 @@ public class SeriesVolumesTable extends Table implements TableActionListener { } @Override - public Object getElementAt(int columnIndex) { + public Object getElementAt(final int columnIndex) { switch (columnIndex) { case 0: - return m_publication.getTitle(); + return publication.getTitle(); case 1: - return m_volumesCollection.getVolumeOfSeries(); + return volumesCollection.getVolumeOfSeries(); case 2: return PublicationGlobalizationUtil.globalize( - "publications.ui.series.volumes.edit_assoc"). - localize(); + "publications.ui.series.volumes.edit_assoc").localize(); case 3: return PublicationGlobalizationUtil.globalize( "publication.ui.series.volumes.remove").localize(); @@ -172,29 +164,32 @@ public class SeriesVolumesTable extends Table implements TableActionListener { } } - public Object getKeyAt(int columnIndex) { - return m_publication.getID(); + @Override + public Object getKeyAt(final int columnIndex) { + return publication.getID(); } + } - private class EditCellRenderer - extends LockableImpl - implements TableCellRenderer { + private class EditCellRenderer extends LockableImpl implements TableCellRenderer { + + public EditCellRenderer() { + super(); + //Nothing + } @Override - public Component getComponent( - Table table, - PageState state, - Object value, - boolean isSelected, - Object key, - int row, - int col) { - SecurityManager securityManager = - CMS.getSecurityManager(state); - Series series = (Series) m_itemModel.getSelectedObject(state); + public Component getComponent(final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int col) { + final SecurityManager securityManager = CMS.getSecurityManager(state); + final Series series = (Series) m_itemModel.getSelectedObject(state); - boolean canEdit = securityManager.canAccess( + final boolean canEdit = securityManager.canAccess( state.getRequest(), SecurityManager.EDIT_ITEM, series); @@ -204,44 +199,46 @@ public class SeriesVolumesTable extends Table implements TableActionListener { try { volume = new Publication((BigDecimal) key); } catch (ObjectNotFoundException ex) { - s_log.warn(String.format("No object with key '%s' found.", - key), - ex); + LOGGER.warn(String.format("No object with key '%s' found.", + key), + ex); return new Label(value.toString()); } - ContentSection section = volume.getContentSection();//CMS.getContext().getContentSection(); - ItemResolver resolver = section.getItemResolver(); - Link link = - new Link(String.format("%s", - value.toString()), - resolver.generateItemURL(state, - volume, - section, - volume.getVersion())); + final ContentSection section = volume.getContentSection();//CMS.getContext().getContentSection(); + final ItemResolver resolver = section.getItemResolver(); + final Link link = new Link(String.format("%s", + value.toString()), + resolver.generateItemURL(state, + volume, + section, + volume.getVersion())); return link; } else { - Publication volume; + final Publication volume; try { volume = new Publication((BigDecimal) key); } catch (ObjectNotFoundException ex) { - s_log.warn(String.format("No object with key '%s' found.", - key), - ex); + LOGGER.warn(String.format("No object with key '%s' found.", + key), + ex); return new Label(value.toString()); } - Label label = new Label(String.format("%s", - value.toString())); + final Label label = new Label(String.format("%s", + value.toString())); return label; } } + } - private class EditAssocCellRenderer - extends LockableImpl - implements TableCellRenderer { + private class EditAssocCellRenderer extends LockableImpl implements TableCellRenderer { + + public EditAssocCellRenderer() { + super(); + } public Component getComponent(final Table table, final PageState state, @@ -254,96 +251,92 @@ public class SeriesVolumesTable extends Table implements TableActionListener { CMS.getSecurityManager(state); final Series series = (Series) m_itemModel.getSelectedObject(state); - boolean canEdit = securityManager.canAccess( + final boolean canEdit = securityManager.canAccess( state.getRequest(), SecurityManager.EDIT_ITEM, series); if (canEdit) { - ControlLink link = new ControlLink(value.toString()); - return link; + return new ControlLink(value.toString()); } else { - Label label = new Label(value.toString()); - return label; + return new Label(value.toString()); } } + } - private class DeleteCellRenderer - extends LockableImpl - implements TableCellRenderer { + private class DeleteCellRenderer extends LockableImpl implements TableCellRenderer { @Override - public Component getComponent( - Table table, - PageState state, - Object value, - boolean isSelected, - Object key, - int row, - int col) { - SecurityManager securityManager = - CMS.getSecurityManager(state); - Series series = (Series) m_itemModel.getSelectedObject(state); + public Component getComponent(final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int col) { + final SecurityManager securityManager = CMS.getSecurityManager(state); + final Series series = (Series) m_itemModel.getSelectedObject(state); - boolean canDelete = securityManager.canAccess( + final boolean canDelete = securityManager.canAccess( state.getRequest(), SecurityManager.DELETE_ITEM, series); if (canDelete) { - ControlLink link = new ControlLink(value.toString()); + final ControlLink link = new ControlLink(value.toString()); link.setConfirmation((String) PublicationGlobalizationUtil. globalize( "publications.ui.series.volumes.remove.confirm"). localize()); return link; } else { - Label label = new Label(value.toString()); + final Label label = new Label(value.toString()); return label; } } + } - @Override - public void cellSelected(TableActionEvent event) { - PageState state = event.getPageState(); + private class ActionListener implements TableActionListener { - Publication publication = - new Publication(new BigDecimal(event.getRowKey(). - toString())); - - Series series = (Series) m_itemModel.getSelectedObject(state); - - TableColumn column = getColumnModel().get(event.getColumn().intValue()); - - VolumeInSeriesCollection volumes = series.getVolumes(); - - if (TABLE_COL_EDIT.equals(column.getHeaderKey().toString())) { - } else if (TABLE_COL_EDIT_ASSOC.equals(column.getHeaderKey().toString())) { - while (volumes.next()) { - if (volumes.getPublication(publication.getLanguage()).equals( - publication)) { - break; - } - } - - ((SeriesVolumesStep) editStep).setSelectedPublication( - publication); - ((SeriesVolumesStep) editStep).setSelectedVolume(volumes. - getVolumeOfSeries()); - - volumes.close(); - - editStep.showComponent(state, - SeriesVolumesStep.ADD_VOLUME_SHEET_NAME); - } else if (TABLE_COL_DEL.equals(column.getHeaderKey().toString())) { - series.removeVolume(publication); + public ActionListener() { + //Nothing + } + + public void cellSelected(final TableActionEvent event) { + final PageState state = event.getPageState(); + + final Publication publication = new Publication(new BigDecimal(event.getRowKey().toString())); + + final Series series = (Series) m_itemModel.getSelectedObject(state); + + final TableColumn column = getColumnModel().get(event.getColumn().intValue()); + + final VolumeInSeriesCollection volumes = series.getVolumes(); + + if (TABLE_COL_EDIT_ASSOC.equals(column.getHeaderKey().toString())) { + while (volumes.next()) { + if (volumes.getPublication(publication.getLanguage()).equals(publication)) { + break; + } + } + + ((SeriesVolumesStep) editStep).setSelectedPublication(publication); + ((SeriesVolumesStep) editStep).setSelectedVolume(volumes.getVolumeOfSeries()); + + volumes.close(); + + editStep.showComponent(state, + SeriesVolumesStep.ADD_VOLUME_SHEET_NAME); + } else if (TABLE_COL_DEL.equals(column.getHeaderKey().toString())) { + series.removeVolume(publication); + } + } + + public void headSelected(final TableActionEvent event) { + //Nothing to do. } - } - @Override - public void headSelected(TableActionEvent event) { - //Nothing to do. } }