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
     1 package cz.frantovo.postak;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Collection;
     5 import java.util.logging.Level;
     6 import java.util.logging.Logger;
     7 import 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  */
    14 public 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 }