Eine Publikation kann jetzt auch über das Formular zu Bearbeiten der Publikation einer Publikationsliste oder einer Reihe hinzugefügt werden.

git-svn-id: https://svn.libreccm.org/ccm/trunk@538 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2010-09-22 13:25:06 +00:00
parent 006ae50b93
commit 43d3f73c30
27 changed files with 837 additions and 30 deletions

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="ArticleInCollectedVolume"
label="SciPublications/ArticleInCollectedVolume"
description="Base type for articleInCollectedVolumes"
objectType="com.arsdigita.cms.contenttypes.ArticleInCollectedVolume"
classname="com.arsdigita.cms.contenttypes.ArticleInCollectedVolume">

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="ArticleInJournal"
label="SciPublications/ArticleInJournal"
description="Base type for articleInJournals"
objectType="com.arsdigita.cms.contenttypes.ArticleInJournal"
classname="com.arsdigita.cms.contenttypes.ArticleInJournal">

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="Expertise"
label="SciPublications/Expertise"
description="Base type for Expertises"
objectType="com.arsdigita.cms.contenttypes.Expertise"
classname="com.arsdigita.cms.contenttypes.Expertise">

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="GreyLiterature"
label="SciPublications/GreyLiterature"
description="Base type for greyLiteratures"
objectType="com.arsdigita.cms.contenttypes.GreyLiterature"
classname="com.arsdigita.cms.contenttypes.GreyLiterature">

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="InProceedings"
label="SciPublications/InProceedings"
description="Base type for inProceedingss"
objectType="com.arsdigita.cms.contenttypes.InProceedings"
classname="com.arsdigita.cms.contenttypes.InProceedings">

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="InternetArticle"
label="SciPublications/InternetArticle"
description="Base type for InternetArticles"
objectType="com.arsdigita.cms.contenttypes.InternetArticle"
classname="com.arsdigita.cms.contenttypes.InternetArticle">

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="Monograph"
label="SciPublications/Monograph"
description="Base type for monographs"
objectType="com.arsdigita.cms.contenttypes.Monograph"
classname="com.arsdigita.cms.contenttypes.Monograph">

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="Publication"
label="SciPublications/Publication"
description="Base type for publications"
objectType="com.arsdigita.cms.contenttypes.Publication"
classname="com.arsdigita.cms.contenttypes.Publication"

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="PublicationList"
label="SciPublications/PublicationList"
description="A list of publications"
objectType="com.arsdigita.cms.contenttypes.PublicationList"
classname="com.arsdigita.cms.contenttypes.PublicationList">

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="PublicationWithPublisher"
label="SciPublications/PublicationWithPublisher"
description="Base type for publications"
objectType="com.arsdigita.cms.contenttypes.PublicationWithPublisher"
classname="com.arsdigita.cms.contenttypes.PublicationWithPublisher"

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="Publisher"
label="SciPublications/Publisher"
description="Base type for publishers"
objectType="com.arsdigita.cms.contenttypes.Publisher"
classname="com.arsdigita.cms.contenttypes.Publisher">

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="Review"
label="SciPublications/Review"
description="Base type for reviews"
objectType="com.arsdigita.cms.contenttypes.Review"
classname="com.arsdigita.cms.contenttypes.Review">

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="Series"
label="SciPublications/Series"
description="Base type for seriess"
objectType="com.arsdigita.cms.contenttypes.Series"
classname="com.arsdigita.cms.contenttypes.Series">

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="UnPublished"
label="SciPublications/UnPublished"
description="Base type for unPublisheds"
objectType="com.arsdigita.cms.contenttypes.UnPublished"
classname="com.arsdigita.cms.contenttypes.UnPublished"

View File

@ -5,7 +5,7 @@
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="WorkingPaper"
label="SciPublications/WorkingPaper"
description="Base type for workingPapers"
objectType="com.arsdigita.cms.contenttypes.WorkingPaper"
classname="com.arsdigita.cms.contenttypes.WorkingPaper">

View File

