diff --git a/ccm-sci-publications/src/META-INF/services/com.arsdigita.cms.scipublications.importer.ris.RisConverter b/ccm-sci-publications/src/META-INF/services/com.arsdigita.cms.scipublications.importer.ris.RisConverter new file mode 100644 index 000000000..7f3774b91 --- /dev/null +++ b/ccm-sci-publications/src/META-INF/services/com.arsdigita.cms.scipublications.importer.ris.RisConverter @@ -0,0 +1,2 @@ +package com.arsdigita.cms.scipublications.importer.ris.converters.BookConverter +package com.arsdigita.cms.scipublications.importer.ris.converters.EbookConverter \ No newline at end of file diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPublicationsCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPublicationsCollection.java index a134f8a66..d9965ab2d 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPublicationsCollection.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPublicationsCollection.java @@ -1,12 +1,9 @@ package com.arsdigita.cms.contenttypes; import com.arsdigita.cms.ContentBundle; -import com.arsdigita.cms.ContentPage; import com.arsdigita.domain.DomainCollection; import com.arsdigita.domain.DomainObjectFactory; -import com.arsdigita.kernel.ACSObject; import com.arsdigita.persistence.DataCollection; -import java.math.BigDecimal; /** * 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 ff8e84d32..92797b7d3 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java @@ -303,6 +303,10 @@ public class Publication extends ContentPage { return !getOrganizationalUnits().isEmpty(); } + public static PublicationBundleCollection getPublications(final GenericPerson person) { + return PublicationBundle.getPublications(person); + } + public static GenericOrganizationalUnitPublicationsCollection getPublications( final GenericOrganizationalUnit orgaunit) { //final DataCollection dataCollection = (DataCollection) orgaunit.get( diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationBundle.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationBundle.java index 2ecf7868b..51d8c3a4b 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationBundle.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationBundle.java @@ -286,6 +286,14 @@ public class PublicationBundle extends ContentBundle { remove(ORGAUNITS, orgaunit); } + public static PublicationBundleCollection getPublications(final GenericPerson person) { + final GenericPersonBundle personBundle = person.getGenericPersonBundle(); + + final DataCollection collection = (DataCollection) personBundle.get("publication"); + + return new PublicationBundleCollection(collection); + } + public static GenericOrganizationalUnitPublicationsCollection getPublications( final GenericOrganizationalUnit orgaunit) { final GenericOrganizationalUnitBundle orgaunitBundle = orgaunit. diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationBundleCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationBundleCollection.java new file mode 100644 index 000000000..a28e22ffd --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationBundleCollection.java @@ -0,0 +1,34 @@ +package com.arsdigita.cms.contenttypes; + +import com.arsdigita.cms.ContentBundle; +import com.arsdigita.domain.DomainCollection; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.persistence.DataCollection; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PublicationBundleCollection extends DomainCollection { + + public PublicationBundleCollection(final DataCollection dataCollection) { + super(dataCollection); + m_dataCollection.addOrder("name asc"); + } + + public Publication getPublicationBundle() { + return new Publication(m_dataCollection.getDataObject()); + } + + public Publication getPublication() { + final ContentBundle bundle = (ContentBundle) DomainObjectFactory.newInstance(m_dataCollection.getDataObject()); + return (Publication) bundle.getPrimaryInstance(); + } + + public Publication getPublication(final String language) { + final ContentBundle bundle = (ContentBundle) DomainObjectFactory.newInstance(m_dataCollection.getDataObject()); + return (Publication) bundle.getInstance(language); + } + +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationCollection.java index bc96d688e..c34d0056a 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationCollection.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationCollection.java @@ -1,6 +1,5 @@ /* - * Copyright (c) 2010 Jens Pelzetter, - * for the Center of Social Politics of the University of Bremen + * Copyright (c) 2010 Jens Pelzetter, ScientificCMS.org Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -20,7 +19,9 @@ package com.arsdigita.cms.contenttypes; +import com.arsdigita.cms.ContentBundle; import com.arsdigita.domain.DomainCollection; +import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.persistence.DataCollection; /** @@ -34,8 +35,18 @@ public class PublicationCollection extends DomainCollection { m_dataCollection.addOrder("title asc"); } - public Publication getPublication() { + public Publication getPublicationBundle() { return new Publication(m_dataCollection.getDataObject()); } + + public Publication getPublication() { + final ContentBundle bundle = (ContentBundle) DomainObjectFactory.newInstance(m_dataCollection.getDataObject()); + return (Publication) bundle.getPrimaryInstance(); + } + + public Publication getPublication(final String language) { + final ContentBundle bundle = (ContentBundle) DomainObjectFactory.newInstance(m_dataCollection.getDataObject()); + return (Publication) bundle.getInstance(language); + } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationInitializer.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationInitializer.java index a545301e8..1fcf47d70 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationInitializer.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationInitializer.java @@ -21,6 +21,8 @@ package com.arsdigita.cms.contenttypes; import com.arsdigita.cms.contenttypes.ui.GenericOrganizationalUnitPublicationsStep; +import com.arsdigita.cms.contenttypes.ui.OrganizationPublicationsStep; +import com.arsdigita.cms.contenttypes.ui.PersonPublicationsStep; import com.arsdigita.cms.contenttypes.ui.PublicationGenericOrganizationalUnitsStep; import com.arsdigita.cms.contenttypes.ui.PublicationGlobalizationUtil; import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; @@ -28,20 +30,20 @@ import com.arsdigita.runtime.DomainInitEvent; import org.apache.log4j.Logger; /** - * Executes at each system startup and initializes the Publication content type, - * part of the ScientificCMS extension. + * Executes at each system startup and initializes the Publication content type, part of the ScientificCMS extension. * - * Defines the content type specific properties and just uses the super class - * methods to register the content type with the (transient) content type store - * (map). This is done by runtimeRuntime startup method which runs the init() - * methods of all initializers (this one just using the parent implementation). + * Defines the content type specific properties and just uses the super class methods to register the content type with + * the (transient) content type store (map). This is done by runtimeRuntime startup method which runs the init() methods + * of all initializers (this one just using the parent implementation). * * @author Jens Pelzetter * @version $Id$ */ public class PublicationInitializer extends ContentTypeInitializer { - /** Private Logger instance for debugging purpose. */ + /** + * Private Logger instance for debugging purpose. + */ private final Logger logger = Logger.getLogger(PublicationInitializer.class); /** @@ -66,10 +68,8 @@ public class PublicationInitializer extends ContentTypeInitializer { AuthoringKitWizard.registerAssetStep( Publication.BASE_DATA_OBJECT_TYPE, PublicationGenericOrganizationalUnitsStep.class, - PublicationGlobalizationUtil.globalize( - "publications.ui.orgaunits.title"), - PublicationGlobalizationUtil.globalize( - "publications.ui.orgaunits.description"), + PublicationGlobalizationUtil.globalize("publications.ui.orgaunits.title"), + PublicationGlobalizationUtil.globalize("publications.ui.orgaunits.description"), 10); } @@ -93,18 +93,30 @@ public class PublicationInitializer extends ContentTypeInitializer { "genericorganizationalunit.ui.publications.description"), 10); } + + AuthoringKitWizard.registerAssetStep( + GenericPerson.BASE_DATA_OBJECT_TYPE, + PersonPublicationsStep.class, + PublicationGlobalizationUtil.globalize("person.ui.publications.title"), + PublicationGlobalizationUtil.globalize("person.ui.publications.description"), + 10); + + AuthoringKitWizard.registerAssetStep( + GenericOrganizationalUnit.BASE_DATA_OBJECT_TYPE, + OrganizationPublicationsStep.class, + PublicationGlobalizationUtil.globalize("organization.ui.publications.title"), + PublicationGlobalizationUtil.globalize("organization.ui.publications.description"), + 11); } /** - * Retrieve location of this content type's internal default theme - * stylesheet(s) which concomitantly serve as a fallback if a custom theme - * is engaged. + * Retrieve location of this content type's internal default theme stylesheet(s) which concomitantly serve as a + * fallback if a custom theme is engaged. * - * Custom themes usually will provide their own stylesheet(s) and their own - * access method, but may not support every content type. + * Custom themes usually will provide their own stylesheet(s) and their own access method, but may not support every + * content type. * - * Overwrites parent method with AgendaItem specific value for use by the - * parent class worker methods. + * Overwrites parent method with AgendaItem specific value for use by the parent class worker methods. * * @return String array of XSL stylesheet files of the internal default theme */ @@ -116,6 +128,7 @@ public class PublicationInitializer extends ContentTypeInitializer { /** * Retrieves fully qualified traversal adapter file name. + * * @return */ @Override diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publisher.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publisher.java index 77eddd06a..73609a296 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publisher.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publisher.java @@ -85,6 +85,10 @@ public class Publisher extends GenericOrganizationalUnit { public void setPlace(String place) { set(PLACE, place); } + + public PublicationBundleCollection getPublications() { + return getPublisherBundle().getPublications(); + } // Create a ulr save version of the full name public static String urlSave(String in) { diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublisherBundle.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublisherBundle.java index f11b13796..63f1f5da6 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublisherBundle.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublisherBundle.java @@ -21,7 +21,7 @@ import java.math.BigDecimal; * * @author Jens Pelzetter */ -public class PublisherBundle extends ContentBundle { +public class PublisherBundle extends GenericOrganizationalUnitBundle { public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.PublisherBundle"; @@ -55,6 +55,12 @@ public class PublisherBundle extends ContentBundle { public PublisherBundle(final String type) { super(type); } + + public PublicationBundleCollection getPublications() { + return new PublicationBundleCollection((DataCollection) get("publication")); + } + + @Override public boolean copyProperty(final CustomCopy source, diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublisherInitializer.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublisherInitializer.java index b198b6637..73ec68402 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublisherInitializer.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublisherInitializer.java @@ -19,6 +19,11 @@ */ package com.arsdigita.cms.contenttypes; +import com.arsdigita.cms.contenttypes.ui.PublicationGlobalizationUtil; +import com.arsdigita.cms.contenttypes.ui.PublisherPublicationsStep; +import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; +import com.arsdigita.runtime.DomainInitEvent; + /** * Executes at each system startup and initializes the Publisher content type, * part of the ScientificCMS extension. @@ -44,6 +49,18 @@ public class PublisherInitializer extends ContentTypeInitializer { super("empty.pdl.mf", Publisher.BASE_DATA_OBJECT_TYPE); } + @Override + public void init(final DomainInitEvent event) { + super.init(event); + + AuthoringKitWizard.registerAssetStep( + Publisher.BASE_DATA_OBJECT_TYPE, + PublisherPublicationsStep.class, + PublicationGlobalizationUtil.globalize("publisher.ui.publications.title"), + PublicationGlobalizationUtil.globalize("publisher.ui.publications.description"), + 10); + } + /** * Retrieve location of this content type's internal default theme * stylesheet(s) which concomitantly serve as a fallback if a custom theme @@ -60,7 +77,7 @@ public class PublisherInitializer extends ContentTypeInitializer { @Override public String[] getStylesheets() { return new String[]{ - INTERNAL_THEME_TYPES_DIR + "sci/Publisher.xsl" }; + INTERNAL_THEME_TYPES_DIR + "sci/Publisher.xsl"}; } /** diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/OrganizationPublicationsStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/OrganizationPublicationsStep.java new file mode 100644 index 000000000..66bd179f3 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/OrganizationPublicationsStep.java @@ -0,0 +1,27 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class OrganizationPublicationsStep extends SimpleEditStep { + + public OrganizationPublicationsStep(final ItemSelectionModel itemModel, final AuthoringKitWizard parent) { + this(itemModel, parent, null); + } + + public OrganizationPublicationsStep(final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final String prefix) { + super(itemModel, parent, prefix); + + final OrganizationPublicationsTable publicationsTable = new OrganizationPublicationsTable(itemModel); + setDisplayComponent(publicationsTable); + } + +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/OrganizationPublicationsTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/OrganizationPublicationsTable.java new file mode 100644 index 000000000..094bda4af --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/OrganizationPublicationsTable.java @@ -0,0 +1,164 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.Link; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Table; +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.CMS; +import com.arsdigita.cms.ContentSection; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.GenericOrganizationalUnit; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.PublicationBundleCollection; +import com.arsdigita.cms.dispatcher.ItemResolver; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.DataObject; +import com.arsdigita.util.LockableImpl; +import java.math.BigDecimal; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class OrganizationPublicationsTable extends Table { + + private final static String TABLE_COL_EDIT = "table_col_edit"; + private final static String TABLE_COL_YEAR = "table_col_year"; + private final static String TABLE_COL_TYPE = "table_col_type"; + private ItemSelectionModel itemModel; + + public OrganizationPublicationsTable(final ItemSelectionModel itemModel) { + super(); + + this.itemModel = itemModel; + + setEmptyView(new Label(PublicationGlobalizationUtil.globalize("organization.ui.publications.none"))); + + final TableColumnModel columnModel = getColumnModel(); + columnModel.add(new TableColumn( + 0, + PublicationGlobalizationUtil.globalize("organization.ui.publications.columns.name").localize(), + TABLE_COL_EDIT)); + columnModel.add(new TableColumn( + 1, + PublicationGlobalizationUtil.globalize("organization.ui.publications.columns.year").localize(), + TABLE_COL_YEAR)); + columnModel.add(new TableColumn( + 2, + PublicationGlobalizationUtil.globalize("organization.ui.publications.columns.type").localize(), + TABLE_COL_TYPE)); + + setModelBuilder(new ModelBuilder(itemModel)); + + columnModel.get(0).setCellRenderer(new EditCellRenderer()); + } + + private class ModelBuilder extends LockableImpl implements TableModelBuilder { + + private ItemSelectionModel itemModel; + + public ModelBuilder(final ItemSelectionModel itemModel) { + this.itemModel = itemModel; + } + + public TableModel makeModel(final Table table, final PageState state) { + table.getRowSelectionModel().clearSelection(state); + + final GenericOrganizationalUnit orga = (GenericOrganizationalUnit) itemModel.getSelectedItem(state); + + return new Model(table, state, orga); + } + + } + + private class Model implements TableModel { + + private Table table; + private PublicationBundleCollection publications; + + public Model(final Table table, final PageState state, final GenericOrganizationalUnit orga) { + this.table = table; + publications = new PublicationBundleCollection((DataCollection) orga.getGenericOrganizationalUnitBundle(). + get("unPublished")); + } + + @Override + public int getColumnCount() { + return table.getColumnModel().size(); + } + + public boolean nextRow() { + boolean ret; + + if ((publications != null) && publications.next()) { + ret = true; + } else { + ret = false; + } + + return ret; + } + + @Override + public Object getElementAt(final int columnIndex) { + switch (columnIndex) { + case 0: + return publications.getPublication().getTitle(); + case 1: + return publications.getPublication().getYearOfPublication(); + case 2: + return ((DataObject) publications.getPublication().get("type")).get("label"); + default: + return null; + } + } + + @Override + public Object getKeyAt(final int columnIndex) { + return publications.getPublication().getID(); + } + + } + + private class EditCellRenderer extends LockableImpl implements TableCellRenderer { + + public Component getComponent(final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int column) { + + final com.arsdigita.cms.SecurityManager securityManager = CMS.getSecurityManager(state); + final Publication publication = new Publication((BigDecimal) key); + +// final boolean canEdit = securityManager.canAccess(state.getRequest(), +// com.arsdigita.cms.SecurityManager.EDIT_ITEM, +// publication); + + //if (canEdit) { + final ContentSection section = CMS.getContext().getContentSection(); + final ItemResolver resolver = section.getItemResolver(); + final Link link = new Link(value.toString(), + resolver.generateItemURL(state, + publication, + section, + publication.getVersion())); + return link; +// } else { +// final Label label = new Label(value.toString()); +// return label; +// } + + } + + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PersonPublicationsStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PersonPublicationsStep.java new file mode 100644 index 000000000..4f8435194 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PersonPublicationsStep.java @@ -0,0 +1,31 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PersonPublicationsStep extends SimpleEditStep { + + //private String ADD_PUBLICATION_TO_PERSON_SHEET_NAME = "PersonPublicationStep"; + + public PersonPublicationsStep(final ItemSelectionModel itemModel, final AuthoringKitWizard parent) { + this(itemModel, parent, null); + } + + public PersonPublicationsStep(final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final String prefix) { + super(itemModel, parent, prefix); + + final PersonPublicationsTable publicationsTable = new PersonPublicationsTable(itemModel); + setDisplayComponent(publicationsTable); + } + + + +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PersonPublicationsTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PersonPublicationsTable.java new file mode 100644 index 000000000..6505c9ed1 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PersonPublicationsTable.java @@ -0,0 +1,163 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.Link; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Table; +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.CMS; +import com.arsdigita.cms.ContentSection; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.GenericPerson; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.PublicationBundleCollection; +import com.arsdigita.cms.dispatcher.ItemResolver; +import com.arsdigita.persistence.DataObject; +import com.arsdigita.util.LockableImpl; +import java.math.BigDecimal; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PersonPublicationsTable extends Table { + + private final static String TABLE_COL_EDIT = "table_col_edit"; + private final static String TABLE_COL_YEAR = "table_col_year"; + private final static String TABLE_COL_TYPE = "table_col_type"; + //private final String TABLE_COL_DEL = "table_col_del"; + private ItemSelectionModel itemModel; + + public PersonPublicationsTable(final ItemSelectionModel itemModel) { + super(); + + this.itemModel = itemModel; + + setEmptyView(new Label(PublicationGlobalizationUtil.globalize("person.ui.publications.none"))); + + final TableColumnModel columnModel = getColumnModel(); + columnModel.add(new TableColumn( + 0, + PublicationGlobalizationUtil.globalize("person.ui.publications.columns.name").localize(), + TABLE_COL_EDIT)); + columnModel.add(new TableColumn( + 1, + PublicationGlobalizationUtil.globalize("person.ui.publications.columns.year").localize(), + TABLE_COL_YEAR)); + columnModel.add(new TableColumn( + 2, + PublicationGlobalizationUtil.globalize("person.ui.publications.columns.type").localize(), + TABLE_COL_TYPE)); + + setModelBuilder(new ModelBuilder(itemModel)); + + columnModel.get(0).setCellRenderer(new EditCellRenderer()); + + } + + private class ModelBuilder extends LockableImpl implements TableModelBuilder { + + private final ItemSelectionModel itemModel; + + public ModelBuilder(final ItemSelectionModel itemModel) { + this.itemModel = itemModel; + } + + public TableModel makeModel(final Table table, final PageState state) { + table.getRowSelectionModel().clearSelection(state); + + final GenericPerson person = (GenericPerson) itemModel.getSelectedItem(state); + + return new Model(table, state, person); + } + + } + + private class Model implements TableModel { + + private final Table table; + private final PublicationBundleCollection publications; + + public Model(final Table table, final PageState state, final GenericPerson person) { + this.table = table; + publications = Publication.getPublications(person); + } + + @Override + public int getColumnCount() { + return table.getColumnModel().size(); + } + + public boolean nextRow() { + boolean ret; + + if ((publications != null) && publications.next()) { + ret = true; + } else { + ret = false; + } + + return ret; + } + + @Override + public Object getElementAt(final int columnIndex) { + switch (columnIndex) { + case 0: + return publications.getPublication().getTitle(); + case 1: + return publications.getPublication().getYearOfPublication(); + case 2: + return ((DataObject) publications.getPublication().get("type")).get("label"); + default: + return null; + } + } + + @Override + public Object getKeyAt(final int columnIndex) { + return publications.getPublication().getID(); + } + + } + + private class EditCellRenderer extends LockableImpl implements TableCellRenderer { + + public Component getComponent(final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int column) { + final com.arsdigita.cms.SecurityManager securityManager = CMS.getSecurityManager(state); + final Publication publication = new Publication((BigDecimal) key); + +// final boolean canEdit = securityManager.canAccess(state.getRequest(), +// com.arsdigita.cms.SecurityManager.EDIT_ITEM, +// publication); + + //if (canEdit) { + final ContentSection section = CMS.getContext().getContentSection(); + final ItemResolver resolver = section.getItemResolver(); + final Link link = new Link(value.toString(), + resolver.generateItemURL(state, + publication, + section, + publication.getVersion())); + return link; +// } else { +// final Label label = new Label(value.toString()); +// return label; +// } + + } + + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties index bcd6f73c7..fc1e47960 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties @@ -395,3 +395,19 @@ publications.ui.proceedings_properties.title=Basic properties publications.ui.series.volumes.edit_assoc=Edit publications.ui.journal.name=Name of journal (URL) publications.ui.journal.title=Title +person.ui.publications.none=This person is not assigned to any publication. +person.ui.publications.title=Publications +person.ui.publications.columns.name=Title +person.ui.publications.columns.year=Year +person.ui.publications.columns.type=Type +publisher.ui.publications.title=Publications +publisher.ui.publications.none=No publications +publisher.ui.publications.name=Title +publisher.ui.publications.columns.year=Jahr +publisher.ui.publications.columns.type=Type +organization.ui.publications.title=Edited publications +organization.ui.publications.none=No publications +organization.ui.publications.description=Edited publications +organization.ui.publications.columns.name=Title +organization.ui.publications.columns.year=Year +organization.ui.publications.columns.type=Type diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties index 58255115b..526203888 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties @@ -394,3 +394,19 @@ publications.ui.proceedings_properties.title=Basiseigenschaften publications.ui.series.volumes.edit_assoc=Bearbeiten publications.ui.journal.name=Name der Zeitschrift (URL) publications.ui.journal.title=Titel +person.ui.publications.none=Diese Person ist keiner Publikation als Autor zugewiesen +person.ui.publications.title=Publikationen +person.ui.publications.columns.name=Titel +person.ui.publications.columns.year=Jahr +person.ui.publications.columns.type=Typ +publisher.ui.publications.title=Publikationen +publisher.ui.publications.none=Keine Publikationen vorhanden +publisher.ui.publications.name=Titel +publisher.ui.publications.columns.year=Jahr +publisher.ui.publications.columns.type=Typ +organization.ui.publications.title=Herausgebene Publikationen +organization.ui.publications.none=Keine Publikationen +organization.ui.publications.description=Herausgebene Publikationen +organization.ui.publications.columns.name=Titel +organization.ui.publications.columns.year=Jahr +organization.ui.publications.columns.type=Typ diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublisherPublicationsStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublisherPublicationsStep.java new file mode 100644 index 000000000..6d3a314c5 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublisherPublicationsStep.java @@ -0,0 +1,28 @@ + +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PublisherPublicationsStep extends SimpleEditStep { + + public PublisherPublicationsStep(final ItemSelectionModel itemModel, final AuthoringKitWizard parent) { + this(itemModel, parent, null); + } + + public PublisherPublicationsStep(final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final String prefix) { + super(itemModel, parent, prefix); + + final PublisherPublicationsTable publicationsTable = new PublisherPublicationsTable(itemModel); + setDisplayComponent(publicationsTable); + } + +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublisherPublicationsTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublisherPublicationsTable.java new file mode 100644 index 000000000..f68ad52a0 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublisherPublicationsTable.java @@ -0,0 +1,161 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.Link; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Table; +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.CMS; +import com.arsdigita.cms.ContentSection; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.PublicationBundleCollection; +import com.arsdigita.cms.contenttypes.Publisher; +import com.arsdigita.cms.dispatcher.ItemResolver; +import com.arsdigita.persistence.DataObject; +import com.arsdigita.util.LockableImpl; +import java.math.BigDecimal; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PublisherPublicationsTable extends Table { + + private final static String TABLE_COL_EDIT = "table_col_edit"; + private final static String TABLE_COL_YEAR = "table_col_year"; + private final static String TABLE_COL_TYPE = "table_col_type"; + private ItemSelectionModel itemModel; + + public PublisherPublicationsTable(final ItemSelectionModel itemModel) { + super(); + + this.itemModel = itemModel; + + setEmptyView(new Label(PublicationGlobalizationUtil.globalize("publisher.ui.publications.none"))); + + final TableColumnModel columnModel = getColumnModel(); + columnModel.add(new TableColumn( + 0, + PublicationGlobalizationUtil.globalize("publisher.ui.publications.name").localize(), + TABLE_COL_EDIT)); + columnModel.add(new TableColumn( + 1, + PublicationGlobalizationUtil.globalize("publisher.ui.publications.columns.year").localize(), + TABLE_COL_YEAR)); + columnModel.add(new TableColumn( + 2, + PublicationGlobalizationUtil.globalize("publisher.ui.publications.columns.type").localize(), + TABLE_COL_TYPE)); + + setModelBuilder(new ModelBuilder(itemModel)); + + columnModel.get(0).setCellRenderer(new EditCellRenderer()); + } + + private class ModelBuilder extends LockableImpl implements TableModelBuilder { + + private final ItemSelectionModel itemModel; + + public ModelBuilder(final ItemSelectionModel itemModel) { + this.itemModel = itemModel; + } + + public TableModel makeModel(final Table table, final PageState state) { + table.getRowSelectionModel().clearSelection(state); + + final Publisher publisher = (Publisher) itemModel.getSelectedItem(state); + + return new Model(table, state, publisher); + } + + } + + private class Model implements TableModel { + + private Table table; + private PublicationBundleCollection publications; + + public Model(final Table table, final PageState state, final Publisher publisher) { + this.table = table; + publications = publisher.getPublications(); + } + + @Override + public int getColumnCount() { + return table.getColumnModel().size(); + } + + public boolean nextRow() { + boolean ret; + + if ((publications != null) && publications.next()) { + ret = true; + } else { + ret = false; + } + + return ret; + } + + @Override + public Object getElementAt(final int columnIndex) { + switch (columnIndex) { + case 0: + return publications.getPublication().getTitle(); + case 1: + return publications.getPublication().getYearOfPublication(); + case 2: + return ((DataObject) publications.getPublication().get("type")).get("label"); + default: + return null; + } + } + + @Override + public Object getKeyAt(final int columnIndex) { + return publications.getPublication().getID(); + } + + } + + private class EditCellRenderer extends LockableImpl implements TableCellRenderer { + + public Component getComponent(final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int column) { + final com.arsdigita.cms.SecurityManager securityManager = CMS.getSecurityManager(state); + final Publication publication = new Publication((BigDecimal) key); + +// final boolean canEdit = securityManager.canAccess(state.getRequest(), +// com.arsdigita.cms.SecurityManager.EDIT_ITEM, +// publication); + + //if (canEdit) { + final ContentSection section = CMS.getContext().getContentSection(); + final ItemResolver resolver = section.getItemResolver(); + final Link link = new Link(value.toString(), + resolver.generateItemURL(state, + publication, + section, + publication.getVersion())); + return link; +// } else { +// final Label label = new Label(value.toString()); +// return label; +// } + + } + + } +}