From e204933a6f49e5a6c07028a43b13e563b74ef9a2 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sun, 18 Aug 2019 12:53:54 +0200 Subject: [PATCH] ContentItmeRenderer for SciProject --- .../contenttypes/sciproject/SciProject.java | 6 +- .../contentitems/SciProjectRenderer.java | 141 ++++++++++++++++++ 2 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 sci-types-project/src/main/java/org/scientificcms/pagemodel/contentitems/SciProjectRenderer.java diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProject.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProject.java index 178f931..e872f74 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProject.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProject.java @@ -35,6 +35,7 @@ import javax.persistence.JoinTable; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; +import javax.persistence.OrderBy; import javax.persistence.Table; import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*; @@ -164,13 +165,16 @@ public class SciProject extends ContentItem implements Serializable { ) private LocalizedString fundingVolume; - @OneToMany(mappedBy = "project", cascade = CascadeType.ALL) + @OneToMany(cascade = CascadeType.ALL, mappedBy = "project") + @OrderBy("order ASC") private List contacts; @OneToMany(mappedBy = "project", cascade = CascadeType.ALL) + @OrderBy("member.personName ASC") private List members; @OneToMany(mappedBy = "project", cascade = CascadeType.ALL) + @OrderBy("order ASC") private List sponsoring; public SciProject() { diff --git a/sci-types-project/src/main/java/org/scientificcms/pagemodel/contentitems/SciProjectRenderer.java b/sci-types-project/src/main/java/org/scientificcms/pagemodel/contentitems/SciProjectRenderer.java new file mode 100644 index 0000000..7478dc4 --- /dev/null +++ b/sci-types-project/src/main/java/org/scientificcms/pagemodel/contentitems/SciProjectRenderer.java @@ -0,0 +1,141 @@ +/* + * 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 org.scientificcms.pagemodel.contentitems; + +import org.librecms.assets.ContactableEntity; +import org.librecms.assets.Organization; +import org.librecms.assets.Person; +import org.librecms.contentsection.ContentItem; +import org.librecms.pagemodel.assets.AbstractAssetRenderer; +import org.librecms.pagemodel.assets.AssetRenderers; +import org.librecms.pagemodel.contentitems.AbstractContentItemRenderer; +import org.librecms.pagemodel.contentitems.ContentItemRenderer; +import org.scientificcms.contenttypes.sciproject.Contact; +import org.scientificcms.contenttypes.sciproject.Membership; +import org.scientificcms.contenttypes.sciproject.SciProject; +import org.scientificcms.contenttypes.sciproject.Sponsoring; + +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +@ContentItemRenderer(renders = SciProject.class) +@RequestScoped +public class SciProjectRenderer extends AbstractContentItemRenderer { + + private static final long serialVersionUID = 1L; + + @Inject + private AssetRenderers assetRenderers; + + @Override + protected void renderItem(final ContentItem item, + final Locale language, + final Map result) { + + final SciProject project; + if (item instanceof SciProject) { + project = (SciProject) item; + } else { + return; + } + + result.put("begin", project.getBegin()); + result.put("end", project.getEnd()); + + result.put("shortDescription", + project.getShortDescription().getValue(language)); + result.put("projectDescription", + project.getProjectDescription().getValue(language)); + result.put("funding", + project.getFunding().getValue(language)); + result.put("fundingVolume", + project.getFundingVolume().getValue(language)); + + result.put("contacts", + project + .getContacts() + .stream() + .map(contact -> renderContact(contact, language)) + .collect(Collectors.toList()) + ); + result.put("members", + project + .getMembers() + .stream() + .map(member -> renderMember(member, language)) + .collect(Collectors.toList())); + result.put("sponsoring", + project + .getSponsoring() + .stream() + .map(sponsoring -> renderSponsoring(sponsoring, language)) + .collect(Collectors.toList())); + } + + @Override + protected AssetRenderers getAssetRenderers() { + return assetRenderers; + } + + private Map renderContact(final Contact contact, + final Locale language) { + + final Map result = new HashMap<>(); + result.put("contactId", contact.getContactId()); + result.put("contactType", contact.getContactType()); + result.put("order", contact.getOrder()); + + final ContactableEntity contactable = contact.getContactable(); + final AbstractAssetRenderer contactableRenderer = assetRenderers + .findRenderer(contactable.getClass()); + result.put("contactable", contactableRenderer.render(contactable, + language)); + + return result; + } + + private Map renderMember(final Membership membership, + final Locale language) { + + final Map result = new HashMap<>(); + result.put("membershipId", membership.getMembershipId()); + result.put("role", membership.getRole()); + result.put("status", membership.getStatus().toString()); + + final Person member = membership.getMember(); + final AbstractAssetRenderer memberRenderer = assetRenderers + .findRenderer(member.getClass()); + result.put("member", memberRenderer.render(member, language)); + + return result; + } + + private Map renderSponsoring(final Sponsoring sponsoring, + final Locale language) { + + final Map result = new HashMap<>(); + result.put("sponsoringId", sponsoring.getSponsoringId()); + result.put("fundingCode", sponsoring.getFundingCode()); + result.put("order", sponsoring.getOrder()); + + final Organization sponsor = sponsoring.getSponsor(); + final AbstractAssetRenderer sponsorRenderer = assetRenderers + .findRenderer(sponsor.getClass()); + result.put("sponsor", sponsorRenderer.render(sponsor, language)); + + return result; + } + +}