franta-hg@0
|
1 |
package cz.frantovo.postak;
|
franta-hg@0
|
2 |
|
franta-hg@0
|
3 |
import java.util.ArrayList;
|
franta-hg@0
|
4 |
import java.util.Collection;
|
franta-hg@0
|
5 |
import java.util.logging.Level;
|
franta-hg@0
|
6 |
import java.util.logging.Logger;
|
franta-hg@0
|
7 |
import javax.mail.internet.InternetAddress;
|
franta-hg@0
|
8 |
|
franta-hg@0
|
9 |
/**
|
franta-hg@0
|
10 |
* Hromadná zpráva. Umí se rozdělit i na více dílčích zpráv,
|
franta-hg@0
|
11 |
* které se vejdou do limitu příjemců SMTP serveru.
|
franta-hg@17
|
12 |
*
|
franta-hg@0
|
13 |
* @author fiki
|
franta-hg@0
|
14 |
*/
|
franta-hg@0
|
15 |
public class HromadnaZprava implements Cloneable {
|
franta-hg@0
|
16 |
|
franta-hg@17
|
17 |
public enum FORMÁT {
|
franta-hg@0
|
18 |
|
franta-hg@17
|
19 |
XHTML,
|
franta-hg@17
|
20 |
PROSTÝ_TEXT,
|
franta-hg@17
|
21 |
OBOJE
|
franta-hg@17
|
22 |
}
|
franta-hg@17
|
23 |
private static final Logger log = Logger.getLogger(HromadnaZprava.class.getName());
|
franta-hg@17
|
24 |
/** Předmět zprávy */
|
franta-hg@17
|
25 |
private String predmet;
|
franta-hg@17
|
26 |
/** Adresa a případně jméno odesílatele */
|
franta-hg@17
|
27 |
private InternetAddress odesilatel;
|
franta-hg@17
|
28 |
/** Zda má být zpráva odeslána jako HTML nebo prostý text */
|
franta-hg@17
|
29 |
private FORMÁT formát = FORMÁT.PROSTÝ_TEXT;
|
franta-hg@17
|
30 |
/** Tělo zprávy - prostý text */
|
franta-hg@17
|
31 |
private String text;
|
franta-hg@17
|
32 |
/** Všichni příjemci této zprávy */
|
franta-hg@17
|
33 |
private ArrayList<InternetAddressKomu> prijemci = new ArrayList<InternetAddressKomu>();
|
franta-hg@17
|
34 |
/** Hlavička Reply-to */
|
franta-hg@17
|
35 |
private InternetAddress odpovedetKomu;
|
franta-hg@0
|
36 |
|
franta-hg@17
|
37 |
public String getPredmet() {
|
franta-hg@17
|
38 |
return predmet;
|
franta-hg@17
|
39 |
}
|
franta-hg@0
|
40 |
|
franta-hg@17
|
41 |
public void setPredmet(String predmet) {
|
franta-hg@17
|
42 |
this.predmet = predmet;
|
franta-hg@17
|
43 |
}
|
franta-hg@0
|
44 |
|
franta-hg@17
|
45 |
public InternetAddress getOdesilatel() {
|
franta-hg@17
|
46 |
return odesilatel;
|
franta-hg@17
|
47 |
}
|
franta-hg@0
|
48 |
|
franta-hg@17
|
49 |
public void setOdesilatel(InternetAddress odesilatel) {
|
franta-hg@17
|
50 |
this.odesilatel = odesilatel;
|
franta-hg@17
|
51 |
}
|
franta-hg@0
|
52 |
|
franta-hg@17
|
53 |
public String getText() {
|
franta-hg@17
|
54 |
return text;
|
franta-hg@17
|
55 |
}
|
franta-hg@0
|
56 |
|
franta-hg@17
|
57 |
public void setText(String text) {
|
franta-hg@17
|
58 |
this.text = text;
|
franta-hg@17
|
59 |
}
|
franta-hg@0
|
60 |
|
franta-hg@17
|
61 |
public ArrayList<InternetAddressKomu> getPrijemci() {
|
franta-hg@17
|
62 |
return prijemci;
|
franta-hg@17
|
63 |
}
|
franta-hg@0
|
64 |
|
franta-hg@17
|
65 |
/**
|
franta-hg@17
|
66 |
* @param prijemci pokud je null, nastaví prázdná kolekce.
|
franta-hg@17
|
67 |
*/
|
franta-hg@17
|
68 |
public void setPrijemci(ArrayList<InternetAddressKomu> prijemci) {
|
franta-hg@17
|
69 |
this.prijemci = new ArrayList<InternetAddressKomu>();
|
franta-hg@17
|
70 |
pridejPrijemce(prijemci);
|
franta-hg@17
|
71 |
}
|
franta-hg@0
|
72 |
|
franta-hg@17
|
73 |
public void pridejPrijemce(Collection<InternetAddressKomu> prijemci) {
|
franta-hg@17
|
74 |
if (prijemci == null) {
|
franta-hg@17
|
75 |
log.log(Level.FINER, "Prázdná množina příjemců – nic nepřidáme");
|
franta-hg@17
|
76 |
} else {
|
franta-hg@17
|
77 |
this.prijemci.addAll(prijemci);
|
franta-hg@17
|
78 |
}
|
franta-hg@17
|
79 |
}
|
franta-hg@0
|
80 |
|
franta-hg@17
|
81 |
/**
|
franta-hg@17
|
82 |
* Pokud má zpráva více přijemců, než je limit povolený SMTP serverem,
|
franta-hg@17
|
83 |
* rozdělí se zpráva na více dílčích zpráv.
|
franta-hg@17
|
84 |
*
|
franta-hg@17
|
85 |
* @param limit maximální počet příjemců jedné zprávy (omezení SMTP serveru)
|
franta-hg@17
|
86 |
*/
|
franta-hg@17
|
87 |
public Collection<HromadnaZprava> getDilciZpravy(int limit) {
|
franta-hg@17
|
88 |
Collection<HromadnaZprava> zpravy = new ArrayList<HromadnaZprava>();
|
franta-hg@0
|
89 |
|
franta-hg@17
|
90 |
if (limit < getPrijemci().size()) {
|
franta-hg@17
|
91 |
/** Zprávu je potřeba rozdělit */
|
franta-hg@17
|
92 |
try {
|
franta-hg@17
|
93 |
HromadnaZprava dilciZprava = (HromadnaZprava) clone();
|
franta-hg@17
|
94 |
dilciZprava.setPrijemci(null);
|
franta-hg@0
|
95 |
|
franta-hg@17
|
96 |
ArrayList<InternetAddressKomu> vsichniPrijemci = getPrijemci();
|
franta-hg@17
|
97 |
for (InternetAddressKomu prijemce : vsichniPrijemci) {
|
franta-hg@17
|
98 |
dilciZprava.getPrijemci().add(prijemce);
|
franta-hg@0
|
99 |
|
franta-hg@17
|
100 |
if (dilciZprava.getPrijemci().size() == limit) {
|
franta-hg@17
|
101 |
zpravy.add(dilciZprava);
|
franta-hg@17
|
102 |
dilciZprava = (HromadnaZprava) clone();
|
franta-hg@17
|
103 |
dilciZprava.setPrijemci(null);
|
franta-hg@17
|
104 |
}
|
franta-hg@17
|
105 |
}
|
franta-hg@0
|
106 |
|
franta-hg@17
|
107 |
if (dilciZprava.getPrijemci().size() > 0) {
|
franta-hg@17
|
108 |
/**
|
franta-hg@17
|
109 |
* Počet příjemců není násobkem limitu,
|
franta-hg@17
|
110 |
* takže nakonci ještě někteří zbyli.
|
franta-hg@17
|
111 |
* Z nich budou příjemci pro poslední dílčí zprávu.
|
franta-hg@17
|
112 |
*/
|
franta-hg@17
|
113 |
zpravy.add(dilciZprava);
|
franta-hg@17
|
114 |
}
|
franta-hg@0
|
115 |
|
franta-hg@0
|
116 |
|
franta-hg@17
|
117 |
} catch (CloneNotSupportedException ex) {
|
franta-hg@17
|
118 |
/** Tohle by nikdy nemělo nastat */
|
franta-hg@17
|
119 |
log.log(Level.SEVERE, "Hromandou zprávu se nepodařilo naklonovat - divné.", ex);
|
franta-hg@17
|
120 |
zpravy.add(this);
|
franta-hg@17
|
121 |
}
|
franta-hg@17
|
122 |
} else {
|
franta-hg@17
|
123 |
/** Zprávu má málo příjemců - můžeme ji odeslat najednou */
|
franta-hg@17
|
124 |
zpravy.add(this);
|
franta-hg@17
|
125 |
}
|
franta-hg@0
|
126 |
|
franta-hg@17
|
127 |
return zpravy;
|
franta-hg@17
|
128 |
}
|
franta-hg@0
|
129 |
|
franta-hg@17
|
130 |
public FORMÁT getFormát() {
|
franta-hg@17
|
131 |
return formát;
|
franta-hg@17
|
132 |
}
|
franta-hg@0
|
133 |
|
franta-hg@17
|
134 |
public void setFormatHTML(FORMÁT formát) {
|
franta-hg@17
|
135 |
this.formát = formát;
|
franta-hg@17
|
136 |
}
|
franta-hg@0
|
137 |
|
franta-hg@17
|
138 |
public InternetAddress getOdpovedetKomu() {
|
franta-hg@17
|
139 |
return odpovedetKomu;
|
franta-hg@17
|
140 |
}
|
franta-hg@17
|
141 |
|
franta-hg@17
|
142 |
/** Pokud je null, hlavička Reply-to se v e-mailu vůbec nenastaví. */
|
franta-hg@17
|
143 |
public void setOdpovedetKomu(InternetAddress odpovedetKomu) {
|
franta-hg@17
|
144 |
this.odpovedetKomu = odpovedetKomu;
|
franta-hg@17
|
145 |
}
|
franta-hg@0
|
146 |
}
|