Daten für die Zeitschrift aus ArticleInJournal in neuen CT Journal ausgelagert, Journal und Article werden verknüpft (wie CollectedVolume und ArticleInCollectedVolume).

git-svn-id: https://svn.libreccm.org/ccm/trunk@610 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2010-11-16 07:09:49 +00:00
parent 1bebba7cd2
commit 66cf0be88c
21 changed files with 1012 additions and 110 deletions

View File

@ -24,13 +24,11 @@ import com.arsdigita.cms.ContentPage;
// PDL definition for an article in a journal
object type ArticleInJournal extends Publication {
String[0..1] journal = ct_article_in_journal.journal VARCHAR(512);
Integer[0..1] volume = ct_article_in_journal.volume INTEGER;
String[0..1] issue = ct_article_in_journal.issue VARCHAR(512);
Integer[0..1] pagesFrom = ct_article_in_journal.pages_from INTEGER;
Integer[0..1] pagesTo = ct_article_in_journal.pages_to INTEGER;
String[0..1] issn = ct_article_in_journal.issn VARCHAR(9);
Date[0..1] publicationDate = ct_article_in_journal.publication_date DATE;
reference key (ct_article_in_journal.article_in_journal_id);

View File

@ -22,24 +22,25 @@ model com.arsdigita.cms.contenttypes;
import com.arsdigita.cms.ContentPage;
//PDL definition for the basic attributes of publication.
object type PublicationList extends ContentPage {
//PDL definition for a journal
object type Journal extends Publication {
String[0..1] description = ct_publicationlists.description VARCHAR(2048);
String[0..1] issn = ct_journal.issn VARCHAR(9);
reference key (ct_publicationlists.publicationlist_id);
reference key (ct_journal.journal_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;
Journal[0..n] journal = join ct_article_in_journal.article_in_journal_id
to ct_journal_article_map.article_in_journal_id,
join ct_journal_article_map.journal_id
to ct_journal.journal_id;
ArticleInJournal[0..n] articles = join ct_journal.journal_id
to ct_journal_article_map.journal_id,
join ct_journal.article_map.article_in_journal_id
to ct_article_in_journal.article_in_journal_id;
Integer[0..1] articleOrder = ct_journal_article_map.article_order INTEGER;
}

View File

@ -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="SciPublications/Journal"
description="Base type for articleInJournals"
objectType="com.arsdigita.cms.contenttypes.Journal"
classname="com.arsdigita.cms.contenttypes.Journal">
<ctd:authoring-kit createComponent="com.arsdigita.cms.ui.authoring.PageCreate">
<ctd:authoring-step
labelKey="publications.ui.articleInJournal_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.ui.PublicationResources"
descriptionKey="publications.ui.articleInJournal.basic_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.ui.PublicationResources"
component="com.arsdigita.cms.contenttypes.ui.JournalPropertiesStep"
ordering="1"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
</ctd:authoring-kit>
</ctd:content-type>
</ctd:content-types>

View File

@ -1,30 +0,0 @@
<?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="SciPublications/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>

View File

@ -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.ArticleInJournal"
extends="com.arsdigita.cms.contenttypes.PublicationWithPublisher">
<xrd:associations rule="include">
<xrd:property name="/object/journal"/>
</xrd:associations>
</xrd:adapter>
</xrd:context>
</xrd:adapters>

View File

@ -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.Journal"
extends="com.arsdigita.cms.contenttypes.PublicationWithPublisher">
<xrd:associations rule="include">
<xrd:property name="/object/articles"/>
</xrd:associations>
</xrd:adapter>
</xrd:context>
</xrd:adapters>

View File

@ -16,13 +16,13 @@
<table name="ct_proceedings"/>
<table name="ct_inproceedings"/>
<table name="ct_internet_article"/>
<table name="ct_journal"/>
<table name="ct_article_in_journal"/>
<table name="ct_unpublished"/>
<table name="ct_grey_literature"/>
<table name="ct_working_paper"/>
<table name="ct_expertise"/>
<table name="ct_review"/>
<table name="ct_publicationlists"/>
<table name="ct_review"/>
<initializer class="com.arsdigita.cms.contenttypes.PublicationInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.PublicationWithPublisherInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.SeriesInitializer"/>
@ -33,13 +33,13 @@
<initializer class="com.arsdigita.cms.contenttypes.ProceedingsInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.InProceedingsInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.InternetArticleInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.JournalInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.ArticleInJournalInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.UnPublishedInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.GreyLiteratureInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.WorkingPaperInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.ExpertiseInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.ReviewInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.PublicationListInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.ReviewInitializer"/>
</provides>
<scripts>
<schema directory="ccm-sci-publications"/>
@ -53,12 +53,12 @@
<data class="com.arsdigita.cms.contenttypes.ProceedingsLoader"/>
<data class="com.arsdigita.cms.contenttypes.InProceedingsLoader"/>
<data class="com.arsdigita.cms.contenttypes.InternetArticleLoader"/>
<data class="com.arsdigita.cms.contenttypes.JournalLoader"/>
<data class="com.arsdigita.cms.contenttypes.ArticleInJournalLoader"/>
<data class="com.arsdigita.cms.contenttypes.UnPublishedLoader"/>
<data class="com.arsdigita.cms.contenttypes.GreyLiteratureLoader"/>
<data class="com.arsdigita.cms.contenttypes.WorkingPaperLoader"/>
<data class="com.arsdigita.cms.contenttypes.ExpertiseLoader"/>
<data class="com.arsdigita.cms.contenttypes.ReviewLoader"/>
<data class="com.arsdigita.cms.contenttypes.PublicationListLoader"/>
<data class="com.arsdigita.cms.contenttypes.ReviewLoader"/>
</scripts>
</load>

View File

@ -20,8 +20,11 @@
package com.arsdigita.cms.contenttypes;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID;
import com.arsdigita.util.Assert;
import java.math.BigDecimal;
/**
@ -85,10 +88,36 @@ public class ArticleInCollectedVolume extends Publication {
}
public CollectedVolume getCollectedVolume() {
return (CollectedVolume) get(COLLECTED_VOLUME);
DataCollection collection;
collection = (DataCollection) get(COLLECTED_VOLUME);
if (collection.size() == 0) {
return null;
} else {
DataObject dobj;
collection.next();
dobj = collection.getDataObject();
return (CollectedVolume)DomainObjectFactory.newInstance(dobj);
}
}
public void setCollectedVolume(CollectedVolume collectedVolume) {
set(COLLECTED_VOLUME, collectedVolume);
CollectedVolume oldCollectedVolume;
oldCollectedVolume = getCollectedVolume();
if (oldCollectedVolume != null) {
remove(COLLECTED_VOLUME, oldCollectedVolume);
}
if (collectedVolume != null) {
Assert.exists(collectedVolume, CollectedVolume.class);
DataObject link = add(COLLECTED_VOLUME, collectedVolume);
link.set(CollectedVolume.ARTICLE_ORDER,
Integer.valueOf((int) collectedVolume.getArticles().size()));
link.save();
}
}
}

View File

@ -1,8 +1,11 @@
package com.arsdigita.cms.contenttypes;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID;
import com.arsdigita.util.Assert;
import java.math.BigDecimal;
import java.util.Date;
@ -11,13 +14,12 @@ import java.util.Date;
* @author Jens Pelzetter
*/
public class ArticleInJournal extends Publication {
public static final String JOURNAL = "journal";
public static final String VOLUME = "volume";
public static final String ISSUE = "issue";
public static final String PAGES_FROM = "pagesFrom";
public static final String PAGES_TO = "pagesTo";
public static final String ISSN = "issn";
public static final String JOURNAL = "journal";
public static final String PUBLICATION_DATE = "publicationDate";
public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.cms.contenttypes.ArticleInJournal";
@ -41,15 +43,7 @@ public class ArticleInJournal extends Publication {
public ArticleInJournal(String type) {
super(type);
}
public String getJournal() {
return (String) get(JOURNAL);
}
public void setJournal(String journal) {
set(JOURNAL, journal);
}
public Integer getVolume() {
return (Integer) get(VOLUME);
}
@ -81,15 +75,7 @@ public class ArticleInJournal extends Publication {
public void setPagesTo(Integer pagesTo) {
set(PAGES_TO, pagesTo);
}
public String getISSN() {
return (String) get(ISSN);
}
public void setISSN(String issn) {
set(ISSN, issn);
}
public Date getPublicationDate() {
return (Date) get(PUBLICATION_DATE);
}
@ -97,4 +83,38 @@ public class ArticleInJournal extends Publication {
public void setPublicationDate(Date publicationDate) {
set(PUBLICATION_DATE, publicationDate);
}
public Journal getJournal() {
DataCollection collection;
collection = (DataCollection) get(JOURNAL);
if (collection.size() == 0) {
return null;
} else {
DataObject dobj;
collection.next();
dobj = collection.getDataObject();
return (Journal) DomainObjectFactory.newInstance(dobj);
}
}
public void setJournal(Journal journal) {
Journal oldJournal;
oldJournal = getJournal();
if (oldJournal != null) {
remove(JOURNAL, oldJournal);
}
if (journal != null) {
Assert.exists(journal, Journal.class);
DataObject link = add(JOURNAL, journal);
link.set(Journal.ARTICLE_ORDER,
Integer.valueOf((int) journal.getArticles().size()));
link.save();
}
}
}

View File

@ -0,0 +1,156 @@
/*
* 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.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter
*/
public class ArticleInJournalCollection extends DomainCollection {
public static final String LINKORDER = "link.articleOrder";
public static final String ORDER = "articleOrder";
private static final Logger s_log =
Logger.getLogger(
ArticleInJournalCollection.class);
public ArticleInJournalCollection(DataCollection dataCollection) {
super(dataCollection);
m_dataCollection.addOrder(LINKORDER);
}
public Integer getArticleOrder() {
return (Integer) m_dataCollection.get(LINKORDER);
}
public void setArticleOrder(Integer order) {
DataObject link = (DataObject) this.get("link");
link.set(ORDER, order);
}
public void swapWithNext(ArticleInJournal article) {
int currentPosition = 0;
int currentIndex = 0;
int nextIndex = 0;
s_log.debug("Searching article...");
this.rewind();
while (this.next()) {
currentPosition = this.getPosition();
currentIndex = this.getArticleOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPosition,
currentIndex, this.size()));
s_log.debug(String.format("getArticleOrder(): %d",
getArticleOrder()));
if (this.getArticle().equals(article)) {
break;
}
}
if (currentPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided article is not "
+ "part of this collection."));
}
if (this.next()) {
nextIndex = this.getArticleOrder();
} else {
throw new IllegalArgumentException(
"The provided article is the last "
+ "in the collection, so there is no next object "
+ "to swap with.");
}
this.rewind();
while (this.getPosition() != currentPosition) {
this.next();
}
this.setArticleOrder(nextIndex);
this.next();
this.setArticleOrder(currentIndex);
this.rewind();
}
public void swapWithPrevious(ArticleInJournal article) {
int previousPosition = 0;
int previousIndex = 0;
int currentPosition = 0;
int currentIndex = 0;
s_log.debug("Searching article...");
this.rewind();
while (this.next()) {
currentPosition = this.getPosition();
currentIndex = this.getArticleOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPosition,
currentIndex, this.size()));
s_log.debug(String.format("getArticleOrder(): %d",
getArticleOrder()));
if (this.getArticle().equals(article)) {
break;
}
previousPosition = currentPosition;
previousIndex = currentIndex;
}
if (currentPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided article is not "
+ "part of this collection."));
}
if (previousPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided article is the first one in this "
+ "collection, so there is no previous one to switch "
+ "with."));
}
this.rewind();
while (this.getPosition() != previousPosition) {
this.next();
}
this.setArticleOrder(currentIndex);
this.next();
this.setArticleOrder(previousIndex);
this.rewind();
}
public ArticleInJournal getArticle() {
return (ArticleInJournal) DomainObjectFactory.newInstance(m_dataCollection.
getDataObject());
}
}

View File

@ -23,7 +23,7 @@ public class ArticleInJournalInitializer extends ContentTypeInitializer {
@Override
public String getTraversalXML() {
return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Publication.xml";
return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/ArticleInJournal.xml";
}
}

View File

@ -0,0 +1,70 @@
package com.arsdigita.cms.contenttypes;
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;
import java.math.BigDecimal;
/**
*
* @author Jens Pelzetter
*/
public class Journal extends Publication {
public static final String ISSN = "issn";
public static final String ARTICLES = "articles";
public static final String ARTICLE_ORDER = "articleOrder";
public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.cms.contenttypes.Journal";
public Journal() {
this(BASE_DATA_OBJECT_TYPE);
}
public Journal(BigDecimal id) throws DataObjectNotFoundException {
this(new OID(BASE_DATA_OBJECT_TYPE, id));
}
public Journal(OID oid) throws DataObjectNotFoundException {
super(oid);
}
public Journal(DataObject dobj) {
super(dobj);
}
public Journal(String type) {
super(type);
}
public String getISSN() {
return (String) get(ISSN);
}
public void setISSN(String issn) {
set(ISSN, issn);
}
public ArticleInJournalCollection getArticles() {
return new ArticleInJournalCollection((DataCollection) get(ARTICLES));
}
public void addArticle(ArticleInJournal article) {
Assert.exists(article, ArticleInJournal.class);
DataObject link = add(ARTICLES, article);
link.set(ARTICLE_ORDER, Integer.valueOf((int) getArticles().size()));
}
public void removeArticle(ArticleInJournal article) {
Assert.exists(article, ArticleInCollectedVolume.class);
remove(ARTICLES, article);
}
public boolean hasArticles() {
return !this.getArticles().isEmpty();
}
}

View File

@ -0,0 +1,29 @@
package com.arsdigita.cms.contenttypes;
/**
*
* @author Jens Pelzetter
*/
public class JournalInitializer extends ContentTypeInitializer {
/**
* The pdl.mf file used here is empty, since the
* {@link PublicationInitializer} loads all things using the pdl.mf file
* of the module. Also, it may causes on silly errors in the load-bundle
* step if the same pdl.mf file is used in more than one initializer.
*/
public JournalInitializer() {
super("empty.pdl.mf", Journal.BASE_DATA_OBJECT_TYPE);
}
@Override
public String[] getStylesheets() {
return new String[]{
"/static/content-types/com/arsdigita/cms/contenttypes/Journal.xsl"};
}
@Override
public String getTraversalXML() {
return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Journal.xml";
}
}

View File

@ -0,0 +1,19 @@
package com.arsdigita.cms.contenttypes;
/**
*
* @author Jens Pelzetter
*/
public class JournalLoader extends AbstractContentTypeLoader {
private static final String[] TYPES = {"/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Journal.xml"};
public JournalLoader() {
super();
}
public String[] getTypes() {
return TYPES;
}
}

View File

@ -26,10 +26,6 @@ public class ArticleInJournalPropertiesStep extends PublicationPropertiesStep {
DomainObjectPropertySheet sheet = (DomainObjectPropertySheet) PublicationPropertiesStep.
getPublicationPropertySheet(itemModel);
sheet.add(PublicationGlobalizationUtil.globalize(
"publications.ui.articleinjournal.journal"),
ArticleInJournal.JOURNAL);
sheet.add(PublicationGlobalizationUtil.globalize(
"publications.ui.articleinjournal.volume"),
ArticleInJournal.VOLUME);
@ -45,11 +41,7 @@ public class ArticleInJournalPropertiesStep extends PublicationPropertiesStep {
sheet.add(PublicationGlobalizationUtil.globalize(
"publications.ui.articleinjournal.pages_to"),
ArticleInJournal.PAGES_TO);
sheet.add(PublicationGlobalizationUtil.globalize(
"publications.ui.articleinjournal.issn"),
ArticleInJournal.ISSN);
sheet.add(PublicationGlobalizationUtil.globalize(
"publications.ui.articleinjournal.publication_date"),
ArticleInJournal.PUBLICATION_DATE);

View File

@ -44,14 +44,7 @@ public class ArticleInJournalPropertyForm
@Override
protected void addWidgets() {
super.addWidgets();
add(new Label((String) PublicationGlobalizationUtil.globalize(
"publications.ui.articleinjournal.journal").localize()));
ParameterModel journalParam =
new StringParameter(ArticleInJournal.JOURNAL);
TextField journal = new TextField(journalParam);
add(journal);
super.addWidgets();
add(new Label((String) PublicationGlobalizationUtil.globalize(
"publications.ui.articleinjournal.volume").localize()));
@ -80,13 +73,6 @@ public class ArticleInJournalPropertyForm
TextField pagesTo = new TextField(pagesToParam);
add(pagesTo);
add(new Label((String) PublicationGlobalizationUtil.globalize(
"publications.ui.articleinjournal.issn").localize()));
ParameterModel issnParam = new StringParameter(ArticleInJournal.ISSN);
TextField issn = new TextField(issnParam);
issn.setMaxLength(9);
add(issn);
Calendar today = new GregorianCalendar();
add(new Label((String) PublicationGlobalizationUtil.globalize(
"publications.ui.articleinjournal.publicationDate").
@ -106,13 +92,11 @@ public class ArticleInJournalPropertyForm
FormData data = fse.getFormData();
ArticleInJournal article = (ArticleInJournal) initBasicWidgets(fse);
data.put(ArticleInJournal.JOURNAL, article.getJournal());
data.put(ArticleInJournal.VOLUME, article.getVolume());
data.put(ArticleInJournal.ISSUE, article.getIssue());
data.put(ArticleInJournal.PAGES_FROM, article.getPagesFrom());
data.put(ArticleInJournal.PAGES_TO, article.getPagesTo());
data.put(ArticleInJournal.ISSN, article.getISSN());
data.put(ArticleInJournal.PAGES_TO, article.getPagesTo());
data.put(ArticleInJournal.PUBLICATION_DATE,
article.getPublicationDate());
}
@ -125,16 +109,13 @@ public class ArticleInJournalPropertyForm
ArticleInJournal article = (ArticleInJournal) initBasicWidgets(fse);
if ((article != null) && getSaveCancelSection().getSaveButton().
isSelected(fse.getPageState())) {
article.setJournal((String) data.get(ArticleInJournal.JOURNAL));
isSelected(fse.getPageState())) {
article.setVolume((Integer) data.get(ArticleInJournal.VOLUME));
article.setIssue((String) data.get(ArticleInJournal.ISSUE));
article.setPagesFrom(
(Integer) data.get(ArticleInJournal.PAGES_FROM));
article.setPagesTo(
(Integer) data.get(ArticleInJournal.PAGES_TO));
article.setISSN(
(String) data.get(ArticleInJournal.ISSN));
(Integer) data.get(ArticleInJournal.PAGES_TO));
article.setPublicationDate(
(Date) data.get(ArticleInJournal.PUBLICATION_DATE));

View File

@ -0,0 +1,58 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
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.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.ArticleInJournal;
import com.arsdigita.cms.contenttypes.Journal;
import com.arsdigita.cms.ui.ItemSearchWidget;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter
*/
public class JournalArticleAddForm
extends BasicItemForm
implements FormProcessListener,
FormInitListener {
private static final Logger s_log = Logger.getLogger(
JournalArticleAddForm.class);
private JournalPropertiesStep m_step;
private ItemSearchWidget m_itemSearchWidget;
private final String ITEM_SEARCH = "articles";
private ItemSelectionModel m_itemModel;
public JournalArticleAddForm(ItemSelectionModel itemModel) {
super("ArticlesAddForm", itemModel);
m_itemModel = itemModel;
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
setVisible(state, true);
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
Journal journal = (Journal) getItemSelectionModel().getSelectedObject(
state);
if (this.getSaveCancelSection().getSaveButton().isSelected(state)) {
journal.addArticle((ArticleInJournal) data.get(ITEM_SEARCH));
}
init(fse);
}
}

View File

@ -0,0 +1,38 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
/**
*
* @author Jens Pelzetter
*/
public class JournalArticlesStep extends SimpleEditStep {
private static final String ADD_ARTICLE_SHEET_NAME = "addArticle";
public JournalArticlesStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
this(itemModel, parent, null);
}
public JournalArticlesStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent,
String prefix) {
super(itemModel, parent, prefix);
BasicItemForm addArticleSheet =
new JournalArticleAddForm(itemModel);
add(ADD_ARTICLE_SHEET_NAME,
(String) PublicationGlobalizationUtil.globalize("publications.ui.journal.add_article").localize(),
new WorkflowLockedComponentAccess(addArticleSheet, itemModel),
addArticleSheet.getSaveCancelSection().getCancelButton());
JournalArticlesTable articlesTable =
new JournalArticlesTable(itemModel);
setDisplayComponent(articlesTable);
}
}

View File

@ -0,0 +1,330 @@
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.ArticleInJournal;
import com.arsdigita.cms.contenttypes.ArticleInJournalCollection;
import com.arsdigita.cms.contenttypes.Journal;
import com.arsdigita.cms.dispatcher.ItemResolver;
import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.util.LockableImpl;
import java.math.BigDecimal;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter
*/
public class JournalArticlesTable
extends Table
implements TableActionListener {
private static final Logger s_log = Logger.getLogger(
JournalArticlesTable.class);
private final String TABLE_COL_EDIT = "table_col_edit";
private final String TABLE_COL_DEL = "table_col_del";
private final String TABLE_COL_UP = "table_col_up";
private final String TABLE_COL_DOWN = "table_col_down";
private ItemSelectionModel m_itemModel;
public JournalArticlesTable(ItemSelectionModel itemModel) {
super();
m_itemModel = itemModel;
setEmptyView(new Label(PublicationGlobalizationUtil.globalize(
"publications.ui.journal.no_articles")));
TableColumnModel columnModel = getColumnModel();
columnModel.add(new TableColumn(
0,
PublicationGlobalizationUtil.globalize(
"publications.ui.journal.article").localize(),
TABLE_COL_EDIT));
columnModel.add(new TableColumn(
1,
PublicationGlobalizationUtil.globalize(
"publications.ui.journal.article.remove").localize(),
TABLE_COL_DEL));
columnModel.add(new TableColumn(
2,
PublicationGlobalizationUtil.globalize(
"publications.ui.journal.article.up").localize(),
TABLE_COL_UP));
columnModel.add(new TableColumn(
3,
PublicationGlobalizationUtil.globalize(
"publications.ui.journal.article.down").localize(),
TABLE_COL_DOWN));
setModelBuilder(new JournalArticlesTableModelBuilder(itemModel));
columnModel.get(0).setCellRenderer(new EditCellRenderer());
columnModel.get(1).setCellRenderer(new DeleteCellRenderer());
columnModel.get(2).setCellRenderer(new UpCellRenderer());
columnModel.get(3).setCellRenderer(new DownCellRenderer());
addTableActionListener(this);
}
private class JournalArticlesTableModelBuilder
extends LockableImpl
implements TableModelBuilder {
private ItemSelectionModel m_itemModel;
public JournalArticlesTableModelBuilder(
ItemSelectionModel itemModel) {
m_itemModel = itemModel;
}
@Override
public TableModel makeModel(Table table, PageState state) {
table.getRowSelectionModel().clearSelection(state);
Journal collectedVolume =
(Journal) m_itemModel.getSelectedObject(
state);
return new JournalArticlesTableModel(table,
state,
collectedVolume);
}
}
private class JournalArticlesTableModel implements TableModel {
private Table m_table;
private ArticleInJournalCollection m_articles;
private ArticleInJournal m_article;
private JournalArticlesTableModel(Table table,
PageState state,
Journal journal) {
m_table = table;
m_articles = journal.getArticles();
}
@Override
public int getColumnCount() {
return m_table.getColumnModel().size();
}
@Override
public boolean nextRow() {
boolean ret;
if ((m_articles != null) && m_articles.next()) {
m_article = m_articles.getArticle();
ret = true;
} else {
ret = false;
}
return ret;
}
@Override
public Object getElementAt(int columnIndex) {
switch (columnIndex) {
case 0:
return m_article.getTitle();
case 1:
return PublicationGlobalizationUtil.globalize(
"publications.ui.journal.article.remove").
localize();
default:
return null;
}
}
@Override
public Object getKeyAt(int columnIndex) {
return m_article.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) {
com.arsdigita.cms.SecurityManager securityManager =
Utilities.getSecurityManager(state);
Journal journal = (Journal) m_itemModel.getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
com.arsdigita.cms.SecurityManager.EDIT_ITEM,
journal);
if (canEdit) {
ArticleInJournal article;
try {
article = new ArticleInJournal((BigDecimal) key);
} catch (DataObjectNotFoundException ex) {
s_log.warn(String.format("No object with key '%s' found.",
key),
ex);
return new Label(value.toString());
}
ContentSection section = CMS.getContext().getContentSection();
ItemResolver resolver = section.getItemResolver();
Link link =
new Link(value.toString(),
resolver.generateItemURL(state,
article,
section,
article.getVersion()));
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
private class DeleteCellRenderer extends LockableImpl implements
TableCellRenderer {
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
com.arsdigita.cms.SecurityManager securityManager = Utilities.
getSecurityManager(state);
Journal journal = (Journal) m_itemModel.getSelectedObject(
state);
boolean canEdit = securityManager.canAccess(state.getRequest(),
com.arsdigita.cms.SecurityManager.DELETE_ITEM,
journal);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
link.setConfirmation((String) PublicationGlobalizationUtil.
globalize(
"cms.contenttypes.ui.journal.articles.confirm_delete").
localize());
return link;
} else {
return new Label(value.toString());
}
}
}
private class UpCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
if (0 == row) {
Label label = new Label("");
return label;
} else {
ControlLink link = new ControlLink(
(String) PublicationGlobalizationUtil.globalize(
"cms.contenttypes.ui.journal.articles.up").
localize());
return link;
}
}
}
private class DownCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
Journal journal = (Journal) m_itemModel.
getSelectedObject(state);
ArticleInJournalCollection articles = journal.getArticles();
if ((articles.size() - 1) == row) {
Label label = new Label("");
return label;
} else {
ControlLink link = new ControlLink(
(String) SciOrganizationGlobalizationUtil.globalize(
"cms.contenttypes.ui.journal.articles.down").
localize());
return link;
}
}
}
@Override
public void cellSelected(TableActionEvent event) {
s_log.debug("Cell selected.");
PageState state = event.getPageState();
s_log.debug(String.format("RowKey = %s", event.getRowKey().toString()));
s_log.debug(String.format("Selected column: %d", event.getColumn().
intValue()));
ArticleInJournal article = new ArticleInJournal(new BigDecimal(event.
getRowKey().
toString()));
Journal journal = (Journal) m_itemModel.getSelectedObject(state);
ArticleInJournalCollection articles = journal.getArticles();
TableColumn col = getColumnModel().get(event.getColumn().intValue());
if (col.getHeaderKey().toString().equals(TABLE_COL_EDIT)) {
} else if (col.getHeaderKey().toString().equals(TABLE_COL_DEL)) {
s_log.debug("Removing article assoc...");
journal.removeArticle(article);
} else if(col.getHeaderKey().toString().equals(TABLE_COL_UP)) {
articles.swapWithPrevious(article);
} else if(col.getHeaderKey().toString().equals(TABLE_COL_DOWN)) {
articles.swapWithNext(article);
}
}
@Override
public void headSelected(TableActionEvent event) {
//Nothing to do
}
}

View File

@ -0,0 +1,67 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.Label;
import com.arsdigita.cms.ItemSelectionModel;
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.toolbox.ui.DomainObjectPropertySheet;
/**
*
* @author Jens Pelzetter
*/
public class JournalPropertiesStep extends PublicationPropertiesStep {
public JournalPropertiesStep(
ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
super(itemModel, parent);
}
public static Component getJournalPropertySheet(
ItemSelectionModel itemModel) {
DomainObjectPropertySheet sheet = (DomainObjectPropertySheet) PublicationPropertiesStep.
getPublicationPropertySheet(itemModel);
return sheet;
}
@Override
protected void addBasicProperties(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
SimpleEditStep basicProperties = new SimpleEditStep(itemModel,
parent,
EDIT_SHEET_NAME);
BasicPageForm editBasicSheet = new JournalPropertyForm(itemModel,
this);
basicProperties.add(EDIT_SHEET_NAME,
(String) PublicationGlobalizationUtil.globalize(
"publications.ui.collected_volume.edit_basic_sheet").localize(),
new WorkflowLockedComponentAccess(editBasicSheet,
itemModel),
editBasicSheet.getSaveCancelSection().
getCancelButton());
basicProperties.setDisplayComponent(getJournalPropertySheet(itemModel));
getSegmentedPanel().addSegment(
new Label((String) PublicationGlobalizationUtil.globalize(
"publications.ui.publication.basic_properties").
localize()),
basicProperties);
}
@Override
protected void addSteps(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
super.addSteps(itemModel, parent);
addStep(new JournalArticlesStep(itemModel, parent),
"publications.ui.journal.articles");
}
}

