Author: imario
Date: Tue Jan 16 06:48:22 2007
New Revision: 496713

URL: http://svn.apache.org/viewvc?view=rev&rev=496713
Log:
introduced another special file "_content" to allow access to the mail itself 
(eg. its content-type) and to its content

Modified:
    
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileContentInfoFactory.java
    
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileObject.java
    
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileSystem.java

Modified: 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileContentInfoFactory.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileContentInfoFactory.java?view=diff&rev=496713&r1=496712&r2=496713
==============================================================================
--- 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileContentInfoFactory.java
 (original)
+++ 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileContentInfoFactory.java
 Tue Jan 16 06:48:22 2007
@@ -16,17 +16,15 @@
  */
 package org.apache.commons.vfs.provider.mime;
 
-import org.apache.commons.vfs.FileContentInfoFactory;
-import org.apache.commons.vfs.FileContentInfo;
 import org.apache.commons.vfs.FileContent;
+import org.apache.commons.vfs.FileContentInfo;
+import org.apache.commons.vfs.FileContentInfoFactory;
 import org.apache.commons.vfs.FileSystemException;
 import org.apache.commons.vfs.impl.DefaultFileContentInfo;
 
 import javax.mail.MessagingException;
 import javax.mail.Part;
-import javax.mail.Message;
 import javax.mail.internet.ContentType;
-import java.io.IOException;
 
 /**
  * get access to the content info stuff for mime objects
@@ -39,13 +37,22 @@
        public FileContentInfo create(FileContent fileContent) throws 
FileSystemException
        {
                MimeFileObject mimeFile = (MimeFileObject) 
fileContent.getFile();
+               Part part = mimeFile.getPart();
+
+               String contentTypeString = null;
+               String charset = null;
+
                try
                {
+                       // special handling for multipart
                        if (mimeFile.isMultipart())
                        {
-                               // if this is a multipart message we deliver 
the preamble instead of an inupt string
+                               // get the original content type, but ...
+                               contentTypeString = part.getContentType();
+
+                               // .... we deliver the preamble instead of an 
inupt string
                                // the preamble will be delivered in UTF-8 - 
fixed
-                               return new DefaultFileContentInfo("text/plain", 
MimeFileSystem.PREAMBLE_CHARSET); // NON-NLS
+                               charset = MimeFileSystem.PREAMBLE_CHARSET;
                        }
                }
                catch (MessagingException e)
@@ -53,29 +60,18 @@
                        throw new FileSystemException(e);
                }
 
-               String contentTypeString = null;
-
-               Part part = mimeFile.getPart();
-               try
+               if (contentTypeString == null)
                {
-                       Object content = part.getContent();
-                       if (content instanceof Message)
+                       // normal message ... get the content type
+                       try
                        {
-                               contentTypeString = ((Message) 
content).getContentType();
+                               contentTypeString = part.getContentType();
                        }
-                       else
+                       catch (MessagingException e)
                        {
-                               contentTypeString = part.getContentType();
+                               throw new FileSystemException(e);
                        }
                }
-               catch (IOException e)
-               {
-                       throw new FileSystemException(e);
-               }
-               catch (MessagingException e)
-               {
-                       throw new FileSystemException(e);
-               }
 
                ContentType contentType;
                try
@@ -87,8 +83,15 @@
                        throw new FileSystemException(e);
                }
 
+               if (charset == null)
+               {
+                       // charset might already be set by the multipart 
message stuff, else
+                       // extract it from the contentType now
+                       charset = contentType.getParameter("charset"); // 
NON-NLS
+               }
+
                return new DefaultFileContentInfo(
                        contentType.getBaseType(),
-                       contentType.getParameter("charset")); // NON-NLS
+                       charset);
        }
 }

Modified: 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileObject.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileObject.java?view=diff&rev=496713&r1=496712&r2=496713
==============================================================================
--- 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileObject.java
 (original)
+++ 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileObject.java
 Tue Jan 16 06:48:22 2007
@@ -22,6 +22,7 @@
 import org.apache.commons.vfs.FileSystemException;
 import org.apache.commons.vfs.FileType;
 import org.apache.commons.vfs.NameScope;
+import org.apache.commons.vfs.VFS;
 import org.apache.commons.vfs.provider.AbstractFileObject;
 import org.apache.commons.vfs.provider.AbstractFileSystem;
 import org.apache.commons.vfs.provider.UriParser;
@@ -86,32 +87,34 @@
                        return null;
                }
 
-               if (!isMultipart())
-               {
-                       // not a multipart
-                       return null;
-               }
-
-               Multipart multipart = (Multipart)  part.getContent();
-               if (partName.startsWith(MimeFileSystem.NULL_BP_NAME))
+               if (isMultipart())
                {
-                       int partNumber = 
Integer.parseInt(partName.substring(MimeFileSystem.NULL_BP_NAME.length()), 10);
-                       if (partNumber < 0 || partNumber+1 > 
multipart.getCount())
+                       Multipart multipart = (Multipart)  part.getContent();
+                       if (partName.startsWith(MimeFileSystem.NULL_BP_NAME))
                        {
-                               // non existent
-                               return null;
+                               int partNumber = 
Integer.parseInt(partName.substring(MimeFileSystem.NULL_BP_NAME.length()), 10);
+                               if (partNumber < 0 || partNumber+1 > 
multipart.getCount())
+                               {
+                                       // non existent
+                                       return null;
+                               }
+
+                               return multipart.getBodyPart(partNumber);
                        }
 
-                       return multipart.getBodyPart(partNumber);
+                       for (int i = 0; i<multipart.getCount(); i++)
+                       {
+                               Part childPart = multipart.getBodyPart(i);
+                               if (partName.equals(childPart.getFileName()))
+                               {
+                                       return childPart;
+                               }
+                       }
                }
 
-               for (int i = 0; i<multipart.getCount(); i++)
+               if (partName.equals(MimeFileSystem.CONTENT_NAME))
                {
-                       Part childPart = multipart.getBodyPart(i);
-                       if (partName.equals(childPart.getFileName()))
-                       {
-                               return childPart;
-                       }
+                       return (Part) part.getContent();
                }
 
                return null;
@@ -132,11 +135,13 @@
                        return FileType.IMAGINARY;
                }
 
+               /*
                if (!isMultipart())
                {
                        // we cant have children ...
                        return FileType.FILE;
                }
+               */
 
                // we have both
                return FileType.FILE_OR_FOLDER;
