diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesInitializer.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesInitializer.java index 17312a6f0..a3a981511 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesInitializer.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesInitializer.java @@ -1,6 +1,5 @@ package com.arsdigita.cms.publicpersonalprofile; -import com.arsdigita.cms.contenttypes.PublicPersonalProfileNavItem; import com.arsdigita.db.DbHelper; import com.arsdigita.domain.DomainObject; import com.arsdigita.domain.DomainObjectFactory; diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesLoader.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesLoader.java index 81641fbfe..dc78e97e3 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesLoader.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesLoader.java @@ -1,15 +1,10 @@ package com.arsdigita.cms.publicpersonalprofile; -import com.arsdigita.cms.contenttypes.PublicPersonalProfileNavItem; -import com.arsdigita.domain.DomainObject; -import com.arsdigita.kernel.ACSObjectInstantiator; import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.KernelExcursion; import com.arsdigita.loader.PackageLoader; -import com.arsdigita.persistence.DataObject; import com.arsdigita.runtime.ScriptContext; import com.arsdigita.web.Application; -import com.arsdigita.web.ApplicationSetup; import com.arsdigita.web.ApplicationType; import org.apache.log4j.Logger; @@ -33,50 +28,16 @@ public class PublicPersonalProfilesLoader extends PackageLoader { protected void excurse() { setEffectiveParty(Kernel.getSystemParty()); - /*ApplicationSetup setup = new ApplicationSetup(logger); - - setup.setApplicationObjectType( - PublicPersonalProfiles.BASE_DATA_OBJECT_TYPE); - setup.setKey("profiles"); - setup.setTitle("PublicPersonalProfiles"); - setup.setDescription("Display public personal profiles"); - - setup.setInstantiator(new ACSObjectInstantiator() { - - @Override - public DomainObject doNewInstance( - final DataObject dataObject) { - return new PublicPersonalProfiles(dataObject); - } - }); - - ApplicationType type = setup.run(); - type.save(); - - if (!Application.isInstalled( - PublicPersonalProfiles.BASE_DATA_OBJECT_TYPE, - "/profiles/")) { - /*Application app = Application.createRootApplication(type, - "profiles", - false);*/ - /*Application app = Application.createApplication(type, - "profiles", - "profiles", - null); - - app.save(); - }*/ - - ApplicationType type = - new ApplicationType("PublicPersonalProfile", - PublicPersonalProfiles.BASE_DATA_OBJECT_TYPE); + final ApplicationType type = new ApplicationType( + "PublicPersonalProfile", + PublicPersonalProfiles.BASE_DATA_OBJECT_TYPE); type.setDescription("PublicPersonalProfile Viewer"); Application.createApplication( PublicPersonalProfiles.BASE_DATA_OBJECT_TYPE, "profiles", "PublicPersonalProfiles", - null); + null); } }.run(); diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnit.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnit.java index 58f3ea401..27ebf3f4d 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnit.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnit.java @@ -21,8 +21,6 @@ package com.arsdigita.cms.contenttypes; import com.arsdigita.cms.ContentBundle; import com.arsdigita.cms.ContentPage; -import com.arsdigita.cms.ExtraXMLGenerator; -import com.arsdigita.cms.contenttypes.ui.GenericOrgaUnitExtraXmlGenerator; import com.arsdigita.cms.contenttypes.ui.GenericOrganizationalUnitSubordinateOrgaUnitAddForm; import com.arsdigita.cms.contenttypes.ui.GenericOrganizationalUnitSubordinateOrgaUnitsTable; import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; @@ -32,7 +30,6 @@ import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.OID; import com.arsdigita.util.Assert; import java.math.BigDecimal; -import java.util.List; import org.apache.log4j.Logger; /** diff --git a/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl b/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl index 83f35285e..13a9f3d2b 100644 --- a/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl +++ b/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl @@ -48,4 +48,70 @@ association { // Additional attributes Boolean[0..1] editor = ct_publications_authorship.editor BIT; Integer[0..1] authorOrder = ct_publications_authorship.authorship_order INTEGER; +} + +//Association between GenericOrganizationalUnit and Publications. +//AuthoringStep is attached by configuration. +//See GenericOrganizationalUnitsPublicationsStep and +//PublicationGenericOrganizationalUnitsStep for more information +association { + GenericOrganizationalUnit[0..n] orgaunits = join ct_publications.publication_id + to cms_organizationalunits_publications_map.publication_id, + join cms_organizationalunits_publications_map.orgaunit_id + to cms_organizationalunits.organizationalunit_id; + + Publication[0..n] publications = join cms_organizationalunits.organizationalunit_id + to cms_organizationalunits_publications_map.orgaunit_id, + join cms_organizationalunits_publications_map.publication_id + to ct_publications.publication_id; + Integer[0..1] publicationOrder = cms_organizationalunits_publications_map.publication_order INTEGER; +} + +query getAllYearsOfPublication { + Integer yearOfPublication; + + do { + select distinct ct_publications.year + from ct_publications + } map { + yearOfPublication = ct_publications.year; + } +} + +query getAllYearsOfPublicationForAuthor { + Integer yearOfPublication; + + do { + select distinct ct_publications.year + from ct_publications join ct_publications_authorship on ct_publications.publication_id = ct_publications_authorship.publication_id + where person_id = :author + } map { + yearOfPublication = ct_publications.year; + } +} + +query getAllPublicationTypesForAuthor { + + String objectType; + + do { + select distinct acs_objects.object_type + from ct_publications join acs_objects on ct_publications.publication_id = acs_objects.object_id join ct_publications_authorship on ct_publications.publication_id = ct_publications_authorship.publication_id + where person_id = :author + } map { + objectType = acs_objects.object_type; + } + +} + +query getIdsOfPublicationsOfSciMember { + BigDecimal publicationId; + + do { + select ct_publications_authorship.publication_id + from ct_publications_authorship + where ct_publications_authorship.person_id = :author + } map { + publicationId = ct_publications_authorship.publication_id; + } } \ No newline at end of file diff --git a/ccm-sci-publications/src/ccm-sci-publications.config b/ccm-sci-publications/src/ccm-sci-publications.config index fc7df7f98..9877b71c8 100644 --- a/ccm-sci-publications/src/ccm-sci-publications.config +++ b/ccm-sci-publications/src/ccm-sci-publications.config @@ -1,4 +1,4 @@ - + diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPublicationsCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPublicationsCollection.java new file mode 100644 index 000000000..cb2444233 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPublicationsCollection.java @@ -0,0 +1,59 @@ +package com.arsdigita.cms.contenttypes; + +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; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class GenericOrganizationalUnitPublicationsCollection + extends DomainCollection { + + public GenericOrganizationalUnitPublicationsCollection( + final DataCollection dataCollection) { + super(dataCollection); + } + + public Publication getPublication() { + return (Publication) DomainObjectFactory.newInstance(m_dataCollection. + getDataObject()); + } + + public BigDecimal getID() { + return (BigDecimal) m_dataCollection.getDataObject().get(ACSObject.ID); + } + + public String getTitle() { + return (String) m_dataCollection.getDataObject().get(ContentPage.TITLE); + } + + public Integer getYearOfPublication() { + return (Integer) m_dataCollection.getDataObject().get( + Publication.YEAR_OF_PUBLICATION); + } + + public String getAbstract() { + return (String) m_dataCollection.getDataObject().get( + Publication.ABSTRACT); + } + + public String getMisc() { + return (String) m_dataCollection.getDataObject().get(Publication.MISC); + } + + public AuthorshipCollection getAuthors() { + return new AuthorshipCollection((DataCollection) m_dataCollection. + getDataObject().get(Publication.AUTHORS)); + } + + public SeriesCollection getSeries() { + return new SeriesCollection((DataCollection) m_dataCollection. + getDataObject().get(Publication.SERIES)); + } +} 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 57cf48c7d..19aedc5b2 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java @@ -50,38 +50,49 @@ import java.math.BigDecimal; * @author Jens Pelzetter */ public class Publication extends ContentPage { - + public final static String YEAR_OF_PUBLICATION = "yearOfPublication"; public final static String ABSTRACT = "abstract"; public final static String MISC = "misc"; public final static String AUTHORS = "authors"; public final static String EDITOR = "editor"; - public final static String AUTHOR_ORDER = "authorOrder"; + public final static String AUTHOR_ORDER = "authorOrder"; public final static String SERIES = "series"; + public final static String ORGAUNITS = "orgaunits"; + public final static String ORGAUNIT_PUBLICATIONS = "publications"; public final static String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.Publication"; - + private final static PublicationsConfig config = new PublicationsConfig(); + + static { + config.load(); + } + public Publication() { this(BASE_DATA_OBJECT_TYPE); } - - public Publication(BigDecimal id) throws + + public Publication(final BigDecimal id) throws DataObjectNotFoundException { this(new OID(BASE_DATA_OBJECT_TYPE, id)); } - - public Publication(OID oid) throws DataObjectNotFoundException { + + public Publication(final OID oid) throws DataObjectNotFoundException { super(oid); } - - public Publication(DataObject obj) { + + public Publication(final DataObject obj) { super(obj); } - - public Publication(String type) { + + public Publication(final String type) { super(type); } + public static PublicationsConfig getConfig() { + return config; + } + /** * Gets the year of publications. * @@ -96,7 +107,7 @@ public class Publication extends ContentPage { * * @param year The year when the publication was published. */ - public void setYearOfPublication(Integer year) { + public void setYearOfPublication(final Integer year) { set(YEAR_OF_PUBLICATION, year); } @@ -114,7 +125,7 @@ public class Publication extends ContentPage { * * @param theAbstract A string describing the contents of the publication */ - public void setAbstract(String theAbstract) { + public void setAbstract(final String theAbstract) { set(ABSTRACT, theAbstract); } @@ -154,11 +165,11 @@ public class Publication extends ContentPage { * which is derivated from the {@link GenericPerson} type. * @param editor Is the author an editor? */ - public void addAuthor(GenericPerson author, Boolean editor) { + public void addAuthor(final GenericPerson author, final Boolean editor) { Assert.exists(author, GenericPerson.class); - + DataObject link = add(AUTHORS, author); - + link.set(EDITOR, editor); link.set(AUTHOR_ORDER, Integer.valueOf((int) getAuthors().size())); } @@ -168,7 +179,7 @@ public class Publication extends ContentPage { * * @param author The author to remove. */ - public void removeAuthor(GenericPerson author) { + public void removeAuthor(final GenericPerson author) { Assert.exists(author, GenericPerson.class); remove(AUTHORS, author); } @@ -180,26 +191,71 @@ public class Publication extends ContentPage { * otherwise. */ public boolean hasAuthors() { - return !this.getAuthors().isEmpty(); + return !getAuthors().isEmpty(); } - + public SeriesCollection getSeries() { return new SeriesCollection((DataCollection) get(SERIES)); } - - public void addSeries(Series series) { + + public void addSeries(final Series series) { Assert.exists(series, Series.class); - + add(SERIES, series); } - - public void removeSeries(Series series) { + + public void removeSeries(final Series series) { Assert.exists(series, Series.class); - + remove(SERIES, series); } - + public boolean hasSeries() { - return !this.getSeries().isEmpty(); + return !getSeries().isEmpty(); + } + + public PublicationGenericOrganizationalsUnitCollection getOrganizationalUnits() { + return new PublicationGenericOrganizationalsUnitCollection((DataCollection) get( + ORGAUNITS)); + } + + public void addOrganizationalUnit(final GenericOrganizationalUnit orgaunit) { + Assert.exists(orgaunit, GenericOrganizationalUnit.class); + + add(ORGAUNITS, orgaunit); + } + + public void removeOrganizationalUnit( + final GenericOrganizationalUnit orgaunit) { + Assert.exists(orgaunit, GenericOrganizationalUnit.class); + + remove(ORGAUNITS, orgaunit); + } + + public boolean hasOrganizationalUnits() { + return !getOrganizationalUnits().isEmpty(); + } + + public static GenericOrganizationalUnitPublicationsCollection getPublications( + final GenericOrganizationalUnit orgaunit) { + final DataCollection dataCollection = (DataCollection) orgaunit.get( + ORGAUNIT_PUBLICATIONS); + + return new GenericOrganizationalUnitPublicationsCollection(dataCollection); + } + + public static void addPublication(final GenericOrganizationalUnit orgaunit, + final Publication publication) { + Assert.exists(publication); + + orgaunit.add(ORGAUNIT_PUBLICATIONS, publication); + } + + public static void removePublication( + final GenericOrganizationalUnit orgaunit, + final Publication publication) { + Assert.exists(publication); + + orgaunit.remove(ORGAUNIT_PUBLICATIONS, publication); } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationGenericOrganizationalsUnitCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationGenericOrganizationalsUnitCollection.java new file mode 100644 index 000000000..97f00b22b --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationGenericOrganizationalsUnitCollection.java @@ -0,0 +1,66 @@ +package com.arsdigita.cms.contenttypes; + +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; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PublicationGenericOrganizationalsUnitCollection + extends DomainCollection { + + public PublicationGenericOrganizationalsUnitCollection( + final DataCollection dataCollection) { + super(dataCollection); + + addOrder("title"); + } + + public GenericOrganizationalUnit getOrganizationalUnit() { + return (GenericOrganizationalUnit) DomainObjectFactory.newInstance( + m_dataCollection.getDataObject()); + } + + public BigDecimal getID() { + return (BigDecimal) m_dataCollection.getDataObject().get(ACSObject.ID); + } + + public String getTitle() { + return (String) m_dataCollection.getDataObject().get(ContentPage.TITLE); + } + + public String getAddendum() { + return (String) m_dataCollection.getDataObject().get( + GenericOrganizationalUnit.ADDENDUM); + } + + public GenericOrganizationalUnitContactCollection getContacts() { + return new GenericOrganizationalUnitContactCollection( + (DataCollection) m_dataCollection.get( + GenericOrganizationalUnit.CONTACTS)); + } + + public GenericOrganizationalUnitPersonCollection getPersons() { + return new GenericOrganizationalUnitPersonCollection( + (DataCollection) m_dataCollection.getDataObject().get( + GenericOrganizationalUnit.PERSONS)); + } + + public GenericOrganizationalUnitSuperiorCollection getSuperiorOrgaUnits() { + return new GenericOrganizationalUnitSuperiorCollection( + (DataCollection) m_dataCollection.getDataObject().get( + GenericOrganizationalUnit.SUPERIOR_ORGAUNITS)); + } + + public GenericOrganizationalUnitSubordinateCollection getSubordinateOrgaUnits() { + return new GenericOrganizationalUnitSubordinateCollection( + (DataCollection) m_dataCollection.getDataObject().get( + GenericOrganizationalUnit.SUBORDINATE_ORGAUNITS)); + } +} 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 b9bd821a3..18f3c07c8 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationInitializer.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationInitializer.java @@ -19,24 +19,62 @@ */ package com.arsdigita.cms.contenttypes; +import com.arsdigita.cms.contenttypes.ui.GenericOrganizationalUnitPublicationsStep; +import com.arsdigita.cms.contenttypes.ui.PublicationGenericOrganizationalUnitsStep; +import com.arsdigita.cms.contenttypes.ui.PublicationGlobalizationUtil; +import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; +import com.arsdigita.runtime.DomainInitEvent; + /** * * @author Jens Pelzetter + * @version $Id$ */ public class PublicationInitializer extends ContentTypeInitializer { - + public PublicationInitializer() { super("ccm-sci-publications.pdl.mf", Publication.BASE_DATA_OBJECT_TYPE); } + @Override + public void init(final DomainInitEvent event) { + super.init(event); + + final PublicationsConfig config = Publication.getConfig(); + + if (config.getAttachOrgaUnitsStep()) { + AuthoringKitWizard.registerAssetStep( + Publication.BASE_DATA_OBJECT_TYPE, + PublicationGenericOrganizationalUnitsStep.class, + PublicationGlobalizationUtil.globalize( + "publications.ui.orgaunits.title"), + PublicationGlobalizationUtil.globalize( + "publications.ui.orgaunits.description"), + 10); + } + + final String attacToStr = config.getAttachPublicationsStepTo(); + final String[] attachToCts = attacToStr.split(";"); + for (String attachTo : attachToCts) { + AuthoringKitWizard.registerAssetStep( + attachTo, + GenericOrganizationalUnitPublicationsStep.class, + PublicationGlobalizationUtil.globalize( + "genericorganizationalunit.ui.publications.title"), + PublicationGlobalizationUtil.globalize( + "genericorganizationalunit.ui.publications.description"), + 10); + } + } + @Override public String[] getStylesheets() { - return new String[]{"/static/content-types/com/arsdigita/cms/contenttypes/Publication.xsl"}; + return new String[]{ + "/static/content-types/com/arsdigita/cms/contenttypes/Publication.xsl"}; } @Override public String getTraversalXML() { return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Publication.xml"; } - } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig.java new file mode 100644 index 000000000..1645405a6 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig.java @@ -0,0 +1,44 @@ +package com.arsdigita.cms.contenttypes; + +import com.arsdigita.runtime.AbstractConfig; +import com.arsdigita.util.parameter.BooleanParameter; +import com.arsdigita.util.parameter.Parameter; +import com.arsdigita.util.parameter.StringParameter; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PublicationsConfig extends AbstractConfig { + + private final Parameter attachOrgaUnitsStep; + private final Parameter attachPublicationsStepTo; + + public PublicationsConfig() { + attachOrgaUnitsStep = + new BooleanParameter( + "com.arsdigita.cms.contenttypes.publications.attach_orgaunits_step", + Parameter.REQUIRED, + Boolean.FALSE); + + attachPublicationsStepTo = + new StringParameter( + "com.arsdigita.cms.contenttypes.publications.attach_publications_step_to", + Parameter.REQUIRED, + ""); + + register(attachOrgaUnitsStep); + register(attachPublicationsStepTo); + + loadInfo(); + } + + public Boolean getAttachOrgaUnitsStep() { + return (Boolean) get(attachOrgaUnitsStep); + } + + public String getAttachPublicationsStepTo() { + return (String) get(attachPublicationsStepTo); + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig_parameter.properties b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig_parameter.properties new file mode 100644 index 000000000..845021f49 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig_parameter.properties @@ -0,0 +1,9 @@ +com.arsdigita.cms.contenttypes.publications.attach_orgaunits_step.title = Enable publication -> GenericOrganizationalUnit authoring step +com.arsdigita.cms.contenttypes.publications.attach_orgaunits_step.purpose = Enables the authoring step for associating a publication with a organizational unit. +com.arsdigita.cms.contenttypes.publications.attach_orgaunits_step.example = true +com.arsdigita.cms.contenttypes.publications.attach_orgaunits_step.format = [Boolean] + +com.arsdigita.cms.contenttypes.publications.attach_publications_step_to.title = Attach the Publications authoring step +com.arsdigita.cms.contenttypes.publications.attach_publications_step_to.purpose = Attaches the authoring step for associating a publication to organizationalunit to the authoring steps of the content types in the string. +com.arsdigita.cms.contenttypes.publications.attach_publications_step_to.example = com.arsdigita.cms.contenttypes.SciInstitute;com.arsdigita.cms.contenttypes.SciDepartment;com.arsdigita.cms.contenttypes.SciProject +com.arsdigita.cms.contenttypes.publications.attach_publications_step_to.format = [String] diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationAddForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationAddForm.java new file mode 100644 index 000000000..481df0b4c --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationAddForm.java @@ -0,0 +1,111 @@ +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.GenericOrganizationalUnit; +import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitPublicationsCollection; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.ui.ItemSearchWidget; +import com.arsdigita.cms.ui.authoring.BasicItemForm; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class GenericOrganizationalUnitPublicationAddForm + extends BasicItemForm + implements FormInitListener, + FormProcessListener { + + private ItemSearchWidget itemSearch; + private final static String ITEM_SEARCH = "publications"; + + public GenericOrganizationalUnitPublicationAddForm( + final ItemSelectionModel itemModel) { + super("GenericOrganizationalUnitPublicationAddForm", itemModel); + } + + @Override + public void addWidgets() { + add(new Label((String) PublicationGlobalizationUtil.globalize( + "genericorganizationalunit.ui.publication.select").localize())); + itemSearch = new ItemSearchWidget(ITEM_SEARCH, ContentType. + findByAssociatedObjectType(Publication.class.getName())); + add(itemSearch); + } + + @Override + public void init(final FormSectionEvent fse) throws FormProcessException { + final PageState state = fse.getPageState(); + + setVisible(state, true); + } + + @Override + public void process(final FormSectionEvent fse) throws FormProcessException { + final FormData data = fse.getFormData(); + final PageState state = fse.getPageState(); + + final GenericOrganizationalUnit orgaunit = + (GenericOrganizationalUnit) getItemSelectionModel(). + getSelectedObject(state); + + if ((orgaunit != null) + && getSaveCancelSection().getSaveButton().isSelected(state)) { + Publication publication = (Publication) data.get(ITEM_SEARCH); + publication = (Publication) publication.getContentBundle(). + getInstance(orgaunit.getLanguage(), true); + Publication.addPublication(orgaunit, publication); + + orgaunit.save(); + } + + init(fse); + } + + @Override + public void validate(final FormSectionEvent fse) throws FormProcessException { + final PageState state = fse.getPageState(); + final FormData data = fse.getFormData(); + + if (data.get(ITEM_SEARCH) == null) { + data.addError(PublicationGlobalizationUtil.globalize( + "genericorganizationalunit.ui.publication.select.nothing")); + } + + final GenericOrganizationalUnit orgaunit = + (GenericOrganizationalUnit) getItemSelectionModel(). + getSelectedObject(state); + Publication publication = (Publication) data.get(ITEM_SEARCH); + if (!(publication.getContentBundle().hasInstance(orgaunit.getLanguage(), + true))) { + data.addError( + PublicationGlobalizationUtil.globalize( + "genericorganizationalunit.ui.publication.no_suitable_language_variant")); + return; + } + + publication = (Publication) publication.getContentBundle().getInstance(orgaunit. + getLanguage(), true); + final GenericOrganizationalUnitPublicationsCollection publications = + Publication. + getPublications(orgaunit); + publications.addFilter(String.format("id = %s", + publication.getID().toString())); + if (publications.size() > 0) { + data.addError(PublicationGlobalizationUtil.globalize( + "genericorganizationalunit.ui.publication.already_added")); + } + + publications.close(); + + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationsStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationsStep.java new file mode 100644 index 000000000..f803fc11e --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationsStep.java @@ -0,0 +1,43 @@ +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 + * @version $Id$ + */ +public class GenericOrganizationalUnitPublicationsStep extends SimpleEditStep { + + private String ADD_PUBLICATION_SHEET_NAME = + "GenericOrganizationalUnitAddPublication"; + + public GenericOrganizationalUnitPublicationsStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent) { + this(itemModel, parent, null); + } + + public GenericOrganizationalUnitPublicationsStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final String prefix) { + super(itemModel, parent, prefix); + + final BasicItemForm addPublicationSheet = + new GenericOrganizationalUnitPublicationAddForm(itemModel); + add(ADD_PUBLICATION_SHEET_NAME, + (String) PublicationGlobalizationUtil.globalize( + "genericorganizationalunit.ui.add_publication").localize(), + new WorkflowLockedComponentAccess(addPublicationSheet, itemModel), + addPublicationSheet.getSaveCancelSection().getCancelButton()); + + final GenericOrganizationalUnitPublicationsTable publicationsTable = new GenericOrganizationalUnitPublicationsTable(itemModel); + setDisplayComponent(publicationsTable); + + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationsTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationsTable.java new file mode 100644 index 000000000..b581cbd2a --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationsTable.java @@ -0,0 +1,245 @@ +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.Link; +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.CMS; +import com.arsdigita.cms.ContentSection; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.GenericOrganizationalUnit; +import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitPublicationsCollection; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.dispatcher.ItemResolver; +import com.arsdigita.cms.dispatcher.Utilities; +import com.arsdigita.developersupport.Comodifications; +import com.arsdigita.util.LockableImpl; +import java.math.BigDecimal; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class GenericOrganizationalUnitPublicationsTable + extends Table { + + private final String TABLE_COL_EDIT = "table_col_edit"; + private final String TABLE_COL_DEL = "table_col_del"; + private ItemSelectionModel itemModel; + + public GenericOrganizationalUnitPublicationsTable( + final ItemSelectionModel itemModel) { + super(); + + this.itemModel = itemModel; + + setEmptyView(new Label(PublicationGlobalizationUtil.globalize( + "genericorganizationalunit.ui.publications.none"))); + + final TableColumnModel columnModel = getColumnModel(); + columnModel.add(new TableColumn( + 0, + PublicationGlobalizationUtil.globalize( + "genericorganizationalunit.ui.publications.columns.name"), + TABLE_COL_EDIT)); + columnModel.add(new TableColumn( + 1, + PublicationGlobalizationUtil.globalize( + "genericorganizationalunit.ui.publications.columns.remove"), + TABLE_COL_DEL)); + + setModelBuilder(new ModelBuilder(itemModel)); + + columnModel.get(0).setCellRenderer(new EditCellRenderer()); + columnModel.get(1).setCellRenderer(new DeleteCellRenderer()); + + addTableActionListener(new ActionListener()); + + } + + 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 GenericOrganizationalUnit orgaunit = + (GenericOrganizationalUnit) itemModel. + getSelectedObject(state); + + return new Model(table, state, orgaunit); + } + } + + private class Model implements TableModel { + + private final Table table; + private final GenericOrganizationalUnitPublicationsCollection publications; + + public Model(final Table table, + final PageState state, + final GenericOrganizationalUnit orgaunit) { + this.table = table; + publications = Publication.getPublications(orgaunit); + } + + @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.getTitle(); + case 1: + return PublicationGlobalizationUtil.globalize( + "genericorganizationalunit.ui.publications.remove"). + localize(); + default: + return null; + } + } + + @Override + public Object getKeyAt(int columnIndex) { + return publications.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 = Utilities. + 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( + String.format("%s (%s)", + value.toString(), + publication.getLanguage()), + resolver.generateItemURL(state, + publication, + section, + publication.getVersion())); + return link; + } else { + final Label label = new Label(String.format("%s (%s)", + value.toString(), + publication. + getLanguage())); + return label; + } + } + } + + private class DeleteCellRenderer + 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 = Utilities. + getSecurityManager(state); + final GenericOrganizationalUnit orgaunit = + (GenericOrganizationalUnit) itemModel. + getSelectedObject(state); + + final boolean canEdit = securityManager.canAccess( + state.getRequest(), + com.arsdigita.cms.SecurityManager.DELETE_ITEM, + orgaunit); + + if (canEdit) { + final ControlLink link = new ControlLink(value.toString()); + link.setConfirmation((String) PublicationGlobalizationUtil. + globalize( + "genericorganizationalunit.ui.publications.remove.confirm"). + localize()); + return link; + } else { + final Label label = new Label(value.toString()); + return label; + } + } + } + + private class ActionListener implements TableActionListener { + + public void cellSelected(final TableActionEvent event) { + final PageState state = event.getPageState(); + + final Publication publication = new Publication((BigDecimal) event. + getRowKey()); + final GenericOrganizationalUnit orgaunit = + (GenericOrganizationalUnit) itemModel. + getSelectedObject(state); + + final TableColumn column = getColumnModel().get(event.getColumn(). + intValue()); + + if (TABLE_COL_EDIT.equals(column.getHeaderKey().toString())) { + //Nothing to do yet + } else if (TABLE_COL_DEL.equals(column.getHeaderKey().toString())) { + Publication.removePublication(orgaunit, publication); + } + + } + + public void headSelected(final TableActionEvent event) { + //Nothing + } + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGenericOrganizationalUnitAddForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGenericOrganizationalUnitAddForm.java new file mode 100644 index 000000000..0936374d6 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGenericOrganizationalUnitAddForm.java @@ -0,0 +1,109 @@ +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.GenericOrganizationalUnit; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.PublicationGenericOrganizationalsUnitCollection; +import com.arsdigita.cms.ui.ItemSearchWidget; +import com.arsdigita.cms.ui.authoring.BasicItemForm; +import com.arsdigita.persistence.DataCollection; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PublicationGenericOrganizationalUnitAddForm + extends BasicItemForm + implements FormProcessListener, + FormInitListener { + + private ItemSearchWidget itemSearch; + private final static String ITEM_SEARCH = "organizationalunits"; + + public PublicationGenericOrganizationalUnitAddForm( + final ItemSelectionModel itemModel) { + super("PublicationGenericOrganizationalUnitAddForm", itemModel); + } + + @Override + public void addWidgets() { + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.orgaunit.select").localize())); + itemSearch = new ItemSearchWidget(ITEM_SEARCH, ContentType. + findByAssociatedObjectType(GenericOrganizationalUnit.class. + getName())); + add(itemSearch); + } + + @Override + public void init(final FormSectionEvent fse) throws FormProcessException { + final PageState state = fse.getPageState(); + setVisible(state, true); + } + + @Override + public void process(final FormSectionEvent fse) throws FormProcessException { + final FormData data = fse.getFormData(); + final PageState state = fse.getPageState(); + + final Publication publication = (Publication) getItemSelectionModel(). + getSelectedObject(state); + + if ((publication != null) + && (getSaveCancelSection().getSaveButton().isSelected(state))) { + GenericOrganizationalUnit orgaunit = + (GenericOrganizationalUnit) data.get( + ITEM_SEARCH); + orgaunit = (GenericOrganizationalUnit) orgaunit.getContentBundle(). + getInstance(publication.getLanguage(), true); + } + + init(fse); + } + + @Override + public void validate(final FormSectionEvent fse) throws FormProcessException { + final PageState state = fse.getPageState(); + final FormData data = fse.getFormData(); + + if (data.get(ITEM_SEARCH) == null) { + data.addError(PublicationGlobalizationUtil.globalize( + "publications.ui.orgaunit.select.nothing")); + return; + } + + final Publication publication = (Publication) getItemSelectionModel(). + getSelectedObject(state); + GenericOrganizationalUnit orgaunit = (GenericOrganizationalUnit) data. + get(ITEM_SEARCH); + if (!(orgaunit.getContentBundle().hasInstance(publication.getLanguage(), + true))) { + data.addError(PublicationGlobalizationUtil.globalize( + "publications.ui.orgaunit.no_suitable_language_variant")); + return; + } + + orgaunit = (GenericOrganizationalUnit) orgaunit.getContentBundle(). + getInstance(publication.getLanguage(), true); + final PublicationGenericOrganizationalsUnitCollection orgaunits = + publication. + getOrganizationalUnits(); + orgaunits.addFilter( + String.format("id = %s", orgaunit.getID().toString())); + if (orgaunits.size() > 0) { + data.addError(PublicationGlobalizationUtil.globalize( + "publications.ui.orgaunit.already_added")); + } + + orgaunits.close(); + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGenericOrganizationalUnitsStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGenericOrganizationalUnitsStep.java new file mode 100644 index 000000000..b9908883c --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGenericOrganizationalUnitsStep.java @@ -0,0 +1,41 @@ +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 + * @version $Id$ + */ +public class PublicationGenericOrganizationalUnitsStep extends SimpleEditStep { + + private String ADD_ORGAUNIT_SHEET_NAME = "PublicationGenericOrganizationalUnitAddForm"; + + public PublicationGenericOrganizationalUnitsStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent) { + this(itemModel, parent, null); + } + + public PublicationGenericOrganizationalUnitsStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final String prefix) { + super(itemModel, parent, prefix); + + final BasicItemForm addOrgaUnitSheet = new PublicationGenericOrganizationalUnitAddForm( + itemModel); + add(ADD_ORGAUNIT_SHEET_NAME, + (String) PublicationGlobalizationUtil.globalize("publications.ui.orgaunit.add").localize(), + new WorkflowLockedComponentAccess(addOrgaUnitSheet, itemModel), + addOrgaUnitSheet.getSaveCancelSection().getCancelButton()); + + final PublicationGenericOrganizationalUnitsTable orgaunitsTable = new PublicationGenericOrganizationalUnitsTable( + itemModel); + setDisplayComponent(orgaunitsTable); + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGenericOrganizationalUnitsTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGenericOrganizationalUnitsTable.java new file mode 100644 index 000000000..8fcd43119 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGenericOrganizationalUnitsTable.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.Link; +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.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.PublicationGenericOrganizationalsUnitCollection; +import com.arsdigita.cms.dispatcher.ItemResolver; +import com.arsdigita.cms.dispatcher.Utilities; +import com.arsdigita.util.Assert; +import com.arsdigita.util.LockableImpl; +import java.math.BigDecimal; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PublicationGenericOrganizationalUnitsTable extends Table { + + private final String TABLE_COL_EDIT = "table_col_edit"; + private final String TABLE_COL_DEL = "table_col_del"; + private ItemSelectionModel itemModel; + + public PublicationGenericOrganizationalUnitsTable( + final ItemSelectionModel itemModel) { + super(); + this.itemModel = itemModel; + + setEmptyView(new Label(PublicationGlobalizationUtil.globalize( + "publications.ui.orgaunits.none"))); + + final TableColumnModel columnModel = getColumnModel(); + columnModel.add(new TableColumn( + 0, + PublicationGlobalizationUtil.globalize( + "publications.ui.orgaunits.columns.name").localize(), + TABLE_COL_EDIT)); + columnModel.add(new TableColumn( + 1, + PublicationGlobalizationUtil.globalize( + "publications.ui.orgaunits.columns.remove").localize(), + TABLE_COL_EDIT)); + + setModelBuilder(new ModelBuilder(itemModel)); + + columnModel.get(0).setCellRenderer(new EditCellRenderer()); + columnModel.get(1).setCellRenderer(new DeleteCellRenderer()); + + addTableActionListener(new ActionListener()); + } + + 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 Publication publication = (Publication) itemModel. + getSelectedObject(state); + return new Model(table, state, publication); + } + } + + private class Model implements TableModel { + + private final Table table; + private final PublicationGenericOrganizationalsUnitCollection orgaunits; + + public Model(final Table table, + final PageState state, + final Publication publication) { + this.table = table; + + orgaunits = publication.getOrganizationalUnits(); + } + + public int getColumnCount() { + return table.getColumnModel().size(); + } + + public boolean nextRow() { + boolean ret; + + if ((orgaunits != null) && orgaunits.next()) { + ret = true; + } else { + ret = false; + } + + return ret; + } + + public Object getElementAt(final int columnIndex) { + switch (columnIndex) { + case 0: + return orgaunits.getTitle(); + case 1: + return PublicationGlobalizationUtil.globalize( + "publications.ui.orgaunits.remove"); + default: + return null; + } + } + + public Object getKeyAt(final int columnIndex) { + return orgaunits.getID(); + } + } + + private class EditCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + 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 = Utilities. + getSecurityManager(state); + final GenericOrganizationalUnit orgaunit = + new GenericOrganizationalUnit( + (BigDecimal) key); + + final boolean canEdit = securityManager.canAccess( + state.getRequest(), + com.arsdigita.cms.SecurityManager.EDIT_ITEM, + orgaunit); + if (canEdit) { + final ContentSection section = CMS.getContext(). + getContentSection(); + final ItemResolver resolver = section.getItemResolver(); + final Link link = new Link( + String.format("%s (%s)", + value.toString(), + orgaunit.getLanguage()), + resolver.generateItemURL(state, + orgaunit, + section, + orgaunit.getVersion())); + return link; + } else { + final Label label = new Label(String.format( + "%s (%s)", + value.toString(), + orgaunit.getLanguage())); + return label; + } + } + } + + private class DeleteCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + 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 = Utilities. + getSecurityManager(state); + final Publication publication = + (Publication) itemModel. + getSelectedObject(state); + + + boolean canEdit = securityManager.canAccess( + state.getRequest(), + com.arsdigita.cms.SecurityManager.EDIT_ITEM, + publication); + + if (canEdit) { + final ControlLink link = new ControlLink(value.toString()); + link.setConfirmation((String)PublicationGlobalizationUtil.globalize("publications.ui.orgaunits.remove.confirm").localize()); + return link; + } else { + final Label label = new Label(""); + return label; + } + } + } + + private class ActionListener implements TableActionListener { + + @Override + public void cellSelected(final TableActionEvent event) { + final PageState state =event.getPageState(); + + final GenericOrganizationalUnit orgaunit = new GenericOrganizationalUnit((BigDecimal) event.getRowKey()); + final Publication publication = (Publication) itemModel.getSelectedObject(state); + + final TableColumn column = getColumnModel().get(event.getColumn().intValue()); + + if (TABLE_COL_EDIT.equals(column.getHeaderKey().toString())) { + //Nothing yet + } else if(TABLE_COL_DEL.equals(column.getHeaderKey().toString())) { + Assert.exists(orgaunit, GenericOrganizationalUnit.class); + + publication.removeOrganizationalUnit(orgaunit); + } + + } + + @Override + public void headSelected(final TableActionEvent event) { + //Nothing yet + } + + } +} 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 74ecfe0b3..03d485361 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 @@ -359,3 +359,22 @@ publications.ui.series.volume_of_series.no_suitable_language_variant=The selecte publications.ui.series.volume_of_series.already_added=The selected publication has already been added to the series. publications.ui.unpublished.organization.no_orga_selected=No organization selected. publications.ui.unpublished.organization.no_suitable_language_variant=The selected organization item is not available for the language of the current item. +genericorganizationalunit.ui.add_publication=Add publication +genericorganizationalunit.ui.publication.select.nothing=No publication selected. +genericorganizationalunit.ui.publication.no_suitable_language_variant=The selected publication has not suitable language variant. +genericorganizationalunit.ui.publication.already_added=The selected publication has already been added to this organizational unit. +genericorganizationalunit.ui.publications.none=No publications +genericorganizationalunit.ui.publications.remove=Remove +genericorganizationalunit.ui.publications.remove.confirm=Are you sure to remove the selected publication from the list of publications of this organization? +publications.ui.orgaunit.select=Organization(al unit) +publications.ui.orgaunit.select.nothing=No organization(al unit) selected. +publications.ui.orgaunit.no_suitable_language_variant=The selected organization(al unit) has no suitable language variant. +publications.ui.orgaunit.already_added=This publication has already been added to the list of publication of the selected organization(al unit). +publications.ui.orgaunits.none=This publication is not part of any list of publication of a organization(al) unit +publications.ui.orgaunits.remove=Remove +publications.ui.orgaunits.columns.name=Name of the organization(al unit) +publications.ui.orgaunit.add=Add organization(al unit) +publications.ui.orgaunits.title=Lists of publications +publications.ui.orgaunits.description=Add this publication to the list of publications of an organization(al unit) +genericorganizationalunit.ui.publications.description=List of publications +genericorganizationalunit.ui.publications.title=List of publications 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 690747abd..f244ef520 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 @@ -358,3 +358,22 @@ publications.ui.series.volume_of_series.no_suitable_language_variant=Das ausgew\ publications.ui.series.volume_of_series.already_added=Die ausgew\u00e4hlte Publikation wurde der aktuellen Reihe bereits hinzugef\u00fcgt. publications.ui.unpublished.organization.no_orga_selected=Keine Organisation ausgew\u00e4hlt. publications.ui.unpublished.organization.no_suitable_language_variant=Das ausgew\u00e4hlte Item ist nicht f\u00fcr die Sprache des aktuellen Items verf\u00fcgbar. +genericorganizationalunit.ui.add_publication=Publikation hinzuf\u00fcgen +genericorganizationalunit.ui.publication.select.nothing=Keine Publikation ausgew\u00e4hlt. +genericorganizationalunit.ui.publication.no_suitable_language_variant=Die ausgew\u00e4hlte Publikation hat keine passende Sprachvariante. +genericorganizationalunit.ui.publication.already_added=Die ausgew\u00e4hlte Publikation wurde dieser Organisation bereits hinzugef\u00fcgt. +genericorganizationalunit.ui.publications.none=Keine Publikationen +genericorganizationalunit.ui.publications.remove=Entfernen +genericorganizationalunit.ui.publications.remove.confirm=Sind Sie sicher, dass Sie die ausgew\u00e4hlte Publikations aus der Liste der Publikationen dieser Organsation entfernen wollen? +publications.ui.orgaunit.select=Organisation(seinheit) +publications.ui.orgaunit.select.nothing=Keine Organisation(seinheit) ausgew\u00e4hlt. +publications.ui.orgaunit.no_suitable_language_variant=Die ausgew\u00e4hlte Organisation(seinheit) hat keine passende Sprachvariante. +publications.ui.orgaunit.already_added=Diese Publikation wurde bereits der Liste der Publikationen der ausgew\u00e4hlten Organisation(seinheit) zugewiesen. +publications.ui.orgaunits.none=Diese Publikation ist nicht Teil einer Publikationsliste einer Organisation(s)einheit +publications.ui.orgaunits.remove=Entfernen +publications.ui.orgaunits.columns.name=Name der Organisation(seinheit) +publications.ui.orgaunit.add=Organisation hinzuf\u00fcgen +publications.ui.orgaunits.title=Publikationslisten +publications.ui.orgaunits.description=Diese Publikation der Publikationsliste einer Organisation(seinheit) hinzuf\u00fcgen +genericorganizationalunit.ui.publications.description=Publikationsliste +genericorganizationalunit.ui.publications.title=Publikationsliste