- 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-94f89814c4df
master
jensp 2013-07-26 13:16:20 +00:00
parent 142a0c6969
commit c5306b93b1
7 changed files with 409 additions and 226 deletions

View File

@ -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;

View File

@ -31,6 +31,7 @@ import java.util.List;
/**
*
* @author Jens Pelzetter
* @version $Id$
*/
public class Series extends ContentPage {

View File

@ -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);
}
}

View File

@ -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;
}
}
}

View File

@ -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"));

View File

@ -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;
}
}

View File

@ -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.
}
}