java/Postak/src/cz/frantovo/postak/HromadnaZprava.java
changeset 12 48782a50e094
child 13 b15d81be8af3
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/java/Postak/src/cz/frantovo/postak/HromadnaZprava.java	Tue Nov 29 17:16:11 2011 +0100
     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 +}