@ -57,6 +57,8 @@ public class Publication extends ContentPage {
public final static String AUTHORS = "authors";
public final static String EDITOR = "editor";
public final static String AUTHOR_ORDER = "authorOrder";
public final static String PUBLICATIONLISTS = "publicationLists";
public final static String SERIES = "series";
public final static String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.cms.contenttypes.Publication";
@ -181,4 +183,46 @@ public class Publication extends ContentPage {
public boolean hasAuthors() {
return !this.getAuthors().isEmpty();
}
public PublicationListCollection getPublicationLists() {
return new PublicationListCollection(
(DataCollection) get(PUBLICATIONLISTS));
}
public void addPublicationList(PublicationList list) {
Assert.exists(list, PublicationList.class);
add(PUBLICATIONLISTS, list);
}
public void removePublicationList(PublicationList list) {
Assert.exists(list, PublicationList.class);
remove(PUBLICATIONLISTS, list);
}
public boolean hasPublicationLists() {
return !this.getPublicationLists().isEmpty();
}
public SeriesCollection getSeries() {
return new SeriesCollection((DataCollection) get(SERIES));
}
public void addSeries(Series series) {
Assert.exists(series, Series.class);
add(SERIES, series);
}
public void removeSeries(Series series) {
Assert.exists(series, Series.class);
remove(SERIES, series);
}
public boolean hasSeries() {
return !this.getSeries().isEmpty();
}
}

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2010 Jens Pelzetter,
* for the Center of Social Politics of the University of Bremen
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.arsdigita.cms.contenttypes;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.persistence.DataCollection;
/**
*
* @author Jens Pelzetter
*/
public class PublicationCollection extends DomainCollection {
public PublicationCollection(DataCollection dataCollection) {
super(dataCollection);
m_dataCollection.addOrder("title asc");
}
public Publication getPublication() {
return new Publication(m_dataCollection.getDataObject());
}
}

View File

@ -0,0 +1,20 @@
package com.arsdigita.cms.contenttypes;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.persistence.DataCollection;
/**
*
* @author Jens Pelzetter
*/
public class SeriesCollection extends DomainCollection {
public SeriesCollection(DataCollection dataCollection) {
super(dataCollection);
}
public Series getSeries() {
return new Series(m_dataCollection.getDataObject());
}
}

View File

@ -19,10 +19,9 @@ public class PublicationAuthorsPropertyStep extends SimpleEditStep {
this(itemModel, parent, null);
}
public PublicationAuthorsPropertyStep(
ItemSelectionModel itemModel,
AuthoringKitWizard parent,
String prefix) {
public PublicationAuthorsPropertyStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent,
String prefix) {
super(itemModel, parent, prefix);
BasicItemForm addAuthorSheet =

View File

@ -42,8 +42,7 @@ public class PublicationAuthorsTable
super();
m_itemModel = itemModel;
setEmptyView(
new Label(PublicationGlobalizationUtil.globalize(
setEmptyView(new Label(PublicationGlobalizationUtil.globalize(
"publications.ui.authors.none")));
TableColumnModel colModel = getColumnModel();
@ -95,6 +94,7 @@ public class PublicationAuthorsTable
m_itemModel = itemModel;
}
@Override
public TableModel makeModel(Table table, PageState state) {
table.getRowSelectionModel().clearSelection(state);
Publication publication =
@ -161,6 +161,7 @@ public class PublicationAuthorsTable
}
}
@Override
public Object getKeyAt(int columnIndex) {
return m_author.getID();
}
@ -171,14 +172,13 @@ public class PublicationAuthorsTable
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
Publication publication = (Publication) m_itemModel.
@ -211,7 +211,6 @@ public class PublicationAuthorsTable
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
Publication publication = (Publication) m_itemModel.

View File

@ -114,6 +114,10 @@ public class PublicationPropertiesStep extends SimpleEditStep {
AuthoringKitWizard parent) {
addStep(new PublicationAuthorsPropertyStep(itemModel, parent),
"publications.ui.publication.authors");
addStep(new PublicationPublicationListPropertyStep(itemModel, parent),
"publications.ui.publication.lists");
addStep(new PublicationSeriesPropertyStep(itemModel, parent),
"publication.ui.publication.series");
}
protected void addStep(SimpleEditStep step, String labelKey) {

View File

@ -0,0 +1,73 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.PublicationList;
import com.arsdigita.cms.ui.ItemSearchWidget;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter
*/
public class PublicationPublicationListAddForm
extends BasicItemForm
implements FormProcessListener,
FormInitListener {
private static final Logger s_log = Logger.getLogger(
PublicationPublicationListAddForm.class);
private PublicationPropertiesStep m_step;
private ItemSearchWidget m_itemSearch;
private final String ITEM_SEARCH = "publicationLists";
private ItemSelectionModel m_itemModel;
public PublicationPublicationListAddForm(ItemSelectionModel itemModel) {
super("PublicationListEntryForm", itemModel);
m_itemModel = itemModel;
}
@Override
protected void addWidgets() {
add(new Label((String) PublicationGlobalizationUtil.globalize(
"publications.ui.publicationlist.select_list").localize()));
m_itemSearch = new ItemSearchWidget(
ITEM_SEARCH,
ContentType.findByAssociatedObjectType(
PublicationList.class.getName()));
add(m_itemSearch);
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
setVisible(state, true);
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
Publication publication = (Publication) getItemSelectionModel().
getSelectedObject(state);
if (!(this.getSaveCancelSection().getCancelButton().
isSelected(state))) {
publication.addPublicationList(
(PublicationList) data.get(ITEM_SEARCH));
}
init(fse);
}
}

View File

@ -0,0 +1,42 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
/**
*
* @author Jens Pelzetter
*/
public class PublicationPublicationListPropertyStep extends SimpleEditStep {
private static final String ADD_PUBLICATIONLIST_SHEET_NAME =
"addPublicationList";
public PublicationPublicationListPropertyStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
this(itemModel, parent, null);
}
public PublicationPublicationListPropertyStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent,
String prefix) {
super(itemModel, parent, prefix);
BasicItemForm addPublicationListSheet =
new PublicationPublicationListAddForm(itemModel);
add(ADD_PUBLICATIONLIST_SHEET_NAME,
(String) PublicationGlobalizationUtil.globalize(
"publications.ui.publicationlists.add_list").localize(),
new WorkflowLockedComponentAccess(addPublicationListSheet,
itemModel),
addPublicationListSheet.getSaveCancelSection().getCancelButton());
PublicationPublicationListsTable listsTable =
new PublicationPublicationListsTable(itemModel);
setDisplayComponent(listsTable);
}
}

View File

@ -0,0 +1,239 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.bebop.table.TableModel;
import com.arsdigita.bebop.table.TableModelBuilder;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.PublicationList;
import com.arsdigita.cms.contenttypes.PublicationListCollection;
import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.util.LockableImpl;
import java.math.BigDecimal;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter
*/
public class PublicationPublicationListsTable
extends Table
implements TableActionListener {
private static final Logger s_log = Logger.getLogger(
PublicationPublicationListsTable.class);
private final String TABLE_COL_EDIT = "table_col_edit";
private final String TABLE_COL_DEL = "table_col_del";
private ItemSelectionModel m_itemModel;
public PublicationPublicationListsTable(ItemSelectionModel itemModel) {
super();
m_itemModel = itemModel;
setEmptyView(new Label(PublicationGlobalizationUtil.globalize(
"publications.ui.publicationlists.none")));
TableColumnModel colModel = getColumnModel();
colModel.add(new TableColumn(
0,
PublicationGlobalizationUtil.globalize(
"publications.ui.publicationlists.title").localize(),
TABLE_COL_EDIT));
colModel.add(new TableColumn(
1,
PublicationGlobalizationUtil.globalize(
"publications.ui.publicationlists.remove").localize(),
TABLE_COL_DEL));
setModelBuilder(
new PublicationPublicationListsTableModelBuilder(itemModel));
colModel.get(0).setCellRenderer(new EditCellRenderer());
colModel.get(1).setCellRenderer(new DeleteCellRenderer());
s_log.info("Adding table action listener...");
addTableActionListener(this);
}
private class PublicationPublicationListsTableModelBuilder
extends LockableImpl
implements TableModelBuilder {
private ItemSelectionModel m_itemModel;
public PublicationPublicationListsTableModelBuilder(
ItemSelectionModel itemModel) {
m_itemModel = itemModel;
}
public TableModel makeModel(Table table, PageState state) {
table.getRowSelectionModel().clearSelection(state);
Publication publication =
(Publication) m_itemModel.getSelectedObject(state);
return new PublicationPublicationListsTableModel(table,
state,
publication);
}
}
private class PublicationPublicationListsTableModel implements TableModel {
private Table m_table;
private PublicationListCollection m_listsCollection;
private PublicationList m_list;
public PublicationPublicationListsTableModel(Table table,
PageState state,
Publication publication) {
m_table = table;
m_listsCollection = publication.getPublicationLists();
}
@Override
public int getColumnCount() {
return m_table.getColumnModel().size();
}
@Override
public boolean nextRow() {
boolean ret;
if ((m_listsCollection != null)
&& m_listsCollection.next()) {
m_list = m_listsCollection.getPublicationList();
ret = true;
} else {
ret = false;
}
return ret;
}
@Override
public Object getElementAt(int columnIndex) {
switch (columnIndex) {
case 0:
return m_list.getTitle();
case 1:
return PublicationGlobalizationUtil.globalize(
"publications.ui.publicationlists.remove").
localize();
default:
return null;
}
}
@Override
public Object getKeyAt(int columnIndex) {
return m_list.getID();
}
}
private class EditCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
Publication publication = (Publication) m_itemModel.
getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
SecurityManager.EDIT_ITEM,
publication);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
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 =
Utilities.getSecurityManager(state);
Publication publication = (Publication) m_itemModel.
getSelectedObject(state);
boolean canDelete = securityManager.canAccess(
state.getRequest(),
SecurityManager.DELETE_ITEM,
publication);
if (canDelete) {
ControlLink link = new ControlLink(value.toString());
link.setConfirmation((String) PublicationGlobalizationUtil.
globalize(
"publications.ui.publicationlists.confirm_remove").
localize());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
@Override
public void cellSelected(TableActionEvent event) {
PageState state = event.getPageState();
s_log.info("cellSelected!");
PublicationList list =
new PublicationList(new BigDecimal(event.getRowKey().
toString()));
Publication publication = (Publication) m_itemModel.getSelectedObject(
state);
PublicationListCollection lists = publication.getPublicationLists();
TableColumn column = getColumnModel().get(event.getColumn().intValue());
if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) {
} else if(column.getHeaderKey().toString().equals(TABLE_COL_DEL)) {
publication.removePublicationList(list);
}
}
@Override
public void headSelected(TableActionEvent event) {
//Nothing to do here.
}
}

View File

@ -0,0 +1,73 @@
package com.arsdigita.cms.contenttypes.ui;
import org.apache.log4j.Logger;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.Series;
import com.arsdigita.cms.ui.ItemSearchWidget;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
/**
*
* @author Jens Pelzetter
*/
public class PublicationSeriesAddForm
extends BasicItemForm
implements FormProcessListener,
FormInitListener {
private static final Logger s_log =
Logger.getLogger(PublicationSeriesAddForm.class);
private PublicationPropertiesStep m_step;
private ItemSearchWidget m_itemSearch;
private final String ITEM_SEARCH = "series";
private ItemSelectionModel m_itemModel;
public PublicationSeriesAddForm(ItemSelectionModel itemModel) {
super("SeriesEntryForm", itemModel);
m_itemModel = itemModel;
}
@Override
protected void addWidgets() {
add(new Label((String) PublicationGlobalizationUtil.globalize(
"publications.ui.series.select_series").localize()));
m_itemSearch = new ItemSearchWidget(
ITEM_SEARCH,
ContentType.findByAssociatedObjectType(Series.class.getName()));
add(m_itemSearch);
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
setVisible(state, true);
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
Publication publication = (Publication) getItemSelectionModel().
getSelectedObject(state);
if (!(this.getSaveCancelSection().getCancelButton().
isSelected(state))) {
publication.addSeries(
(Series) data.get(ITEM_SEARCH));
}
init(fse);
}
}

View File

@ -0,0 +1,38 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
/**
*
* @author Jens Pelzetter
*/
public class PublicationSeriesPropertyStep extends SimpleEditStep {
private static final String ADD_SERIES_SHEET_NAME = "addSeries";
public PublicationSeriesPropertyStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
this(itemModel, parent, null);
}
public PublicationSeriesPropertyStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent,
String prefix) {
super(itemModel, parent, prefix);
BasicItemForm addSeriesSheet = new PublicationSeriesAddForm(itemModel);
add(ADD_SERIES_SHEET_NAME,
(String) PublicationGlobalizationUtil.globalize(
"publications.ui.series.add_series").localize(),
new WorkflowLockedComponentAccess(addSeriesSheet, itemModel),
addSeriesSheet.getSaveCancelSection().getCancelButton());
PublicationSeriesTable seriesTable = new PublicationSeriesTable(
itemModel);
setDisplayComponent(seriesTable);
}
}

View File

@ -0,0 +1,235 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.bebop.table.TableModel;
import com.arsdigita.bebop.table.TableModelBuilder;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.Series;
import com.arsdigita.cms.contenttypes.SeriesCollection;
import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.util.LockableImpl;
import java.math.BigDecimal;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter
*/
public class PublicationSeriesTable
extends Table
implements TableActionListener {
private static final Logger s_log =
Logger.getLogger(PublicationSeriesTable.class);
private final String TABLE_COL_EDIT = "table_col_edit";
private final String TABLE_COL_DEL = "table_col_del";
private ItemSelectionModel m_itemModel;
public PublicationSeriesTable(ItemSelectionModel itemModel) {
super();
m_itemModel = itemModel;
setEmptyView(new Label(PublicationGlobalizationUtil.globalize(
"publications.ui.series.none")));
TableColumnModel colModel = getColumnModel();
colModel.add(new TableColumn(
0,
PublicationGlobalizationUtil.globalize(
"publications.ui.series.title").localize(),
TABLE_COL_EDIT));
colModel.add(new TableColumn(
1,
PublicationGlobalizationUtil.globalize(
"publications.ui.series.remove").localize(),
TABLE_COL_DEL));
setModelBuilder(
new PublicationSeriesTableModelBuilder(itemModel));
colModel.get(0).setCellRenderer(new EditCellRenderer());
colModel.get(1).setCellRenderer(new DeleteCellRenderer());
s_log.info("Adding table action listener...");
addTableActionListener(this);
}
private class PublicationSeriesTableModelBuilder
extends LockableImpl
implements TableModelBuilder {
private ItemSelectionModel m_itemModel;
public PublicationSeriesTableModelBuilder(
ItemSelectionModel itemModel) {
m_itemModel = itemModel;
}
@Override
public TableModel makeModel(Table table, PageState state) {
table.getRowSelectionModel().clearSelection(state);
Publication publication = (Publication) m_itemModel.
getSelectedObject(state);
return new PublicationSeriesTableModel(table, state, publication);
}
}
private class PublicationSeriesTableModel implements TableModel {
private Table m_table;
private SeriesCollection m_seriesCollection;
private Series m_series;
public PublicationSeriesTableModel(Table table,
PageState state,
Publication publication) {
m_table = table;
m_seriesCollection = publication.getSeries();
}
@Override
public int getColumnCount() {
return m_table.getColumnModel().size();
}
@Override
public boolean nextRow() {
boolean ret;
if ((m_seriesCollection != null)
&& m_seriesCollection.next()) {
m_series = m_seriesCollection.getSeries();
ret = true;
} else {
ret = false;
}
return ret;
}
@Override
public Object getElementAt(int columnIndex) {
switch (columnIndex) {
case 0:
return m_series.getTitle();
case 1:
return PublicationGlobalizationUtil.globalize(
"publications.ui.series.remove").localize();
default:
return null;
}
}
@Override
public Object getKeyAt(int columnIndex) {
return m_series.getID();
}
}
private class EditCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
Publication publication = (Publication) m_itemModel.
getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
SecurityManager.EDIT_ITEM,
publication);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
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 =
Utilities.getSecurityManager(state);
Publication publication = (Publication) m_itemModel.
getSelectedObject(state);
boolean canDelete = securityManager.canAccess(
state.getRequest(),
SecurityManager.DELETE_ITEM,
publication);
if (canDelete) {
ControlLink link = new ControlLink(value.toString());
link.setConfirmation((String) PublicationGlobalizationUtil.
globalize(
"publications.ui.series.confirm_remove").
localize());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
@Override
public void cellSelected(TableActionEvent event) {
PageState state = event.getPageState();
s_log.info("cellSelected!");
Series series =
new Series(new BigDecimal(event.getRowKey().
toString()));
Publication publication = (Publication) m_itemModel.getSelectedObject(
state);
SeriesCollection seriesCollection = publication.getSeries();
TableColumn column = getColumnModel().get(event.getColumn().intValue());
if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) {
} else if (column.getHeaderKey().toString().equals(TABLE_COL_DEL)) {
publication.removeSeries(series);
}
}
@Override
public void headSelected(TableActionEvent event) {
//Nothing to do here.
}
}