root/java/Postak/src/cz/frantovo/postak/HromadnaZprava.java @ 3:03d27d3b3f7b

Revision 0:e76872ad5226, 4.4 KB (checked in by František Kučera <franta-hg@…>, 16 years ago)

Přidání SuperPošťáka? do Mercurialu (původně byl v Subversionu)
Postak – základ, knihovna
SuperPostak? – GUI nadstavba
SuperPostak?2 – pokus o implementaci aplikace jako modulu pro Netbeans, POZOR: není přidán do Mercurialu, možná později (pravděpodobně se ale nebude používat)

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