1 package cz.frantovo.postak;
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.logging.Level;
6 import java.util.logging.Logger;
7 import javax.mail.internet.InternetAddress;
10 * Hromadná zpráva. Umí se rozdělit i na více dílčích zpráv,
11 * které se vejdou do limitu příjemců SMTP serveru.
14 public class HromadnaZprava implements Cloneable {
16 private static Logger log = Logger.getLogger(HromadnaZprava.class.getName());
18 private String predmet;
19 /** Adresa a případně jméno odesílatele */
20 private InternetAddress odesilatel;
21 /** Zda má být zpráva odeslána jako HTML nebo prostý text */
22 private boolean formatHTML = false;
23 /** Tělo zprávy - prostý text */
25 /** Všichni příjemci této zprávy */
26 private ArrayList<InternetAddressKomu> prijemci = new ArrayList<InternetAddressKomu>();
27 /** Hlavička Reply-to */
28 private InternetAddress odpovedetKomu;
30 public String getPredmet() {
34 public void setPredmet(String predmet) {
35 this.predmet = predmet;
38 public InternetAddress getOdesilatel() {
42 public void setOdesilatel(InternetAddress odesilatel) {
43 this.odesilatel = odesilatel;
46 public String getText() {
50 public void setText(String text) {
54 public ArrayList<InternetAddressKomu> getPrijemci() {
59 * @param prijemci pokud je null, nastaví prázdná kolekce.
61 public void setPrijemci(ArrayList<InternetAddressKomu> prijemci) {
62 this.prijemci = new ArrayList<InternetAddressKomu>();
63 pridejPrijemce(prijemci);
66 public void pridejPrijemce(Collection<InternetAddressKomu> prijemci) {
67 if (prijemci == null) {
68 log.log(Level.FINER, "Prázdná množina příjemců - nic nepřidáme");
70 this.prijemci.addAll(prijemci);
75 * Pokud má zpráva více přijemců, než je limit povolený SMTP serverem,
76 * rozdělí se zpráva na více dílčích zpráv.
77 * @param limit maximální počet příjemců jedné zprávy (omezení SMTP serveru)
79 public Collection<HromadnaZprava> getDilciZpravy(int limit) {
80 Collection<HromadnaZprava> zpravy = new ArrayList<HromadnaZprava>();
82 if (limit < getPrijemci().size()) {
83 /** Zprávu je potřeba rozdělit */
85 HromadnaZprava dilciZprava = (HromadnaZprava) clone();
86 dilciZprava.setPrijemci(null);
88 ArrayList<InternetAddressKomu> vsichniPrijemci = getPrijemci();
89 for (InternetAddressKomu prijemce : vsichniPrijemci) {
90 dilciZprava.getPrijemci().add(prijemce);
92 if (dilciZprava.getPrijemci().size() == limit) {
93 zpravy.add(dilciZprava);
94 dilciZprava = (HromadnaZprava) clone();
95 dilciZprava.setPrijemci(null);
99 if (dilciZprava.getPrijemci().size() > 0) {
101 * Počet příjemců není násobkem limitu,
102 * takže nakonci ještě někteří zbyli.
103 * Z nich budou příjemci pro poslední dílčí zprávu.
105 zpravy.add(dilciZprava);
109 } catch (CloneNotSupportedException ex) {
110 /** Tohle by nikdy nemělo nastat */
111 log.log(Level.SEVERE, "Hromandou zprávu se nepodařilo naklonovat - divné.", ex);
115 /** Zprávu má málo příjemců - můžeme ji odeslat najednou */
122 public boolean isFormatHTML() {
126 public void setFormatHTML(boolean formatHTML) {
127 this.formatHTML = formatHTML;
130 public InternetAddress getOdpovedetKomu() {
131 return odpovedetKomu;
134 /** Pokud je null, hlavička Reply-to se v e-mailu vůbec nenastaví. */
135 public void setOdpovedetKomu(InternetAddress odpovedetKomu) {
136 this.odpovedetKomu = odpovedetKomu;