- Verknüpfung von GenericOrganizationalUnit und Publication. Die Assoziation wird in Publication definiert. Publication stellt
außerdem Hilfsmethoden bereit, um die Publikationen einer GenericOrganizationalUnit zu verwalten. Der AuthoringStep für Publication -> GenericOrganizationalUnit kann über die PublicationConfig aktiviert werden. Außerdem kann über die PublicationConfig ein AuthoringStep zum Hinzufügen einer Publikation zu einer GenericOrganizationalUnit an beliebige viele Unterklassen von GenericOrganizationalUnit angehängt werden - Einige Formatierungen git-svn-id: https://svn.libreccm.org/ccm/trunk@1207 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
1e6abe269d
commit
401ba7e847
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<registry>
|
||||
<!-- <config class="com.arsdigita.cms.PublicationsConfig" storage="ccm-sci-publicationsn/publications.properties"/> -->
|
||||
<config class="com.arsdigita.cms.contenttypes.PublicationsConfig" storage="ccm-sci-publications/publications.properties"/>
|
||||
</registry>
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
@ -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";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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]
|
||||
|
|
@ -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();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue