james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From vince...@apache.org
Subject cvs commit: james-server/src/java/org/apache/mailet Mail.java
Date Tue, 15 Jul 2003 10:12:45 GMT
vincenzo    2003/07/15 03:12:45

  Modified:    src/conf Tag: branch_2_1_fcs sqlResources.xml
               src/java/org/apache/james/core Tag: branch_2_1_fcs
                        MailImpl.java
               src/java/org/apache/james/mailrepository Tag: branch_2_1_fcs
                        JDBCMailRepository.java
               src/java/org/apache/mailet Tag: branch_2_1_fcs Mail.java
  Log:
  Adding mail attributes support.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.16.4.5  +52 -2     james-server/src/conf/sqlResources.xml
  
  Index: sqlResources.xml
  ===================================================================
  RCS file: /home/cvs/james-server/src/conf/sqlResources.xml,v
  retrieving revision 1.16.4.4
  retrieving revision 1.16.4.5
  diff -u -r1.16.4.4 -r1.16.4.5
  --- sqlResources.xml	23 Jun 2003 00:56:12 -0000	1.16.4.4
  +++ sqlResources.xml	15 Jul 2003 10:12:44 -0000	1.16.4.5
  @@ -171,8 +171,23 @@
       <!-- Statements used to update the body of a message stored in this repository.
-->
       <sql name="updateMessageBodySQL">UPDATE ${table} SET message_body = ? WHERE message_name
= ? AND repository_name = ?</sql>
   
  +    <!-- Statements used to update the attributes of a message stored in this repository.
-->
  +    <!-- Uncomment this statement to activate the attributes support.
  +    <sql name="updateMessageAttributesSQL">UPDATE ${table} SET message_attributes
= ? WHERE message_name = ? AND repository_name = ?</sql>
  +    -->
  +
       <!-- Statements used to insert a message into this repository. -->
  -    <sql name="insertMessageSQL">INSERT INTO ${table} (message_name, repository_name,
message_state, error_message, sender, recipients, remote_host, remote_addr, last_updated,
message_body) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</sql>
  +    <sql name="insertMessageSQL">INSERT INTO ${table} (message_name,
  +    repository_name, message_state, error_message, sender, recipients,
  +    remote_host, remote_addr, last_updated, message_body) VALUES (?, ?, ?, ?, ?, ?, ?,
?, ?, ?)</sql>
  +
  +    <!-- Statements used to insert a message with attributes into this repository. -->
  +    <!-- Uncomment this statement and comment the previous one to activate the attributes
support.
  +    <sql name="insertMessageSQL">INSERT INTO ${table} (message_name,
  +    repository_name, message_state, error_message, sender, recipients,
  +    remote_host, remote_addr, last_updated, message_body,
  +    message_attributes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</sql>
  +    -->
   
       <!-- Statements used to retrieve a message stored in this repository. -->
       <sql name="retrieveMessageSQL">SELECT message_state, error_message, sender, recipients,
remote_host, remote_addr, last_updated FROM ${table} WHERE message_name = ? AND repository_name
= ?</sql>
  @@ -180,6 +195,11 @@
       <!-- Statements used to retrieve the body of a message stored in this repository.
-->
       <sql name="retrieveMessageBodySQL">SELECT message_body FROM ${table} WHERE message_name
= ? AND repository_name = ?</sql>
   
  +    <!-- Statements used to retrieve the attributes of a message stored in this repository.
-->
  +    <!-- Uncomment this statement to activate the attributes support.
  +    <sql name="retrieveMessageAttributesSQL">SELECT message_attributes FROM ${table}
WHERE message_name = ? AND repository_name = ?</sql>
  +     -->
  +
       <!-- Statements used to retrieve the size of the body of a message stored in this
repository. -->
       <!-- NOTE: This statement is optional and need not be implemented for a particular
database to be supported. -->
       <sql name="retrieveMessageBodySizeSQL" db="mssql">SELECT datalength(message_body)
FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
  @@ -205,6 +225,7 @@
               remote_host varchar (255) NOT NULL ,
               remote_addr varchar (20) NOT NULL ,
               message_body longblob NOT NULL ,
  +            message_attributes longblob NOT NULL ,
               last_updated datetime NOT NULL,
               PRIMARY KEY (repository_name, message_name)
           )
  @@ -220,6 +241,7 @@
               remote_host varchar (255) NOT NULL ,
               remote_addr varchar (20) NOT NULL ,
               message_body varchar NOT NULL ,
  +            message_attributes varchar NOT NULL ,
               last_updated timestamp NOT NULL,
               PRIMARY KEY (repository_name, message_name)
           )
  @@ -235,6 +257,7 @@
               [remote_host] [varchar] (255) NOT NULL ,
               [remote_addr] [varchar] (20) NOT NULL ,
               [message_body] [image] NOT NULL ,
  +            [message_attributes] [image] NOT NULL ,
               [last_updated] [datetime] NOT NULL,
               PRIMARY KEY (repository_name, message_name)
           )
  @@ -250,6 +273,7 @@
           remote_host varchar2(100) NOT NULL ,
           remote_addr varchar2(20) NOT NULL ,
           message_body long raw NOT NULL ,
  +        message_attributes long raw NOT NULL ,
           last_updated date NOT NULL ,
           PRIMARY KEY (repository_name, message_name)
           )
  @@ -266,6 +290,7 @@
               remote_host varchar (255) NOT NULL ,
               remote_addr varchar (20) NOT NULL ,
               message_body bytea NOT NULL ,
  +            message_attributes bytea NOT NULL ,
               last_updated timestamp NOT NULL,
               PRIMARY KEY (repository_name, message_name)
           )
  @@ -281,6 +306,7 @@
               remote_host varchar (100) NOT NULL ,
               remote_addr varchar (20) NOT NULL ,
               message_body long byte NOT NULL ,
  +            message_attributes long byte NOT NULL ,
               last_updated date NOT NULL,
               PRIMARY KEY (repository_name, message_name)
           )
  @@ -302,8 +328,21 @@
       <!-- Statements used to update the body of a message stored in this repository.
-->
       <sql name="updateMessageBodySQL">UPDATE ${table} SET message_body = ? WHERE message_name
= ? AND repository_name = ?</sql>
   
  +    <!-- Statements used to update the attributes of a message stored in this repository.
-->
  +    <!-- Uncomment this statement to activate the attributes support.
  +    <sql name="updateMessageAttributesSQL">UPDATE ${table} SET message_attributes
= ? WHERE message_name = ? AND repository_name = ?</sql>
  +    -->
  +
       <!-- Statements used to insert a message into this repository. -->
       <sql name="insertMessageSQL">INSERT INTO ${table} (message_name, repository_name,
message_state, error_message, sender, recipients, remote_host, remote_addr, last_updated,
message_body) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</sql>
  +    
  +    <!-- Statements used to insert a message with attributes into this repository. -->
  +    <!-- Uncomment this statement and comment the previous one to activate the attributes
