Show
Ignore:
Timestamp:
04/23/12 00:24:31 (12 years ago)
Author:
František Kučera <franta-hg@…>
Branch:
default
Tags:
v1.1
Message:

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

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • java/Postak/src/cz/frantovo/postak/HromadnaZprava.java

    r13 r17  
    1010 * Hromadná zpráva. Umí se rozdělit i na více dílčích zpráv, 
    1111 * které se vejdou do limitu příjemců SMTP serveru. 
     12 * 
    1213 * @author fiki 
    1314 */ 
    1415public class HromadnaZprava implements Cloneable { 
    1516 
    16     private static final 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; 
     17        public enum FORMÁT { 
    2918 
    30     public String getPredmet() { 
    31         return predmet; 
    32     } 
     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; 
    3336 
    34     public void setPredmet(String predmet) { 
    35         this.predmet = predmet; 
    36     } 
     37        public String getPredmet() { 
     38                return predmet; 
     39        } 
    3740 
    38     public InternetAddress getOdesilatel() { 
    39         return odesilatel; 
    40     } 
     41        public void setPredmet(String predmet) { 
     42                this.predmet = predmet; 
     43        } 
    4144 
    42     public void setOdesilatel(InternetAddress odesilatel) { 
    43         this.odesilatel = odesilatel; 
    44     } 
     45        public InternetAddress getOdesilatel() { 
     46                return odesilatel; 
     47        } 
    4548 
    46     public String getText() { 
    47         return text; 
    48     } 
     49        public void setOdesilatel(InternetAddress odesilatel) { 
     50                this.odesilatel = odesilatel; 
     51        } 
    4952 
    50     public void setText(String text) { 
    51         this.text = text; 
    52     } 
     53        public String getText() { 
     54                return text; 
     55        } 
    5356 
    54     public ArrayList<InternetAddressKomu> getPrijemci() { 
    55         return prijemci; 
    56     } 
     57        public void setText(String text) { 
     58                this.text = text; 
     59        } 
    5760 
    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     } 
     61        public ArrayList<InternetAddressKomu> getPrijemci() { 
     62                return prijemci; 
     63        } 
    6564 
    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     } 
     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        } 
    7372 
    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>(); 
     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        } 
    8180 
    82         if (limit < getPrijemci().size()) { 
    83             /** Zprávu je potřeba rozdělit */ 
    84             try { 
    85                 HromadnaZprava dilciZprava = (HromadnaZprava) clone(); 
    86                 dilciZprava.setPrijemci(null); 
     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>(); 
    8789 
    88                 ArrayList<InternetAddressKomu> vsichniPrijemci = getPrijemci(); 
    89                 for (InternetAddressKomu prijemce : vsichniPrijemci) { 
    90                     dilciZprava.getPrijemci().add(prijemce); 
     90                if (limit < getPrijemci().size()) { 
     91                        /** Zprávu je potřeba rozdělit */ 
     92                        try { 
     93                                HromadnaZprava dilciZprava = (HromadnaZprava) clone(); 
     94                                dilciZprava.setPrijemci(null); 
    9195 
    92                     if (dilciZprava.getPrijemci().size() == limit) { 
    93                         zpravy.add(dilciZprava); 
    94                         dilciZprava = (HromadnaZprava) clone(); 
    95                         dilciZprava.setPrijemci(null); 
    96                     } 
    97                 } 
     96                                ArrayList<InternetAddressKomu> vsichniPrijemci = getPrijemci(); 
     97                                for (InternetAddressKomu prijemce : vsichniPrijemci) { 
     98                                        dilciZprava.getPrijemci().add(prijemce); 
    9899 
    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                 } 
     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                                } 
    107115 
    108116 
    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         } 
     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                } 
    118126 
    119         return zpravy; 
    120     } 
     127                return zpravy; 
     128        } 
    121129 
    122     public boolean isFormatHTML() { 
    123         return formatHTML; 
    124     } 
     130        public FORMÁT getFormát() { 
     131                return formát; 
     132        } 
    125133 
    126     public void setFormatHTML(boolean formatHTML) { 
    127         this.formatHTML = formatHTML; 
    128     } 
     134        public void setFormatHTML(FORMÁT formát) { 
     135                this.formát = formát; 
     136        } 
    129137 
    130     public InternetAddress getOdpovedetKomu() { 
    131         return odpovedetKomu; 
    132     } 
     138        public InternetAddress getOdpovedetKomu() { 
     139                return odpovedetKomu; 
     140        } 
    133141 
    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     } 
     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        } 
    138146}