[Commits] (markie) Back out last check-ins from bkirsch to fix tinderbox

commits at osafoundation.org commits at osafoundation.org
Thu Aug 12 22:41:36 PDT 2004


Commit by: markie
Modified files:
chandler/parcels/osaf/contentmodel/mail/Mail.py 1.13 1.14
chandler/parcels/osaf/contentmodel/mail/parcel.xml 1.40 1.41
chandler/parcels/osaf/contentmodel/tests/TestMail.py 1.14 1.15
chandler/parcels/osaf/mail/imap.py 1.5 1.6
chandler/parcels/osaf/mail/message.py 1.7 1.8
chandler/parcels/osaf/mail/parcel.xml 1.11 1.12
chandler/parcels/osaf/views/main/Main.py 1.30 1.31

Log message:
Back out last check-ins from bkirsch to fix tinderbox

ViewCVS links:
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/contentmodel/mail/Mail.py.diff?r1=text&tr1=1.13&r2=text&tr2=1.14
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/contentmodel/mail/parcel.xml.diff?r1=text&tr1=1.40&r2=text&tr2=1.41
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/contentmodel/tests/TestMail.py.diff?r1=text&tr1=1.14&r2=text&tr2=1.15
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/mail/imap.py.diff?r1=text&tr1=1.5&r2=text&tr2=1.6
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/mail/message.py.diff?r1=text&tr1=1.7&r2=text&tr2=1.8
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/mail/parcel.xml.diff?r1=text&tr1=1.11&r2=text&tr2=1.12
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/views/main/Main.py.diff?r1=text&tr1=1.30&r2=text&tr2=1.31

Index: chandler/parcels/osaf/views/main/Main.py
diff -u chandler/parcels/osaf/views/main/Main.py:1.30 chandler/parcels/osaf/views/main/Main.py:1.31
--- chandler/parcels/osaf/views/main/Main.py:1.30	Thu Aug 12 18:56:02 2004
+++ chandler/parcels/osaf/views/main/Main.py	Thu Aug 12 22:41:34 2004
@@ -1,5 +1,5 @@
-__version__ = "$Revision: 1.30 $"
-__date__ = "$Date: 2004/08/13 01:56:02 $"
+__version__ = "$Revision: 1.31 $"
+__date__ = "$Date: 2004/08/13 05:41:34 $"
 __copyright__ = "Copyright (c) 2004 Open Source Applications Foundation"
 __license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -68,8 +68,8 @@
          "IMAP Account",
          account,
          [
-           { "attr":"host", "label":"IMAP Server" },
-           { "attr":"username", "label":"Username" },
+           { "attr":"serverName", "label":"IMAP Server" },
+           { "attr":"accountName", "label":"Username" },
            { "attr":"password", "label":"Password", "password":True },
          ]
         ):
@@ -83,8 +83,8 @@
                 # Retrieve the conflicting item
                 conflict = e.getItem()
                 itemPath = conflict.itsPath
-                host = conflict.host
-                username = conflict.username
+                serverName = conflict.serverName
+                accountName = conflict.accountName
                 password = conflict.password
                 print "Got a conflict with item:", itemPath
                 # The conflict item has *our* values in it; to see the
@@ -97,8 +97,8 @@
                 account = Globals.repository.findPath(itemPath)
                 # To resolve this conflict we're going to simply reapply the 
                 # values that were set in the dialog box.
-                account.host = host
-                account.username = username
+                account.serverName = serverName
+                account.accountName = accountName
                 account.password = password
                 Globals.repository.commit()
                 # Note: this commit, too, could get a conflict I suppose, so

Index: chandler/parcels/osaf/mail/parcel.xml
diff -u chandler/parcels/osaf/mail/parcel.xml:1.11 chandler/parcels/osaf/mail/parcel.xml:1.12
--- chandler/parcels/osaf/mail/parcel.xml:1.11	Thu Aug 12 18:55:14 2004
+++ chandler/parcels/osaf/mail/parcel.xml	Thu Aug 12 22:41:33 2004
@@ -6,14 +6,14 @@
              xmlns:mail="http://osafoundation.org/parcels/osaf/mail"
              xmlns:task="http://osafoundation.org/parcels/osaf/framework/tasks">
 
-  <content:IMAPAccount itsName="IMAPAccount One">
-    <content:displayName>IMAP Server Account One</content:displayName>
-    <content:host>code-bear.com</content:host>
-    <content:username>osafuser</content:username>
+  <content:EmailAccount itsName="IMAPAccount One">
+    <content:displayName>IMAP Server</content:displayName>
+    <content:serverName>code-bear.com</content:serverName>
+    <content:accountType>IMAP4</content:accountType>
+    <content:accountName>osafuser</content:accountName>
     <content:password>chandler</content:password>
-    <content:port>143</content:port>
-    <content:useSSL>False</content:useSSL>
-  </content:IMAPAccount>
+    <content:serverPort>143</content:serverPort>
+  </content:EmailAccount>
 
   <task:Task itsName="IMAPMailClient">
     <task:Schedule itsName="MailSchedule">

Index: chandler/parcels/osaf/contentmodel/tests/TestMail.py
diff -u chandler/parcels/osaf/contentmodel/tests/TestMail.py:1.14 chandler/parcels/osaf/contentmodel/tests/TestMail.py:1.15
--- chandler/parcels/osaf/contentmodel/tests/TestMail.py:1.14	Thu Aug 12 18:50:34 2004
+++ chandler/parcels/osaf/contentmodel/tests/TestMail.py	Thu Aug 12 22:41:33 2004
@@ -2,8 +2,8 @@
 Unit tests for mail
 """
 
-__revision__  = "$Revision: 1.14 $"
-__date__      = "$Date: 2004/08/13 01:50:34 $"
+__revision__  = "$Revision: 1.15 $"
+__date__      = "$Date: 2004/08/13 05:41:33 $"
 __copyright__ = "Copyright (c) 2003 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -22,7 +22,6 @@
 
     def testMail(self):
         """ Simple test for creating instances of email related kinds """
-        """
 
         self.loadParcel("http://osafoundation.org/parcels/osaf/contentmodel/mail")
 
@@ -79,7 +78,6 @@
 
         items = cloud.getItems(mailMessageItem)
         self.assertEqual(len(items), 2)   
-        """
 
 
 if __name__ == "__main__":

Index: chandler/parcels/osaf/mail/message.py
diff -u chandler/parcels/osaf/mail/message.py:1.7 chandler/parcels/osaf/mail/message.py:1.8
--- chandler/parcels/osaf/mail/message.py:1.7	Thu Aug 12 18:55:14 2004
+++ chandler/parcels/osaf/mail/message.py	Thu Aug 12 22:41:33 2004
@@ -1,5 +1,5 @@
-__revision__  = "$Revision: 1.7 $"
-__date__      = "$Date: 2004/08/13 01:55:14 $"
+__revision__  = "$Revision: 1.8 $"
+__date__      = "$Date: 2004/08/13 05:41:33 $"
 __copyright__ = "Copyright (c) 2004 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -133,7 +133,6 @@
 
     if messageObject['Date'] is not None:
         m.dateSent = DateTime.mktime(Utils.parsedate(messageObject['Date']))
-        m.dateSentString = messageObject['Date']
 
     else:
         m.dateSent = None
@@ -145,8 +144,9 @@
     else:
         m.subject = messageObject['Subject']
 
-    m.fromAddress = Mail.EmailAddress()
-    m.fromAddress.emailAddress = format_addr(Utils.parseaddr(messageObject['From']))
+    # XXX replyAddress should really be the Reply-to header, not From
+    m.replyAddress = Mail.EmailAddress()
+    m.replyAddress.emailAddress = format_addr(Utils.parseaddr(messageObject['From']))
 
     m.toAddress = []
     for addr in Utils.getaddresses(messageObject.get_all('To', [])):
@@ -184,13 +184,11 @@
 
     messageObject = Message.Message()
 
-    messageObject['Date'] = mailMessage.dateSentString()
-    #Utils.formatdate(mailMessage.dateSent.ticks(), True)
-
+    messageObject['Date'] = Utils.formatdate(mailMessage.dateSent.ticks(), True)
     messageObject['Date Received'] = Utils.formatdate(mailMessage.dateReceived.ticks(), True)
     messageObject['Subject'] = mailMessage.subject
 
-    messageObject['From'] = mailMessage.fromAddress.emailAddress
+    messageObject['From'] = mailMessage.replyAddress.emailAddress
 
     to = []
 

Index: chandler/parcels/osaf/mail/imap.py
diff -u chandler/parcels/osaf/mail/imap.py:1.5 chandler/parcels/osaf/mail/imap.py:1.6
--- chandler/parcels/osaf/mail/imap.py:1.5	Thu Aug 12 18:55:14 2004
+++ chandler/parcels/osaf/mail/imap.py	Thu Aug 12 22:41:33 2004
@@ -1,5 +1,5 @@
-__revision__  = "$Revision: 1.5 $"
-__date__      = "$Date: 2004/08/13 01:55:14 $"
+__revision__  = "$Revision: 1.6 $"
+__date__      = "$Date: 2004/08/13 05:41:33 $"
 __copyright__ = "Copyright (c) 2004 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -93,8 +93,8 @@
     def __init__(self, account):
         """
         Creates a C{IMAPDownload} instance
