From 8efe522fe32ff4a0dffc8b1425d4f2d0129fa8d7 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sat, 3 Aug 2019 20:04:54 +0200 Subject: [PATCH] SciProjectManager for managing contacts and members of an SciProject --- .../sciproject/SciProjectMananger.java | 109 ++++++++++++++++-- 1 file changed, 98 insertions(+), 11 deletions(-) diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectMananger.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectMananger.java index 0cfbed7..e00f3ce 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectMananger.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectMananger.java @@ -10,6 +10,7 @@ import org.librecms.assets.Person; import java.io.Serializable; import java.util.Objects; +import java.util.Optional; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -28,33 +29,119 @@ public class SciProjectMananger implements Serializable { private SciProjectRepository sciProjectRepository; @Transactional(Transactional.TxType.REQUIRED) - public void addcontact(final ContactableEntity contactable, + public void addContact(final ContactableEntity contactable, final SciProject toProject, final String withType) { - - Objects.requireNonNull(contactable, - "Can't null as Contact to a SciProject."); - Objects.requireNonNull(toProject, + + Objects.requireNonNull(contactable, + "Can't add null as Contact to a SciProject."); + Objects.requireNonNull(toProject, "Can't add a Contact to a project null."); - + final Contact contact = new Contact(); contact.setContactable(contactable); contact.setProject(toProject); contact.setContactType(withType); contact.setOrder(toProject.getContacts().size()); - + toProject.addContact(contact); - + sciProjectRepository.save(toProject); } + @Transactional(Transactional.TxType.REQUIRED) + public void removeContact(final ContactableEntity contactable, + final SciProject fromProject) { + + Objects.requireNonNull( + contactable, + "Can't remove null as Contact from a SciProject." + ); + Objects.requireNonNull(fromProject, + "Can't remove a Contact from project null."); + + final Optional result = fromProject + .getContacts() + .stream() + .filter(contact -> filterContact(contact, contactable, fromProject)) + .findFirst(); + + if (result.isPresent()) { + final Contact remove = result.get(); + fromProject.removeContact(remove); + sciProjectRepository.save(fromProject); + } + } + @Transactional(Transactional.TxType.REQUIRED) public void addMember(final Person person, final SciProject toProject, final String withRole, final MembershipStatus withStatus) { - - throw new UnsupportedOperationException("ToDo"); + + Objects.requireNonNull( + person, + "Can't add null as a member null to a SciProject." + ); + Objects.requireNonNull( + toProject, + "Can't a member to a SciProject null." + ); + + final Membership membership = new Membership(); + membership.setProject(toProject); + membership.setMember(person); + membership.setRole(withRole); + membership.setStatus(withStatus); + + toProject.addMember(membership); + + sciProjectRepository.save(toProject); } - + + @Transactional(Transactional.TxType.REQUIRED) + public void removeMember(final Person person, + final SciProject fromProject) { + + Objects.requireNonNull( + person, + "Can't remove null as a member null from a SciProject." + ); + Objects.requireNonNull( + fromProject, + "Can't a member from a SciProject null." + ); + + final Optional result = fromProject + .getMembers() + .stream() + .filter(membership -> filterMembership(membership, + person, + fromProject)) + .findFirst(); + + if (result.isPresent()) { + final Membership remove = result.get(); + fromProject.removeMembership(remove); + sciProjectRepository.save(fromProject); + } + } + + private boolean filterContact(final Contact contact, + final ContactableEntity byContactable, + final SciProject byProject) { + + return contact.getContactable().equals(byContactable) + && contact.getProject().equals(byProject); + } + + private boolean filterMembership(final Membership membership, + final Person byPerson, + final SciProject byProject) { + + return membership.getMember().equals(byPerson) + && membership.getProject().equals(byProject); + + } + }