PublicationList Contenttyp zur Erstellung von Publikationslisten.
git-svn-id: https://svn.libreccm.org/ccm/trunk@533 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
afaff626c9
commit
c3ae973099
|
|
@ -66,8 +66,8 @@ association {
|
||||||
to cms_contacts.contact_id;
|
to cms_contacts.contact_id;
|
||||||
|
|
||||||
// Link Attribute
|
// Link Attribute
|
||||||
BigDecimal[1..1] contact_order = cms_person_contact_map.contact_order INTEGER;
|
BigDecimal[0..1] contact_order = cms_person_contact_map.contact_order INTEGER;
|
||||||
// Can't use a join statement here because contacttype_id is not unique
|
// Can't use a join statement here because contacttype_id is not unique
|
||||||
String[1..1] contact_type = cms_person_contact_map.key VARCHAR(100);
|
String[0..1] contact_type = cms_person_contact_map.key VARCHAR(100);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ object type GenericOrganizationalUnit extends ContentPage {
|
||||||
// Parent <-> child relation organizationalunits to build department structures etc.
|
// Parent <-> child relation organizationalunits to build department structures etc.
|
||||||
association {
|
association {
|
||||||
|
|
||||||
GenericOrganizationalUnit[0..1] orgaunit_parent = join cms_organizationalunits.organizationalunit_id
|
GenericOrganizationalUnit[0..n] orgaunit_parent = join cms_organizationalunits.organizationalunit_id
|
||||||
to cms_organizationalunits_organizationalunit_map.orgaunit_children_id,
|
to cms_organizationalunits_organizationalunit_map.orgaunit_children_id,
|
||||||
join cms_organizationalunits_organizationalunit_map.orgaunit_parent_id
|
join cms_organizationalunits_organizationalunit_map.orgaunit_parent_id
|
||||||
to cms_organizationalunits.organizationalunit_id;
|
to cms_organizationalunits.organizationalunit_id;
|
||||||
|
|
@ -62,15 +62,15 @@ association {
|
||||||
to cms_contacts.contact_id;
|
to cms_contacts.contact_id;
|
||||||
|
|
||||||
// Some link attributes.
|
// Some link attributes.
|
||||||
String contact_type = cms_organizationalunits_contact_map.contact_type VARCHAR(100);
|
String[0..1] contact_type = cms_organizationalunits_contact_map.contact_type VARCHAR(100);
|
||||||
Integer contact_order = cms_organizationalunits_contact_map.map_order INTEGER;
|
Integer[0..1] contact_order = cms_organizationalunits_contact_map.map_order INTEGER;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Links a organization with persons.
|
// Links a organization with persons.
|
||||||
association {
|
association {
|
||||||
|
|
||||||
GenericOrganizationalUnit[0..1] organizationalunit = join cms_persons.person_id
|
GenericOrganizationalUnit[0..n] organizationalunit = join cms_persons.person_id
|
||||||
to cms_organizationalunits_person_map.person_id,
|
to cms_organizationalunits_person_map.person_id,
|
||||||
join cms_organizationalunits_person_map.organizationalunit_id
|
join cms_organizationalunits_person_map.organizationalunit_id
|
||||||
to cms_organizationalunits.organizationalunit_id;
|
to cms_organizationalunits.organizationalunit_id;
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ public class GenericOrganizationalUnitChildrenCollection
|
||||||
public void swapWithNext(GenericOrganizationalUnit child) {
|
public void swapWithNext(GenericOrganizationalUnit child) {
|
||||||
int currentPos = 0;
|
int currentPos = 0;
|
||||||
int currentIndex = 0;
|
int currentIndex = 0;
|
||||||
int nextIndex = 0;
|
int nextIndex = 0;
|
||||||
|
|
||||||
s_log.debug("Searching child...");
|
s_log.debug("Searching child...");
|
||||||
this.rewind();
|
this.rewind();
|
||||||
|
|
@ -181,6 +181,7 @@ public class GenericOrganizationalUnitChildrenCollection
|
||||||
* @return The GenericOrganizationalUnit at the cursors current position.
|
* @return The GenericOrganizationalUnit at the cursors current position.
|
||||||
*/
|
*/
|
||||||
public GenericOrganizationalUnit getOrgaUnitChild() {
|
public GenericOrganizationalUnit getOrgaUnitChild() {
|
||||||
return new GenericOrganizationalUnit(m_dataCollection.getDataObject());
|
return new GenericOrganizationalUnit(
|
||||||
|
m_dataCollection.getDataObject());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -429,7 +429,31 @@ public class OID {
|
||||||
for(Iterator it = props.keySet().iterator(); it.hasNext(); ) {
|
for(Iterator it = props.keySet().iterator(); it.hasNext(); ) {
|
||||||
Object key = it.next();
|
Object key = it.next();
|
||||||
Object value = props.get(key);
|
Object value = props.get(key);
|
||||||
sb.append(key.toString() + OID_SEPARATOR_CHAR + value.toString());
|
/*if ((key == null) || (value == null)) {
|
||||||
|
m_log.warn("key or value in OID.toString() are null");
|
||||||
|
m_log.warn(String.format("key = %s", key));
|
||||||
|
m_log.warn(String.format("value = %s", value));
|
||||||
|
}*/
|
||||||
|
/*
|
||||||
|
* Changed by Jens Pelzetter 2010-09-14. For unknown reasons
|
||||||
|
* the value is null for some properties, which causes
|
||||||
|
* a NPE in the line below the if.
|
||||||
|
*/
|
||||||
|
if (null == value) {
|
||||||
|
m_log.info(String.format("The value for prop \"%s\" " +
|
||||||
|
"is null. Ignoring.", key));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Changed by Jens Pelzetter 2010-09-14.
|
||||||
|
*
|
||||||
|
* The old method (see below) is very slow, because of this
|
||||||
|
* has been changed.
|
||||||
|
*/
|
||||||
|
sb.append(key.toString());
|
||||||
|
sb.append(OID_SEPARATOR_CHAR);
|
||||||
|
sb.append(value.toString());
|
||||||
|
//sb.append(key.toString() + OID_SEPARATOR_CHAR + value.toString());
|
||||||
if (it.hasNext()) {
|
if (it.hasNext()) {
|
||||||
sb.append(OID_SEPARATOR_CHAR);
|
sb.append(OID_SEPARATOR_CHAR);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ object type Publication extends ContentPage {
|
||||||
//Assoication for the authors
|
//Assoication for the authors
|
||||||
association {
|
association {
|
||||||
|
|
||||||
Publication[0..1] publication = join cms_persons.person_id
|
Publication[0..n] publication = join cms_persons.person_id
|
||||||
to ct_publications_authorship.person_id,
|
to ct_publications_authorship.person_id,
|
||||||
join ct_publications_authorship.publication_id
|
join ct_publications_authorship.publication_id
|
||||||
to ct_publications.publication_id;
|
to ct_publications.publication_id;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
//
|
||||||
|
// Copyright (C) 2010 Jens Pelzetter, for the Center of Social Politics (ZeS) of
|
||||||
|
// the University of Bremen
|
||||||
|
//
|
||||||
|
// This library is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU Lesser General Public License
|
||||||
|
// as published by the Free Software Foundation; either version 2.1 of
|
||||||
|
// the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This library is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// Lesser General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser General Public
|
||||||
|
// License along with this library; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
model com.arsdigita.cms.contenttypes;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.ContentPage;
|
||||||
|
|
||||||
|
//PDL definition for the basic attributes of publication.
|
||||||
|
object type PublicationList extends ContentPage {
|
||||||
|
|
||||||
|
String[0..1] description = ct_publicationlists.description VARCHAR(2048);
|
||||||
|
|
||||||
|
reference key (ct_publicationlists.publicationlist_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Association which links the publication list(s) and the publications
|
||||||
|
association {
|
||||||
|
|
||||||
|
PublicationList[0..n] publicationLists = join ct_publications.publication_id
|
||||||
|
to ct_publicationlists_map.publication_id,
|
||||||
|
join ct_publicationlists_map.publicationlist_id
|
||||||
|
to ct_publicationlists.publicationlist_id;
|
||||||
|
|
||||||
|
Publication[0..n] publications = join ct_publicationlists.publicationlist_id
|
||||||
|
to ct_publicationlists_map.publicationlist_id,
|
||||||
|
join ct_publicationlists_map.publication_id
|
||||||
|
to ct_publications.publication_id;
|
||||||
|
}
|
||||||
|
|
@ -32,7 +32,7 @@ object type Series extends ContentPage {
|
||||||
//Assoication for the editship of a series
|
//Assoication for the editship of a series
|
||||||
association {
|
association {
|
||||||
|
|
||||||
Series[0..1] series = join cms_persons.person_id
|
Series[0..n] series = join cms_persons.person_id
|
||||||
to ct_series_editship.person_id,
|
to ct_series_editship.person_id,
|
||||||
join ct_series_editship.series_id
|
join ct_series_editship.series_id
|
||||||
to ct_series.series_id;
|
to ct_series.series_id;
|
||||||
|
|
@ -54,7 +54,7 @@ association {
|
||||||
//Assoication for the volumes in the series
|
//Assoication for the volumes in the series
|
||||||
association {
|
association {
|
||||||
|
|
||||||
Series[0..1] series = join ct_publications.publication_id
|
Series[0..n] series = join ct_publications.publication_id
|
||||||
to ct_publications_volume_in_series.publication_id,
|
to ct_publications_volume_in_series.publication_id,
|
||||||
join ct_publications_volume_in_series.series_id
|
join ct_publications_volume_in_series.series_id
|
||||||
to ct_series.series_id;
|
to ct_series.series_id;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<ctd:content-types xmlns:ctd="http://xmlns.redhat.com/cms/content-types"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
|
||||||
|
|
||||||
|
<ctd:content-type
|
||||||
|
label="PublicationList"
|
||||||
|
description="A list of publications"
|
||||||
|
objectType="com.arsdigita.cms.contenttypes.PublicationList"
|
||||||
|
classname="com.arsdigita.cms.contenttypes.PublicationList">
|
||||||
|
|
||||||
|
<ctd:authoring-kit createComponent="com.arsdigita.cms.ui.authoring.PageCreate">
|
||||||
|
|
||||||
|
<ctd:authoring-step
|
||||||
|
labelKey="publications.ui.publicationlist_properties.title"
|
||||||
|
labelBundle="com.arsdigita.cms.contenttypes.ui.PublicationResources"
|
||||||
|
descriptionKey="publications.ui.publicationlist_properties.title.description"
|
||||||
|
descriptionBundle="com.arsdigita.cms.contenttypes.ui.PublicationResources"
|
||||||
|
component="com.arsdigita.cms.contenttypes.ui.PublicationListPropertiesStep"
|
||||||
|
ordering="1"/>
|
||||||
|
|
||||||
|
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
|
||||||
|
|
||||||
|
</ctd:authoring-kit>
|
||||||
|
|
||||||
|
</ctd:content-type>
|
||||||
|
|
||||||
|
|
||||||
|
</ctd:content-types>
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xrd:adapters
|
||||||
|
xmlns:xrd="http://xmlns.redhat.com/schemas/waf/xml-renderer-rules"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://rhea.redhat.com/schemas/waf/xml-renderer-rules xml-renderer-rules.xsd">
|
||||||
|
|
||||||
|
<xrd:context name="com.arsdigita.cms.dispatcher.SimpleXMLGenerator" >
|
||||||
|
|
||||||
|
<xrd:adapter objectType="com.arsdigita.cms.contenttypes.ArticleInCollectedVolume"
|
||||||
|
extends="com.arsdigita.cms.contenttypes.PublicationWithPublisher">
|
||||||
|
<xrd:associations rule="include">
|
||||||
|
<xrd:property name="/object/collectedVolume"/>
|
||||||
|
</xrd:associations>
|
||||||
|
</xrd:adapter>
|
||||||
|
|
||||||
|
</xrd:context>
|
||||||
|
|
||||||
|
</xrd:adapters>
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xrd:adapters
|
||||||
|
xmlns:xrd="http://xmlns.redhat.com/schemas/waf/xml-renderer-rules"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://rhea.redhat.com/schemas/waf/xml-renderer-rules xml-renderer-rules.xsd">
|
||||||
|
|
||||||
|
<xrd:context name="com.arsdigita.cms.dispatcher.SimpleXMLGenerator" >
|
||||||
|
|
||||||
|
<xrd:adapter objectType="com.arsdigita.cms.contenttypes.PublicationList"
|
||||||
|
extends="com.arsdigita.cms.ContentPage">
|
||||||
|
|
||||||
|
<xrd:associations rule="include">
|
||||||
|
<xrd:property name="/object/publications"/>
|
||||||
|
<xrd:property name="/object/publications/authors"/>
|
||||||
|
<xrd:property name="/object/publications/publisher"/>
|
||||||
|
</xrd:associations>
|
||||||
|
|
||||||
|
</xrd:adapter>
|
||||||
|
|
||||||
|
</xrd:context>
|
||||||
|
|
||||||
|
</xrd:adapters>
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<initializer class="com.arsdigita.cms.Initializer"/>
|
<initializer class="com.arsdigita.cms.Initializer"/>
|
||||||
</requires>
|
</requires>
|
||||||
<provides>
|
<provides>
|
||||||
<table name="ct_publication"/>
|
<table name="ct_publications"/>
|
||||||
<table name="ct_publication_with_publisher"/>
|
<table name="ct_publication_with_publisher"/>
|
||||||
<table name="ct_series"/>
|
<table name="ct_series"/>
|
||||||
<table name="ct_publisher"/>
|
<table name="ct_publisher"/>
|
||||||
|
|
@ -21,6 +21,7 @@
|
||||||
<table name="ct_working_paper"/>
|
<table name="ct_working_paper"/>
|
||||||
<table name="ct_expertise"/>
|
<table name="ct_expertise"/>
|
||||||
<table name="ct_review"/>
|
<table name="ct_review"/>
|
||||||
|
<table name="ct_publicationlists"/>
|
||||||
<initializer class="com.arsdigita.cms.contenttypes.PublicationInitializer"/>
|
<initializer class="com.arsdigita.cms.contenttypes.PublicationInitializer"/>
|
||||||
<initializer class="com.arsdigita.cms.contenttypes.PublicationWithPublisherInitializer"/>
|
<initializer class="com.arsdigita.cms.contenttypes.PublicationWithPublisherInitializer"/>
|
||||||
<initializer class="com.arsdigita.cms.contenttypes.SeriesInitializer"/>
|
<initializer class="com.arsdigita.cms.contenttypes.SeriesInitializer"/>
|
||||||
|
|
@ -36,6 +37,7 @@
|
||||||
<initializer class="com.arsdigita.cms.contenttypes.WorkingPaperInitializer"/>
|
<initializer class="com.arsdigita.cms.contenttypes.WorkingPaperInitializer"/>
|
||||||
<initializer class="com.arsdigita.cms.contenttypes.ExpertiseInitializer"/>
|
<initializer class="com.arsdigita.cms.contenttypes.ExpertiseInitializer"/>
|
||||||
<initializer class="com.arsdigita.cms.contenttypes.ReviewInitializer"/>
|
<initializer class="com.arsdigita.cms.contenttypes.ReviewInitializer"/>
|
||||||
|
<initializer class="com.arsdigita.cms.contenttypes.PublicationListInitializer"/>
|
||||||
</provides>
|
</provides>
|
||||||
<scripts>
|
<scripts>
|
||||||
<schema directory="ccm-sci-publications"/>
|
<schema directory="ccm-sci-publications"/>
|
||||||
|
|
@ -54,5 +56,6 @@
|
||||||
<data class="com.arsdigita.cms.contenttypes.WorkingPaperLoader"/>
|
<data class="com.arsdigita.cms.contenttypes.WorkingPaperLoader"/>
|
||||||
<data class="com.arsdigita.cms.contenttypes.ExpertiseLoader"/>
|
<data class="com.arsdigita.cms.contenttypes.ExpertiseLoader"/>
|
||||||
<data class="com.arsdigita.cms.contenttypes.ReviewLoader"/>
|
<data class="com.arsdigita.cms.contenttypes.ReviewLoader"/>
|
||||||
|
<data class="com.arsdigita.cms.contenttypes.PublicationListLoader"/>
|
||||||
</scripts>
|
</scripts>
|
||||||
</load>
|
</load>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 Jens Pelzetter, for the Center of Social Politics of the University of Bremen
|
* Copyright (c) 2010 Jens Pelzetter,
|
||||||
|
* for the Center of Social Politics of the University of Bremen
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
* modify it under the terms of the GNU Lesser General Public License
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,93 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Jens Pelzetter,
|
||||||
|
* for the Center of Social Politics of the University of Bremen
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2.1 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package com.arsdigita.cms.contenttypes;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.ContentPage;
|
||||||
|
import com.arsdigita.domain.DataObjectNotFoundException;
|
||||||
|
import com.arsdigita.persistence.DataCollection;
|
||||||
|
import com.arsdigita.persistence.DataObject;
|
||||||
|
import com.arsdigita.persistence.OID;
|
||||||
|
import com.arsdigita.util.Assert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This content type is used to create a simple list of {@link Publication}
|
||||||
|
* items. This is only a temporally solution. This content type be replaced by
|
||||||
|
* a more flexible portlet or application soon.
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter
|
||||||
|
*/
|
||||||
|
public class PublicationList extends ContentPage {
|
||||||
|
|
||||||
|
public static final String DESCRIPTION = "description";
|
||||||
|
public static final String PUBLICATIONS = "publications";
|
||||||
|
public static final String BASE_DATA_OBJECT_TYPE =
|
||||||
|
"com.arsdigita.cms.contenttypes.PublicationList";
|
||||||
|
|
||||||
|
public PublicationList() {
|
||||||
|
this(BASE_DATA_OBJECT_TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PublicationList(BigDecimal id)
|
||||||
|
throws DataObjectNotFoundException {
|
||||||
|
this(new OID(BASE_DATA_OBJECT_TYPE, id));
|
||||||
|
}
|
||||||
|
|
||||||
|
public PublicationList(OID oid) throws DataObjectNotFoundException {
|
||||||
|
super(oid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PublicationList(DataObject obj) {
|
||||||
|
super(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PublicationList(String type) {
|
||||||
|
super(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return (String) get(DESCRIPTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String desc) {
|
||||||
|
set(DESCRIPTION, desc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PublicationCollection getPublications() {
|
||||||
|
return new PublicationCollection((DataCollection) get(PUBLICATIONS));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPublication(Publication publication) {
|
||||||
|
Assert.exists (publication, Publication.class);
|
||||||
|
|
||||||
|
add(PUBLICATIONS, publication);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePublication(Publication publication) {
|
||||||
|
Assert.exists (publication, Publication.class);
|
||||||
|
|
||||||
|
remove(PUBLICATIONS, publication);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasPublications() {
|
||||||
|
return !getPublications().isEmpty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Jens Pelzetter,
|
||||||
|
* for the Center of Social Politics of the University of Bremen
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2.1 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package com.arsdigita.cms.contenttypes;
|
||||||
|
|
||||||
|
import com.arsdigita.domain.DomainCollection;
|
||||||
|
import com.arsdigita.persistence.DataCollection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter
|
||||||
|
*/
|
||||||
|
public class PublicationListCollection extends DomainCollection {
|
||||||
|
|
||||||
|
public PublicationListCollection(DataCollection dataCollection) {
|
||||||
|
super(dataCollection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PublicationList getPublicationList() {
|
||||||
|
return new PublicationList(m_dataCollection.getDataObject());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.arsdigita.cms.contenttypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter
|
||||||
|
*/
|
||||||
|
public class PublicationListInitializer extends ContentTypeInitializer {
|
||||||
|
|
||||||
|
public PublicationListInitializer() {
|
||||||
|
super("empty.pdl.mf", PublicationList.BASE_DATA_OBJECT_TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getStylesheets() {
|
||||||
|
return new String[]{"/static/content-types/com/arsdigita/cms/contenttypes/PublicationList.xsl"};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTraversalXML() {
|
||||||
|
return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/PublicationList.xml";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.arsdigita.cms.contenttypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter
|
||||||
|
*/
|
||||||
|
public class PublicationListLoader extends AbstractContentTypeLoader {
|
||||||
|
|
||||||
|
private static final String[] TYPES = {"/WEB-INF/content-types/com/arsdigita/cms/contenttypes/PublicationList.xml"};
|
||||||
|
|
||||||
|
public PublicationListLoader() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTypes() {
|
||||||
|
return TYPES;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -14,9 +14,8 @@ public class PublicationAuthorsPropertyStep extends SimpleEditStep {
|
||||||
|
|
||||||
private static final String ADD_AUTHOR_SHEET_NAME = "addAuthor";
|
private static final String ADD_AUTHOR_SHEET_NAME = "addAuthor";
|
||||||
|
|
||||||
public PublicationAuthorsPropertyStep(
|
public PublicationAuthorsPropertyStep(ItemSelectionModel itemModel,
|
||||||
ItemSelectionModel itemModel,
|
AuthoringKitWizard parent) {
|
||||||
AuthoringKitWizard parent) {
|
|
||||||
this(itemModel, parent, null);
|
this(itemModel, parent, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public class PublicationAuthorsTable
|
||||||
public PublicationAuthorsTable(ItemSelectionModel itemModel) {
|
public PublicationAuthorsTable(ItemSelectionModel itemModel) {
|
||||||
super();
|
super();
|
||||||
m_itemModel = itemModel;
|
m_itemModel = itemModel;
|
||||||
|
|
||||||
setEmptyView(
|
setEmptyView(
|
||||||
new Label(PublicationGlobalizationUtil.globalize(
|
new Label(PublicationGlobalizationUtil.globalize(
|
||||||
"publications.ui.authors.none")));
|
"publications.ui.authors.none")));
|
||||||
|
|
@ -75,7 +75,7 @@ public class PublicationAuthorsTable
|
||||||
setModelBuilder(
|
setModelBuilder(
|
||||||
new PublicationAuthorsTableModelBuilder(itemModel));
|
new PublicationAuthorsTableModelBuilder(itemModel));
|
||||||
|
|
||||||
colModel.get(0).setCellRenderer(new EditCellRenderer());
|
colModel.get(0).setCellRenderer(new EditCellRenderer());
|
||||||
colModel.get(2).setCellRenderer(new DeleteCellRenderer());
|
colModel.get(2).setCellRenderer(new DeleteCellRenderer());
|
||||||
colModel.get(3).setCellRenderer(new UpCellRenderer());
|
colModel.get(3).setCellRenderer(new UpCellRenderer());
|
||||||
colModel.get(4).setCellRenderer(new DownCellRenderer());
|
colModel.get(4).setCellRenderer(new DownCellRenderer());
|
||||||
|
|
@ -110,10 +110,9 @@ public class PublicationAuthorsTable
|
||||||
private AuthorshipCollection m_authorshipCollection;
|
private AuthorshipCollection m_authorshipCollection;
|
||||||
private GenericPerson m_author;
|
private GenericPerson m_author;
|
||||||
|
|
||||||
private PublicationAuthorsTableModel(
|
public PublicationAuthorsTableModel(Table table,
|
||||||
Table table,
|
PageState state,
|
||||||
PageState state,
|
Publication publication) {
|
||||||
Publication publication) {
|
|
||||||
m_table = table;
|
m_table = table;
|
||||||
m_authorshipCollection = publication.getAuthors();
|
m_authorshipCollection = publication.getAuthors();
|
||||||
}
|
}
|
||||||
|
|
@ -205,14 +204,13 @@ public class PublicationAuthorsTable
|
||||||
implements TableCellRenderer {
|
implements TableCellRenderer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getComponent(
|
public Component getComponent(Table table,
|
||||||
Table table,
|
PageState state,
|
||||||
PageState state,
|
Object value,
|
||||||
Object value,
|
boolean isSelected,
|
||||||
boolean isSelected,
|
Object key,
|
||||||
Object key,
|
int row,
|
||||||
int row,
|
int col) {
|
||||||
int col) {
|
|
||||||
|
|
||||||
SecurityManager securityManager =
|
SecurityManager securityManager =
|
||||||
Utilities.getSecurityManager(state);
|
Utilities.getSecurityManager(state);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,122 @@
|
||||||
|
package com.arsdigita.cms.contenttypes.ui;
|
||||||
|
|
||||||
|
import java.text.DateFormat;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.Component;
|
||||||
|
import com.arsdigita.bebop.Label;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
|
import com.arsdigita.bebop.SegmentedPanel;
|
||||||
|
import com.arsdigita.cms.ContentPage;
|
||||||
|
import com.arsdigita.cms.ContentSection;
|
||||||
|
import com.arsdigita.cms.ItemSelectionModel;
|
||||||
|
import com.arsdigita.cms.contenttypes.PublicationList;
|
||||||
|
import com.arsdigita.cms.contenttypes.util.ContenttypesGlobalizationUtil;
|
||||||
|
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
|
||||||
|
import com.arsdigita.cms.ui.authoring.BasicPageForm;
|
||||||
|
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
|
||||||
|
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
|
||||||
|
import com.arsdigita.domain.DomainObject;
|
||||||
|
import com.arsdigita.toolbox.ui.DomainObjectPropertySheet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter
|
||||||
|
*/
|
||||||
|
public class PublicationListPropertiesStep extends SimpleEditStep {
|
||||||
|
|
||||||
|
public static final String EDIT_SHEET_NAME = "edit";
|
||||||
|
private SegmentedPanel segmentedPanel;
|
||||||
|
|
||||||
|
public PublicationListPropertiesStep(ItemSelectionModel itemModel,
|
||||||
|
AuthoringKitWizard parent) {
|
||||||
|
super(itemModel, parent);
|
||||||
|
|
||||||
|
segmentedPanel = new SegmentedPanel();
|
||||||
|
setDefaultEditKey(EDIT_SHEET_NAME);
|
||||||
|
|
||||||
|
addBasicProperties(itemModel, parent);
|
||||||
|
addSteps(itemModel, parent);
|
||||||
|
|
||||||
|
setDisplayComponent(segmentedPanel);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Component getPublicationListPropertySheet(
|
||||||
|
ItemSelectionModel itemModel) {
|
||||||
|
DomainObjectPropertySheet sheet =
|
||||||
|
new DomainObjectPropertySheet(itemModel);
|
||||||
|
|
||||||
|
sheet.add(PublicationGlobalizationUtil.globalize(
|
||||||
|
"publications.ui.publicationlist.name"),
|
||||||
|
PublicationList.NAME);
|
||||||
|
sheet.add(PublicationGlobalizationUtil.globalize(
|
||||||
|
"publications.ui.publicationlist.title"),
|
||||||
|
PublicationList.TITLE);
|
||||||
|
|
||||||
|
if (!ContentSection.getConfig().getHideLaunchDate()) {
|
||||||
|
sheet.add(ContenttypesGlobalizationUtil.globalize(
|
||||||
|
"cms.ui.authoring.page_launch_date"),
|
||||||
|
ContentPage.LAUNCH_DATE,
|
||||||
|
new DomainObjectPropertySheet.AttributeFormatter() {
|
||||||
|
|
||||||
|
public String format(DomainObject item,
|
||||||
|
String attribute,
|
||||||
|
PageState state) {
|
||||||
|
ContentPage page = (ContentPage) item;
|
||||||
|
if (page.getLaunchDate() != null) {
|
||||||
|
return DateFormat.getDateInstance(DateFormat.LONG).
|
||||||
|
format(page.getLaunchDate());
|
||||||
|
} else {
|
||||||
|
return (String) ContenttypesGlobalizationUtil.globalize(
|
||||||
|
"cms.ui.unknown").localize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return sheet;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected SegmentedPanel getSegmentedPanel() {
|
||||||
|
return segmentedPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addBasicProperties(ItemSelectionModel itemModel,
|
||||||
|
AuthoringKitWizard parent) {
|
||||||
|
SimpleEditStep basicProperties = new SimpleEditStep(itemModel,
|
||||||
|
parent,
|
||||||
|
EDIT_SHEET_NAME);
|
||||||
|
|
||||||
|
BasicPageForm editBasicSheet =
|
||||||
|
new PublicationListPropertyForm(itemModel,
|
||||||
|
this);
|
||||||
|
basicProperties.add(EDIT_SHEET_NAME,
|
||||||
|
(String) PublicationGlobalizationUtil.globalize(
|
||||||
|
"publcations.ui.publicationlist_edit_basic_sheet").
|
||||||
|
localize(), new WorkflowLockedComponentAccess(editBasicSheet,
|
||||||
|
itemModel),
|
||||||
|
editBasicSheet.getSaveCancelSection().
|
||||||
|
getCancelButton());
|
||||||
|
|
||||||
|
basicProperties.setDisplayComponent(
|
||||||
|
getPublicationListPropertySheet(itemModel));
|
||||||
|
|
||||||
|
segmentedPanel.addSegment(
|
||||||
|
new Label((String) PublicationGlobalizationUtil.globalize(
|
||||||
|
"publications.ui.publicationlist.basic_properties").
|
||||||
|
localize()), basicProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addSteps(ItemSelectionModel itemModel,
|
||||||
|
AuthoringKitWizard parent) {
|
||||||
|
addStep(new PublicationListPublicationsStep(itemModel, parent),
|
||||||
|
"publications.ui.publicationlist.publications");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addStep(SimpleEditStep step, String labelKey) {
|
||||||
|
segmentedPanel.addSegment(
|
||||||
|
new Label((String) PublicationGlobalizationUtil.globalize(
|
||||||
|
labelKey).localize()),
|
||||||
|
step);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,93 @@
|
||||||
|
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.event.FormInitListener;
|
||||||
|
import com.arsdigita.bebop.event.FormProcessListener;
|
||||||
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
|
import com.arsdigita.bebop.event.FormSubmissionListener;
|
||||||
|
import com.arsdigita.bebop.form.TextArea;
|
||||||
|
import com.arsdigita.bebop.form.TextField;
|
||||||
|
import com.arsdigita.bebop.parameters.ParameterModel;
|
||||||
|
import com.arsdigita.bebop.parameters.StringParameter;
|
||||||
|
import com.arsdigita.cms.ItemSelectionModel;
|
||||||
|
import com.arsdigita.cms.contenttypes.PublicationList;
|
||||||
|
import com.arsdigita.cms.ui.authoring.BasicPageForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter
|
||||||
|
*/
|
||||||
|
public class PublicationListPropertyForm
|
||||||
|
extends BasicPageForm
|
||||||
|
implements FormProcessListener,
|
||||||
|
FormInitListener,
|
||||||
|
FormSubmissionListener {
|
||||||
|
|
||||||
|
private PublicationListPropertiesStep m_step;
|
||||||
|
public static final String ID = "PublicationList_edit";
|
||||||
|
|
||||||
|
public PublicationListPropertyForm(ItemSelectionModel itemModel) {
|
||||||
|
this(itemModel, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PublicationListPropertyForm(ItemSelectionModel itemModel,
|
||||||
|
PublicationListPropertiesStep step) {
|
||||||
|
super(ID, itemModel);
|
||||||
|
m_step = step;
|
||||||
|
addSubmissionListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addWidgets() {
|
||||||
|
super.addWidgets();
|
||||||
|
|
||||||
|
add(new Label((String) PublicationGlobalizationUtil.globalize(
|
||||||
|
"publications.ui.publicationlist.title").localize()));
|
||||||
|
ParameterModel titleParam = new StringParameter(PublicationList.TITLE);
|
||||||
|
TextField title = new TextField(titleParam);
|
||||||
|
add(title);
|
||||||
|
|
||||||
|
add(new Label((String) PublicationGlobalizationUtil.globalize(
|
||||||
|
"publications.ui.publicationlist.description").localize()));
|
||||||
|
ParameterModel descParam =
|
||||||
|
new StringParameter(PublicationList.DESCRIPTION);
|
||||||
|
TextArea desc = new TextArea(descParam);
|
||||||
|
desc.setCols(60);
|
||||||
|
desc.setRows(16);
|
||||||
|
add(desc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(FormSectionEvent fse) throws FormProcessException {
|
||||||
|
FormData data = fse.getFormData();
|
||||||
|
PublicationList list = (PublicationList) super.initBasicWidgets(fse);
|
||||||
|
|
||||||
|
data.put(PublicationList.TITLE, list.getTitle());
|
||||||
|
data.put(PublicationList.DESCRIPTION, list.getDescription());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void process(FormSectionEvent fse) throws FormProcessException {
|
||||||
|
FormData data = fse.getFormData();
|
||||||
|
PublicationList list = (PublicationList) super.processBasicWidgets(fse);
|
||||||
|
|
||||||
|
if ((list != null) && getSaveCancelSection().getSaveButton().
|
||||||
|
isSelected(fse.getPageState())) {
|
||||||
|
list.setTitle((String) data.get(PublicationList.TITLE));
|
||||||
|
list.setDescription((String) data.get(PublicationList.DESCRIPTION));
|
||||||
|
|
||||||
|
list.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void submitted(FormSectionEvent fse) throws FormProcessException {
|
||||||
|
if ((m_step != null) && getSaveCancelSection().getCancelButton().
|
||||||
|
isSelected(fse.getPageState())) {
|
||||||
|
m_step.cancelStreamlinedCreation(fse.getPageState());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
package com.arsdigita.cms.contenttypes.ui;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.FormData;
|
||||||
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
|
import com.arsdigita.bebop.Label;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
|
import com.arsdigita.bebop.event.FormInitListener;
|
||||||
|
import com.arsdigita.bebop.event.FormProcessListener;
|
||||||
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
|
import com.arsdigita.cms.ContentType;
|
||||||
|
import com.arsdigita.cms.ItemSelectionModel;
|
||||||
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
import com.arsdigita.cms.contenttypes.PublicationList;
|
||||||
|
import com.arsdigita.cms.ui.ItemSearchWidget;
|
||||||
|
import com.arsdigita.cms.ui.authoring.BasicItemForm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter
|
||||||
|
*/
|
||||||
|
public class PublicationListPublicationAddForm
|
||||||
|
extends BasicItemForm
|
||||||
|
implements FormProcessListener,
|
||||||
|
FormInitListener {
|
||||||
|
|
||||||
|
private PublicationListPropertiesStep m_step;
|
||||||
|
private ItemSearchWidget m_itemSearch;
|
||||||
|
private final String ITEM_SEARCH = "publications";
|
||||||
|
private ItemSelectionModel m_itemModel;
|
||||||
|
|
||||||
|
public PublicationListPublicationAddForm(ItemSelectionModel itemModel) {
|
||||||
|
super("PublicationsEntryForm", itemModel);
|
||||||
|
m_itemModel = itemModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addWidgets() {
|
||||||
|
add(new Label((String) PublicationGlobalizationUtil.globalize(
|
||||||
|
"publications.ui.publicationlist.selectPublication").
|
||||||
|
localize()));
|
||||||
|
m_itemSearch = new ItemSearchWidget(
|
||||||
|
ITEM_SEARCH,
|
||||||
|
ContentType.findByAssociatedObjectType(
|
||||||
|
Publication.class.getName()));
|
||||||
|
add(m_itemSearch);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(FormSectionEvent fse) throws FormProcessException {
|
||||||
|
PageState state = fse.getPageState();
|
||||||
|
setVisible(state, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void process(FormSectionEvent fse) throws FormProcessException {
|
||||||
|
FormData data = fse.getFormData();
|
||||||
|
PageState state = fse.getPageState();
|
||||||
|
PublicationList list = (PublicationList) getItemSelectionModel().
|
||||||
|
getSelectedObject(state);
|
||||||
|
|
||||||
|
if (!(this.getSaveCancelSection().getCancelButton().
|
||||||
|
isSelected(state))) {
|
||||||
|
list.addPublication(
|
||||||
|
(Publication) data.get(ITEM_SEARCH));
|
||||||
|
}
|
||||||
|
|
||||||
|
init(fse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
package com.arsdigita.cms.contenttypes.ui;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.ItemSelectionModel;
|
||||||
|
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
|
||||||
|
import com.arsdigita.cms.ui.authoring.BasicItemForm;
|
||||||
|
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
|
||||||
|
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter
|
||||||
|
*/
|
||||||
|
public class PublicationListPublicationsStep extends SimpleEditStep {
|
||||||
|
|
||||||
|
private static final String ADD_PUBLICATION_SHEET_NAME = "addPublication";
|
||||||
|
|
||||||
|
public PublicationListPublicationsStep(ItemSelectionModel itemModel,
|
||||||
|
AuthoringKitWizard parent) {
|
||||||
|
this(itemModel, parent, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PublicationListPublicationsStep(ItemSelectionModel itemModel,
|
||||||
|
AuthoringKitWizard parent,
|
||||||
|
String prefix) {
|
||||||
|
super(itemModel, parent, prefix);
|
||||||
|
|
||||||
|
BasicItemForm addPublicationSheet =
|
||||||
|
new PublicationListPublicationAddForm(itemModel);
|
||||||
|
add(ADD_PUBLICATION_SHEET_NAME,
|
||||||
|
(String) PublicationGlobalizationUtil.globalize(
|
||||||
|
"publications.ui.publicationlist.add_publication").localize(),
|
||||||
|
new WorkflowLockedComponentAccess(addPublicationSheet,
|
||||||
|
itemModel),
|
||||||
|
addPublicationSheet.getSaveCancelSection().getCancelButton());
|
||||||
|
|
||||||
|
PublicationListPublicationsTable publicationsTable =
|
||||||
|
new PublicationListPublicationsTable(itemModel);
|
||||||
|
setDisplayComponent(publicationsTable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,234 @@
|
||||||
|
package com.arsdigita.cms.contenttypes.ui;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.Component;
|
||||||
|
import com.arsdigita.bebop.ControlLink;
|
||||||
|
import com.arsdigita.bebop.Label;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
|
import com.arsdigita.bebop.Table;
|
||||||
|
import com.arsdigita.bebop.event.TableActionEvent;
|
||||||
|
import com.arsdigita.bebop.event.TableActionListener;
|
||||||
|
import com.arsdigita.bebop.table.TableCellRenderer;
|
||||||
|
import com.arsdigita.bebop.table.TableColumn;
|
||||||
|
import com.arsdigita.bebop.table.TableColumnModel;
|
||||||
|
import com.arsdigita.bebop.table.TableModel;
|
||||||
|
import com.arsdigita.bebop.table.TableModelBuilder;
|
||||||
|
import com.arsdigita.cms.ItemSelectionModel;
|
||||||
|
import com.arsdigita.cms.SecurityManager;
|
||||||
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
import com.arsdigita.cms.contenttypes.PublicationCollection;
|
||||||
|
import com.arsdigita.cms.contenttypes.PublicationList;
|
||||||
|
import com.arsdigita.cms.dispatcher.Utilities;
|
||||||
|
import com.arsdigita.util.LockableImpl;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter
|
||||||
|
*/
|
||||||
|
public class PublicationListPublicationsTable
|
||||||
|
extends Table
|
||||||
|
implements TableActionListener {
|
||||||
|
|
||||||
|
private static final String TABLE_COL_EDIT = "table_col_edit";
|
||||||
|
private final String TABLE_COL_DEL = "table_col_del";
|
||||||
|
private ItemSelectionModel m_itemModel;
|
||||||
|
|
||||||
|
public PublicationListPublicationsTable(ItemSelectionModel itemModel) {
|
||||||
|
super();
|
||||||
|
m_itemModel = itemModel;
|
||||||
|
|
||||||
|
setEmptyView(
|
||||||
|
new Label(PublicationGlobalizationUtil.globalize(
|
||||||
|
"publications.ui.publicationlist.no_publications")));
|
||||||
|
|
||||||
|
TableColumnModel colModel = getColumnModel();
|
||||||
|
colModel.add(new TableColumn(
|
||||||
|
0,
|
||||||
|
PublicationGlobalizationUtil.globalize(
|
||||||
|
"publications.ui.publicationlist.publication.title").
|
||||||
|
localize(),
|
||||||
|
TABLE_COL_EDIT));
|
||||||
|
colModel.add(new TableColumn(
|
||||||
|
1,
|
||||||
|
PublicationGlobalizationUtil.globalize(
|
||||||
|
"publications.ui.publicationlist.publication.remove").
|
||||||
|
localize(),
|
||||||
|
TABLE_COL_DEL));
|
||||||
|
|
||||||
|
setModelBuilder(
|
||||||
|
new PublicationListPublicationsTableModelBuilder(itemModel));
|
||||||
|
|
||||||
|
colModel.get(0).setCellRenderer(new EditCellRenderer());
|
||||||
|
colModel.get(1).setCellRenderer(new DeleteCellRenderer());
|
||||||
|
|
||||||
|
addTableActionListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class PublicationListPublicationsTableModelBuilder
|
||||||
|
extends LockableImpl
|
||||||
|
implements TableModelBuilder {
|
||||||
|
|
||||||
|
private ItemSelectionModel m_itemModel;
|
||||||
|
|
||||||
|
public PublicationListPublicationsTableModelBuilder(
|
||||||
|
ItemSelectionModel itemModel) {
|
||||||
|
m_itemModel = itemModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TableModel makeModel(Table table, PageState state) {
|
||||||
|
table.getRowSelectionModel().clearSelection(state);
|
||||||
|
PublicationList list = (PublicationList) m_itemModel.
|
||||||
|
getSelectedObject(state);
|
||||||
|
return new PublicationListPublicationsTableModel(table,
|
||||||
|
state,
|
||||||
|
list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class PublicationListPublicationsTableModel implements TableModel {
|
||||||
|
|
||||||
|
private Table m_table;
|
||||||
|
private PublicationCollection m_publicationCollection;
|
||||||
|
private Publication m_publication;
|
||||||
|
|
||||||
|
public PublicationListPublicationsTableModel(Table table,
|
||||||
|
PageState state,
|
||||||
|
PublicationList list) {
|
||||||
|
m_table = table;
|
||||||
|
m_publicationCollection = list.getPublications();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getColumnCount() {
|
||||||
|
return m_table.getColumnModel().size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean nextRow() {
|
||||||
|
boolean ret;
|
||||||
|
|
||||||
|
if ((m_publicationCollection != null)
|
||||||
|
&& m_publicationCollection.next()) {
|
||||||
|
m_publication = m_publicationCollection.getPublication();
|
||||||
|
ret = true;
|
||||||
|
} else {
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getElementAt(int columnIndex) {
|
||||||
|
switch (columnIndex) {
|
||||||
|
case 0:
|
||||||
|
return m_publication.getTitle();
|
||||||
|
case 1:
|
||||||
|
return PublicationGlobalizationUtil.globalize(
|
||||||
|
"publications.ui.publicationlist.publication.remove").
|
||||||
|
localize();
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getKeyAt(int columnIndex) {
|
||||||
|
return m_publication.getID();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class EditCellRenderer
|
||||||
|
extends LockableImpl
|
||||||
|
implements TableCellRenderer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getComponent(
|
||||||
|
Table table,
|
||||||
|
PageState state,
|
||||||
|
Object value,
|
||||||
|
boolean isSelected,
|
||||||
|
Object key,
|
||||||
|
int row,
|
||||||
|
int col) {
|
||||||
|
SecurityManager securityManager =
|
||||||
|
Utilities.getSecurityManager(state);
|
||||||
|
PublicationList list = (PublicationList) m_itemModel.
|
||||||
|
getSelectedObject(state);
|
||||||
|
|
||||||
|
boolean canEdit = securityManager.canAccess(
|
||||||
|
state.getRequest(),
|
||||||
|
SecurityManager.EDIT_ITEM,
|
||||||
|
list);
|
||||||
|
|
||||||
|
if (canEdit) {
|
||||||
|
ControlLink link = new ControlLink(value.toString());
|
||||||
|
return link;
|
||||||
|
} else {
|
||||||
|
Label label = new Label(value.toString());
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class DeleteCellRenderer
|
||||||
|
extends LockableImpl
|
||||||
|
implements TableCellRenderer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getComponent(Table table,
|
||||||
|
PageState state,
|
||||||
|
Object value,
|
||||||
|
boolean isSelected,
|
||||||
|
Object key,
|
||||||
|
int row,
|
||||||
|
int col) {
|
||||||
|
|
||||||
|
SecurityManager securityManager =
|
||||||
|
Utilities.getSecurityManager(state);
|
||||||
|
PublicationList list = (PublicationList) m_itemModel.
|
||||||
|
getSelectedObject(state);
|
||||||
|
|
||||||
|
boolean canDelete = securityManager.canAccess(
|
||||||
|
state.getRequest(),
|
||||||
|
SecurityManager.DELETE_ITEM,
|
||||||
|
list);
|
||||||
|
|
||||||
|
if (canDelete) {
|
||||||
|
ControlLink link = new ControlLink(value.toString());
|
||||||
|
link.setConfirmation((String) PublicationGlobalizationUtil.
|
||||||
|
globalize(
|
||||||
|
"publications.ui.publicationlist.publication.confirm_remove").
|
||||||
|
localize());
|
||||||
|
return link;
|
||||||
|
} else {
|
||||||
|
Label label = new Label(value.toString());
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cellSelected(TableActionEvent event) {
|
||||||
|
PageState state = event.getPageState();
|
||||||
|
|
||||||
|
Publication publication = new Publication(
|
||||||
|
new BigDecimal(event.getRowKey().toString()));
|
||||||
|
|
||||||
|
PublicationList list = (PublicationList) m_itemModel.getSelectedObject(
|
||||||
|
state);
|
||||||
|
|
||||||
|
PublicationCollection publications = list.getPublications();
|
||||||
|
|
||||||
|
TableColumn column = getColumnModel().get(event.getColumn().intValue());
|
||||||
|
|
||||||
|
if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) {
|
||||||
|
} else if (column.getHeaderKey().toString().equals(TABLE_COL_DEL)) {
|
||||||
|
list.removePublication(publication);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void headSelected(TableActionEvent event) {
|
||||||
|
//Nothing to do
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -44,9 +44,12 @@ public class PublicationPropertiesStep extends SimpleEditStep {
|
||||||
DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(
|
DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(
|
||||||
itemModel);
|
itemModel);
|
||||||
|
|
||||||
|
sheet.add(PublicationGlobalizationUtil.globalize(
|
||||||
|
"publications.ui.publication.name"),
|
||||||
|
Publication.NAME);
|
||||||
sheet.add(PublicationGlobalizationUtil.globalize(
|
sheet.add(PublicationGlobalizationUtil.globalize(
|
||||||
"publications.ui.publication.title"),
|
"publications.ui.publication.title"),
|
||||||
Publication.NAME);
|
Publication.TITLE);
|
||||||
sheet.add(PublicationGlobalizationUtil.globalize(
|
sheet.add(PublicationGlobalizationUtil.globalize(
|
||||||
"publications.ui.publication.year_of_publication"),
|
"publications.ui.publication.year_of_publication"),
|
||||||
Publication.YEAR_OF_PUBLICATION);
|
Publication.YEAR_OF_PUBLICATION);
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ public class PublicationPropertyForm
|
||||||
|
|
||||||
add(new Label((String) PublicationGlobalizationUtil.globalize(
|
add(new Label((String) PublicationGlobalizationUtil.globalize(
|
||||||
"publications.ui.publication.title").localize()));
|
"publications.ui.publication.title").localize()));
|
||||||
ParameterModel titleParam = new StringParameter(Publication.NAME);
|
ParameterModel titleParam = new StringParameter(Publication.TITLE);
|
||||||
TextField title = new TextField(titleParam);
|
TextField title = new TextField(titleParam);
|
||||||
add(title);
|
add(title);
|
||||||
|
|
||||||
|
|
@ -83,7 +83,7 @@ public class PublicationPropertyForm
|
||||||
FormData data = fse.getFormData();
|
FormData data = fse.getFormData();
|
||||||
Publication publication = (Publication) super.initBasicWidgets(fse);
|
Publication publication = (Publication) super.initBasicWidgets(fse);
|
||||||
|
|
||||||
data.put(Publication.NAME, publication.getTitle());
|
data.put(Publication.TITLE, publication.getTitle());
|
||||||
data.put(Publication.YEAR_OF_PUBLICATION, publication.
|
data.put(Publication.YEAR_OF_PUBLICATION, publication.
|
||||||
getYearOfPublication());
|
getYearOfPublication());
|
||||||
data.put(Publication.ABSTRACT, publication.getAbstract());
|
data.put(Publication.ABSTRACT, publication.getAbstract());
|
||||||
|
|
@ -97,7 +97,7 @@ public class PublicationPropertyForm
|
||||||
|
|
||||||
if ((publication != null) && getSaveCancelSection().getSaveButton().
|
if ((publication != null) && getSaveCancelSection().getSaveButton().
|
||||||
isSelected(fse.getPageState())) {
|
isSelected(fse.getPageState())) {
|
||||||
publication.setTitle((String) data.get(Publication.NAME));
|
publication.setTitle((String) data.get(Publication.TITLE));
|
||||||
publication.setYearOfPublication((Integer) data.get(
|
publication.setYearOfPublication((Integer) data.get(
|
||||||
Publication.YEAR_OF_PUBLICATION));
|
Publication.YEAR_OF_PUBLICATION));
|
||||||
publication.setAbstract((String) data.get(Publication.ABSTRACT));
|
publication.setAbstract((String) data.get(Publication.ABSTRACT));
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
<!DOCTYPE stylesheet [
|
||||||
|
<!ENTITY nbsp " " ><!-- no-break space = non-breaking space, U+00A0 ISOnum -->
|
||||||
|
]>
|
||||||
|
|
||||||
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
xmlns:cms="http://www.arsdigita.com/cms/1.0"
|
||||||
|
version="1.0">
|
||||||
|
|
||||||
|
<xsl:template match="cms:item[objectType='com.arsdigita.cms.contenttypes.PublicationList']" mode="cms:CT_graphics"
|
||||||
|
name="cms:CT_graphics_com_arsdigita_cms_contenttypes_PublicationList">
|
||||||
|
<p><xsl:value-of select="./name"/></p>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="cms:item[objectType='com.arsdigita.cms.contenttypes.PublicationList']" mode="cms:CT_text"
|
||||||
|
name="cms:CT_text_com_arsdigita_cms_contenttypes_PublicationList">
|
||||||
|
<p><xsl:value-of select="./name"/></p>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
||||||
Loading…
Reference in New Issue