From 43d3f73c3022cb68f9e405cbcb383a8d649aa91b Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 22 Sep 2010 13:25:06 +0000 Subject: [PATCH] =?UTF-8?q?Eine=20Publikation=20kann=20jetzt=20auch=20?= =?UTF-8?q?=C3=BCber=20das=20Formular=20zu=20Bearbeiten=20der=20Publikatio?= =?UTF-8?q?n=20einer=20Publikationsliste=20oder=20einer=20Reihe=20hinzugef?= =?UTF-8?q?=C3=BCgt=20werden.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@538 8810af33-2d31-482b-a856-94f89814c4df --- .../contenttypes/ArticleInCollectedVolume.xml | 2 +- .../cms/contenttypes/ArticleInJournal.xml | 2 +- .../arsdigita/cms/contenttypes/Expertise.xml | 2 +- .../cms/contenttypes/GreyLiterature.xml | 2 +- .../cms/contenttypes/InProceedings.xml | 2 +- .../cms/contenttypes/InternetArticle.xml | 2 +- .../arsdigita/cms/contenttypes/Monograph.xml | 2 +- .../cms/contenttypes/Publication.xml | 2 +- .../cms/contenttypes/PublicationList.xml | 2 +- .../contenttypes/PublicationWithPublisher.xml | 2 +- .../arsdigita/cms/contenttypes/Publisher.xml | 2 +- .../com/arsdigita/cms/contenttypes/Review.xml | 2 +- .../com/arsdigita/cms/contenttypes/Series.xml | 2 +- .../cms/contenttypes/UnPublished.xml | 2 +- .../cms/contenttypes/WorkingPaper.xml | 2 +- .../cms/contenttypes/Publication.java | 44 ++++ .../contenttypes/PublicationCollection.java | 41 +++ .../cms/contenttypes/SeriesCollection.java | 20 ++ .../ui/PublicationAuthorsPropertyStep.java | 7 +- .../ui/PublicationAuthorsTable.java | 21 +- .../ui/PublicationPropertiesStep.java | 4 + .../ui/PublicationPublicationListAddForm.java | 73 ++++++ ...ublicationPublicationListPropertyStep.java | 42 +++ .../ui/PublicationPublicationListsTable.java | 239 ++++++++++++++++++ .../ui/PublicationSeriesAddForm.java | 73 ++++++ .../ui/PublicationSeriesPropertyStep.java | 38 +++ .../ui/PublicationSeriesTable.java | 235 +++++++++++++++++ 27 files changed, 837 insertions(+), 30 deletions(-) create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationCollection.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/SeriesCollection.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPublicationListAddForm.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPublicationListPropertyStep.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPublicationListsTable.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationSeriesAddForm.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationSeriesPropertyStep.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationSeriesTable.java diff --git a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/ArticleInCollectedVolume.xml b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/ArticleInCollectedVolume.xml index 66772b2c4..036a6b1df 100644 --- a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/ArticleInCollectedVolume.xml +++ b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/ArticleInCollectedVolume.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd"> diff --git a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/ArticleInJournal.xml b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/ArticleInJournal.xml index 5466317ed..31b2f51af 100644 --- a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/ArticleInJournal.xml +++ b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/ArticleInJournal.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd"> diff --git a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Expertise.xml b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Expertise.xml index 868130de3..622fc2409 100644 --- a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Expertise.xml +++ b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Expertise.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd"> diff --git a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/GreyLiterature.xml b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/GreyLiterature.xml index 6d569187c..71a6bd73c 100644 --- a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/GreyLiterature.xml +++ b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/GreyLiterature.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd"> diff --git a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/InProceedings.xml b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/InProceedings.xml index 594dfb92f..7ac05fc83 100644 --- a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/InProceedings.xml +++ b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/InProceedings.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd"> diff --git a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/InternetArticle.xml b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/InternetArticle.xml index 3ff1cb34c..69f9d3a3d 100644 --- a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/InternetArticle.xml +++ b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/InternetArticle.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd"> diff --git a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Monograph.xml b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Monograph.xml index b1958a108..5cef2c0b1 100644 --- a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Monograph.xml +++ b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Monograph.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd"> diff --git a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Publication.xml b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Publication.xml index d046d8909..eb0ee7e09 100644 --- a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Publication.xml +++ b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Publication.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd"> diff --git a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/PublicationWithPublisher.xml b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/PublicationWithPublisher.xml index 3b6d86001..2ecd14b22 100644 --- a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/PublicationWithPublisher.xml +++ b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/PublicationWithPublisher.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd"> diff --git a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Review.xml b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Review.xml index 1b02fe67c..3149b65ca 100644 --- a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Review.xml +++ b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Review.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd"> diff --git a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Series.xml b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Series.xml index 9e80b0af8..1942700a7 100644 --- a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Series.xml +++ b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Series.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd"> diff --git a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/UnPublished.xml b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/UnPublished.xml index e278621cc..88f871416 100644 --- a/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/UnPublished.xml +++ b/ccm-sci-publications/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/UnPublished.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd"> diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java index 96cf1515e..090b634d6 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java @@ -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(); + } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationCollection.java new file mode 100644 index 000000000..bc96d688e --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationCollection.java @@ -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()); + } + +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/SeriesCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/SeriesCollection.java new file mode 100644 index 000000000..776016255 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/SeriesCollection.java @@ -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()); + } + +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsPropertyStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsPropertyStep.java index bac81ed54..800be1a36 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsPropertyStep.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsPropertyStep.java @@ -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 = diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java index 6c349c23a..1765e88a9 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java @@ -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. diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java index b7732d1a3..117163ebe 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java @@ -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) { diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPublicationListAddForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPublicationListAddForm.java new file mode 100644 index 000000000..5eed392d8 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPublicationListAddForm.java @@ -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); + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPublicationListPropertyStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPublicationListPropertyStep.java new file mode 100644 index 000000000..ffcc54405 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPublicationListPropertyStep.java @@ -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); + + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPublicationListsTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPublicationListsTable.java new file mode 100644 index 000000000..d3bf9f26c --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPublicationListsTable.java @@ -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. + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationSeriesAddForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationSeriesAddForm.java new file mode 100644 index 000000000..a80bfb4e7 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationSeriesAddForm.java @@ -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); + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationSeriesPropertyStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationSeriesPropertyStep.java new file mode 100644 index 000000000..7507871eb --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationSeriesPropertyStep.java @@ -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); + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationSeriesTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationSeriesTable.java new file mode 100644 index 000000000..c4c074c94 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationSeriesTable.java @@ -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. + } +}