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)

RevLine 
[0]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.
[17]12 *
[0]13 * @author fiki
14 */
15public class HromadnaZprava implements Cloneable {
16
[17]17        public enum FORMÁT {
[0]18
[17]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;
[0]36
[17]37        public String getPredmet() {
38                return predmet;
39        }
[0]40
[17]41        public void setPredmet(String predmet) {
42                this.predmet = predmet;
43        }
[0]44
[17]45        public InternetAddress getOdesilatel() {
46                return odesilatel;
47        }
[0]48
[17]49        public void setOdesilatel(InternetAddress odesilatel) {
50                this.odesilatel = odesilatel;
51        }
[0]52
[17]53        public String getText() {
54                return text;
55        }
[0]56
[17]57        public void setText(String text) {
58                this.text = text;
59        }
[0]60
[17]61        public ArrayList<InternetAddressKomu> getPrijemci() {
62                return prijemci;
63        }
[0]64
[17]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        }
[0]72
[17]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        }
[0]80
[17]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>();
[0]89
[17]90                if (limit < getPrijemci().size()) {
91                        /** Zprávu je potřeba rozdělit */
92                        try {
93                                HromadnaZprava dilciZprava = (HromadnaZprava) clone();
94                                dilciZprava.setPrijemci(null);
[0]95
[17]96                                ArrayList<InternetAddressKomu> vsichniPrijemci = getPrijemci();
97                                for (InternetAddressKomu prijemce : vsichniPrijemci) {
98                                        dilciZprava.getPrijemci().add(prijemce);
[0]99
[17]100                                        if (dilciZprava.getPrijemci().size() == limit) {
101                                                zpravy.add(dilciZprava);
102                                                dilciZprava = (HromadnaZprava) clone();
103                                                dilciZprava.setPrijemci(null);
104                                        }
105                                }
[0]106
[17]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                                }
[0]115
116
[17]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                }
[0]126
[17]127                return zpravy;
128        }
[0]129
[17]130        public FORMÁT getFormát() {
131                return formát;
132        }
[0]133
[17]134        public void setFormatHTML(FORMÁT formát) {
135                this.formát = formát;
136        }
[0]137
[17]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        }
[0]146}
Note: See TracBrowser for help on using the browser.