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