java/Postak/src/cz/frantovo/postak/HromadnaZprava.java
author František Kučera <franta-hg@frantovo.cz>
Sat, 28 Feb 2009 18:06:12 +0100
changeset 4 dfb345ef9452
parent 0 e76872ad5226
child 13 b15d81be8af3
permissions -rw-r--r--
Drobnosti a serializace
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@0
    16
    private static 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@0
    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
}