#
# $Id: group.icn,v 1.2 2004/02/12 17:07:55 rparlett Exp $
#

package mail

import util

#
# This class represents a group, which is a phrase, plus
# zero or more mailboxes.
#
class Group : Address : Error(mailboxes, phrase)
   method get_phrase() 
      return phrase
   end

   method set_phrase(x)
      phrase := x
   end

   method get_mailboxes() 
      return mailboxes
   end

   method set_mailboxes(x)
      mailboxes := x
   end

   method add_mailbox(x)
      put(mailboxes, x)
   end

   method to_rfc822()
      local tmp

      tmp := ""
      every tmp ||:= (!mailboxes).to_rfc822() || ", "
      tmp[-2:0] := ""

      if *phrase > 0 then
         return phrase || ": " || tmp || " ;"
      else
         return ": " || tmp || " ;"
   end

   method parse(s)
      local p
      p := mail::RFC822Parser()
      return p.parse_group(s, self) | error(p)
   end   

   method generate_mailboxes()
      suspend !mailboxes
   end

   initially(a[])
      if (*a = 1) & (type(a[1]) == "string") then
         parse(a[1]) | fail
      else {
         mailboxes := a[1] | []
         phrase := a[2] | ""
      }
end