- Filter für die Publikationen einer Reihe in der Detailansicht von Series
- Code Cleanup git-svn-id: https://svn.libreccm.org/ccm/trunk@2273 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
142a0c6969
commit
c5306b93b1
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import java.util.List;
|
|||
/**
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public class Series extends ContentPage {
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"));
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue