diff --git a/ccm-sci-bundle/web/packages/content-section/templates/default/aplaws-item.jsp b/ccm-sci-bundle/web/packages/content-section/templates/default/aplaws-item.jsp index 461737330..017b1664e 100644 --- a/ccm-sci-bundle/web/packages/content-section/templates/default/aplaws-item.jsp +++ b/ccm-sci-bundle/web/packages/content-section/templates/default/aplaws-item.jsp @@ -4,8 +4,8 @@ version="1.2"> + import="com.arsdigita.navigation.NavigationModel, + com.arsdigita.navigation.cms.CMSNavigationModel"/> NavigationModel model = new CMSNavigationModel(); @@ -15,25 +15,25 @@ title="APLAWS" cache="true"> + classname="com.arsdigita.navigation.ui.category.Path"/> - ((com.arsdigita.london.navigation.ui.category.Path)categoryPath) + ((com.arsdigita.navigation.ui.category.Path)categoryPath) .setModel(model); + classname="com.arsdigita.navigation.ui.category.Menu"/> - ((com.arsdigita.london.navigation.ui.category.Menu)categoryMenu) + ((com.arsdigita.navigation.ui.category.Menu)categoryMenu) .setModel(model); + classname="com.arsdigita.navigation.ui.RelatedItems"/> + classname="com.arsdigita.bundle.ui.AssignedItemTerms"/> diff --git a/ccm-sci-publications/application.xml b/ccm-sci-publications/application.xml index 4e73eb1c8..994b31ff5 100644 --- a/ccm-sci-publications/application.xml +++ b/ccm-sci-publications/application.xml @@ -2,7 +2,7 @@ diff --git a/ccm-sci-publications/pdl/com/arsdigita/content-types/InternetArticle.pdl b/ccm-sci-publications/pdl/com/arsdigita/content-types/InternetArticle.pdl index 00d7ed1e1..e1fae6668 100644 --- a/ccm-sci-publications/pdl/com/arsdigita/content-types/InternetArticle.pdl +++ b/ccm-sci-publications/pdl/com/arsdigita/content-types/InternetArticle.pdl @@ -32,8 +32,10 @@ object type InternetArticle extends Publication { String[0..1] issn = ct_internet_article.issn VARCHAR(9); Date[0..1] lastAccessed = ct_internet_article.last_accessed DATE; Date[0..1] publicationDate = ct_internet_article.publicationDate DATE; - - + String[0..1] url = ct_internet_article.url VARCHAR(2048); + String[0..1] urn = ct_internet_article.urn VARCHAR(2048); + String[0..1] doi = ct_internet_article.doi VARCHAR(2048); + reference key (ct_internet_article.internet_article_id); } diff --git a/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl b/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl index cc035e90a..5f5c26e68 100644 --- a/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl +++ b/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl @@ -27,13 +27,19 @@ object type Publication extends ContentPage { Integer[0..1] yearOfPublication = ct_publications.year INTEGER; String[0..1] abstract = ct_publications.abstract VARCHAR(4096); String[0..1] misc = ct_publications.misc VARCHAR(4096); - //The reviewed property has been moved for performance reasons. It + //The reviewed property has been moved here for performance reasons. It //is necessary to have access to this property from a data query //over all publications of a person. Since this property was only //available on some types, it was not possible to use joins *and* //get publications of *all* types. But exactly this use case appears on //several points. - Boolean[0..1] reviewed = ct_publications.reviewed BIT ; + Boolean[0..1] reviewed = ct_publications.reviewed BIT; + //This property is for internal use only. It updated automatically when + //an author is added or removed. It contains a string with the names + //of all authors of the publications and is used for efficient queries + //(ordering by publications by their authors requires joins or subqueries + //without this field) + String[0..1] authorsStr = ct_publications.authors VARCHAR(2048); reference key (ct_publications.publication_id); } @@ -193,10 +199,11 @@ query getPublicationsForAuthorWithAuthors { ct_publications_authorship.person_id, ct_publications.year, ct_publications.reviewed, - (select array_to_string(array (select cms_persons.surname || ', ' || cms_persons.givenname - from cms_persons - join ct_publications_authorship on cms_persons.person_id = ct_publications_authorship.person_id - where ct_publications_authorship.publication_id = cms_pages.item_id), '; ')) as authors + ct_publications.authors + //(select array_to_string(array (select cms_persons.surname || ', ' || cms_persons.givenname + // from cms_persons + // join ct_publications_authorship on cms_persons.person_id = ct_publications_authorship.person_id + // where ct_publications_authorship.publication_id = cms_pages.item_id order by ct_publications_authorship.authorship_order), '; ')) as authors from cms_pages join ct_publications on cms_pages.item_id = ct_publications.publication_id join ct_publications_authorship on ct_publications.publication_id = ct_publications_authorship.publication_id @@ -207,7 +214,7 @@ query getPublicationsForAuthorWithAuthors { authorId = ct_publications_authorship.person_id; title = cms_pages.title; year = ct_publications.year; - authors = authors; + authors = ct_publications.authors; reviewed = ct_publications.reviewed; } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/AuthorshipCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/AuthorshipCollection.java index 072ee25c7..f4aea3b82 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/AuthorshipCollection.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/AuthorshipCollection.java @@ -157,6 +157,14 @@ public class AuthorshipCollection extends DomainCollection { this.rewind(); } + public String getSurname() { + return (String) m_dataCollection.getDataObject().get(GenericPerson.SURNAME); + } + + public String getGivenName() { + return (String) m_dataCollection.getDataObject().get(GenericPerson.GIVENNAME); + } + public GenericPerson getAuthor() { return new GenericPerson(m_dataCollection.getDataObject()); } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/InternetArticle.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/InternetArticle.java index 9bdb10878..9569f9b80 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/InternetArticle.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/InternetArticle.java @@ -42,6 +42,9 @@ public class InternetArticle extends Publication { public static final String ISSN = "issn"; public static final String LAST_ACCESSED = "lastAccessed"; public static final String PUBLICATION_DATE = "publicationDate"; + public static final String URL = "url"; + public static final String URN = "urn"; + public static final String DOI = "doi"; public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.InternetArticle"; @@ -155,4 +158,28 @@ public class InternetArticle extends Publication { public void setPublicationDate(Date pubDate) { set(PUBLICATION_DATE, pubDate); } + + public String getUrl() { + return (String) get(URL); + } + + public void setUrl(final String url) { + set(URL, url); + } + + public String getUrn() { + return (String) get(URN); + } + + public void setUrn(final String urn) { + set(URN, urn); + } + + public String getDoi() { + return (String) get(DOI); + } + + public void setDoi(final String doi) { + set(DOI, doi); + } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java index d352291be..cb048e050 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java @@ -69,6 +69,7 @@ public class Publication extends ContentPage { public final static String ABSTRACT = "abstract"; public final static String MISC = "misc"; public final static String AUTHORS = "authors"; + private final static String AUTHORS_STR = "authorsStr"; //authorsStr is an interal field only for use in data queries, and is updated automatically public final static String EDITOR = "editor"; public final static String AUTHOR_ORDER = "authorOrder"; public final static String SERIES = "series"; @@ -195,6 +196,8 @@ public class Publication extends ContentPage { link.set(EDITOR, editor); link.set(AUTHOR_ORDER, Integer.valueOf((int) getAuthors().size())); + + updateAuthorsStr(); } /** @@ -205,6 +208,32 @@ public class Publication extends ContentPage { public void removeAuthor(final GenericPerson author) { Assert.exists(author, GenericPerson.class); remove(AUTHORS, author); + + updateAuthorsStr(); + } + + public void swapWithPreviousAuthor(final GenericPerson author) { + getAuthors().swapWithPrevious(author); + updateAuthorsStr(); + } + + public void swapWithNextAuthor(final GenericPerson author) { + getAuthors().swapWithNext(author); + updateAuthorsStr(); + } + + protected void updateAuthorsStr() { + final AuthorshipCollection authors = getAuthors(); + StringBuilder builder = new StringBuilder(); + while(authors.next()) { + if (builder.length() > 0) { + builder.append("; "); + } + builder.append(authors.getSurname()); + builder.append(", "); + builder.append(authors.getGivenName()); + } + set(AUTHORS_STR, builder.toString()); } /** diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/InternetArticlePropertiesStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/InternetArticlePropertiesStep.java index 80c1d1465..1bf5d5fb3 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/InternetArticlePropertiesStep.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/InternetArticlePropertiesStep.java @@ -42,32 +42,45 @@ public class InternetArticlePropertiesStep extends PublicationPropertiesStep { public static Component getInternetArticlePropertySheet( ItemSelectionModel itemModel) { - DomainObjectPropertySheet sheet = (DomainObjectPropertySheet) PublicationPropertiesStep. + DomainObjectPropertySheet sheet = + (DomainObjectPropertySheet) PublicationPropertiesStep. getPublicationPropertySheet(itemModel); sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.internetarticle.place"), - InternetArticle.PLACE); - + InternetArticle.PLACE); + sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.internetarticle.number"), - InternetArticle.NUMBER); + InternetArticle.NUMBER); sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.internetarticle.number_of_pages"), - InternetArticle.NUMBER_OF_PAGES); + InternetArticle.NUMBER_OF_PAGES); sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.internetarticle.edition"), - InternetArticle.EDITION); + InternetArticle.EDITION); sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.internetarticle.issn"), - InternetArticle.ISSN); + InternetArticle.ISSN); sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.internetarticle.lastAccessed"), - InternetArticle.LAST_ACCESSED); + InternetArticle.LAST_ACCESSED); + + sheet.add(PublicationGlobalizationUtil.globalize( + "publications.ui.internetarticle.url"), + InternetArticle.URL); + + sheet.add(PublicationGlobalizationUtil.globalize( + "publications.ui.internetarticle.urn"), + InternetArticle.URN); + + sheet.add(PublicationGlobalizationUtil.globalize( + "publications.ui.internetarticle.doi"), + InternetArticle.DOI); return sheet; } @@ -101,8 +114,8 @@ public class InternetArticlePropertiesStep extends PublicationPropertiesStep { } @Override - protected void addSteps(final ItemSelectionModel itemModel, - final AuthoringKitWizard parent) { + protected void addSteps(final ItemSelectionModel itemModel, + final AuthoringKitWizard parent) { super.addSteps(itemModel, parent); addStep(new InternetArticleOrganizationStep(itemModel, parent), diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/InternetArticlePropertyForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/InternetArticlePropertyForm.java index d19386bb8..e0040dbd9 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/InternetArticlePropertyForm.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/InternetArticlePropertyForm.java @@ -109,7 +109,7 @@ public class InternetArticlePropertyForm ParameterData data = event.getParameterData(); String value = (String) data.getValue(); - if(value.isEmpty()) { + if (value.isEmpty()) { return; } @@ -143,6 +143,24 @@ public class InternetArticlePropertyForm pubDateParam); pubDate.setYearRange(1900, today.get(Calendar.YEAR) + 2); add(pubDate); + + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.internetarticle.url").localize())); + ParameterModel urlModel = new StringParameter(InternetArticle.URL); + TextField url = new TextField(urlModel); + add(url); + + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.internetarticle.urn").localize())); + ParameterModel urnModel = new StringParameter(InternetArticle.URN); + TextField urn = new TextField(urnModel); + add(urn); + + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.internetarticle.doi").localize())); + ParameterModel doiModel = new StringParameter(InternetArticle.DOI); + TextField doi = new TextField(doiModel); + add(doi); } @Override @@ -159,6 +177,9 @@ public class InternetArticlePropertyForm data.put(InternetArticle.ISSN, article.getISSN()); data.put(InternetArticle.LAST_ACCESSED, article.getLastAccessed()); + data.put(InternetArticle.URL, article.getUrl()); + data.put(InternetArticle.URN, article.getUrn()); + data.put(InternetArticle.DOI, article.getDoi()); } @Override @@ -180,6 +201,9 @@ public class InternetArticlePropertyForm article.setISSN(issn); article.setLastAccessed( (Date) data.get(InternetArticle.LAST_ACCESSED)); + article.setUrl((String) data.get(InternetArticle.URL)); + article.setUrn((String) data.get(InternetArticle.URN)); + article.setDoi((String) data.get(InternetArticle.DOI)); article.save(); } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java index a0c956dfc..10c12f40f 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java @@ -435,10 +435,10 @@ public class PublicationAuthorsTable publication.removeAuthor(author); } else if (column.getHeaderKey().toString().equals(TABLE_COL_UP)) { s_log.info("UP"); - authors.swapWithPrevious(author); + publication.swapWithPreviousAuthor(author); } else if (column.getHeaderKey().toString().equals(TABLE_COL_DOWN)) { s_log.info("DOWN"); - authors.swapWithNext(author); + publication.swapWithNextAuthor(author); } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties index 03d485361..a709258e1 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties @@ -301,7 +301,7 @@ publication.ui.internetarticle.organization.remove=Remove publications.ui.monograph.reviewed=Reviewed publications.ui.monograph.reviewed.yes=Yes publications.ui.monograph.reviewed.no=No -publications.ui.internetarticle.lastAccessed=Date of last access +publications.ui.internetarticle.lastAccessed=Date of last access/Date of last edit publications.ui.invalid_isbn=The ISBN entered is invalid publications.ui.invalid_issn=The ISSN entered is invalid publications.ui.journal.lastYearOfPublication=Last year of publication @@ -378,3 +378,6 @@ 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 +publications.ui.internetarticle.url=URL +publications.ui.internetarticle.urn=URN +publications.ui.internetarticle.doi=DOI diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties index f244ef520..44a1405f1 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties @@ -300,7 +300,7 @@ publication.ui.internetarticle.organization.remove=Entfernen publications.ui.monograph.reviewed=Begutachtet publications.ui.monograph.reviewed.yes=Ja publications.ui.monograph.reviewed.no=Nein -publications.ui.internetarticle.lastAccessed=Letztes Zugriffsdatum +publications.ui.internetarticle.lastAccessed=Letztes Zugriffsdatum/Datum der letzten \u00c4nderung publications.ui.invalid_isbn=Die eingegebene ISBN ist fehlerhaft. publications.ui.invalid_issn=Die eingegebene ISSN ist fehlerhaft. publications.ui.journal.lastYearOfPublication=Letztes Jahr der Ver\u00f6ffentlichung @@ -377,3 +377,6 @@ 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 +publications.ui.internetarticle.url=URL +publications.ui.internetarticle.urn=URN +publications.ui.internetarticle.doi=DOI