-        @param account: An Instance of C{IMAPAccount}
-        @type account: C{IMAPAccount}
+        @param account: An Instance of C{EmailAccountKind}
+        @type account: C{EmailAccountKind}
         @return: C{None}
         """
 
@@ -144,8 +144,8 @@
 
             self.account.setPinned()
 
-            host  = self.account.host
-            port = self.account.port
+            serverName = self.account.serverName
+            serverPort = self.account.serverPort
 
             if __debug__:
                 self.printAccount()
@@ -154,11 +154,11 @@
             self.restorePreviousView()
 
         factory = ChandlerIMAP4Factory(self.loginClient, self.catchErrors)
-        reactor.connectTCP(host, port, factory)
+        reactor.connectTCP(serverName, serverPort, factory)
  
     def printAccount(self):
         """
-        Utility method that prints out C{IMAPAccount} information for debugging
+        Utility method that prints out C{EmailAccountKind} information for debugging
         purposes
         @return: C{None}
         """
@@ -168,9 +168,9 @@
         if self.account is None:
             return
 
-        str  = "\nHost: %s\n" % self.account.host
-        str += "Port: %d\n" % self.account.port
-        str += "Username: %s\n" % self.account.username
+        str  = "\nHost: %s\n" % self.account.serverName
+        str += "Port: %d\n" % self.account.serverPort
+        str += "Username: %s\n" % self.account.accountName
         str += "Password: %s\n" % self.account.password
 
         self.log.info(str)
@@ -208,7 +208,7 @@
 
             assert self.account is not None, "Account is None can not login client"
 
-            return self.proto.login(str(self.account.username),
+            return self.proto.login(str(self.account.accountName),
                                     str(self.account.password)).addCallback(self.__selectInbox)
         finally:
            self.restorePreviousView()
@@ -347,7 +347,7 @@
 
     def __getAccount(self):
 
-        accountKind = Mail.MailParcel.getIMAPAccountKind()
+        accountKind = Mail.MailParcel.getEmailAccountKind()
         account = accountKind.findUUID(self.accountUUID)
 
         if account is None: 
@@ -357,12 +357,12 @@
 
     def __printInfo(self, info):
 
-        if self.account.port != 143:
-            str = "[Server: %s:%d User: %s] %s" % (self.account.host,
-                                                   self.account.port,
-                                                   self.account.username, info)
+        if self.account.serverPort != 143:
+            str = "[Server: %s:%d User: %s] %s" % (self.account.serverName,
+                                                   self.account.serverPort,
+                                                   self.account.accountName, info)
         else:
-            str = "[Server: %s User: %s] %s" % (self.account.host,
-                                                self.account.username, info)
+            str = "[Server: %s User: %s] %s" % (self.account.serverName,
+                                                self.account.accountName, info)
 
         self.log.info(str)

Index: chandler/parcels/osaf/contentmodel/mail/Mail.py
diff -u chandler/parcels/osaf/contentmodel/mail/Mail.py:1.13 chandler/parcels/osaf/contentmodel/mail/Mail.py:1.14
--- chandler/parcels/osaf/contentmodel/mail/Mail.py:1.13	Thu Aug 12 18:51:00 2004
+++ chandler/parcels/osaf/contentmodel/mail/Mail.py	Thu Aug 12 22:41:32 2004
@@ -1,8 +1,8 @@
 """ Classes used for Mail parcel kinds
 """
 
-__revision__  = "$Revision: 1.13 $"
-__date__      = "$Date: 2004/08/13 01:51:00 $"
+__revision__  = "$Revision: 1.14 $"
+__date__      = "$Date: 2004/08/13 05:41:32 $"
 __copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
 __license__   = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -13,7 +13,6 @@
 import application.Globals as Globals
 
 class MailParcel(application.Parcel.Parcel):
-
     def startupParcel(self):
         super(MailParcel, self).startupParcel()
         self._setUUIDs()
@@ -23,99 +22,38 @@
         self._setUUIDs()
 
     def _setUUIDs(self):
-        accountBaseKind = self['AccountBase']
-        MailParcel.accountBaseKindID = accountBaseKind.itsUUID
-
-        imapAccountKind = self['IMAPAccount']
-        MailParcel.imapAccountKindID = imapAccountKind.itsUUID
-
-        smtpAccountKind = self['SMTPAccount']
-        MailParcel.smtpAccountKindID = smtpAccountKind.itsUUID
-
-        mailDeliveryBaseKind = self['MailDeliveryBase']
-        MailParcel.mailDeliveryBaseKindID = mailDeliveryBaseKind.itsUUID
-
-        smtpDeliveryKind = self['SMTPDelivery']
-        MailParcel.smtpDeliveryKindID = smtpDeliveryKind.itsUUID
-
-        imapDeliveryKind = self['IMAPDelivery']
-        MailParcel.imapDeliveryKindID = imapDeliveryKind.itsUUID
-
-        mimeBaseKind = self['MIMEBase']
-        MailParcel.mimeBaseKindID = mimeBaseKind.itsUUID
-
-        mimeNoteKind = self['MIMENote']
-        MailParcel.mimeNoteKindID = mimeNoteKind.itsUUID
-
+        attachmentKind = self['Attachment']
+        MailParcel.attachmentKindID = attachmentKind.itsUUID
+        
+        emailAccountKind = self['EmailAccount']
+        MailParcel.emailAccountKindID = emailAccountKind.itsUUID
+        
+        emailAddressKind = self['EmailAddress']
+        MailParcel.emailAddressKindID = emailAddressKind.itsUUID
+        
         mailMessageKind = self['MailMessage']
         MailParcel.mailMessageKindID = mailMessageKind.itsUUID
 
         mailMessageMixinKind = self['MailMessageMixin']
         MailParcel.mailMessageMixinKindID = mailMessageMixinKind.itsUUID
 
-        mimeBinaryKind = self['MIMEBinary']
-        MailParcel.mimeBinaryKindID = mimeBinaryKind.itsUUID
-
-        mimeTextKind = self['MIMEText']
-        MailParcel.mimeTextKindID = mimeTextKind.itsUUID
-
-        mimeContainerKind = self['MIMEContainer']
-        MailParcel.mimeContainerKindID = mimeContainerKind.itsUUID
-
-        mimeSecurityKind = self['MIMESecurity']
-        MailParcel.mimeSecurityKindID = mimeSecurityKind.itsUUID
-
-        emailAddressKind = self['EmailAddress']
-        MailParcel.emailAddressKindID = emailAddressKind.itsUUID
-
-    def getAccountBaseKind(cls):
-        assert cls.accountBaseKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.accountBaseKindID]
-
-    getAccountBaseKind = classmethod(getAccountBaseKind)
-
-    def getIMAPAccountKind(cls):
-        assert cls.imapAccountKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.imapAccountKindID]
-
-    getIMAPAccountKind = classmethod(getIMAPAccountKind)
-
-    def getSMTPAccountKind(cls):
-        assert cls.smtpAccountKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.smtpAccountKindID]
-
-    getSMTPAccountKind = classmethod(getSMTPAccountKind)
-
-    def getMailDeliveryBaseKind(cls):
-        assert cls.mailDeliveryBaseKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.mailDeliveryBaseKindID]
-
-    getMailDeliveryBaseKind = classmethod(getMailDeliveryBaseKind)
-
+    def getAttachmentKind(cls):
+        assert cls.attachmentKindID, "Mail parcel not yet loaded"
+        return Globals.repository[cls.attachmentKindID]
 
-    def getSMTPDeliveryKind(cls):
-        assert cls.smtpDeliveryKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.smtpDeliveryKindID]
+    getAttachmentKind = classmethod(getAttachmentKind)
 
-    getSMTPDeliveryKind = classmethod(getSMTPDeliveryKind)
+    def getEmailAccountKind(cls):
+        assert cls.emailAccountKindID, "Mail parcel not yet loaded"
+        return Globals.repository[cls.emailAccountKindID]
 
-    def getIMAPDeliveryKind(cls):
-        assert cls.imapDeliveryKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.imapDeliveryKindID]
+    getEmailAccountKind = classmethod(getEmailAccountKind)
 
-    getIMAPDeliveryKind = classmethod(getIMAPDeliveryKind)
-
-    def getMIMEBaseKind(cls):
-        assert cls.mimeBaseKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.mimeBaseKindID]
-
-    getMIMEBaseKind = classmethod(getMIMEBaseKind)
-
-    def getMIMENoteKind(cls):
-        assert cls.mimeNoteKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.mimeNoteKindID]
+    def getEmailAddressKind(cls):
+        assert cls.emailAddressKindID, "Mail parcel not yet loaded"
+        return Globals.repository[cls.emailAddressKindID]
 
-    getMIMENoteKind = classmethod(getMIMENoteKind)
+    getEmailAddressKind = classmethod(getEmailAddressKind)
 
     def getMailMessageKind(cls):
         assert cls.mailMessageKindID, "Mail message not yet loaded"
@@ -126,128 +64,16 @@
     def getMailMessageMixinKind(cls):
         assert cls.mailMessageMixinKindID, "Mail parcel not yet loaded"
         return Globals.repository[cls.mailMessageMixinKindID]
-
+    
     getMailMessageMixinKind = classmethod(getMailMessageMixinKind)
 
-    def getMIMEBinaryKind(cls):
-        assert cls.mimeBinaryKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.mimeBinaryKindID]
-
-    getMIMEBinaryKind = classmethod(getMIMEBinaryKind)
-
-    def getMIMETextKind(cls):
-        assert cls.mimeTextKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.mimeTextKindID]
-
-    getMIMETextKind = classmethod(getMIMETextKind)
-
-    def getMIMEContainerKind(cls):
-        assert cls.mimeContainerKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.mimeContainerKindID]
-
-    getMIMEContainerKind = classmethod(getMIMEContainerKind)
-
-    def getMIMESecurityKind(cls):
-        assert cls.mimeSecurityKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.mimeSecurityKindID]
-
-    getMIMESecurityKind = classmethod(getMIMESecurityKind)
-
-    def getEmailAddressKind(cls):
-        assert cls.emailAddressKindID, "Mail parcel not yet loaded"
-        return Globals.repository[cls.emailAddressKindID]
-
-    getEmailAddressKind = classmethod(getEmailAddressKind)
-
-    accountBaseKindID = None
-    imapAccountKindID = None
-    smtpAccountKindID = None
-    mailDeliveryBaseKindID = None
-    smtpDeliveryKindID = None
-    imapDeliveryKindID = None
-    mimeBaseKindID = None
-    mimeNoteKindID = None
+    attachmentKindID = None
+    emailAccountKindID = None
+    emailAddressKindID = None
     mailMessageKindID = None
     mailMessageMixinKindID = None
-    mimeBinaryKindID = None
-    mimeTextKindID = None
-    mimeContainerKindID = None
-    mimeSecurityKindID = None
-    emailAddressKindID = None
-
-class AccountBase(Item.Item):
-    def __init__(self, name=None, parent=None, kind=None):
-        if not parent:
-            parent = ContentModel.ContentModel.getContentItemParent()
-        if not kind:
-            kind = MailParcel.getAccountBaseKind()
-        super (AccountBase, self).__init__(name, parent, kind)
-
-class SMTPAccount(AccountBase):
-    def __init__(self, name=None, parent=None, kind=None):
-        if not parent:
-            parent = ContentModel.ContentModel.getContentItemParent()
-        if not kind:
-            kind = MailParcel.geSMTPAccountKind()
-        super (SMTPAccount, self).__init__(name, parent, kind)
-
-class IMAPAccount(AccountBase):
-    def __init__(self, name=None, parent=None, kind=None):
-        if not parent:
-            parent = ContentModel.ContentModel.getContentItemParent()
-        if not kind:
-            kind = MailParcel.geIMAPAccountKind()
-        super (IMAPAccount, self).__init__(name, parent, kind)
 
-class MailDeliveryBase(Item.Item):
-    def __init__(self, name=None, parent=None, kind=None):
-        if not parent:
-            parent = ContentModel.ContentModel.getContentItemParent()
-        if not kind:
-            kind = MailParcel.getMailDeliveryBaseKind()
-        super (MailDeliveryBase, self).__init__(name, parent, kind)
-
-class SMTPDelivery(MailDeliveryBase):
-    def __init__(self, name=None, parent=None, kind=None):
-        if not parent:
-            parent = ContentModel.ContentModel.getContentItemParent()
-        if not kind:
-            kind = MailParcel.getSMTPDeliveryKind()
-        super (SMTPDelivery, self).__init__(name, parent, kind)
-
-class IMAPDelivery(MailDeliveryBase):
-    def __init__(self, name=None, parent=None, kind=None):
-        if not parent:
-            parent = ContentModel.ContentModel.getContentItemParent()
-        if not kind:
-            kind = MailParcel.getIMAPDeliveryKind()
-        super (IMAPDelivery, self).__init__(name, parent, kind)
-
-class MIMEBase(Item.Item):
-    def __init__(self, name=None, parent=None, kind=None):
-        if not parent:
-            parent = ContentModel.ContentModel.getContentItemParent()
-        if not kind:
-            kind = MailParcel.getMIMEBaseKind()
-        super (MIMEBase, self).__init__(name, parent, kind)
-
-class MIMENote(Notes.Note, MIMEBase):
-    def __init__(self, name=None, parent=None, kind=None):
-        if not parent:
-            parent = ContentModel.ContentModel.getContentItemParent()
-        if not kind:
-            kind = MailParcel.getMIMENoteKind()
-        super (MIMENote, self).__init__(name, parent, kind)
-
-class MIMEContainer(MIMEBase):
-    def __init__(self, name=None, parent=None, kind=None):
-        if not parent:
-            parent = ContentModel.ContentModel.getContentItemParent()
-        if not kind:
-            kind = MailParcel.getMIMEContainerKind()
-        super (MIMEContainer, self).__init__(name, parent, kind)
-
-class MailMessageMixin(MIMEContainer):
+class MailMessageMixin(Item.Item):
     """
       Mail Message Mixin is the bag of Message-specific attributes.
     We only instantiate these Items when we "unstamp" an
