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.
15 public class HromadnaZprava implements Cloneable {
23 private static final Logger log = Logger.getLogger(HromadnaZprava.class.getName());
25 private String predmet;
26 /** Adresa a případně jméno odesílatele */
27 private InternetAddress odesilatel;
28 /** Zda má být zpráva odeslána jako HTML nebo prostý text */
29 private FORMÁT formát = FORMÁT.PROSTÝ_TEXT;
30 /** Tělo zprávy - prostý text */
32 /** Všichni příjemci této zprávy */
33 private ArrayList<InternetAddressKomu> prijemci = new ArrayList<InternetAddressKomu>();
34 /** Hlavička Reply-to */
35 private InternetAddress odpovedetKomu;
37 public String getPredmet() {
41 public void setPredmet(String predmet) {
42 this.predmet = predmet;
45 public InternetAddress getOdesilatel() {
49 public void setOdesilatel(InternetAddress odesilatel) {
50 this.odesilatel = odesilatel;
53 public String getText() {
57 public void setText(String text) {
61 public ArrayList<InternetAddressKomu> getPrijemci() {
66 * @param prijemci pokud je null, nastaví prázdná kolekce.
68 public void setPrijemci(ArrayList<InternetAddressKomu> prijemci) {
69 this.prijemci = new ArrayList<InternetAddressKomu>();
70 pridejPrijemce(prijemci);
73 public void pridejPrijemce(Collection<InternetAddressKomu> prijemci) {
74 if (prijemci == null) {
75 log.log(Level.FINER, "Prázdná množina příjemců – nic nepřidáme");
77 this.prijemci.addAll(prijemci);
82 * Pokud má zpráva více přijemců, než je limit povolený SMTP serverem,
83 * rozdělí se zpráva na více dílčích zpráv.
85 * @param limit maximální počet příjemců jedné zprávy (omezení SMTP serveru)
87 public Collection<HromadnaZprava> getDilciZpravy(int limit) {
88 Collection<HromadnaZprava> zpravy = new ArrayList<HromadnaZprava>();
90 if (limit < getPrijemci().size()) {
91 /** Zprávu je potřeba rozdělit */
93 HromadnaZprava dilciZprava = (HromadnaZprava) clone();
94 dilciZprava.setPrijemci(null);
96 ArrayList<InternetAddressKomu> vsichniPrijemci = getPrijemci();
97 for (InternetAddressKomu prijemce : vsichniPrijemci) {
98 dilciZprava.getPrijemci().add(prijemce);
100 if (dilciZprava.getPrijemci().size() == limit) {
101 zpravy.add(dilciZprava);
102 dilciZprava = (HromadnaZprava) clone();
103 dilciZprava.setPrijemci(null);
107 if (dilciZprava.getPrijemci().size() > 0) {
109 * Počet příjemců není násobkem limitu,
110 * takže nakonci ještě někteří zbyli.
111 * Z nich budou příjemci pro poslední dílčí zprávu.
113 zpravy.add(dilciZprava);
117 } catch (CloneNotSupportedException ex) {
118 /** Tohle by nikdy nemělo nastat */
119 log.log(Level.SEVERE, "Hromandou zprávu se nepodařilo naklonovat - divné.", ex);
123 /** Zprávu má málo příjemců - můžeme ji odeslat najednou */
130 public FORMÁT getFormát() {
134 public void setFormatHTML(FORMÁT formát) {
135 this.formát = formát;
138 public InternetAddress getOdpovedetKomu() {
139 return odpovedetKomu;
142 /** Pokud je null, hlavička Reply-to se v e-mailu vůbec nenastaví. */
143 public void setOdpovedetKomu(InternetAddress odpovedetKomu) {
144 this.odpovedetKomu = odpovedetKomu;