View File

@ -0,0 +1,78 @@
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.TextField;
import com.arsdigita.bebop.parameters.ParameterModel;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.Journal;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter
*/
public class JournalPropertyForm
extends PublicationPropertyForm
implements FormProcessListener,
FormInitListener,
FormSubmissionListener {
private static final Logger s_log =
Logger.getLogger(JournalPropertyForm.class);
private JournalPropertiesStep m_step;
public static final String ID = "JournalEdit";
public JournalPropertyForm(ItemSelectionModel itemModel) {
this(itemModel, null);
}
public JournalPropertyForm(ItemSelectionModel itemModel,
JournalPropertiesStep step) {
super(itemModel, step);
m_step = step;
addSubmissionListener(this);
}
@Override
protected void addWidgets() {
super.addWidgets();
add(new Label((String) PublicationGlobalizationUtil.globalize(
"publications.ui.journal.issn").localize()));
ParameterModel issnParam = new StringParameter(Journal.ISSN);
TextField issn = new TextField(issnParam);
add(issn);
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
super.init(fse);
FormData data = fse.getFormData();
Journal journal = (Journal) super.initBasicWidgets(fse);
data.put(Journal.ISSN, journal.getISSN());
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
super.process(fse);
FormData data = fse.getFormData();
Journal journal = (Journal) super.initBasicWidgets(fse);
if ((journal != null) && getSaveCancelSection().getSaveButton().
isSelected(fse.getPageState())) {
journal.setISSN((String) data.get(Journal.ISSN));
journal.save();;
}
}
}