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

package mail

import util

#
# This class represents a content type
#
class ContentDisposition:Error(type, parameters)
   #
   # Set type type
   #
   method set_type(t)
      self.type := t
   end

   #
   # Get the type
   #
   method get_type()
      return type
   end

   #
   # Get the parameter for the given key.  If the parameter is quoted, then
   # the quotes are removed.
   #
   # @param key the key
   method get_unquoted_parameter(key)
      local s
      parameters.member(key) | fail
      s := parameters.get(key)
      if any('\"', s) then
         return s[2:-1]
      else
         return s
   end
   
   #
   # Get the parameter for the given key.
   #
   # @param key the key
   method get_unqouted_parameter(key)
      if parameters.member(key) then
         return parameters.get(key)
   end

   #
   # Set the parameter to the given value
   # @param key the key
   # @param value the value
   method set_parameter(key, value)
      parameters.insert(key, value)
   end

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

   method to_rfc1521()
      s := type
      every e := !parameters.sort() do
         s ||:= " ; " || e[1] || "=" || e[2]
      return s
   end

   initially(a[])
      parameters := ClTable()
      if (*a = 1) & (::type(a[1]) == "string") then {
         parse(a[1]) | fail
      }
end