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