root/java/Postak/src/cz/frantovo/postak/HromadnaZprava.java @ 17:9cb46ca7e26c

Revision 17:9cb46ca7e26c, 3.8 KB (checked in by František Kučera <franta-hg@…>, 12 years ago)

#4 multipart/alternative zprávy: XHTML + prostý text (generuje se pomocí XSLT)

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