@@ -262,39 +88,30 @@
         except AttributeError:
             pass
 
+        # Need to init a bunch more attributes here
+        self.attachments = []
+
 class MailMessage(Notes.Note, MailMessageMixin):
     def __init__(self, name=None, parent=None, kind=None):
         if not kind:
             kind = MailParcel.getMailMessageKind()
         super (MailMessage, self).__init__(name, parent, kind)
-        self.mimeType = "MESSAGE"
-        self.isInBound = False
-        self.isOutBound = False
 
-class MIMEBinary(MIMENote):
+class Attachment(Item.Item):
     def __init__(self, name=None, parent=None, kind=None):
         if not parent:
             parent = ContentModel.ContentModel.getContentItemParent()
         if not kind:
-            kind = MailParcel.getMIMEBinaryKind()
-        super (MIMEBinary, self).__init__(name, parent, kind)
-
-class MIMEText(MIMENote):
-    def __init__(self, name=None, parent=None, kind=None):
-        if not parent:
-            parent = ContentModel.ContentModel.getContentItemParent()
-        if not kind:
-            kind = MailParcel.getMIMETextKind()
-        super (MIMEText, self).__init__(name, parent, kind)
-
+            kind = MailParcel.getAttachmentKind()
+        super (Attachment, self).__init__(name, parent, kind)
 
-class MIMESecurity(MIMEContainer):
+class EmailAccount(Item.Item):
     def __init__(self, name=None, parent=None, kind=None):
         if not parent:
             parent = ContentModel.ContentModel.getContentItemParent()
         if not kind:
-            kind = MailParcel.getMIMESecurityKind()
-        super (MIMESecurity, self).__init__(name, parent, kind)
+            kind = MailParcel.getEmailAccountKind()
+        super (EmailAccount, self).__init__(name, parent, kind)
 
 class EmailAddress(Item.Item):
     def __init__(self, name=None, parent=None, kind=None):

Index: chandler/parcels/osaf/contentmodel/mail/parcel.xml
diff -u chandler/parcels/osaf/contentmodel/mail/parcel.xml:1.40 chandler/parcels/osaf/contentmodel/mail/parcel.xml:1.41
--- chandler/parcels/osaf/contentmodel/mail/parcel.xml:1.40	Thu Aug 12 18:51:00 2004
+++ chandler/parcels/osaf/contentmodel/mail/parcel.xml	Thu Aug 12 22:41:32 2004
@@ -1,728 +1,467 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
 
-<!-- $Revision: 1.40 $ -->
-<!-- $Date: 2004/08/13 01:51:00 $ -->
+<!-- $Revision: 1.41 $ -->
+<!-- $Date: 2004/08/13 05:41:32 $ -->
 <!-- Copyright (c) 2003 Open Source Applications Foundation -->
 <!-- License: http://osafoundation.org/Chandler_0.1_license_terms.htm -->
 