support.
  +    <sql name="insertMessageSQL">INSERT INTO ${table} (message_name,
  +    repository_name, message_state, error_message, sender, recipients,
  +    remote_host, remote_addr, last_updated, message_body,
  +    message_attributes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</sql>
  +    -->
   
       <!-- Statements used to retrieve a message stored in this repository. -->
       <sql name="retrieveMessageSQL">SELECT message_state, error_message, sender, recipients,
remote_host, remote_addr, last_updated FROM ${table} WHERE message_name = ? AND repository_name
= ?</sql>
  @@ -311,6 +350,11 @@
       <!-- Statements used to retrieve the body of a message stored in this repository.
-->
       <sql name="retrieveMessageBodySQL">SELECT message_body FROM ${table} WHERE message_name
= ? AND repository_name = ?</sql>
   
  +    <!-- Statements used to retrieve the attributes of a message stored in this repository.
-->
  +    <!-- Uncomment this statement to activate the attributes support.
  +    <sql name="retrieveMessageAttributesSQL">SELECT message_attributes FROM ${table}
WHERE message_name = ? AND repository_name = ?</sql>
  +    -->
  +    
       <!-- Statements used to retrieve the size of the body of a message stored in this
repository. -->
       <!-- NOTE: This statement is optional and need not be implemented for a particular
database to be supported. -->
       <sql name="retrieveMessageBodySizeSQL" db="mssql">SELECT datalength(message_body)
FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
  @@ -336,6 +380,7 @@
               remote_host varchar (255) NOT NULL ,
               remote_addr varchar (20) NOT NULL ,
               message_body varchar NOT NULL ,
  +            message_attributes varchar NOT NULL ,
               last_updated timestamp NOT NULL,
               PRIMARY KEY (message_name, repository_name)
           )
  @@ -351,6 +396,7 @@
               remote_host varchar (255) NOT NULL ,
               remote_addr varchar (20) NOT NULL ,
               message_body longblob NOT NULL ,
  +            message_attributes longblob NOT NULL ,
               last_updated datetime NOT NULL,
               PRIMARY KEY (message_name, repository_name)
           )
  @@ -366,8 +412,9 @@
               [remote_host] [varchar] (255) NOT NULL ,
               [remote_addr] [varchar] (20) NOT NULL ,
               [message_body] [image] NOT NULL ,
  +            [message_attributes] [image] NOT NULL ,
               [last_updated] [datetime] NOT NULL,
  -            PRIMARY KEY (repository_name, message_name)
  +            PRIMARY KEY (message_name, repository_name)
           )
       </sql>
       <sql name="createTable" db="oracle">
  @@ -381,6 +428,7 @@
           remote_host varchar2(255) NOT NULL ,
           remote_addr varchar2(20) NOT NULL ,
           message_body long raw NOT NULL ,
  +        message_attributes long raw NOT NULL ,
           last_updated date NOT NULL ,
           PRIMARY KEY (message_name, repository_name)
           )
  @@ -396,6 +444,7 @@
               remote_host varchar (255) NOT NULL ,
               remote_addr varchar (20) NOT NULL ,
               message_body bytea NOT NULL ,
  +            message_attributes bytea NOT NULL ,
               last_updated timestamp NOT NULL,
               PRIMARY KEY (message_name, repository_name)
           )
  @@ -411,6 +460,7 @@
               remote_host varchar (255) NOT NULL ,
               remote_addr varchar (20) NOT NULL ,
               message_body long byte NOT NULL ,
  +            message_attributes long byte NOT NULL ,
               last_updated date NOT NULL,
               PRIMARY KEY (message_name, repository_name)
           )
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.17.4.3  +78 -5     james-server/src/java/org/apache/james/core/MailImpl.java
  
  Index: MailImpl.java
  ===================================================================
  RCS file: /home/cvs/james-server/src/java/org/apache/james/core/MailImpl.java,v
  retrieving revision 1.17.4.2
  retrieving revision 1.17.4.3
  diff -u -r1.17.4.2 -r1.17.4.3
  --- MailImpl.java	8 Mar 2003 21:54:03 -0000	1.17.4.2
  +++ MailImpl.java	15 Jul 2003 10:12:44 -0000	1.17.4.3
  @@ -77,14 +77,12 @@
   import java.util.Enumeration;
   import java.util.HashSet;
   import java.util.Iterator;
  +import java.util.HashMap;
   
   /**
    * Wraps a MimeMessage adding routing information (from SMTP) and some simple
    * API enhancements.
  - * @author Federico Barbieri <scoobie@systemy.it>
  - * @author Serge Knystautas <sergek@lokitech.com>
  - * @author Stuart Roebuck <stuart.roebuck@adolos.co.uk>
  - * @version 0.9
  + * @version CVS $Revision$ $Date$
    */
   public class MailImpl implements Disposable, Mail {
       /**
  @@ -129,10 +127,15 @@
        */
       private Date lastUpdated = new Date();
       /**
  +     * Attributes added to this MailImpl instance
  +     */
  +    private HashMap attributes;
  +    /**
        * A constructor that creates a new, uninitialized MailImpl
        */
       public MailImpl() {
           setState(Mail.DEFAULT);
  +        attributes = new HashMap();
       }
       /**
        * A constructor that creates a MailImpl with the specified name,
  @@ -230,6 +233,7 @@
               newMail.setRemoteHost(remoteHost);
               newMail.setRemoteAddr(remoteAddr);
               newMail.setLastUpdated(lastUpdated);
  +            newMail.setAttributesRaw((HashMap) attributes.clone());
               return newMail;
           } catch (MessagingException me) {
               // Ignored.  Return null in the case of an error.
  @@ -515,7 +519,15 @@
           name = (String) in.readObject();
           remoteHost = (String) in.readObject();
           remoteAddr = (String) in.readObject();
  -        setLastUpdated((Date) in.readObject());
  +        Object o = in.readObject();
  +        //this check is done to be backwards compatible with mail repositories
  +        if (o instanceof Date) {
  +            setLastUpdated((Date)o);
  +            attributes = new HashMap();
  +        } else {
  +            attributes = (HashMap)o;
  +            setLastUpdated((Date) in.readObject());
  +        }
       }
       /**
        * Write the MailImpl to an <code>ObjectOutputStream</code>.
  @@ -533,6 +545,7 @@
           out.writeObject(name);
           out.writeObject(remoteHost);
           out.writeObject(remoteAddr);
  +        out.writeObject(attributes);
           out.writeObject(lastUpdated);
       }
   
  @@ -550,4 +563,64 @@
           }
       }
   
  +    /**
  +     * This method is necessary, when Mail repositories needs to deal
  +     * explicitly with storing Mail attributes as a Serializable
  +     * Note: This method is not exposed in the Mail interface,
  +     * it is for internal use by James only.
  +     * @return Serializable of the entire attributes collection
  +     **/
  +    public HashMap getAttributesRaw ()
  +    {
  +        return attributes;
  +    }
  +    
  +    /**
  +     * This method is necessary, when Mail repositories needs to deal
  +     * explicitly with retriving Mail attributes as a Serializable
  +     * Note: This method is not exposed in the Mail interface,
  +     * it is for internal use by James only.
  +     * @return Serializable of the entire attributes collection
  +     **/
  +    public void setAttributesRaw (HashMap attr)
  +    {
  +        this.attributes = (attr == null) ? new HashMap() : attr;
  +    }
  +
  +    /**
  +     * @see org.apache.mailet.Mail#getAttribute(String)
  +     */
  +    public Serializable getAttribute(String key) {
  +        return (Serializable)attributes.get(key);
  +    }
  +    /**
  +     * @see org.apache.mailet.Mail#setAttribute(String,Serializable)
  +     */
  +    public Serializable setAttribute(String key, Serializable object) {
  +        return (Serializable)attributes.put(key, object);
  +    }
  +    /**
  +     * @see org.apache.mailet.Mail#removeAttribute(String)
  +     */
  +    public Serializable removeAttribute(String key) {
  +        return (Serializable)attributes.remove(key);
  +    }
  +    /**
  +     * @see org.apache.mailet.Mail#removeAllAttributes()
  +     */
  +    public void removeAllAttributes() {
  +        attributes.clear();
  +    }
  +    /**
  +     * @see org.apache.mailet.Mail#getAttributeNames()
  +     */
  +    public Iterator getAttributeNames() {
  +        return attributes.keySet().iterator();
  +    }
  +    /**
  +     * @see org.apache.mailet.Mail#hasAttributes()
  +     */
  +    public boolean hasAttributes() {
  +        return !attributes.isEmpty();
  +    }
   }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.30.4.7  +143 -2    james-server/src/java/org/apache/james/mailrepository/JDBCMailRepository.java
  
  Index: JDBCMailRepository.java
  ===================================================================
  RCS file: /home/cvs/james-server/src/java/org/apache/james/mailrepository/JDBCMailRepository.java,v
  retrieving revision 1.30.4.6
  retrieving revision 1.30.4.7
  diff -u -r1.30.4.6 -r1.30.4.7
  --- JDBCMailRepository.java	31 May 2003 23:42:29 -0000	1.30.4.6
  +++ JDBCMailRepository.java	15 Jul 2003 10:12:45 -0000	1.30.4.7
  @@ -89,6 +89,8 @@
   import java.io.ByteArrayOutputStream;
   import java.io.File;
   import java.io.IOException;
  +import java.io.ObjectOutputStream;
  +import java.io.ObjectInputStream;
   import java.io.OutputStream;
   import java.sql.*;
   import java.util.*;
  @@ -107,7 +109,7 @@
    *
    * <p>Requires a logger called MailRepository.
    *
  - * @version 1.0.0, 24/04/1999
  + * @version CVS $Revision$ $Date$
    */
   public class JDBCMailRepository
       extends AbstractLogEnabled
  @@ -537,6 +539,43 @@
                       theJDBCUtil.closeJDBCStatement(localUpdateMessage);
                   }
   
  +                //Determine whether attribues are used and available for storing
  +                //Do we have updateMessageAttributesSQL?
  +                String updateMessageAttrSql =
  +                    sqlQueries.getSqlString("updateMessageAttributesSQL", false);
  +                if (updateMessageAttrSql!=null && mc.hasAttributes()) {
  +                    PreparedStatement updateMessageAttr = null;
  +                    try {
  +                        updateMessageAttr =
  +                            conn.prepareStatement(updateMessageAttrSql);
  +                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
  +                        ObjectOutputStream oos = new ObjectOutputStream(baos);
  +                        try {
  +                            oos.writeObject(((MailImpl)mc).getAttributesRaw());
  +                            oos.flush();
  +                            ByteArrayInputStream attrInputStream =
  +                                new ByteArrayInputStream(baos.toByteArray());
  +                            updateMessageAttr.setBinaryStream(1, attrInputStream, baos.size());
  +                        } finally {
  +                            try {
  +                                if (oos != null) {
  +                                    oos.close();
  +                                }
  +                            } catch (IOException ioe) {
  +                                getLogger().debug("JDBCMailRepository: Unexpected exception
while closing output stream.");
  +                            }
  +                        }
  +                        updateMessageAttr.setString(2, mc.getName());
  +                        updateMessageAttr.setString(3, repositoryName);
  +                        updateMessageAttr.execute();
  +                    } catch (SQLException sqle) {
  +                        getLogger().info("JDBCMailRepository: Trying to update mail attributes
failed.",sqle);
  +                        
  +                    } finally {
  +                        theJDBCUtil.closeJDBCStatement(updateMessageAttr);
  +                    }
  +                }
  +
                   //Determine whether the message body has changed, and possibly avoid
                   //  updating the database.
                   MimeMessage messageBody = mc.getMessage();
  @@ -585,8 +624,10 @@
                   //Insert the record into the database
                   PreparedStatement insertMessage = null;
                   try {
  +                    String insertMessageSQL = sqlQueries.getSqlString("insertMessageSQL",
true);
  +                    int number_of_parameters = getNumberOfParameters (insertMessageSQL);
                       insertMessage =
  -                        conn.prepareStatement(sqlQueries.getSqlString("insertMessageSQL",
true));
  +                        conn.prepareStatement(insertMessageSQL);
                       insertMessage.setString(1, mc.getName());
                       insertMessage.setString(2, repositoryName);
                       insertMessage.setString(3, mc.getState());
  @@ -631,6 +672,28 @@
                           closeOutputStreams(headerOut, bodyOut);
                       }
                       //Store the headers in the database
  +
  +                    //Store attributes
  +                    if (number_of_parameters > 10) {
  +                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
  +                        ObjectOutputStream oos = new ObjectOutputStream(baos);
  +                        try {
  +                            oos.writeObject(((MailImpl)mc).getAttributesRaw());
  +                            oos.flush();
  +                            ByteArrayInputStream attrInputStream =
  +                                new ByteArrayInputStream(baos.toByteArray());
  +                            insertMessage.setBinaryStream(11, attrInputStream, baos.size());
  +                        } finally {
  +                            try {
  +                                if (oos != null) {
  +                                    oos.close();
  +                                }
  +                            } catch (IOException ioe) {
  +                                getLogger().debug("JDBCMailRepository: Unexpected exception
while closing output stream.");
  +                            }
  +                        }                        
  +                    }
  +                    
                       insertMessage.execute();
                   } finally {
                       theJDBCUtil.closeJDBCStatement(insertMessage);
  @@ -692,7 +755,68 @@
                   }
                   return null;
               }
  +            //Determine whether attribues are used and retrieve them
  +            //Do we have retrieveAttributesSQL?
  +            String retrieveMessageAttrSql =
  +                sqlQueries.getSqlString("retrieveMessageAttributesSQL", false);
  +            PreparedStatement retrieveMessageAttr = null;
  +            HashMap attributes = null;
  +            if (retrieveMessageAttrSql!=null) {
  +                ResultSet rsMessageAttr = null;
  +                try {
  +                    retrieveMessageAttr =
  +                        conn.prepareStatement(retrieveMessageAttrSql);
  +                    
  +                    retrieveMessageAttr.setString(1, key);
  +                    retrieveMessageAttr.setString(2, repositoryName);
  +                    rsMessageAttr = retrieveMessageAttr.executeQuery();
  +                    
  +                    if (rsMessageAttr.next()) {
  +                        try {
  +                            byte[] serialized_attr = rsMessageAttr.getBytes(1);
  +                            ByteArrayInputStream bais = new ByteArrayInputStream (serialized_attr);
  +                            ObjectInputStream ois = new ObjectInputStream (bais);
  +                            attributes = (HashMap)ois.readObject();
  +                            ois.close();
  +                        } catch (IOException ioe) {
  +                            if (getLogger().isDebugEnabled()) {
  +                                StringBuffer debugBuffer =
  +                                    new StringBuffer(64)
  +                                    .append("Exception reading attributes ")
  +                                    .append(key)
  +                                    .append(" in ")
  +                                    .append(repositoryName);
  +                                getLogger().debug(debugBuffer.toString(), ioe);
  +                            }
  +                        }
  +                    } else {
  +                        if (getLogger().isDebugEnabled()) {
  +                            StringBuffer debugBuffer =
  +                                new StringBuffer(64)
  +                                .append("Did not find a record (attributes) ")
  +                                .append(key)
  +                                .append(" in ")
  +                            .append(repositoryName);
  +                            getLogger().debug(debugBuffer.toString());
  +                        }
  +                    }
  +                } catch (SQLException sqle) {
  +                    synchronized (System.err) {
  +                        System.err.println("Error retrieving message");
  +                        System.err.println(sqle.getMessage());
  +                        System.err.println(sqle.getErrorCode());
  +                        System.err.println(sqle.getSQLState());
  +                        System.err.println(sqle.getNextException());
  +                        sqle.printStackTrace();
  +                    }
  +                } finally {
  +                    theJDBCUtil.closeJDBCResultSet(rsMessageAttr);
  +                    theJDBCUtil.closeJDBCStatement(retrieveMessageAttr);
  +                }
  +            }
  +
               MailImpl mc = new MailImpl();
  +            mc.setAttributesRaw (attributes);
               mc.setName(key);
               mc.setState(rsMessage.getString(1));
               mc.setErrorMessage(rsMessage.getString(2));
  @@ -847,6 +971,23 @@
           }
           return result;
        }
  +
  +    /**
  +     * This method calculates number of parameters in a prepared statement SQL String.
  +     * It does so by counting the number of '?' in the string 
  +     * @param sqlstring to return parameter count for
  +     * @return number of parameters
  +     **/
  +    private int getNumberOfParameters (String sqlstring) {
  +        //it is alas a java 1.4 feature to be able to call
  +        //getParameterMetaData which could provide us with the parameterCount
  +        char[] chars = sqlstring.toCharArray();
  +        int count = 0;
  +        for (int i = 0; i < chars.length; i++) {
  +            count += chars[i]=='?' ? 1 : 0;
  +        }
  +        return count;
  +    }
   
       /**
        * Closes output streams used to update message
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.3.4.3   +67 -3     james-server/src/java/org/apache/mailet/Mail.java
  
  Index: Mail.java
  ===================================================================
  RCS file: /home/cvs/james-server/src/java/org/apache/mailet/Mail.java,v
  retrieving revision 1.3.4.2
  retrieving revision 1.3.4.3
  diff -u -r1.3.4.2 -r1.3.4.3
  --- Mail.java	8 Mar 2003 21:54:13 -0000	1.3.4.2
  +++ Mail.java	15 Jul 2003 10:12:45 -0000	1.3.4.3
  @@ -62,6 +62,7 @@
   import javax.mail.internet.MimeMessage;
   import java.io.Serializable;
   import java.util.Collection;
  +import java.util.Iterator;
   
   /**
    * Wrap a MimeMessage with routing information (from SMTP) such
  @@ -70,9 +71,7 @@
    * which processor in the mailet container it is currently running.
    * Special processor names are "root" and "error".
    *
  - * @author Federico Barbieri <scoobie@systemy.it>
  - * @author Serge Knystautas <sergek@lokitech.com>
  - * @version 0.9
  + * @version CVS $Revision$ $Date$
    */
   public interface Mail extends Serializable, Cloneable {
       String GHOST = "ghost";
  @@ -150,4 +149,69 @@
        * @param state - the new state of this message
        */
       void setState(String state);
  +
  +    /**
  +     * Returns the Mail session attribute with the given name, or null
  +     * if there is no attribute by that name.
  +     * An attribute allows a mailet to give this Mail instance additional information
  +     * not already provided by this interface.<p>
  +     * A list of currently set attributes can be retrieved using getAttributeNames.
  +     * <p>
  +     * The attribute is returned as a java.lang.Object or some subclass. Attribute
  +     * names should follow the same convention as package names. The Java Mailet API
  +     * specification reserves names matching java.*, javax.*, and sun.*
  +     *
  +     * @param name - a String specifying the name of the attribute
  +     * @return an Object containing the value of the attribute, or null if no attribute
  +     *      exists matching the given name
  +     */
  +    Serializable getAttribute(String name);
  +
  +    /**
  +     * Returns an Iterator containing the attribute names currently available within
  +     * this Mail instance.  Use the getAttribute(java.lang.String) method with an
  +     * attribute name to get the value of an attribute.
  +     *
  +     * @return an Iterator of attribute names
  +     */
  +    Iterator getAttributeNames();
  +
  +    /**
  +     * @return true if this Mail instance has any attributes set.
  +     **/
  +    boolean hasAttributes();
  +    
  +    /**
  +     * Removes the attribute with the given name from this Mail instance. After
  +     * removal, subsequent calls to getAttribute(java.lang.String) to retrieve
  +     * the attribute's value will return null.
  +     *
  +     * @param name - a String specifying the name of the attribute to be removed
  +     * @return previous attribute value associated with specified name, or null
  +     * if there was no mapping for name (null can also mean that null
  +     * was bound to the name)
  +     */
  +    Serializable removeAttribute(String name);
  +
  +    /**
  +     * Removes all the attributes associated with this Mail instance.  
  +     **/
  +    void removeAllAttributes();
  +    
  +    /**
  +     * Binds an object to a given attribute name in this Mail instance. If the name
  +     * specified is already used for an attribute, this method will remove the old
  +     * attribute and bind the name to the new attribute.
  +     * As instances of Mail is Serializable, it is necessary that the attributes being
  +     * Serializable as well
  +     * <p>
  +     * Attribute names should follow the same convention as package names. The Java
  +     * Mailet API specification reserves names matching java.*, javax.*, and sun.*.
  +     *
  +     * @param name - a String specifying the name of the attribute
  +     * @param object - a Serializable Object representing the attribute to be bound
  +     * @return the object previously bound to the name, null if the name was
  +     * not bound (null can also mean that null was bound to the name)
  +     */
  +    Serializable setAttribute(String name, Serializable object);
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Mime
View raw message