/** * Copyright © 2002 Instituto Superior Técnico * * This file is part of FenixEdu Academic. * * FenixEdu Academic is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * FenixEdu Academic is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with FenixEdu Academic. If not, see <http://www.gnu.org/licenses/>. */ package org.fenixedu.academic.domain.phd.alert; import java.text.MessageFormat; import java.util.Locale; import java.util.Set; import java.util.stream.Collectors; import org.fenixedu.academic.domain.Person; import org.fenixedu.academic.domain.exceptions.DomainException; import org.fenixedu.academic.domain.phd.PhdIndividualProgramProcess; import org.fenixedu.academic.domain.util.email.Message; import org.fenixedu.academic.domain.util.email.Recipient; import org.fenixedu.academic.util.Bundle; import org.fenixedu.academic.util.MultiLanguageString; import org.fenixedu.bennu.core.domain.User; import org.fenixedu.bennu.core.groups.Group; import org.fenixedu.bennu.core.i18n.BundleUtil; import org.joda.time.LocalDate; public class PhdCustomAlert extends PhdCustomAlert_Base { protected PhdCustomAlert() { super(); } public PhdCustomAlert(PhdIndividualProgramProcess process, Group targetGroup, MultiLanguageString subject, MultiLanguageString body, Boolean sendMail, LocalDate fireDate, Boolean userDefined, Boolean shared) { this(); init(process, targetGroup, subject, body, sendMail, fireDate, userDefined, shared); } public PhdCustomAlert(PhdCustomAlertBean bean) { this(bean.getProcess(), bean.calculateTargetGroup(), new MultiLanguageString(Locale.getDefault(), bean.getSubject()), new MultiLanguageString(Locale.getDefault(), bean.getBody()), bean.isToSendEmail(), bean.getFireDate(), bean .getUserDefined(), bean.getShared()); } protected void init(PhdIndividualProgramProcess process, Group targetGroup, MultiLanguageString subject, MultiLanguageString body, Boolean sendEmail, LocalDate whenToFire, Boolean userDefined, Boolean shared) { super.init(process, subject, body); String[] args = {}; if (whenToFire == null) { throw new DomainException("error.org.fenixedu.academic.domain.phd.alert.PhdCustomAlert.whenToFire.cannot.be.null", args); } String[] args1 = {}; if (targetGroup == null) { throw new DomainException("error.phd.alert.PhdAlert.targetGroup.cannot.be.null", args1); } String[] args2 = {}; if (sendEmail == null) { throw new DomainException("error.phd.alert.PhdAlert.sendEmail.cannot.be.null", args2); } String[] args3 = {}; if (userDefined == null) { throw new DomainException("error.org.fenixedu.academic.domain.phd.alert.PhdCustomAlert.userDefined.cannot.be.null", args3); } String[] args4 = {}; if (shared == null) { throw new DomainException("error.org.fenixedu.academic.domain.phd.alert.PhdCustomAlert.shared.cannot.be.null", args4); } super.setWhenToFire(whenToFire); super.setSendEmail(sendEmail); super.setTargetGroup(targetGroup.toPersistentGroup()); super.setUserDefined(userDefined); super.setShared(shared); } protected Group getTargetAccessGroup() { return getTargetGroup().toGroup(); } protected Set<Person> getTargetPeople() { return getTargetAccessGroup().getMembers().map(User::getPerson).collect(Collectors.toSet()); } @Override public boolean isToFire() { return !new LocalDate().isBefore(getWhenToFire()); } @Override protected boolean isToDiscard() { return getFireDate() != null; } @Override public boolean isCustomAlert() { return true; } @Override public String getDescription() { return MessageFormat.format(BundleUtil.getString(Bundle.PHD, "message.phd.alert.custom.description"), getTargetAccessGroup().getPresentationName(), getWhenToFire().toString("dd/MM/yyyy"), getFormattedSubject(), getFormattedBody()); } @Override protected void generateMessage() { if (getShared().booleanValue()) { new PhdAlertMessage(getProcess(), getTargetPeople(), getFormattedSubject(), getFormattedBody()); } else { for (final Person person : getTargetPeople()) { new PhdAlertMessage(getProcess(), person, getFormattedSubject(), getFormattedBody()); } } if (isToSendMail()) { final Recipient recipient = new Recipient(getTargetAccessGroup()); new Message(getSender(), recipient, buildMailSubject(), buildMailBody()); } } public String getTargetGroupInText() { Group targetGroup = getTargetAccessGroup(); StringBuilder builder = new StringBuilder(); targetGroup.getMembers().forEach( user -> builder.append(user.getPerson().getName()).append(" (") .append(user.getPerson().getEmailForSendingEmails()).append(")\n")); return builder.toString(); } @Override public void setSendEmail(Boolean sendEmail) { throw new DomainException("error.phd.alert.PhdAlert.cannot.modify.sendEmail"); } @Override public void setUserDefined(Boolean userDefined) { throw new DomainException("error.phd.alert.PhdCustomAlert.cannot.modify.userDefined"); } @Override public void setShared(Boolean shared) { throw new DomainException("error.phd.alert.PhdCustomAlert.cannot.modify.shared"); } @Override public boolean isToSendMail() { return getSendEmail().booleanValue(); } @Override public boolean isSystemAlert() { return !getUserDefined().booleanValue(); } @Override public void delete() { this.setTargetGroup(null); super.delete(); } }