diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/JournalSearchWidget.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/JournalSearchWidget.java new file mode 100644 index 0000000..1e15514 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/JournalSearchWidget.java @@ -0,0 +1,82 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.form.Widget; +import com.arsdigita.bebop.parameters.LongParameter; +import com.arsdigita.cms.CMS; +import com.arsdigita.xml.Element; + +import org.libreccm.cdi.utils.CdiUtil; + +import java.util.Map; + +/** + * + * @author Jens Pelzetter + */ +public class JournalSearchWidget extends Widget { + + public JournalSearchWidget(final String name) { + super(new LongParameter(name)); + } + + @Override + public boolean isCompound() { + return true; + } + + @Override + protected String getType() { + return "journal-search-widget"; + } + + @Override + public String getElementTag() { + return "cms:journal-search-widget"; + } + + @Override + public void generateWidget( + final PageState state, final Element parent + ) { + final Element widget = parent.newChildElement(getElementTag(), + CMS.CMS_XML_NS); + + widget.addAttribute("name", getName()); + + final Long value = (Long) getValue(state); + if (value != null) { + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final JournalSearchWidgetController controller = cdiUtil + .findBean(JournalSearchWidgetController.class); + + final Map data = controller.getData(value); + + final Element selected = widget + .newChildElement("cms:selected-journal", CMS.CMS_XML_NS); + selected.addAttribute( + "journalId", + data.get(JournalSearchWidgetController.JOURNAL_ID) + ); + selected.addAttribute( + "title", + data.get(JournalSearchWidgetController.TITLE) + ); + selected.addAttribute( + "symbol", + data.get(JournalSearchWidgetController.SYMBOL) + ); + selected.addAttribute( + "issn", + data.get(JournalSearchWidgetController.ISSN)); + + exportAttributes(widget); + } + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/JournalSearchWidgetController.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/JournalSearchWidgetController.java new file mode 100644 index 0000000..3ea56be --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/JournalSearchWidgetController.java @@ -0,0 +1,58 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.arsdigita.cms.contenttypes.ui; + +import org.libreccm.l10n.GlobalizationHelper; +import org.scientificcms.publications.Journal; +import org.scientificcms.publications.JournalRepository; + +import java.util.HashMap; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +public class JournalSearchWidgetController { + + protected static final String JOURNAL_ID = "journalId"; + + protected static final String TITLE = "title"; + + protected static final String SYMBOL = "symbol"; + + protected static final String ISSN = "issn"; + + @Inject + private JournalRepository journalRepository; + + @Transactional(Transactional.TxType.REQUIRED) + public Map getData(final long journalId) { + + final Journal journal = journalRepository + .findById(journalId) + .orElseThrow( + () -> new IllegalArgumentException( + String.format("No Journal with ID %d found.", journalId) + ) + ); + + final Map data = new HashMap<>(); + + data.put(JOURNAL_ID, Long.toString(journal.getJournalId())); + data.put(TITLE, journal.getTitle()); + data.put(SYMBOL, journal.getSymbol()); + data.put(ISSN, journal.getIssn()); + + return data; + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationSearchWidget.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationSearchWidget.java new file mode 100644 index 0000000..8624f32 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationSearchWidget.java @@ -0,0 +1,109 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.form.Widget; +import com.arsdigita.bebop.parameters.LongParameter; +import com.arsdigita.cms.CMS; +import com.arsdigita.xml.Element; + +import org.libreccm.cdi.utils.CdiUtil; +import org.scientificcms.publications.Publication; +import org.scientificcms.publications.PublicationWithPublisher; + +import java.util.Map; + +/** + * + * @author Jens Pelzetter + */ +public class PublicationSearchWidget extends Widget { + + private Class type; + + public PublicationSearchWidget(final String name) { + super(new LongParameter(name)); + } + + public PublicationSearchWidget( + final String name, final Class type + ) { + this(name); + this.type = type; + } + + @Override + public boolean isCompound() { + return true; + } + + @Override + protected String getType() { + return "publication-search-widget"; + } + + @Override + protected String getElementTag() { + return "cms:publication-search-widget"; + } + + @Override + public void generateWidget(final PageState state, + final Element parent) { + final Element widget = parent.newChildElement( + getElementTag(), CMS.CMS_XML_NS + ); + + widget.addAttribute("name", getName()); + + if (type != null) { + widget.addAttribute("publication-type", type.getName()); + } + + final Long value = (Long) getValue(state); + if (value != null) { + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final PublicationSearchWidgetController controller = cdiUtil + .findBean(PublicationSearchWidgetController.class); + + final Map data = controller.getData(value); + + final Element selected = widget.newChildElement( + "cms:selected-publication", CMS.CMS_XML_NS + ); + selected.addAttribute( + "publicationId", + data.get(PublicationSearchWidgetController.PUBLICATION_ID) + ); + + selected.addAttribute( + "title", + data.get(PublicationSearchWidgetController.TITLE) + ); + + selected.addAttribute( + "year", + data.get(PublicationSearchWidgetController.YEAR) + ); + + if (type != null + && PublicationWithPublisher.class.isAssignableFrom(type)) { + selected.addAttribute( + "publisher", + data.get(PublicationSearchWidgetController.PUBLISHER) + ); + selected.addAttribute( + "place", + data.get(PublicationSearchWidgetController.PLACE) + ); + } + + exportAttributes(widget); + } + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationSearchWidgetController.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationSearchWidgetController.java new file mode 100644 index 0000000..5db10ac --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationSearchWidgetController.java @@ -0,0 +1,95 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.arsdigita.cms.contenttypes.ui; + +import org.libreccm.l10n.GlobalizationHelper; +import org.librecms.assets.Person; +import org.scientificcms.publications.Authorship; +import org.scientificcms.publications.Publication; +import org.scientificcms.publications.PublicationRepository; +import org.scientificcms.publications.PublicationWithPublisher; +import org.scientificcms.publications.Publisher; + +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +public class PublicationSearchWidgetController { + + protected static final String PUBLICATION_ID = "publicationId"; + + protected static final String TITLE = "title"; + + protected static final String YEAR = "year"; + + protected static final String AUTHORS = "authors"; + + protected static final String PUBLISHER = "publisher"; + + protected static final String PLACE = "place"; + + @Inject + private PublicationRepository publicationRepository; + + @Inject + private GlobalizationHelper globalizationHelper; + + @Transactional(Transactional.TxType.REQUIRED) + public Map getData(final long publicationId) { + + final Publication publication = publicationRepository + .findById(publicationId) + .orElseThrow( + () -> new IllegalArgumentException( + String.format("No Publication with ID %d found.", + publicationId) + ) + ); + + final Map data = new HashMap<>(); + + data.put(PUBLICATION_ID, Long.toString(publication.getPublicationId())); + data.put( + TITLE, + globalizationHelper.getValueFromLocalizedString( + publication.getTitle() + ) + ); + data.put(YEAR, Integer.toString(publication.getYearOfPublication())); + data.put( + AUTHORS, + publication + .getAuthorships() + .stream() + .sorted() + .map(Authorship::getAuthor) + .map(Person::getPersonName) + .map(name -> String.format("%s, %s", + name.getSurname(), + name.getGivenName())) + .collect(Collectors.joining("; ")) + ); + + if (publication instanceof PublicationWithPublisher) { + final Publisher publisher = ((PublicationWithPublisher) publication) + .getPublisher(); + data.put(PUBLISHER, publisher.getName()); + data.put(PLACE, publisher.getPlace()); + } + + return data; + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublisherSearchWidget.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublisherSearchWidget.java new file mode 100644 index 0000000..32a8bc1 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublisherSearchWidget.java @@ -0,0 +1,79 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.form.Widget; +import com.arsdigita.bebop.parameters.LongParameter; +import com.arsdigita.cms.CMS; +import com.arsdigita.xml.Element; + +import org.libreccm.cdi.utils.CdiUtil; + +import java.util.Map; + +/** + * + * @author Jens Pelzetter + */ +public class PublisherSearchWidget extends Widget { + + public PublisherSearchWidget(final String name) { + super(new LongParameter(name)); + } + + @Override + public boolean isCompound() { + return true; + } + + @Override + protected String getType() { + return "publisher-search-widget"; + } + + @Override + public String getElementTag() { + return "cms:publisher-search-widget"; + } + + @Override + public void generateWidget( + final PageState state, final Element parent + ) { + final Element widget = parent.newChildElement(getElementTag(), + CMS.CMS_XML_NS); + + widget.addAttribute("name", getName()); + + final Long value = (Long) getValue(state); + if (value != null) { + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final PublisherSearchWidgetController controller = cdiUtil + .findBean(PublisherSearchWidgetController.class); + + final Map data = controller.getData(value); + + final Element selected = widget + .newChildElement("cms:selected-publisher", CMS.CMS_XML_NS); + selected.addAttribute( + "publisherId", + data.get(PublisherSearchWidgetController.PUBLISHER_ID) + ); + selected.addAttribute( + "name", + data.get(PublisherSearchWidgetController.NAME) + ); + selected.addAttribute( + "place", + data.get(PublisherSearchWidgetController.PLACE) + ); + + exportAttributes(widget); + } + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublisherSearchWidgetController.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublisherSearchWidgetController.java new file mode 100644 index 0000000..b6ff605 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublisherSearchWidgetController.java @@ -0,0 +1,51 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.arsdigita.cms.contenttypes.ui; + +import org.scientificcms.publications.Publisher; +import org.scientificcms.publications.PublisherRepository; + +import java.util.HashMap; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +public class PublisherSearchWidgetController { + + protected static final String PUBLISHER_ID = "publisherId"; + protected static final String NAME = "name"; + protected static final String PLACE = "place"; + + @Inject + private PublisherRepository publisherRepository; + + @Transactional(Transactional.TxType.REQUIRED) + public Map getData(final long publisherId) { + + final Publisher publisher = publisherRepository + .findById(publisherId) + .orElseThrow( + () -> new IllegalArgumentException( + String.format("No Publisher with ID %d found.", publisherId) + ) + ); + + final Map data = new HashMap<>(); + + data.put(PUBLISHER_ID, Long.toString(publisher.getPublisherId())); + data.put(NAME, publisher.getName()); + data.put(PLACE, publisher.getPlace()); + + return data; + } +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/SeriesSearchWidget.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/SeriesSearchWidget.java new file mode 100644 index 0000000..5f5c40d --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/SeriesSearchWidget.java @@ -0,0 +1,75 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.form.Widget; +import com.arsdigita.bebop.parameters.LongParameter; +import com.arsdigita.cms.CMS; +import com.arsdigita.xml.Element; + +import org.libreccm.cdi.utils.CdiUtil; + +import java.util.Map; + +/** + * + * @author Jens Pelzetter + */ +public class SeriesSearchWidget extends Widget { + + public SeriesSearchWidget(final String name) { + super(new LongParameter(name)); + } + + @Override + public boolean isCompound() { + return true; + } + + @Override + protected String getType() { + return "series-search-widget"; + } + + @Override + public String getElementTag() { + return "cms:series-search-widget"; + } + + @Override + public void generateWidget( + final PageState state, final Element parent + ) { + final Element widget = parent.newChildElement(getElementTag(), + CMS.CMS_XML_NS); + + widget.addAttribute("name", getName()); + + final Long value = (Long) getValue(state); + if (value != null) { + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final SeriesSearchWidgetController controller = cdiUtil + .findBean(SeriesSearchWidgetController.class); + + final Map data = controller.getData(value); + + final Element selected = widget + .newChildElement("cms:selected-series", CMS.CMS_XML_NS); + selected.addAttribute( + "series", + data.get(SeriesSearchWidgetController.SERIES_ID) + ); + selected.addAttribute( + "title", + data.get(SeriesSearchWidgetController.TITLE) + ); + + exportAttributes(widget); + } + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/SeriesSearchWidgetController.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/SeriesSearchWidgetController.java new file mode 100644 index 0000000..46de996 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/SeriesSearchWidgetController.java @@ -0,0 +1,58 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.arsdigita.cms.contenttypes.ui; + +import org.libreccm.l10n.GlobalizationHelper; +import org.scientificcms.publications.Series; +import org.scientificcms.publications.SeriesRepository; + +import java.util.HashMap; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +public class SeriesSearchWidgetController { + + protected static final String SERIES_ID = "seriesId"; + + protected static final String TITLE = "title"; + + @Inject + private SeriesRepository seriesRepository; + + @Inject + private GlobalizationHelper globalizationHelper; + + @Transactional(Transactional.TxType.REQUIRED) + public Map getData(final long seriesId) { + + final Series series = seriesRepository + .findById(seriesId) + .orElseThrow( + () -> new IllegalArgumentException( + String.format("No Series with ID %d found.", seriesId) + ) + ); + + final Map data = new HashMap<>(); + + data.put(SERIES_ID, Long.toString(series.getSeriesId())); + data.put( + TITLE, + globalizationHelper.getValueFromLocalizedString(series.getTitle()) + ); + + return data; + } + +}