From a83b943274209c1c8a37508e8e3e54fff3e01dda Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 3 Jun 2011 18:51:16 +0000 Subject: [PATCH] =?UTF-8?q?-=20N=C3=A4chster=20Teil=20der=20Restruktuierun?= =?UTF-8?q?g=20der=20Verkn=C3=BCpfung=20zwischen=20Publication=20und=20Sci?= =?UTF-8?q?Organization/SciDepartment/SciProject.=20=09-=20Panels=20funkti?= =?UTF-8?q?onieren=20soweit=20ben=C3=B6tigen=20aber=20noch=20Optimierung.?= =?UTF-8?q?=20=09-=20Konverter-Programm=20f=C3=BCr=20alte=20RelatedLinks?= =?UTF-8?q?=20-=20Optimierungen=20an=20SciOrganizationPanel,=20SciDepartme?= =?UTF-8?q?ntPanel=20und=20SciProjectPanel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@951 8810af33-2d31-482b-a856-94f89814c4df --- .../com/arsdigita/cms/contenttypes/Link.java | 26 +- .../com/arsdigita/runtime/ConfigRegistry.java | 1 + .../SciOrganizationPublicationLink.pdl | 12 + ...ci-assets-organizationpublicationlink.conf | 4 - ...-assets-organizationpublicationlink.config | 5 + ...tedPublicationsLinkToPublicationAssoc.java | 163 +++++++ .../SciDepartmentWithPublications.java | 5 +- .../SciOrganizationWithPublications.java | 16 +- .../SciProjectWithPublications.java | 5 +- .../contenttypes/ui/PublicationXmlHelper.java | 404 ++++++++++++++++++ .../SciOrganizationWithPublicationsPanel.java | 106 ++++- .../contenttypes/ui/SciDepartmentPanel.java | 1 - .../contenttypes/ui/SciOrganizationPanel.java | 2 +- 13 files changed, 715 insertions(+), 35 deletions(-) delete mode 100644 ccm-sci-assets-organizationpublicationlink/src/ccm-sci-assets-organizationpublicationlink.conf create mode 100644 ccm-sci-assets-organizationpublicationlink/src/ccm-sci-assets-organizationpublicationlink.config create mode 100644 ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contentassets/ConvertRelatedPublicationsLinkToPublicationAssoc.java create mode 100644 ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/ui/PublicationXmlHelper.java diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/Link.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/Link.java index f9451ba97..2987dac7a 100755 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/Link.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/Link.java @@ -208,8 +208,14 @@ public class Link extends ACSObject { // If acsObject is instance of ContentBundle if (acsObject instanceof ContentBundle) { // get the negotiated language version of this ContentBundle - ci = ((ContentBundle) acsObject).negotiate(DispatcherHelper. - getRequest().getLocales()); + //jensp: If there is no request object - for example if getTargetItem + //is called from a command line program - use the primary instance. + if (DispatcherHelper.getRequest() == null) { + ci = ((ContentBundle) acsObject).getPrimaryInstance(); + } else { + ci = ((ContentBundle) acsObject).negotiate(DispatcherHelper. + getRequest().getLocales()); + } } else { // else there are no language versions so just use the acsObject ci = (ContentItem) acsObject; @@ -301,7 +307,7 @@ public class Link extends ACSObject { * @return the Link URI */ public String getInternalOrExternalURI(PageState state) { - + if (EXTERNAL_LINK.equals(getTargetType())) { return getTargetURI(); } else { @@ -317,7 +323,7 @@ public class Link extends ACSObject { ItemResolver resolver = section.getItemResolver(); String url = resolver.generateItemURL( state, item, section, item.getVersion()); - + if ((getTargetURI() != null) && getTargetURI().startsWith("&")) { ParameterMap parameters; StringTokenizer tokenizer; @@ -340,8 +346,8 @@ public class Link extends ACSObject { toString())); return URL.there(state.getRequest(), url, parameters). toString(); - } else { - return URL.there(state.getRequest(), url).toString(); + } else { + return URL.there(state.getRequest(), url).toString(); } } } @@ -498,8 +504,8 @@ public class Link extends ACSObject { int otherKey = key; - - + + if (swapNext) { otherKey = key + 1; query.addOrder("linkOrder ASC"); @@ -516,8 +522,8 @@ public class Link extends ACSObject { if (query.next()) { otherKey = ((Integer) query.get("linkOrder")).intValue(); query.close(); - } - + } + DataOperation operation = getSwapOperation(operationName); operation.setParameter("linkOrder", new Integer(key)); operation.setParameter("nextLinkOrder", new Integer(otherKey)); diff --git a/ccm-core/src/com/arsdigita/runtime/ConfigRegistry.java b/ccm-core/src/com/arsdigita/runtime/ConfigRegistry.java index 6de5b7a72..9919f278a 100755 --- a/ccm-core/src/com/arsdigita/runtime/ConfigRegistry.java +++ b/ccm-core/src/com/arsdigita/runtime/ConfigRegistry.java @@ -328,6 +328,7 @@ public class ConfigRegistry { private class ConfigRegistryParser extends DefaultHandler { + @Override public void startElement(String uri, String localName, String qn, Attributes attrs) { if (localName.equals("config")) { diff --git a/ccm-sci-assets-organizationpublicationlink/pdl/com/arsdigita/cms/contentassets/SciOrganizationPublicationLink.pdl b/ccm-sci-assets-organizationpublicationlink/pdl/com/arsdigita/cms/contentassets/SciOrganizationPublicationLink.pdl index e6ca0acac..99688433d 100644 --- a/ccm-sci-assets-organizationpublicationlink/pdl/com/arsdigita/cms/contentassets/SciOrganizationPublicationLink.pdl +++ b/ccm-sci-assets-organizationpublicationlink/pdl/com/arsdigita/cms/contentassets/SciOrganizationPublicationLink.pdl @@ -15,4 +15,16 @@ association { to cms_organization_publication_map.organization_id, join cms_organization_publication_map.publication_id to ct_publications.publication_id; +} + +query getIdsOfPublicationsOfSciOrganization { + BigDecimal publicationId; + + do { + select cms_organization_publication_map.publication_id + from cms_organization_publication_map + where cms_organization_publication_map.organization_id = :organization + } map { + publicationId = cms_organization_publication_map.publication_id; + } } \ No newline at end of file diff --git a/ccm-sci-assets-organizationpublicationlink/src/ccm-sci-assets-organizationpublicationlink.conf b/ccm-sci-assets-organizationpublicationlink/src/ccm-sci-assets-organizationpublicationlink.conf deleted file mode 100644 index ee602705f..000000000 --- a/ccm-sci-assets-organizationpublicationlink/src/ccm-sci-assets-organizationpublicationlink.conf +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/ccm-sci-assets-organizationpublicationlink/src/ccm-sci-assets-organizationpublicationlink.config b/ccm-sci-assets-organizationpublicationlink/src/ccm-sci-assets-organizationpublicationlink.config new file mode 100644 index 000000000..2ba1da7f4 --- /dev/null +++ b/ccm-sci-assets-organizationpublicationlink/src/ccm-sci-assets-organizationpublicationlink.config @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contentassets/ConvertRelatedPublicationsLinkToPublicationAssoc.java b/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contentassets/ConvertRelatedPublicationsLinkToPublicationAssoc.java new file mode 100644 index 000000000..f38cc2d5f --- /dev/null +++ b/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contentassets/ConvertRelatedPublicationsLinkToPublicationAssoc.java @@ -0,0 +1,163 @@ +package com.arsdigita.cms.contentassets; + +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ContentPage; +import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitWithPublications; +import com.arsdigita.cms.contenttypes.GenericPerson; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.SciDepartment; +import com.arsdigita.cms.contenttypes.SciMember; +import com.arsdigita.cms.dispatcher.ContentItemDispatcher; +import com.arsdigita.cms.installer.xml.ContentItemHelper; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.Session; +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.persistence.TransactionContext; +import java.math.BigDecimal; +import javax.sound.sampled.TargetDataLine; + +/** + * + * @author Jens Pelzetter + */ +public class ConvertRelatedPublicationsLinkToPublicationAssoc { + + public static void main(String[] args) { + final com.arsdigita.runtime.Runtime runtime = + new com.arsdigita.runtime.Runtime(); + + runtime.startup(); + + final Session session = SessionManager.getSession(); + final TransactionContext tc = session.getTransactionContext(); + + tc.beginTxn(); + try { + DataCollection data = session.retrieve( + SciDepartment.BASE_DATA_OBJECT_TYPE); + data.addOrder("title"); + + SciDepartment department; + while (data.next()) { + department = + (SciDepartment) DomainObjectFactory.newInstance(data. + getDataObject()); + + if (department.isDraftVersion()) { + + System.out.printf("Found department '%s'\n", + department.getTitle()); + + DataCollection relatedLinks = RelatedLink.getRelatedLinks( + department, "SciDepartmentPublications"); + + System.out.printf( + "Found %d related links from department '%s' with link list name '%s':\n", + relatedLinks.size(), + department.getTitle(), + "SciDepartmentPublications"); + int i = 1; + while (relatedLinks.next()) { + RelatedLink relatedLink = + (RelatedLink) DomainObjectFactory. + newInstance(relatedLinks.getDataObject()); + + if (relatedLink == null) { + System.out.println( + "Failed to convert related link to domain object..."); + continue; + } + + ContentItem target = relatedLink.getTargetItem(); + Publication publication = (Publication) target; + System.out.printf( + "\tconverting related link to '%s' (%d of %d)\n", + publication.getTitle(), + i, + relatedLinks.size()); + + GenericOrganizationalUnitWithPublications orga = + new GenericOrganizationalUnitWithPublications( + department.getID()); + orga.addPublication(publication); + + relatedLink.delete(); + + i++; + } + } + } + + + DataCollection persons = session.retrieve( + GenericPerson.BASE_DATA_OBJECT_TYPE); + persons.addOrder("surname"); + persons.addOrder("givenname"); + + GenericPerson person; + while (persons.next()) { + person = + (GenericPerson) DomainObjectFactory.newInstance(persons. + getDataObject()); + + if (person.isDraftVersion()) { + System.out.printf("Found person '%s'\n", + person.getGivenName(), + person.getSurname()); + + DataCollection relatedLinks = RelatedLink.getRelatedLinks( + person, "MyPublications"); + + System.out.printf( + "Found %d related links from person '%s' '%s' with link list name '%s'\n", + relatedLinks.size(), + person.getGivenName(), + person.getSurname(), + "MyPublications"); + int i = 1; + while (relatedLinks.next()) { + RelatedLink relatedLink = + (RelatedLink) DomainObjectFactory. + newInstance(relatedLinks.getDataObject()); + + if (relatedLink == null) { + System.out.println( + "Failed to convert related link to domain object..."); + continue; + } + + ContentItem target = relatedLink.getTargetItem(); + if (target == null) { + System.out.println( + "\t Strange: Target item is null. But thats no problem, since we are only deleting this related link."); + + } else { + Publication publication = (Publication) target; + System.out.printf( + "\tDeleting obsolete related link to '%s' (%d of %d)\n", + publication.getTitle(), + i, + relatedLinks.size()); + } + relatedLink.delete(); + + i++; + } + + + } + } + + + tc.commitTxn(); + } catch (Exception ex) { + System.out.println("Exception ocurred during convert process:"); + ex.printStackTrace(System.err); + } finally { + if (tc.inTxn()) { + tc.abortTxn(); + } + } + } +} diff --git a/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/SciDepartmentWithPublications.java b/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/SciDepartmentWithPublications.java index faa36eeba..9f35ccc7f 100644 --- a/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/SciDepartmentWithPublications.java +++ b/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/SciDepartmentWithPublications.java @@ -50,6 +50,7 @@ public class SciDepartmentWithPublications extends SciDepartment { } public SciDepartmentWithPublications(final SciDepartment department) { + super(department.getID()); departmentWithPublications = new GenericOrganizationalUnitWithPublications(department.getID()); } @@ -57,8 +58,8 @@ public class SciDepartmentWithPublications extends SciDepartment { public boolean hasPublications(final boolean merge) { DataQuery query = SessionManager.getSession().retrieveQuery( - "com.arsdigita.cms.contentassets.getIdsOfPublicationsOfSciDepartment"); - query.setParameter("departmentId", getID()); + "com.arsdigita.cms.contentassets.getIdsOfPublicationsOfSciOrganization"); + query.setParameter("organization", getID()); if (query.size() > 0) { query.close(); diff --git a/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/SciOrganizationWithPublications.java b/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/SciOrganizationWithPublications.java index ee94e33ed..38a35ba0e 100644 --- a/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/SciOrganizationWithPublications.java +++ b/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/SciOrganizationWithPublications.java @@ -55,8 +55,9 @@ public class SciOrganizationWithPublications extends SciOrganization { } public SciOrganizationWithPublications(final SciOrganization organization) { + super(organization.getID()); orgaWithPublications = new GenericOrganizationalUnitWithPublications( - organization.getID()); + organization.getID()); } public static SciOrganizationWithPublicationsConfig getConfig() { @@ -78,14 +79,15 @@ public class SciOrganizationWithPublications extends SciOrganization { DataQuery departmentsQuery = SessionManager.getSession().retrieveQuery( "com.arsdigita.cms.contenttypes.getIdsOfDepartmentsOfSciOrganization"); - departmentsQuery.setParameter("organization", getID()); + departmentsQuery.setParameter("organization", + getID()); - if (query.size() > 0) { + if (departmentsQuery.size() > 0) { BigDecimal departmentId; boolean result = false; while (departmentsQuery.next()) { departmentId = (BigDecimal) departmentsQuery.get( - "departmentsId"); + "departmentId"); result = hasPublications(departmentId, merge); if (result) { @@ -110,8 +112,8 @@ public class SciOrganizationWithPublications extends SciOrganization { final boolean merge) { DataQuery query = SessionManager.getSession().retrieveQuery( - "com.arsdigita.cms.contentassets.getIdsOfPublicationsOfSciDepartment"); - query.setParameter("departmentId", departmentId); + "com.arsdigita.cms.contentassets.getIdsOfPublicationsOfSciOrganization"); + query.setParameter("organization", departmentId); if (query.size() > 0) { query.close(); @@ -124,7 +126,7 @@ public class SciOrganizationWithPublications extends SciOrganization { "com.arsdigita.cms.contenttypes.getIdsOfSubDepartmentsOfSciDepartment"); subDepartmentsQuery.setParameter("department", departmentId); - if (query.size() > 0) { + if (subDepartmentsQuery.size() > 0) { BigDecimal subDepartmentId; boolean result = false; while(subDepartmentsQuery.next()) { diff --git a/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/SciProjectWithPublications.java b/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/SciProjectWithPublications.java index bdb7bf6c2..b8b2cded4 100644 --- a/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/SciProjectWithPublications.java +++ b/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/SciProjectWithPublications.java @@ -50,6 +50,7 @@ public class SciProjectWithPublications extends SciProject { } public SciProjectWithPublications(final SciProject project) { + super(project.getID()); projectWithPublications = new GenericOrganizationalUnitWithPublications(project.getID()); } @@ -57,8 +58,8 @@ public class SciProjectWithPublications extends SciProject { public boolean hasPublications(final boolean merge) { DataQuery query = SessionManager.getSession().retrieveQuery( - "com.arsdigita.cms.contentassets.getIdsOfPublicationsOfSciProject"); - query.setParameter("projectId", getID()); + "com.arsdigita.cms.contentassets.getIdsOfPublicationsOfSciOrganization"); + query.setParameter("organization", getID()); if (query.size() > 0) { query.close(); diff --git a/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/ui/PublicationXmlHelper.java b/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/ui/PublicationXmlHelper.java new file mode 100644 index 000000000..e23f0ff21 --- /dev/null +++ b/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/ui/PublicationXmlHelper.java @@ -0,0 +1,404 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.cms.contenttypes.ArticleInCollectedVolume; +import com.arsdigita.cms.contenttypes.ArticleInJournal; +import com.arsdigita.cms.contenttypes.AuthorshipCollection; +import com.arsdigita.cms.contenttypes.CollectedVolume; +import com.arsdigita.cms.contenttypes.Expertise; +import com.arsdigita.cms.contenttypes.GenericOrganizationalUnit; +import com.arsdigita.cms.contenttypes.GenericPerson; +import com.arsdigita.cms.contenttypes.GreyLiterature; +import com.arsdigita.cms.contenttypes.InProceedings; +import com.arsdigita.cms.contenttypes.InternetArticle; +import com.arsdigita.cms.contenttypes.Journal; +import com.arsdigita.cms.contenttypes.Monograph; +import com.arsdigita.cms.contenttypes.Proceedings; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.PublicationWithPublisher; +import com.arsdigita.cms.contenttypes.Publisher; +import com.arsdigita.cms.contenttypes.Review; +import com.arsdigita.cms.contenttypes.UnPublished; +import com.arsdigita.cms.contenttypes.WorkingPaper; +import com.arsdigita.xml.Element; + +/** + * + * @author Jens Pelzetter + */ +public class PublicationXmlHelper { + + private Element parent; + private Publication publication; + + public PublicationXmlHelper(final Element parent, + final Publication publication) { + this.parent = parent; + this.publication = publication; + } + + public void generateXml() { + Element publicationElem = parent.newChildElement( + "publications"); + + generateSystemXml(publicationElem); + generatePublicationXml(publicationElem); + + if (publication instanceof PublicationWithPublisher) { + generatePublicationWithPublisherXml(publicationElem); + } + + if (publication instanceof ArticleInCollectedVolume) { + generateArticleInCollectedVolumeXml(publicationElem); + } + + if (publication instanceof ArticleInJournal) { + generateArticleInJournalXml(publicationElem); + } + + if (publication instanceof CollectedVolume) { + generateCollectedVolumeXml(publicationElem); + } + + if (publication instanceof Expertise) { + generateExpertiseXml(publicationElem); + } + + if (publication instanceof GreyLiterature) { + generateGreyLiteratureXml(publicationElem); + } + + if (publication instanceof InProceedings) { + generateInProceedingsXml(publicationElem); + } + + if (publication instanceof InternetArticle) { + generateInternetArticleXml(publicationElem); + } + + if (publication instanceof Journal) { + generateJournalXml(publicationElem); + } + + if (publication instanceof Monograph) { + generateMonographXml(publicationElem); + } + + if (publication instanceof Proceedings) { + generateProceedingsXml(publicationElem); + } + + if (publication instanceof Review) { + generateReviewXml(publicationElem); + } + + if (publication instanceof UnPublished) { + generateUnPublishedXml(publicationElem); + } + + if (publication instanceof WorkingPaper) { + generateWorkingPaperXml(publicationElem); + } + } + + private void generateXmlElement(final Element parent, + final String name, + final String value) { + if ((value == null) || value.isEmpty()) { + return; + } else { + Element element = parent.newChildElement(name); + element.setText(value); + } + } + + private void generateXmlElement(final Element parent, + final String name, + final Integer value) { + if ((value == null)) { + return; + } else { + generateXmlElement(parent, name, value.toString()); + } + } + + private void generateXmlElement(final Element parent, + final String name, + final Boolean value) { + if (value == null) { + return; + } else if (value.booleanValue()) { + generateXmlElement(parent, name, "true"); + } else { + generateXmlElement(parent, name, "false"); + } + } + + private void generateSystemXml(final Element publicationElem) { + Element objectTypeElem = publicationElem.newChildElement("objectType"); + objectTypeElem.setText(publication.getObjectType().getQualifiedName()); + } + + private void generatePublicationXml(final Element publicationElem) { + generateXmlElement(publicationElem, "title", publication.getTitle()); + Element yearElem = publicationElem.newChildElement( + "yearOfPublication"); + yearElem.setText(publication.getYearOfPublication().toString()); + generateXmlElement(publicationElem, + "yearOfPublication", + publication.getYearOfPublication()); + generateXmlElement(publicationElem, "misc", publication.getMisc()); + generateXmlElement(parent, "abstract", publication.getAbstract()); + generateAuthorsXml(publicationElem); + } + + private void generateAuthorsXml(final Element publicationElem) { + AuthorshipCollection authors = publication.getAuthors(); + + if ((authors == null) || authors.isEmpty()) { + return; + } + + while (authors.next()) { + Element authorsElem = publicationElem.newChildElement( + "authors"); + Element linkElem = authorsElem.newChildElement("link"); + Element editorElem = linkElem.newChildElement("editor"); + if (authors.isEditor()) { + editorElem.setText("true"); + } else { + editorElem.setText("false"); + } + Element authorOrderElem = linkElem.newChildElement( + "authorOrder"); + authorOrderElem.setText(authors.getAuthorshipOrder(). + toString()); + + GenericPerson author = authors.getAuthor(); + Element surnameElem = authorsElem.newChildElement("surname"); + surnameElem.setText(author.getSurname()); + Element givennameElem = authorsElem.newChildElement( + "givenname"); + givennameElem.setText(author.getGivenName()); + } + } + + private void generatePublicationWithPublisherXml( + final Element publicationElem) { + PublicationWithPublisher pwp = + (PublicationWithPublisher) publication; + generatePublisherXml(publicationElem, pwp); + + generateXmlElement(publicationElem, "misc", pwp.getISBN()); + generateXmlElement(publicationElem, "volume", pwp.getVolume()); + generateXmlElement(publicationElem, + "numberOfVolumes", + pwp.getNumberOfVolumes()); + generateXmlElement(publicationElem, + "numberOfPages", + pwp.getNumberOfPages()); + generateXmlElement(publicationElem, "edition", pwp.getEdition()); + } + + private void generatePublisherXml(final Element publicationElem, + final PublicationWithPublisher pwp) { + final Publisher publisher = pwp.getPublisher(); + + if (publisher == null) { + return; + } + + Element publisherElem = publicationElem.newChildElement( + "publisher"); + Element publisherNameElem = publisherElem.newChildElement( + "publisherName"); + publisherNameElem.setText(publisher.getPublisherName()); + Element publisherPlaceElem = publisherElem.newChildElement( + "place"); + publisherPlaceElem.setText(publisher.getPlace()); + } + + private void generateArticleInCollectedVolumeXml( + final Element publicationElem) { + final ArticleInCollectedVolume article = + (ArticleInCollectedVolume) publication; + + generateXmlElement(publicationElem, "pageFrom", article.getPagesFrom()); + generateXmlElement(publicationElem, "pageTo", article.getPagesTo()); + generateXmlElement(publicationElem, "chapter", article.getChapter()); + generateXmlElement(publicationElem, "reviewed", article.getReviewed()); + generateCollectedVolumeLinkXml(publicationElem, article); + } + + private void generateCollectedVolumeLinkXml( + final Element publicationElem, + final ArticleInCollectedVolume article) { + CollectedVolume collectedVolume = article.getCollectedVolume(); + + if (collectedVolume != null) { + Element collectedVolumeElem = publicationElem.newChildElement( + "collectedVolume"); + PublicationXmlHelper xmlHelper = + new PublicationXmlHelper(collectedVolumeElem, + collectedVolume); + xmlHelper.generateXml(); + } + } + + private void generateArticleInJournalXml(final Element publicationElem) { + final ArticleInJournal article = (ArticleInJournal) publication; + + generateXmlElement(publicationElem, "volume", article.getVolume()); + generateXmlElement(publicationElem, "issue", article.getIssue()); + generateXmlElement(publicationElem, "pageFrom", article.getPagesFrom()); + generateXmlElement(publicationElem, "pageTo", article.getPagesTo()); + generateXmlElement(publicationElem, "reviewed", article.getReviewed()); + + generateJournalLinkXml(publicationElem, article); + } + + private void generateJournalLinkXml(final Element publicationElem, + ArticleInJournal article) { + Journal journal = article.getJournal(); + + if (journal != null) { + Element journalElem = publicationElem.newChildElement("journal"); + PublicationXmlHelper xmlHelper = new PublicationXmlHelper( + journalElem, + journal); + xmlHelper.generateXml(); + } + } + + private void generateCollectedVolumeXml(final Element publicationElem) { + CollectedVolume collectedVolume = (CollectedVolume) publication; + + generateXmlElement(publicationElem, + "reviewed", + collectedVolume.getReviewed()); + } + + private void generateExpertiseXml(final Element publicationElem) { + Expertise expertise = (Expertise) publication; + + generateXmlElement(publicationElem, "place", expertise.getPlace()); + generateXmlElement(publicationElem, + "numberOfPages", + expertise.getNumberOfPages()); + + generateOrganizationXml(publicationElem, + "organization", + expertise.getOrganization()); + + generateOrganizationXml(publicationElem, + "orderer", + expertise.getOrderer()); + } + + private void generateGreyLiteratureXml(final Element publicationElem) { + GreyLiterature grey = (GreyLiterature) publication; + + generateXmlElement(publicationElem, "pageFrom", grey.getPagesFrom()); + generateXmlElement(publicationElem, "pageTo", grey.getPagesTo()); + } + + private void generateInProceedingsXml(final Element publicationElem) { + InProceedings inProceedings = (InProceedings) publication; + + generateXmlElement(publicationElem, + "pageFrom", + inProceedings.getPagesFrom()); + generateXmlElement(publicationElem, + "pagesTo", + inProceedings.getPagesTo()); + Element proceedingsElem = publicationElem.newChildElement("proceedings"); + PublicationXmlHelper xmlHelper = new PublicationXmlHelper( + proceedingsElem, + inProceedings.getProceedings()); + xmlHelper.generateXml(); + } + + private void generateInternetArticleXml(final Element publicationElem) { + InternetArticle article = (InternetArticle) publication; + + generateXmlElement(publicationElem, "place", article.getPlace()); + generateXmlElement(publicationElem, "number", article.getNumber()); + generateXmlElement(publicationElem, + "numberOfPages", + article.getNumberOfPages()); + generateXmlElement(publicationElem, "edition", article.getEdition()); + generateXmlElement(publicationElem, "issn", article.getISSN()); + + generateOrganizationXml(publicationElem, + "organization", + article.getOrganization()); + + } + + private void generateJournalXml(final Element publicationElem) { + final Journal journal = (Journal) publication; + + generateXmlElement(publicationElem, "lastYear", journal.getLastYear()); + generateXmlElement(publicationElem, "issn", journal.getISSN()); + } + + private void generateMonographXml(final Element publicationElem) { + final Monograph monograph = (Monograph) publication; + + generateXmlElement(publicationElem, "reviewed", monograph.getReviewed()); + } + + private void generateProceedingsXml(final Element publicationElem) { + Proceedings proceedings = (Proceedings) publication; + + generateXmlElement(publicationElem, + "nameOfConference", + proceedings.getNameOfConference()); + generateXmlElement(publicationElem, + "placeOfConference", + proceedings.getPlaceOfConference()); + + generateOrganizationXml(publicationElem, + "organizer", + proceedings.getOrganizerOfConference()); + } + + private void generateReviewXml(final Element publicationElem) { + //Nothing for now. + } + + private void generateUnPublishedXml(final Element publicationElem) { + UnPublished unPublished = (UnPublished) publication; + + generateXmlElement(publicationElem, "place", unPublished.getPlace()); + generateXmlElement(publicationElem, "number", unPublished.getNumber()); + generateXmlElement(publicationElem, + "numberOfPages", + unPublished.getNumberOfPages()); + + generateOrganizationXml(publicationElem, + "organization", + unPublished.getOrganization()); + } + + private void generateWorkingPaperXml(final Element publicationElem) { + WorkingPaper workingPaper = (WorkingPaper) publication; + + generateXmlElement(publicationElem, + "reviewed", + workingPaper.getReviewed()); + } + + private void generateOrganizationXml(final Element publicationElem, + final String elementName, + final GenericOrganizationalUnit orga) { + if (orga == null) { + return; + } + + Element organizationElem = + publicationElem.newChildElement(elementName); + Element orgaTitleElem = organizationElem.newChildElement("title"); + orgaTitleElem.setText(orga.getTitle()); + + } +} diff --git a/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationWithPublicationsPanel.java b/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationWithPublicationsPanel.java index f705d54d0..4939d6876 100644 --- a/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationWithPublicationsPanel.java +++ b/ccm-sci-assets-organizationpublicationlink/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationWithPublicationsPanel.java @@ -22,7 +22,13 @@ package com.arsdigita.cms.contenttypes.ui; import com.arsdigita.bebop.PageState; import com.arsdigita.cms.ContentItemXMLRenderer; import com.arsdigita.cms.contentassets.SciOrganizationPublicationCollection; +import com.arsdigita.cms.contenttypes.ArticleInCollectedVolume; +import com.arsdigita.cms.contenttypes.ArticleInJournal; +import com.arsdigita.cms.contenttypes.AuthorshipCollection; +import com.arsdigita.cms.contenttypes.GenericPerson; import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.PublicationWithPublisher; +import com.arsdigita.cms.contenttypes.Publisher; import com.arsdigita.cms.contenttypes.SciDepartment; import com.arsdigita.cms.contenttypes.SciDepartmentSubDepartmentsCollection; import com.arsdigita.cms.contenttypes.SciDepartmentWithPublications; @@ -55,7 +61,7 @@ public class SciOrganizationWithPublicationsPanel extends SciOrganizationPanel { public void setDisplayPublications(final boolean displayPublications) { this.displayPublications = displayPublications; } - + @Override protected void generateAvailableDataXml(final SciOrganization organization, final Element element, @@ -69,10 +75,14 @@ public class SciOrganizationWithPublicationsPanel extends SciOrganizationPanel { new SciOrganizationWithPublications( organization); + long start = System.currentTimeMillis(); if ((orga.hasPublications(config.getOrganizationPublicationsMerge())) - && displayPublications) { + && displayPublications) { element.newChildElement("publications"); } + System.out.printf( + "\n\nNeeded %d ms to determine if organization has publications\n\n", + System.currentTimeMillis() - start); } protected void mergePublications( @@ -109,6 +119,7 @@ public class SciOrganizationWithPublicationsPanel extends SciOrganizationPanel { if (SciOrganizationWithPublications.getConfig(). getOrganizationPublicationsMerge()) { + long start = System.currentTimeMillis(); List publications; publications = new LinkedList(); SciOrganizationPublicationCollection orgaPublications; @@ -143,15 +154,94 @@ public class SciOrganizationWithPublicationsPanel extends SciOrganizationPanel { List publicationsToShow = publicationWithoutDoubles. subList((int) begin, (int) end); - final Element publicationsElem = parent.newChildElement( - "publications"); - final ContentItemXMLRenderer renderer = - new ContentItemXMLRenderer( - publicationsElem); - renderer.setWrapAttributes(true); + System.out.printf( + "\n\nCreating list of publications to show in %d ms.\n\n", + System.currentTimeMillis() - start); + + start = System.currentTimeMillis(); + + //final Element publicationsElem = parent.newChildElement( + // "publications"); + for (Publication publication : publicationsToShow) { + //Element publicationElem = parent.newChildElement( + // "publications"); + /*ContentItemXMLRenderer renderer = + new ContentItemXMLRenderer(publicationElem); + renderer.setWrapAttributes(true); + long walkStart = System.currentTimeMillis(); renderer.walk(publication, SimpleXMLGenerator.class.getName()); + System.out.printf("\n\nRenderer walked %d ms\n\n", System.currentTimeMillis() - walkStart);*/ + + /*Element objectTypeElem = publicationElem.newChildElement("objectType"); + objectTypeElem.setText(publication.getObjectType().getQualifiedName()); + Element yearElem = publicationElem.newChildElement( + "yearOfPublication"); + yearElem.setText(publication.getYearOfPublication().toString()); + Element miscElem = publicationElem.newChildElement("misc"); + miscElem.setText(publication.getMisc()); + AuthorshipCollection authors = publication.getAuthors(); + while (authors.next()) { + Element authorsElem = publicationElem.newChildElement( + "authors"); + Element linkElem = authorsElem.newChildElement("link"); + Element editorElem = linkElem.newChildElement("editor"); + if (authors.isEditor()) { + editorElem.setText("true"); + } else { + editorElem.setText("false"); + } + Element authorOrderElem = linkElem.newChildElement( + "authorOrder"); + authorOrderElem.setText(authors.getAuthorshipOrder(). + toString()); + + GenericPerson author = authors.getAuthor(); + Element surnameElem = authorsElem.newChildElement("surname"); + surnameElem.setText(author.getSurname()); + Element givennameElem = authorsElem.newChildElement( + "givenname"); + givennameElem.setText(author.getGivenName()); + } + + Element abstractElem = publicationElem.newChildElement( + "abstract"); + abstractElem.setText(publication.getAbstract()); + + if (publication instanceof PublicationWithPublisher) { + PublicationWithPublisher pwp = + (PublicationWithPublisher) publication; + Publisher publisher = pwp.getPublisher(); + + Element publisherElem = publicationElem.newChildElement( + "publisher"); + Element publisherNameElem = publisherElem.newChildElement( + "publisherName"); + publisherNameElem.setText(publisher.getPublisherName()); + Element publisherPlaceElem = publisherElem.newChildElement( + "place"); + publisherPlaceElem.setText(publisher.getPlace()); + } + + Element titleElem = publicationElem.newChildElement("title"); + titleElem.setText(publication.getTitle()); + + if (publication instanceof ArticleInJournal) { + + } + + if (publication instanceof ArticleInCollectedVolume) { + + }*/ + + PublicationXmlHelper xmlHelper = + new PublicationXmlHelper(parent, + publication); + xmlHelper.generateXml(); } + + System.out.printf("\n\nGenerated publications XML in %d ms\n\n", + System.currentTimeMillis() - start); } else { SciOrganizationPublicationCollection orgaPublications; orgaPublications = orga.getPublications(); diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPanel.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPanel.java index edd712e51..3ef6c46bd 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPanel.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPanel.java @@ -21,7 +21,6 @@ package com.arsdigita.cms.contenttypes.ui; import com.arsdigita.bebop.PageState; import com.arsdigita.cms.ContentItem; -import com.arsdigita.cms.contentassets.RelatedLink; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitContactCollection; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitPersonCollection; import com.arsdigita.cms.contenttypes.GenericPerson; diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationPanel.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationPanel.java index 6cc04661f..0fb3a6c8c 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationPanel.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationPanel.java @@ -518,7 +518,7 @@ public class SciOrganizationPanel extends SciOrganizationBasePanel { Element content = generateBaseXML(item, element, state); SciOrganization orga = (SciOrganization) item; - Element availableData = element.newChildElement("availableData"); + Element availableData = content.newChildElement("availableData"); generateAvailableDataXml(orga, availableData, state);