1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/java/Postak/src/cz/frantovo/postak/HromadnaZprava.java Mon Sep 27 19:04:50 2010 +0200
1.3 @@ -0,0 +1,138 @@
1.4 +package cz.frantovo.postak;
1.5 +
1.6 +import java.util.ArrayList;
1.7 +import java.util.Collection;
1.8 +import java.util.logging.Level;
1.9 +import java.util.logging.Logger;
1.10 +import javax.mail.internet.InternetAddress;
1.11 +
1.12 +/**
1.13 + * Hromadná zpráva. Umí se rozdělit i na více dílčích zpráv,
1.14 + * které se vejdou do limitu příjemců SMTP serveru.
1.15 + * @author fiki
1.16 + */
1.17 +public class HromadnaZprava implements Cloneable {
1.18 +
1.19 + private static Logger log = Logger.getLogger(HromadnaZprava.class.getName());
1.20 + /** Předmět zprávy */
1.21 + private String predmet;
1.22 + /** Adresa a případně jméno odesílatele */
1.23 + private InternetAddress odesilatel;
1.24 + /** Zda má být zpráva odeslána jako HTML nebo prostý text */
1.25 + private boolean formatHTML = false;
1.26 + /** Tělo zprávy - prostý text */
1.27 + private String text;
1.28 + /** Všichni příjemci této zprávy */
1.29 + private ArrayList<InternetAddressKomu> prijemci = new ArrayList<InternetAddressKomu>();
1.30 + /** Hlavička Reply-to */
1.31 + private InternetAddress odpovedetKomu;
1.32 +
1.33 + public String getPredmet() {
1.34 + return predmet;
1.35 + }
1.36 +
1.37 + public void setPredmet(String predmet) {
1.38 + this.predmet = predmet;
1.39 + }
1.40 +
1.41 + public InternetAddress getOdesilatel() {
1.42 + return odesilatel;
1.43 + }
1.44 +
1.45 + public void setOdesilatel(InternetAddress odesilatel) {
1.46 + this.odesilatel = odesilatel;
1.47 + }
1.48 +
1.49 + public String getText() {
1.50 + return text;
1.51 + }
1.52 +
1.53 + public void setText(String text) {
1.54 + this.text = text;
1.55 + }
1.56 +
1.57 + public ArrayList<InternetAddressKomu> getPrijemci() {
1.58 + return prijemci;
1.59 + }
1.60 +
1.61 + /**
1.62 + * @param prijemci pokud je null, nastaví prázdná kolekce.
1.63 + */
1.64 + public void setPrijemci(ArrayList<InternetAddressKomu> prijemci) {
1.65 + this.prijemci = new ArrayList<InternetAddressKomu>();
1.66 + pridejPrijemce(prijemci);
1.67 + }
1.68 +
1.69 + public void pridejPrijemce(Collection<InternetAddressKomu> prijemci) {
1.70 + if (prijemci == null) {
1.71 + log.log(Level.FINER, "Prázdná množina příjemců - nic nepřidáme");
1.72 + } else {
1.73 + this.prijemci.addAll(prijemci);
1.74 + }
1.75 + }
1.76 +
1.77 + /**
1.78 + * Pokud má zpráva více přijemců, než je limit povolený SMTP serverem,
1.79 + * rozdělí se zpráva na více dílčích zpráv.
1.80 + * @param limit maximální počet příjemců jedné zprávy (omezení SMTP serveru)
1.81 + */
1.82 + public Collection<HromadnaZprava> getDilciZpravy(int limit) {
1.83 + Collection<HromadnaZprava> zpravy = new ArrayList<HromadnaZprava>();
1.84 +
1.85 + if (limit < getPrijemci().size()) {
1.86 + /** Zprávu je potřeba rozdělit */
1.87 + try {
1.88 + HromadnaZprava dilciZprava = (HromadnaZprava) clone();
1.89 + dilciZprava.setPrijemci(null);
1.90 +
1.91 + ArrayList<InternetAddressKomu> vsichniPrijemci = getPrijemci();
1.92 + for (InternetAddressKomu prijemce : vsichniPrijemci) {
1.93 + dilciZprava.getPrijemci().add(prijemce);
1.94 +
1.95 + if (dilciZprava.getPrijemci().size() == limit) {
1.96 + zpravy.add(dilciZprava);
1.97 + dilciZprava = (HromadnaZprava) clone();
1.98 + dilciZprava.setPrijemci(null);
1.99 + }
1.100 + }
1.101 +
1.102 + if (dilciZprava.getPrijemci().size() > 0) {
1.103 + /**
1.104 + * Počet příjemců není násobkem limitu,
1.105 + * takže nakonci ještě někteří zbyli.
1.106 + * Z nich budou příjemci pro poslední dílčí zprávu.
1.107 + */
1.108 + zpravy.add(dilciZprava);
1.109 + }
1.110 +
1.111 +
1.112 + } catch (CloneNotSupportedException ex) {
1.113 + /** Tohle by nikdy nemělo nastat */
1.114 + log.log(Level.SEVERE, "Hromandou zprávu se nepodařilo naklonovat - divné.", ex);
1.115 + zpravy.add(this);
1.116 + }
1.117 + } else {
1.118 + /** Zprávu má málo příjemců - můžeme ji odeslat najednou */
1.119 + zpravy.add(this);
1.120 + }
1.121 +
1.122 + return zpravy;
1.123 + }
1.124 +
1.125 + public boolean isFormatHTML() {
1.126 + return formatHTML;
1.127 + }
1.128 +
1.129 + public void setFormatHTML(boolean formatHTML) {
1.130 + this.formatHTML = formatHTML;
1.131 + }
1.132 +
1.133 + public InternetAddress getOdpovedetKomu() {
1.134 + return odpovedetKomu;
1.135 + }
1.136 +
1.137 + /** Pokud je null, hlavička Reply-to se v e-mailu vůbec nenastaví. */
1.138 + public void setOdpovedetKomu(InternetAddress odpovedetKomu) {
1.139 + this.odpovedetKomu = odpovedetKomu;
1.140 + }
1.141 +}