#
# $Id: contentdisposition.icn,v 1.2 2006-07-10 13:43:32 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 := mail::RFC822Parser()
      return p.parse_content_disposition(s, self) | error(p)
   end

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

   method to_rfc1521()
      return type || rfc1521_parameters()
   end

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