-<Parcel itsName="mail"
-    itemClass="osaf.contentmodel.mail.Mail.MailParcel"
-    xmlns="http://osafoundation.org/parcels/core"
-    xmlns:content="http://osafoundation.org/parcels/osaf/contentmodel"
-    xmlns:contact="http://osafoundation.org/parcels/osaf/contentmodel/contacts"
-    xmlns:calendar="http://osafoundation.org/parcels/osaf/contentmodel/calendar"
-    xmlns:mail="http://osafoundation.org/parcels/osaf/contentmodel/mail"
-    xmlns:tasks="http://osafoundation.org/parcels/osaf/contentmodel/tasks">
-
-    <displayName>Mail Content Model</displayName>
-    <description>Content Model for the Mail Messages, Email Accounts, and other things related to email</description>
-    <version>0.3</version>
-    <author>Open Source Applications Foundation</author>
-
-
-    <Kind itsName="AccountBase">
-        <superKinds ref="Item" />
-        <displayName value="Account base kind" />
-        <description value="The base kind for various account kinds, such as IMAP, SMTP, WebDav" />
-
-        <Attribute itsName="username">
-            <displayName value="Username" />
-            <description value="The account login name" />
-            <type ref="String" />
-            <initialValue ref="None" />
-        </Attribute>
-
-        <Attribute itsName="password">
-            <displayName value="Password" />
-            <description value="This could either be a password or some other sort of authentication info. We can use it for whatever is needed for this account type." />
-            <issues value="This should not be a simple string. We need some solution for encrypting it." />
-            <type ref="String" />
-            <initialValue ref="None" />
-        </Attribute>
-
-        <Attribute itsName="host">
-            <displayName value="Host" />
-            <description value="The hostname of the account" />
-            <type ref="String" />
-            <initialValue ref="None" />
-        </Attribute>
-
-        <Attribute itsName="port">
-            <displayName value="Port" />
-            <description value="The non-SSL port number to use" />
-            <type ref="Integer" />
-            <initialValue ref="None" />
-        </Attribute>
-
-        <Attribute itsName="portSSL">
-            <displayName value="Port SSL" />
-            <description value="The SSL port number to use" />
-            <type ref="Integer" />
-            <initialValue ref="None" />
-        </Attribute>
-
-        <Attribute itsName="useSSL">
-            <displayName value="use SSL" />
-            <description value="Whether or not to use SSL" />
-            <type ref="Boolean" />
-            <initialValue type="Boolean" value="False" />
-        </Attribute>
-
-        <Attribute itsName="pollingFrequency">
-            <displayName value="Polling frequency" />
-            <description value="Frequency in seconds" />
-            <type ref="Integer" />
-            <initialValue type="Integer" value="300" />
-        </Attribute>
-
-    </Kind>
-
-    <Kind itsName="IMAPAccount">
-        <superKinds ref="mail:AccountBase" />
-        <displayName value="IMAP Account" />
-        <description value="An IMAP Account" />
-
-        <Attribute itsName="port">
-            <displayName value="Port" />
-            <description value="The non-SSL port number to use" />
-            <type ref="Integer" />
-            <initialValue type="Integer" value="143" />
-            <issues value="In order to get a custom initialValue for this attribute for an IMAPAccount, I defined a 'duplicate' attribute, also named 'port', which normally would have been inherited from AccountBase" />
-        </Attribute>
-
-        <Attribute itsName="portSSL">
-            <displayName value="Port SSL" />
-            <description value="The SSL port number to use" />
-            <type ref="Integer" />
-            <initialValue type="Integer" value="993" />
-            <issues value="In order to get a custom initialValue for this attribute for an IMAPAccount, I defined a 'duplicate' attribute, also named 'portSSL', which normally would have been inherited from AccountBase" />
-        </Attribute>
-
-        <Attribute itsName="messageDownloadSequence">
-            <displayName value="Message Download Sequence" />
-            <type ref="Long" />
-            <initialValue type="Long" value="0" />
-        </Attribute>
-
-        <Attribute itsName="downloadedMail">
-            <displayName value="Downloaded Mail" />
-            <description value="All messages that have been downloaded from this account" />
-            <cardinality value="list" />
-            <type ref="mail:MailMessageMixin" />
-            <inverseAttribute ref="mail:MailMessageMixin/parentAccount" />
-            <initialValue />
-        </Attribute>
-
-        <Attribute itsName="defaultSmtpAccount">
-            <displayName value="Default SMTP Account" />
-            <description value="Which SMTP account to use for sending mail from this account" />
-            <type ref="mail:SMTPAccount" />
-            <inverseAttribute ref="mail:SMTPAccount/accounts" />
-            <initialValue ref="None" />
-        </Attribute>
-
-    </Kind>
-
-    <Kind itsName="SMTPAccount">
-        <superKinds ref="mail:AccountBase" />
-        <displayName value="SMTP Account" />
-        <description value="An SMTP Account" />
-
-        <Attribute itsName="port">
-            <displayName value="Port" />
-            <description value="The non-SSL port number to use" />
-            <type ref="Integer" />
-            <initialValue type="Integer" value="25" />
-            <issues value="In order to get a custom initialValue for this attribute for an SMTPAccount, I defined a 'duplicate' attribute, also named 'port', which normally would have been inherited from AccountBase" />
-        </Attribute>
-
-        <Attribute itsName="portSSL">
-            <displayName value="Port SSL" />
-            <description value="The SSL port number to use" />
-            <type ref="Integer" />
-            <initialValue type="Integer" value="465" />
-            <issues value="In order to get a custom initialValue for this attribute for an SMTPAccount, I defined a 'duplicate' attribute, also named 'portSSL', which normally would have been inherited from AccountBase" />
-        </Attribute>
-
-        <Attribute itsName="useAuth">
-            <displayName value="Use Authentication" />
-            <description value="Whether or not to use authentication when sending mail" />
-            <type ref="Boolean" />
-            <initialValue type="Boolean" value="False" />
-        </Attribute>
-
-        <Attribute itsName="numRetries">
-            <displayName value="Number of Retries" />
-            <description value="How many times to retry before giving up" />
-            <type ref="Integer" />
-            <initialValue type="Integer" value="3" />
-        </Attribute>
-
-        <Attribute itsName="fullName">
-            <displayName value="Full Name" />
-            <description value="A first and last name which will get included in the From: header of outgoing mail" />
-            <type ref="String" />
-            <initialValue ref="None" />
-        </Attribute>
-
-        <Attribute itsName="replyToAddress">
-            <displayName value="Reply-To Address" />
-            <type ref="mail:EmailAddress" />
-            <initialValue ref="None" />
-            <inverseAttribute ref="mail:EmailAddress/accounts" />
-        </Attribute>
-
-        <Attribute itsName="accounts">
-            <displayName value="Accounts" />
-            <description value="Which IMAP accounts use this SMTP account as their default" />
-            <type ref="mail:IMAPAccount" />
-            <inverseAttribute ref="mail:IMAPAccount/defaultSmtpAccount" />
-            <cardinality value="list" />
-            <initialValue />
-        </Attribute>
-
-    </Kind>
-
-    <Kind itsName="MailDeliveryBase">
-        <superKinds ref="Item" />
-        <displayName value="Mail Delivery base kind" />
-        <description value="Parent kind for delivery-specific attributes of a MailMessage" />
-
-        <Attribute itsName="deliveryType">
-            <displayName value="Delivery Type" />
-            <description value="One of POP, IMAP, or SMTP" />
-            <type ref="mail:MailDeliveryBase/deliveryType/deliveryTypeEnum" />
-            <initialValue ref="None" />
-
-            <Enumeration itsName="deliveryTypeEnum">
-                <values value="POP" />
-                <values value="IMAP" />
-                <values value="SMTP" />
-            </Enumeration>
-
-        </Attribute>
-
-        <Attribute itsName="mailMessage">
-            <displayName value="Message" />
-            <description value="Message which this delivery item refers to" />
-            <type ref="mail:MailMessageMixin" />
-            <initialValue ref="None" />
-            <inverseAttribute ref="mail:MailMessageMixin/deliveryExtension" />
-        </Attribute>
-
-    </Kind>
-
-    <Kind itsName="SMTPDelivery">
-        <superKinds ref="mail:MailDeliveryBase" />
-        <displayName value="SMTP Delivery" />
-        <description value="Tracks the status of an outgoing message" />
-        <issues value="Currently the parcel loader can't set a default value for the state attribute" />
-
-        <Attribute itsName="history">
-            <displayName value="History" />
-            <type ref="mail:SMTPDelivery/history/historyEnum" />
-            <cardinality value="list" />
-            <initialValue />
-
-            <Enumeration itsName="historyEnum">
-                <values value="QUEUED" />
-                <values value="FAILED" />
-                <values value="SENT" />
-            </Enumeration>
-
-        </Attribute>
-
-        <Attribute itsName="tries">
-            <displayName value="Number of tries" />
-            <description value="How many times we have tried to send it" />
-            <type ref="Integer" />
-            <initialValue type="Integer" value="0" />
-        </Attribute>
-
-        <Attribute itsName="state">
-            <displayName value="State" />
-            <description value="The current state of the message" />
-            <issues value="We don't appear to be able to set an initialValue for an attribute whose enumeration is defined in the same file (a deficiency in the parcel loader)" />
-            <type ref="mail:SMTPDelivery/state/stateEnum" />
-            <initialValue ref="None" />
-
-            <Enumeration itsName="stateEnum">
-                <values value="DRAFT" />
-                <values value="QUEUED" />
-                <values value="SENT" />
-                <values value="FAILED" />
-            </Enumeration>
-
-        </Attribute>
-
-    </Kind>
-
-    <Kind itsName="IMAPDelivery">
-        <superKinds ref="mail:MailDeliveryBase" />
-        <displayName value="IMAP Delivery" />
-        <description value="Tracks the state of an inbound message" />
-
-        <Attribute itsName="folder">
-            <displayName value="Folder" />
-            <type ref="String" />
-            <initialValue ref="None" />
-        </Attribute>
-
-        <Attribute itsName="uid">
-            <displayName value="IMAP UID" />
-            <description value="The unique IMAP ID for the message" />
-            <type ref="String" />
-            <initialValue ref="None" />
-        </Attribute>
-
-        <Attribute itsName="namespace">
-            <displayName value="Namespace" />
-            <description value="The namespace of the message" />
-            <type ref="String" />
-            <initialValue ref="None" />
-        </Attribute>
-
-        <Attribute itsName="flags">
-            <displayName value="Flags" />
-            <cardinality value="list" />
-            <type ref="String" />
-            <initialValue />
-        </Attribute>
-
-    </Kind>
-
-    <Kind itsName="MIMEBase">
-        <superKinds ref="Item" />
-        <displayName value="MIME Base Kind" />
-        <description value="Super kind for MailMessage and the various MIME kinds" />
-
-        <Attribute itsName="additionalHeaders">
-            <description value="Catch-all for headers not belonging to one of the other attributes" />
-            <cardinality value="list" />
-            <type ref="String" />
-            <initialValue />
-        </Attribute>
-
-        <Attribute itsName="contentType">
-            <description value="Content-Type: header" />
-            <type ref="String" />
-            <initialValue type="String" value="" />
-        </Attribute>
-
-        <Attribute itsName="contentLength">
-            <description value="Content-Length: header" />
-            <type ref="String" />
-            <initialValue type="String" value="0" />
-        </Attribute>
-
-        <Attribute itsName="contentTransferEncoding">
-            <description value="Content-Transfer-Encoding: header" />
-            <type ref="String" />
-            <initialValue type="String" value="" />
-        </Attribute>
-
-        <Attribute itsName="contentDescription">
-            <description value="Content-Description: header" />
-            <type ref="String" />
-            <initialValue type="String" value="" />
-        </Attribute>
-
-        <Attribute itsName="contentId">
-            <description value="Content-Id: header" />
-            <type ref="String" />
-            <initialValue type="String" value="" />
-        </Attribute>
-
-        <Attribute itsName="contentDisposition">
-            <description value="Content-Disposition: header" />
-            <type ref="String" />
-            <initialValue type="String" value="" />
-        </Attribute>
-
-        <Attribute itsName="mimeType">
-            <type ref="mail:MIMEBase/mimeType/mimeTypeEnum" />
-            <initialValue ref="None" />
-
-            <Enumeration itsName="mimeTypeEnum">
-                <values value="MESSAGE" />
-                <values value="AUDIO" />
-                <values value="APPLICATION" />
-                <values value="IMAGE" />
-                <values value="VIDEO" />
-                <values value="PLAIN" />
-                <values value="HTML" />
-                <values value="ENRICHED" />
-                <values value="RICHTEXT" />
-                <values value="SGML" />
-                <values value="RFC-HEADERS" />
-                <values value="ALTERNATIVE" />
-                <values value="PARALLEL" />
-                <values value="RELATED" />
-                <values value="REPORT" />
-                <values value="PARTIAL" />
-                <values value="DIGEST" />
-                <values value="SIGNED" />
-                <values value="ENCRYPTED" />
-            </Enumeration>
-
-        </Attribute>
-
-        <Attribute itsName="mimeContainer">
-            <type ref="mail:MIMEContainer" />
-            <initialValue ref="None" />
-            <inverseAttribute ref="mail:MIMEContainer/mimeParts" />
-        </Attribute>
-
-    </Kind>
-
-    <Kind itsName="MIMENote">
-        <superKinds ref="mail:MIMEBase" />
-        <superKinds ref="content:Note" />
-        <displayName value="MIME Note" />
-        <description value="MIMEBase and Note, rolled into one" />
-    </Kind>
-
-    <Kind itsName="MailMessage">
-        <superKinds ref="mail:MailMessageMixin" />
-        <superKinds ref="content:Note" />
-        <displayName value="Mail Message" />
-        <description value="MailMessageMixin, and Note, all rolled up into one" />
-    </Kind>
-
-    <Kind itsName="MailMessageMixin">
-        <superKinds ref="mail:MIMEContainer" />
-        <classes key="python" value="osaf.contentmodel.mail.Mail.MailMessageMixin" />
-        <displayName value="Mail Message Mixin" />
-        <description value="Used to mixin mail message attributes into a content item" />
-        <issues value="Once we have attributes and a cloud defined for Attachment, we need to include attachments by cloud, and not by value." />
-        <issues value="Really not sure what to do with the 'downloadAccount' attribute and how it should be included in the cloud.  For now it's by value." />
-
-        <Attribute itsName="deliveryExtension">
-            <type ref="mail:MailDeliveryBase" />
-            <initialValue ref="None" />
-            <inverseAttribute ref="mail:MailDeliveryBase/mailMessage" />
-        </Attribute>
-
-        <Attribute itsName="isOutBound">
-            <type ref="Boolean" />
-            <initialValue type="Boolean" value="False" />
-        </Attribute>
-
-        <Attribute itsName="isInBound">
-            <type ref="Boolean" />
-            <initialValue type="Boolean" value="False" />
-        </Attribute>
-
-        <Attribute itsName="parentAccount">
-            <type ref="mail:AccountBase" />
-            <initialValue ref="None" />
-            <inverseAttribute ref="mail:IMAPAccount/downloadedMail" />
-        </Attribute>
-
-        <Attribute itsName="spamScore">
-            <type ref="Float" />
-            <initialValue type="Float" value="0" />
-        </Attribute>
-
-        <Attribute itsName="rfc2822Message">
-            <type ref="Text" />
-            <initialValue type="Text" value="" />
-        </Attribute>
-
-        <Attribute itsName="dateSentString">
-            <type ref="String" />
-            <initialValue type="String" value="" />
-        </Attribute>
-
-        <Attribute itsName="dateSent">
-            <type ref="DateTime" />
-            <initialValue ref="None" />
-        </Attribute>
-
-        <Attribute itsName="dateReceived">
-            <type ref="DateTime" />
-            <initialValue ref="None" />
-        </Attribute>
-
-        <Attribute itsName="messageId">
-            <type ref="String" />
-            <initialValue type="String" value="" />
-        </Attribute>
-
-        <Attribute itsName="references">
-            <type ref="String" />
-            <cardinality value="list" />
-            <initialValue />
-        </Attribute>
-
-        <Attribute itsName="received">
-            <type ref="String" />
-            <cardinality value="list" />
-            <initialValue />
-        </Attribute>
-
-        <Attribute itsName="returnPath">
-            <type ref="String" />
-            <initialValue type="String" value="" />
-        </Attribute>
-
-        <Attribute itsName="toAddress">
-            <type ref="mail:EmailAddress" />
-            <cardinality value="list" />
-            <initialValue />
-            <inverseAttribute ref="mail:EmailAddress/messagesTo" />
-        </Attribute>
-
-        <Attribute itsName="fromAddress">
-            <type ref="mail:EmailAddress" />
-            <initialValue ref="None"/>
-            <inverseAttribute ref="mail:EmailAddress/messagesFrom" />
-        </Attribute>
-
-        <Attribute itsName="replyToAddress">
-            <type ref="mail:EmailAddress" />
-            <initialValue ref="None"/>
-            <inverseAttribute ref="mail:EmailAddress/messagesReplyTo" />
-        </Attribute>
-
-        <Attribute itsName="bccAddress">
-            <type ref="mail:EmailAddress" />
-            <cardinality value="list" />
-            <initialValue />
-            <inverseAttribute ref="mail:EmailAddress/messagesBcc" />
-        </Attribute>
-
-        <Attribute itsName="ccAddress">
-            <type ref="mail:EmailAddress" />
-            <cardinality value="list" />
-            <initialValue />
-            <inverseAttribute ref="mail:EmailAddress/messagesCc" />
-        </Attribute>
-
-        <Attribute itsName="subject">
-            <type ref="String" />
-            <initialValue type="String" value="" />
-        </Attribute>
-
-        <Attribute itsName="chandlerHeaders">
-            <type ref="String" />
-            <cardinality value="list" />
-            <initialValue />
-        </Attribute>
-
-        <Attribute itsName="mimeVersion">
-            <type ref="String" />
-            <initialValue type="String" value="1.0" />
-        </Attribute>
-
-        <!-- redirections -->
-        <Attribute itsName="who">
-            <description value="Redirector to 'toAddress'" />
-            <redirectTo value="toAddress" />
-        </Attribute>
-
-        <Attribute itsName="whoFrom">
-            <description value="Redirector to 'fromAddress'" />
-            <redirectTo value="fromAddress" />
-        </Attribute>
-
-        <Attribute itsName="about">
-            <description value="Redirector to 'subject'" />
-            <redirectTo value="subject" />
-        </Attribute>
-
-        <Attribute itsName="date">
-            <description value="Redirector to 'dateReceived'" />
-            <redirectTo value="dateReceived" />
-        </Attribute>
-
-        <Cloud itsName="Cloud">
-
-          <Endpoint itsName="fromAddress">
-            <attribute value="fromAddress"/>
-            <includePolicy value="byValue"/>
-          </Endpoint>
-          <endpoints ref="mail:MailMessageMixin/Cloud/fromAddress"/>
-
-          <Endpoint itsName="toAddress">
-            <attribute value="toAddress"/>
-            <includePolicy value="byValue"/>
-          </Endpoint>
-          <endpoints ref="mail:MailMessageMixin/Cloud/toAddress"/>
-
-          <Endpoint itsName="ccAddress">
-            <attribute value="ccAddress"/>
-            <includePolicy value="byValue"/>
-          </Endpoint>
-          <endpoints ref="mail:MailMessageMixin/Cloud/ccAddress"/>
-
-          <Endpoint itsName="bccAddress">
-            <attribute value="bccAddress"/>
-            <includePolicy value="byValue"/>
-          </Endpoint>
-          <endpoints ref="mail:MailMessageMixin/Cloud/bccAddress"/>
-
-          <Endpoint itsName="replyToAddress">
-            <attribute value="replyToAddress"/>
-            <includePolicy value="byValue"/>
-          </Endpoint>
-          <endpoints ref="mail:MailMessageMixin/Cloud/replyToAddress"/>
-
-          <Endpoint itsName="mimeParts">
-            <attribute value="mimeParts" />
-            <includePolicy value="byCloud" />
-            <cloudAlias value="default" />
-          </Endpoint>
-          <endpoints ref="mail:MailMessageMixin/Cloud/mimeParts"/>
-
-          <Endpoint itsName="deliveryExtension">
-            <attribute value="deliveryExtension"/>
-            <includePolicy value="byValue"/>
-          </Endpoint>
-          <endpoints ref="mail:MailMessageMixin/Cloud/deliveryExtension"/>
-
-        </Cloud>
-        <clouds alias="default" ref="mail:MailMessageMixin/Cloud"/>
-
-    </Kind>
-
-    <Kind itsName="MIMEBinary">
-        <superKinds ref="mail:MIMENote" />
-        <displayName value="MIME Binary Kind" />
-
-        <Attribute itsName="filename">
-            <displayName value="File name" />
-            <type ref="String" />
-            <initialValue ref="None" />
-        </Attribute>
-
-    </Kind>
-
-    <Kind itsName="MIMEText">
-        <superKinds ref="mail:MIMENote" />
-        <displayName value="MIME Text Kind" />
-
-        <Attribute itsName="charset">
-            <displayName value="Character set" />
-            <type ref="String" />
-            <initialValue ref="None" />
-        </Attribute>
-
-    </Kind>
-
-    <Kind itsName="MIMEContainer">
-        <superKinds ref="mail:MIMEBase" />
-        <displayName value="MIME Container Kind" />
-
-        <Attribute itsName="hasMimeParts">
-            <initialValue type="Boolean" value="False" />
-        </Attribute>
-
-        <Attribute itsName="mimeParts">
-            <displayName value="MIME Parts" />
-            <cardinality value="list" />
-            <type ref="mail:MIMEBase" />
-            <initialValue />
-            <inverseAttribute ref="mail:MIMEBase/mimeContainer" />
-        </Attribute>
-
-    </Kind>
-
-    <Kind itsName="MIMESecurity">
-        <superKinds ref="mail:MIMEBase" />
-        <displayName value="MIME Security Kind" />
-    </Kind>
-
-
-    <Kind itsName="EmailAddress">
-        <superKinds ref="Item" />
-        <displayName value="Email Address Kind" />
-        <classes key="python" value="osaf.contentmodel.mail.Mail.EmailAddress" />
-        <examples value="abe at osafoundation.org" />
-        <description value="An item that represents a simple email address, plus all the info we might want to associate with it, like lists of message to and from this address." />
-        <issues value="Someday we might want to have other attributes.  One example might be an 'is operational' flag that tells whether this address is still in service, or whether mail to this has been bouncing lately. Another example might be a 'superceded by' attribute, which would point to another Email Address item." />
-        <issues value="Depending on how we end up using the 'emailAddress' attribute, we might want to break it into two attributes, one for the 'Abe Lincoln' part, and one for the 'abe at osafoundation.org' part. Alternatively, we might want to use one of Andi's compound types, with two fields." />
-        <displayAttribute ref="mail:EmailAddress/emailAddress"/>
-
-        <Attribute itsName="emailAddress">
-            <displayName value="Email Address" />
-            <examples>"abe at osafoundation.org"</examples>
-            <examples>"Abe Lincoln {abe at osafoundation.org}" (except with angle brackets instead of '{' and '}')</examples>
-            <description value="An RFC 822 email address." />
-            <type ref="String" />
-            <initialValue ref="None" />
-        </Attribute>
-
-        <Attribute itsName="vcardType">
-            <displayName value="vCard type" />
-            <description>Typical vCard types are values like 'internet', 'x400', and 'pref'. Chandler will use this attribute when doing import/export of Contact records in vCard format.</description>
-            <type ref="String"/>
-            <initialValue type="String" value="" />
-        </Attribute>
-
-        <Attribute itsName="accounts">
-            <displayName value="Used as Return Address by Email Account" />
-            <description value="A list of Email Accounts that use this Email Address as the reply address for mail sent from the account." />
-            <cardinality value="list" />
-            <type ref="mail:SMTPAccount" />
-            <initialValue />
-            <inverseAttribute ref="mail:SMTPAccount/replyToAddress" />
-        </Attribute>
-
-        <Attribute itsName="messagesBcc">
-            <displayName value="Messages Bcc" />
-            <description value="A list of messages with their Bcc: header referring to this address" />
-            <cardinality value="list" />
-            <type ref="mail:MailMessageMixin" />
-            <inverseAttribute ref="mail:MailMessageMixin/bccAddress" />
-            <initialValue />
-        </Attribute>
-
-        <Attribute itsName="messagesCc">
-            <displayName value="Messages cc" />
-            <description value="A list of messages with their cc: header referring to this address" />
-            <cardinality value="list" />
-            <type ref="mail:MailMessageMixin" />
-            <inverseAttribute ref="mail:MailMessageMixin/ccAddress" />
-            <initialValue />
-        </Attribute>
-
-        <Attribute itsName="messagesFrom">
-            <displayName value="Messages From" />
-            <description value="A list of messages with their From: header referring to this address" />
-            <cardinality value="list" />
-            <type ref="mail:MailMessageMixin" />
-            <inverseAttribute ref="mail:MailMessageMixin/fromAddress" />
-            <initialValue />
-        </Attribute>
-
-        <Attribute itsName="messagesReplyTo">
-            <displayName value="Messages Reply To" />
-            <description value="A list of messages with their Reply-To: header referring to this address" />
-            <cardinality value="list" />
-            <type ref="mail:MailMessageMixin" />
-            <inverseAttribute ref="mail:MailMessageMixin/replyToAddress" />
-            <initialValue />
-        </Attribute>
-
-        <Attribute itsName="messagesTo">
-            <displayName value="Messages To" />
-            <description value="A list of messages with their To: header referring to this address" />
-            <cardinality value="list" />
-            <type ref="mail:MailMessageMixin" />
-            <inverseAttribute ref="mail:MailMessageMixin/toAddress" />
-            <initialValue />
-        </Attribute>
-
-
-        <!-- Additional external attributes -->
-
-        <attributes ref="contact:onceBelongedTo"/>
-        <attributes ref="contact:emailAddressOwner"/>
-        <attributes ref="calendar:participatingIn"/>
-        <attributes ref="tasks:requestedTasks"/>
-        <attributes ref="tasks:taskRequests"/>
-
-    </Kind>
+<Parcel describes="//parcels/osaf/contentmodel/mail"
+        itsName="mail"
+        itemClass="osaf.contentmodel.mail.Mail.MailParcel"
+        xmlns="http://osafoundation.org/parcels/core"
+        xmlns:content="http://osafoundation.org/parcels/osaf/contentmodel"
+        xmlns:contact="http://osafoundation.org/parcels/osaf/contentmodel/contacts"
+        xmlns:calendar="http://osafoundation.org/parcels/osaf/contentmodel/calendar"
+        xmlns:mail="http://osafoundation.org/parcels/osaf/contentmodel/mail"
+        xmlns:tasks="http://osafoundation.org/parcels/osaf/contentmodel/tasks">
+
+  <displayName>Mail Content Model</displayName>
+  <description>Content Model for the Mail Messages, Email Accounts, and other things related to email/</description>
+  <version>0.3</version>
+  <author>Open Source Applications Foundation</author>
+
+<!-- Attachment -->
+  <Kind itsName="Attachment">
+    <superKinds itemref="Item"/>
+    <displayName>Attachment</displayName>
+    <examples>'Budget.doc'</examples>
+    <examples>'funny.jpg'</examples>
+    <description>
+      An Attachment represents an e-mail attachment.
+    </description>
+    <issues>see http://lists.osafoundation.org/pipermail/design/2003-April/002400.html</issues>
+    <issues>I'd argue for calling Attachments either MIMEElement or MessagePart.  In a multipart/mixed 
+        message (essentially any message with an attachment), there sort of isn't a body.  The part that 
+        is looks like an RFC822 body is simply the text "This is a MIME-encapsulated message."  What is 
+        *presented to the user as the body* is usually the first displayable part or the first text 
+        part. -Ducky</issues>
+    <issues>From the schema, it isn't clear if the body and attachments have been converted into 
+        Chandler Items or if they are unmolested text.  (Ditto for From, Date, and the headers.)  
+        To do spam control right you have to keep around the exact, original, unmolested text 
+        of the message.  Anti-spam programs find useful information in the strangest places -- for example, there's one program commonly used by spammers that has a distrinctive set of delimiters between message parts. You also can't run it through the spam filter, decide you're done, munge it, and throw away the original because the Bayesian classifiers need to have the original message to retrain on if the user decides that the classifier got it wrong.  So somewhere, you have to keep around the original. -Ducky</issues>
+    <classes key="python">osaf.contentmodel.mail.Mail.Attachment</classes>
+  </Kind>
+
+<!-- Email Account -->
+  <Attribute itsName="serverName">
+    <displayName>Server DNS Name</displayName>
+    <type itemref="String"/>
+  </Attribute>
+  
+  <Attribute itsName="serverPort">
+    <displayName>Server Port</displayName>
+    <cardinality>single</cardinality>
+    <type itemref="Integer"/>
+    <initialValue type="Integer">143</initialValue>
+  </Attribute>
+
+  <Attribute itsName="accountName">
+    <displayName>Account Name</displayName>
+    <description>My user name on this server.</description>
+    <issues>This should always be a single-line string that displays in a one-line text field rather than a scrolling text box.</issues>
+    <type itemref="String"/>
+  </Attribute>
+
+  <Attribute itsName="accountType">
+    <displayName>Account Type</displayName>
+    <description>POP, IMAP, etc.</description>
+    <type itemref="String"/>
+  </Attribute>
+  
+  <Attribute itsName="messageDownloadSequence">
+    <displayName>Message Download Sequence</displayName>
+    <description>The uid or number of the last message downloaded</description>
+    <cardinality>single</cardinality>
+    <type itemref="Long"/>
+    <initialValue type="Long">0</initialValue>
+  </Attribute>
+
+  <Attribute itsName="password">
+    <displayName>Password</displayName>
+    <description>This could either be a password or some other sort of authentication info. We can use it for whatever is needed for this account type.</description>
+    <issues>This should not be a simple string. We need some solution for encrypting it.</issues>
+    <type itemref="String"/>
+  </Attribute>
+
+  <Attribute itsName="downloadedMail">
+    <displayName>Downloaded Mail</displayName>
+    <description>Mail messages that have been sent to this account, and retrieved by Chandler.</description>
+    <cardinality>list</cardinality>
+    <type itemref="mail:MailMessage"/>
+    <inverseAttribute itemref="mail:downloadAccount"/>
+    <initialValue/>
+  </Attribute>
+
+  <Attribute itsName="returnAddress">
+    <displayName>Return Address</displayName>
+    <description>The Email Address to use as the return address for mail sent from this account.</description>
+    <type itemref="mail:EmailAddress"/>
+    <inverseAttribute itemref="mail:returnAddressInverse"/>
+  </Attribute>
+
+  <Attribute itsName="returnAddressInverse">
+    <displayName>Used as Return Address by Email Account</displayName>
+    <description>A list of Email Accounts that use this Email Address as the return address for mail sent from the account.</description>
+    <cardinality>list</cardinality>
+    <type itemref="mail:EmailAccount"/>
+    <inverseAttribute itemref="mail:returnAddress"/>
+  </Attribute>
+
+  <Attribute itsName="pollingFrequency">
+    <displayName>Polling Frequency</displayName>
+    <description>Some description of frequency, like 'never', or 'every 5 minutes'</description>
+    <issues>This shouldn't really be of type String. Maybe RelativeDateTime, or some new data type?</issues>
+    <type itemref="String"/>
+  </Attribute>
+
+  <Kind itsName="EmailAccount">
+    <superKinds itemref="Item"/>
+    <displayName>Email Account</displayName>
+    <examples>My work account on the company IMAP server at mail.BigCompany.com</examples>
+    <examples>My home account on my ISP's POP server.</examples>
+    <description>An Email Account item is used to keep track of the info Chandler needs in order to retrieve your mail from a mail server.</description>
+    <issues>We might also want some more attributes, to keep track of things like 'port number', 'use SSL (boolean)', 'check for messages at startup (boolean)', </issues>
+    <displayAttribute itemref="mail:accountName"/>
+    <attributes itemref="mail:serverName"/>
+    <attributes itemref="mail:serverPort"/>
+    <attributes itemref="mail:accountName"/>
+    <attributes itemref="mail:accountType"/>
+    <attributes itemref="mail:password"/>
+    <attributes itemref="mail:downloadedMail"/>
+    <attributes itemref="mail:returnAddress"/>
+    <attributes itemref="mail:messageDownloadSequence"/>
+    <attributes itemref="mail:pollingFrequency"/>
+    <classes key="python">osaf.contentmodel.mail.Mail.EmailAccount</classes>
+  </Kind>
+
+<!-- Email Address -->
+  <Attribute itsName="emailAddress">
+    <displayName>Email Address</displayName>
+    <examples>"abe at osafoundation.org"</examples>
+    <examples>"Abe Lincoln {abe at osafoundation.org}" (except with angle brackets instead of '{' and '}')</examples>
+    <description>An RFC 822 email address.</description>
+    <type itemref="String"/>
+  </Attribute>
+
+  <Attribute itsName="vcardType">
+    <displayName>vCard type</displayName>
+    <description>Typical vCard types are values like 'internet', 'x400', and 'pref'. Chandler will use this attribute when doing import/export of Contact records in vCard format.</description>
+    <type itemref="String"/>
+  </Attribute>
+
+  <Kind itsName="EmailAddress"> 
+    <superKinds itemref="Item"/>
+    <displayName>Email Address</displayName>
+    <examples>"abe at osafoundation.org"</examples>
+    <description>An item that represents a simple email address, plus all the info we might want to associate with it, like lists of message to and from this address.</description>
+    <issues>Someday we might want to have other attributes.  One example might be an 'is operational' flag that tells whether this address is still in service, or whether mail to this has been bouncing lately. Another example might be a 'superceded by' attribute, which would point to another Email Address item.</issues>
+    <issues>Depending on how we end up using the 'emailAddress' attribute, we might want to break it into two attributes, one for the "Abe Lincoln" part, and one for the "abe at osafoundation.org" part. Alternatively, we might want to use one of Andi's compound types, with two fields.</issues>
+    <displayAttribute itemref="mail:emailAddress"/>
+    <attributes itemref="mail:emailAddress"/>
+    <attributes itemref="mail:vcardType"/>
+    <attributes itemref="contact:onceBelongedTo"/>
+    <attributes itemref="contact:emailAddressOwner"/>
+    <attributes itemref="mail:returnAddressInverse"/>
+    <attributes itemref="mail:sentToInverse"/>
+    <attributes itemref="mail:replyAddressInverse"/>
+    <attributes itemref="calendar:participatingIn"/>
+    <attributes itemref="tasks:requestedTasks"/>
+    <attributes itemref="tasks:taskRequests"/>
+    <classes key="python">osaf.contentmodel.mail.Mail.EmailAddress</classes>
+  </Kind>
+
+<!-- Email Message -->
+  <Attribute itsName="subject">
+    <displayName>Subject</displayName>
+    <description>The subject line of an email message.</description>
+    <type itemref="String"/>
+  </Attribute>
+
+  <Attribute itsName="sentTo">
+    <displayName>Sent To</displayName>
+    <description>...add description here...</description>
+    <cardinality>list</cardinality>
+    <type itemref="mail:EmailAddress"/>
+    <inverseAttribute itemref="mail:sentToInverse"/>
+  </Attribute>
+
+  <Attribute itsName="sentToInverse">
+    <displayName>Messages sent to this address</displayName>
+    <description>A list of messages that have this address in their header</description>
+    <cardinality>list</cardinality>
+    <type itemref="mail:MailMessage"/>
+    <inverseAttribute itemref="mail:sentTo"/>
+  </Attribute>
+
+  <Attribute itsName="toAddress">
+    <displayName>to: Address</displayName>
+    <description>...add description here...</description>
+    <cardinality>list</cardinality>
+    <type itemref="mail:EmailAddress"/>
+    <superAttribute itemref="mail:sentTo"/>
+  </Attribute>
+
+  <Attribute itsName="ccAddress">
+    <displayName>cc: Address</displayName>
+    <description>...add description here...</description>
+    <cardinality>list</cardinality>
+    <type itemref="mail:EmailAddress"/>
+    <superAttribute itemref="mail:sentTo"/>
+  </Attribute>
+
+  <Attribute itsName="bccAddress">
+    <displayName>bcc: Address</displayName>
+    <description>...add description here...</description>
+    <cardinality>list</cardinality>
+    <type itemref="mail:EmailAddress"/>
+    <superAttribute itemref="mail:sentTo"/>
+  </Attribute>
+
+  <Attribute itsName="replyAddress">
+    <displayName>Reply Address</displayName>
+    <description>The Email address listed as the reply to address in the header of this message.</description>
+    <type itemref="mail:EmailAddress"/>
+    <inverseAttribute itemref="mail:replyAddressInverse"/>
+  </Attribute>
+
+  <Attribute itsName="replyAddressInverse">
+    <displayName>Used as Reply Address In</displayName>
+    <description>A list of mail messages that give this email address as a reply address.</description>
+    <cardinality>list</cardinality>
+    <type itemref="mail:MailMessage"/>
+    <inverseAttribute itemref="mail:replyAddress"/>
+  </Attribute>
+
+  <Attribute itsName="dateSent">
+    <displayName>Date Sent</displayName>
+    <description>...add description here...</description>
+    <issues>Is dateSent the unmolested Date string as it arrives (which the RFC says can have one of three formats, and which has a fourth incorrect but reasonably common format) or is it converted into a Chandler DateTime (or whatever) Item? - Ducky</issues>
+    <type itemref="DateTime"/>
+  </Attribute>
+
+  <Attribute itsName="dateReceived">
+    <displayName>Date Received</displayName>
+    <description>...add description here...</description>
+    <type itemref="DateTime"/>
+  </Attribute>
+
+  <Attribute itsName="deliveryReceiptRequested">
+    <displayName>Delivery Receipt Requested</displayName>
+    <description>...add description here...</description>
+    <type itemref="Boolean"/>
+  </Attribute>
+
+  <Attribute itsName="readReceiptRequested">
+    <displayName>Read Receipt Requested</displayName>
+    <description>...add description here...</description>
+    <type itemref="Boolean"/>
+  </Attribute>
+
+  <Attribute itsName="messageHeader">
+    <displayName>Message Header</displayName>
+    <description>...add description here...</description>
+    <type itemref="String"/>
+  </Attribute>
+
+  <Attribute itsName="messageBody">
+    <displayName>Message Body</displayName>
+    <description>a MIME-body, complete with content-type, content-encoding, character encoding, 
+        etc.</description>
+    <issues>Ducky says: There are a whole bunch of things that need to be specified for the body 
+        (or attachment) of a message, including content-type (jpg, html, text, word), 
+        content-encoding (7-bit or 8-bit ASCII?), character encoding (Shift-JIS, Big 5?), length, 
+        etc. What you might want to do is declare an as-yet-unspecified MIME-body that holds all 
+        of the information and the body of the message part (body or attachment).</issues>
+    <type itemref="Text"/>
+  </Attribute>
+
+  <Attribute itsName="relatedMessages">
+    <displayName>Related Messages</displayName>
+    <description>This 'relatedMessages' attribute is the super-attribute of attributes like 'forwardedIn' and 'repliedToIn'.</description>
+    <issues>This should have itself as an inverseAttribute.</issues>
+    <cardinality>list</cardinality>
+    <type itemref="mail:MailMessage"/>
+  </Attribute>
+
+  <Attribute itsName="forwardedIn">
+    <displayName>Forwarded In</displayName>
+    <description>a list of other Email Messages that contain forwarded copies of this message</description>
+    <cardinality>list</cardinality>
+    <type itemref="mail:MailMessage"/>
+    <superAttribute itemref="mail:relatedMessages"/>
+  </Attribute>
+
+  <Attribute itsName="repliedToIn">
+    <displayName>Replied To In</displayName>
+    <description>a list of other Email Messages that are replies to this message</description>
+    <cardinality>list</cardinality>
+    <type itemref="mail:MailMessage"/>
+    <superAttribute itemref="mail:relatedMessages"/>
+  </Attribute>
+
+  <Attribute itsName="inReplyTo">
+    <displayName>In Reply To</displayName>
+    <description>the Email Message that this message is a reply to</description>
+    <type itemref="mail:MailMessage"/>
+    <superAttribute itemref="mail:relatedMessages"/>
+  </Attribute>
+
+  <Attribute itsName="attachments">
+    <displayName>Attachments</displayName>
+    <description>...add description here...</description>
+    <issues>This should have as an inverseAttribute an 'attachedTo' attribute on the 'Attachment'.</issues>
+    <cardinality>list</cardinality>
+    <type itemref="mail:Attachment"/>
+  </Attribute>
+
+  <Attribute itsName="characterEncoding">
+    <displayName>Character Encoding</displayName>
+    <description>...add description here...</description>
+    <type itemref="String"/>
+  </Attribute>
+
+  <Attribute itsName="hasBeenRead">
+    <displayName>Has Been Read</displayName>
+    <description>...add description here...</description>
+    <issues>I suspect that has-been-read is probably a subset of Status.  It traditionally is. -Ducky</issues>
+    <type itemref="Boolean"/>
+  </Attribute>
+
+  <Attribute itsName="downloadAccount">
+    <displayName>Download Account</displayName>
+    <description>used when sending the reply, to make the reply be 'from' the right account</description>
+    <type itemref="mail:EmailAccount"/>
+    <inverseAttribute itemref="mail:downloadedMail"/>
+  </Attribute>
+
+  <Attribute itsName="serverStatus">
+    <displayName>Server Status</displayName>
+    <description>The server status can be either 'on server' or 'deleted from server'.</description>
+    <type itemref="String"/>
+  </Attribute>
+
+  <Attribute itsName="deliveryStatus">
+    <displayName>Delivery Status</displayName>
+    <description>The delivery status can be 'queued', 'sent', or 'unsent'.</description>
+    <type itemref="String"/>
+  </Attribute>
+
+  <Attribute itsName="spamScore">
+    <displayName>Spam Score</displayName>
+    <type itemref="Integer"/>
+  </Attribute>
+
+  <Kind itsName="MailMessageMixin">
+    <displayName>Mail Message Mixin Kind</displayName>
+    <description>This is the set of Message-specific attributes.</description>
+    <description>This Kind is 'mixed in' to others kinds to create Kinds that can be instantiated</description>
+    <attributes itemref="mail:subject"/>
+    <attributes itemref="mail:sentTo"/>
+    <attributes itemref="mail:toAddress"/>
+    <attributes itemref="mail:ccAddress"/>
+    <attributes itemref="mail:bccAddress"/>
+    <attributes itemref="mail:replyAddress"/>
+    <attributes itemref="mail:dateSent"/>
+    <attributes itemref="mail:dateReceived"/>
+    <attributes itemref="mail:deliveryReceiptRequested"/>
+    <attributes itemref="mail:readReceiptRequested"/>
+    <attributes itemref="mail:messageHeader"/>
+    <attributes itemref="mail:messageBody"/>
+    <attributes itemref="mail:relatedMessages"/>
+    <attributes itemref="mail:forwardedIn"/>
+    <attributes itemref="mail:repliedToIn"/>
+    <attributes itemref="mail:inReplyTo"/>
+    <attributes itemref="mail:attachments"/>
+    <attributes itemref="mail:characterEncoding"/>
+    <attributes itemref="mail:hasBeenRead"/>
+    <attributes itemref="mail:downloadAccount"/>
+    <attributes itemref="mail:serverStatus"/>
+    <attributes itemref="mail:deliveryStatus"/>
+    <attributes itemref="mail:spamScore"/>
+
+    <!-- redirections -->
+    <Attribute itsName="who">
+      <redirectTo>toAddress</redirectTo>
+    </Attribute>
+    
+    <Attribute itsName="whoFrom">
+      <redirectTo>replyAddress</redirectTo>
+    </Attribute>
+    
+    <Attribute itsName="about">
+      <redirectTo>subject</redirectTo>
+    </Attribute>
+    
+    <Attribute itsName="date">
+      <redirectTo>dateReceived</redirectTo>
+    </Attribute>  
+    
+    <classes key="python">osaf.contentmodel.mail.Mail.MailMessageMixin</classes>
+      
+    <Cloud itsName="Cloud">
+      <Endpoint itsName="sentTo">
+        <attribute value="sentTo"/>
+        <includePolicy value="byValue"/>
+      </Endpoint>
+      <endpoints itemref="mail:MailMessageMixin/Cloud/sentTo"/>
+
+      <Endpoint itsName="toAddress">
+        <attribute value="toAddress"/>
+        <includePolicy value="byValue"/>
+      </Endpoint>
+      <endpoints itemref="mail:MailMessageMixin/Cloud/toAddress"/>
+
+      <Endpoint itsName="ccAddress">
+        <attribute value="ccAddress"/>
+        <includePolicy value="byValue"/>
+      </Endpoint>
+      <endpoints itemref="mail:MailMessageMixin/Cloud/ccAddress"/>
+
+      <Endpoint itsName="bccAddress">
+        <attribute value="bccAddress"/>
+        <includePolicy value="byValue"/>
+      </Endpoint>
+      <endpoints itemref="mail:MailMessageMixin/Cloud/bccAddress"/>
+
+      <Endpoint itsName="replyAddress">
+        <attribute value="replyAddress"/>
+        <includePolicy value="byValue"/>
+      </Endpoint>
+      <endpoints itemref="mail:MailMessageMixin/Cloud/replyAddress"/>
+
+      <Endpoint itsName="attachments">
+        <attribute value="attachments"/>
+        <includePolicy value="byValue"/>
+      </Endpoint>
+      <endpoints itemref="mail:MailMessageMixin/Cloud/attachments"/>
+
+      <Endpoint itsName="downloadAccount">
+        <attribute value="downloadAccount"/>
+        <includePolicy value="byValue"/>
+      </Endpoint>
+      <endpoints itemref="mail:MailMessageMixin/Cloud/downloadAccount"/>
+
+    </Cloud>
+    <clouds alias="default" itemref="mail:MailMessageMixin/Cloud"/>
+
+    <issues>Once we have attributes and a cloud defined for Attachment, we need to include
+    attachments by cloud, and not by value.</issues>
+      
+    <issues>Really not sure what to do with the "downloadAccount" attribute and
+        how it should be included in the cloud.  For now it's by value.</issues>
+      
+      
+  </Kind>
+
+  <Kind itsName="MailMessage">
+    <displayName>Mail Message</displayName>
+    <description>A Mail Message represents any sort of email message, sent or received.</description>
+    <issues>We need another attribute. A boolean attribute to indicate whether this message was an incoming message or outgoing message. (I suspect that we won't want to derive whether something was in or out.  If we base it on headers, the headers could potentially be forged. -Ducky)</issues>
+    <issues>We probably don't want to have both 'hasBeenRead' and 'status'.</issues>
+    <superKinds itemref="mail:MailMessageMixin"/>
+    <superKinds itemref="content:Note"/>
+    <displayAttribute itemref="mail:subject"/>
+    <classes key="python">osaf.contentmodel.mail.Mail.MailMessage</classes>
+  </Kind>
 
 </Parcel>



More information about the Commits mailing list