franta-hg@0: package cz.frantovo.postak; franta-hg@0: franta-hg@0: import java.util.ArrayList; franta-hg@0: import java.util.Collection; franta-hg@0: import java.util.logging.Level; franta-hg@0: import java.util.logging.Logger; franta-hg@0: import javax.mail.internet.InternetAddress; franta-hg@0: franta-hg@0: /** franta-hg@0: * Hromadná zpráva. Umí se rozdělit i na více dílčích zpráv, franta-hg@0: * které se vejdou do limitu příjemců SMTP serveru. franta-hg@17: * franta-hg@0: * @author fiki franta-hg@0: */ franta-hg@0: public class HromadnaZprava implements Cloneable { franta-hg@0: franta-hg@17: public enum FORMÁT { franta-hg@0: franta-hg@17: XHTML, franta-hg@17: PROSTÝ_TEXT, franta-hg@17: OBOJE franta-hg@17: } franta-hg@17: private static final Logger log = Logger.getLogger(HromadnaZprava.class.getName()); franta-hg@17: /** Předmět zprávy */ franta-hg@17: private String predmet; franta-hg@17: /** Adresa a případně jméno odesílatele */ franta-hg@17: private InternetAddress odesilatel; franta-hg@17: /** Zda má být zpráva odeslána jako HTML nebo prostý text */ franta-hg@17: private FORMÁT formát = FORMÁT.PROSTÝ_TEXT; franta-hg@17: /** Tělo zprávy - prostý text */ franta-hg@17: private String text; franta-hg@17: /** Všichni příjemci této zprávy */ franta-hg@17: private ArrayList prijemci = new ArrayList(); franta-hg@17: /** Hlavička Reply-to */ franta-hg@17: private InternetAddress odpovedetKomu; franta-hg@0: franta-hg@17: public String getPredmet() { franta-hg@17: return predmet; franta-hg@17: } franta-hg@0: franta-hg@17: public void setPredmet(String predmet) { franta-hg@17: this.predmet = predmet; franta-hg@17: } franta-hg@0: franta-hg@17: public InternetAddress getOdesilatel() { franta-hg@17: return odesilatel; franta-hg@17: } franta-hg@0: franta-hg@17: public void setOdesilatel(InternetAddress odesilatel) { franta-hg@17: this.odesilatel = odesilatel; franta-hg@17: } franta-hg@0: franta-hg@17: public String getText() { franta-hg@17: return text; franta-hg@17: } franta-hg@0: franta-hg@17: public void setText(String text) { franta-hg@17: this.text = text; franta-hg@17: } franta-hg@0: franta-hg@17: public ArrayList getPrijemci() { franta-hg@17: return prijemci; franta-hg@17: } franta-hg@0: franta-hg@17: /** franta-hg@17: * @param prijemci pokud je null, nastaví prázdná kolekce. franta-hg@17: */ franta-hg@17: public void setPrijemci(ArrayList prijemci) { franta-hg@17: this.prijemci = new ArrayList(); franta-hg@17: pridejPrijemce(prijemci); franta-hg@17: } franta-hg@0: franta-hg@17: public void pridejPrijemce(Collection prijemci) { franta-hg@17: if (prijemci == null) { franta-hg@17: log.log(Level.FINER, "Prázdná množina příjemců – nic nepřidáme"); franta-hg@17: } else { franta-hg@17: this.prijemci.addAll(prijemci); franta-hg@17: } franta-hg@17: } franta-hg@0: franta-hg@17: /** franta-hg@17: * Pokud má zpráva více přijemců, než je limit povolený SMTP serverem, franta-hg@17: * rozdělí se zpráva na více dílčích zpráv. franta-hg@17: * franta-hg@17: * @param limit maximální počet příjemců jedné zprávy (omezení SMTP serveru) franta-hg@17: */ franta-hg@17: public Collection getDilciZpravy(int limit) { franta-hg@17: Collection zpravy = new ArrayList(); franta-hg@0: franta-hg@17: if (limit < getPrijemci().size()) { franta-hg@17: /** Zprávu je potřeba rozdělit */ franta-hg@17: try { franta-hg@17: HromadnaZprava dilciZprava = (HromadnaZprava) clone(); franta-hg@17: dilciZprava.setPrijemci(null); franta-hg@0: franta-hg@17: ArrayList vsichniPrijemci = getPrijemci(); franta-hg@17: for (InternetAddressKomu prijemce : vsichniPrijemci) { franta-hg@17: dilciZprava.getPrijemci().add(prijemce); franta-hg@0: franta-hg@17: if (dilciZprava.getPrijemci().size() == limit) { franta-hg@17: zpravy.add(dilciZprava); franta-hg@17: dilciZprava = (HromadnaZprava) clone(); franta-hg@17: dilciZprava.setPrijemci(null); franta-hg@17: } franta-hg@17: } franta-hg@0: franta-hg@17: if (dilciZprava.getPrijemci().size() > 0) { franta-hg@17: /** franta-hg@17: * Počet příjemců není násobkem limitu, franta-hg@17: * takže nakonci ještě někteří zbyli. franta-hg@17: * Z nich budou příjemci pro poslední dílčí zprávu. franta-hg@17: */ franta-hg@17: zpravy.add(dilciZprava); franta-hg@17: } franta-hg@0: franta-hg@0: franta-hg@17: } catch (CloneNotSupportedException ex) { franta-hg@17: /** Tohle by nikdy nemělo nastat */ franta-hg@17: log.log(Level.SEVERE, "Hromandou zprávu se nepodařilo naklonovat - divné.", ex); franta-hg@17: zpravy.add(this); franta-hg@17: } franta-hg@17: } else { franta-hg@17: /** Zprávu má málo příjemců - můžeme ji odeslat najednou */ franta-hg@17: zpravy.add(this); franta-hg@17: } franta-hg@0: franta-hg@17: return zpravy; franta-hg@17: } franta-hg@0: franta-hg@17: public FORMÁT getFormát() { franta-hg@17: return formát; franta-hg@17: } franta-hg@0: franta-hg@17: public void setFormatHTML(FORMÁT formát) { franta-hg@17: this.formát = formát; franta-hg@17: } franta-hg@0: franta-hg@17: public InternetAddress getOdpovedetKomu() { franta-hg@17: return odpovedetKomu; franta-hg@17: } franta-hg@17: franta-hg@17: /** Pokud je null, hlavička Reply-to se v e-mailu vůbec nenastaví. */ franta-hg@17: public void setOdpovedetKomu(InternetAddress odpovedetKomu) { franta-hg@17: this.odpovedetKomu = odpovedetKomu; franta-hg@17: } franta-hg@0: }