@@ -158,7 +163,7 @@
                        return null;
                }
 
-               List vfs = Collections.EMPTY_LIST;
+               List vfs = new ArrayList();
                if (isMultipart())
                {
                        Object container = part.getContent();
@@ -187,6 +192,20 @@
                                }
                        }
                }
+               else
+               {
+                       Object content = part.getContent();
+                       if (content instanceof Part)
+                       {
+                               MimeFileObject fo = (MimeFileObject) 
FileObjectUtils.getAbstractFileObject(getFileSystem().resolveFile(
+                                       
getFileSystem().getFileSystemManager().resolveName(
+                                               getName(),
+                                               MimeFileSystem.CONTENT_NAME,
+                                               NameScope.CHILD)));
+                               fo.setPart((Part) content);
+                               vfs.add(fo);
+                       }
+               }
 
                return (MimeFileObject[]) vfs.toArray(new 
MimeFileObject[vfs.size()]);
        }
@@ -250,14 +269,6 @@
                        return new 
ByteArrayInputStream(preamble.getBytes(MimeFileSystem.PREAMBLE_CHARSET));
                }
 
-               // try to deliver the content only
-               Object content = part.getContent();
-               if (content instanceof Message)
-               {
-                       return ((Message) content).getInputStream();
-               }
-
-               // hmmm ... dont know, deliver the plain stream
                return part.getInputStream();
        }
 

Modified: 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileSystem.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileSystem.java?view=diff&rev=496713&r1=496712&r2=496713
==============================================================================
--- 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileSystem.java
 (original)
+++ 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileSystem.java
 Tue Jan 16 06:48:22 2007
@@ -47,6 +47,7 @@
        private Log log = LogFactory.getLog(MimeFileSystem.class);
 
        public final static String NULL_BP_NAME = "_body_part_";
+       public final static String CONTENT_NAME = "_content";
        public final static String PREAMBLE_CHARSET = "UTF-8";
 
        private InputStream mimeStream = null;



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to