Author: imario
Date: Mon Nov 13 11:57:44 2006
New Revision: 474472

URL: http://svn.apache.org/viewvc?view=rev&rev=474472
Log:
deal with signed mails, reworked attach to allow direct access to nested parts 
like: 
mime:file:///home/im/tmp/mail/TextHtmlSigned.mime!/_body_part_0/_body_part_0

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

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=474472&r1=474471&r2=474472
==============================================================================
--- 
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
 Mon Nov 13 11:57:44 2006
@@ -72,7 +72,9 @@
                {
                        if (!getName().equals(getFileSystem().getRootName()))
                        {
-                               throw new IllegalStateException();
+                               MimeFileObject foParent = (MimeFileObject) 
FileObjectUtils.getAbstractFileObject(getParent());
+                               part = 
foParent.findPart(getName().getBaseName());
+                               return;
                        }
 
                        FileObject parentLayer = 
getFileSystem().getParentLayer();
@@ -112,7 +114,46 @@
                }
        }
 
-    protected void doDetach() throws Exception
+       private Part findPart(String partName) throws Exception
+       {
+               if (getType() == FileType.IMAGINARY)
+               {
+                       // not existent
+                       return null;
+               }
+
+               if (part.getContentType() == null || 
!part.getContentType().startsWith("multipart/"))
+               {
+                       // not a multipart
+                       return null;
+               }
+
+               Multipart multipart = (Multipart)  part.getContent();
+               if (partName.startsWith(MimeFileSystem.NULL_BP_NAME))
+               {
+                       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);
+               }
+
+               for (int i = 0; i<multipart.getCount(); i++)
+               {
+                       Part childPart = multipart.getBodyPart(i);
+                       if (partName.equals(childPart.getFileName()))
+                       {
+                               return childPart;
+                       }
+               }
+
+               return null;
+       }
+
+       protected void doDetach() throws Exception
     {
     }
 
@@ -146,39 +187,34 @@
                        return null;
                }
 
-               List vfs;
-               Object container = part;
-               if (container instanceof Message)
-               {
-                       container = ((Message) container).getContent();
-               }
-               if (container instanceof Multipart)
+               List vfs = Collections.EMPTY_LIST;
+               if (part.getContentType() != null && 
part.getContentType().startsWith("multipart/"))
                {
-                       Multipart multipart = (Multipart) container;
-                       vfs = new ArrayList(multipart.getCount());
-
-                       for (int i = 0; i<multipart.getCount(); i++)
+                       Object container = part.getContent();
+                       if (container instanceof Multipart)
                        {
-                               Part part = multipart.getBodyPart(i);
+                               Multipart multipart = (Multipart) container;
+                               vfs = new ArrayList(multipart.getCount());
 
-                               String filename = 
UriParser.encode(part.getFileName());
-                               if (filename == null)
+                               for (int i = 0; i<multipart.getCount(); i++)
                                {
-                                       filename = MimeFileSystem.NULL_BP_NAME 
+ i;
-                               }
+                                       Part part = multipart.getBodyPart(i);
+
+                                       String filename = 
UriParser.encode(part.getFileName());
+                                       if (filename == null)
+                                       {
+                                               filename = 
MimeFileSystem.NULL_BP_NAME + i;
+                                       }
 
-                               MimeFileObject fo = (MimeFileObject) 
FileObjectUtils.getAbstractFileObject(getFileSystem().resolveFile(
-                                       
getFileSystem().getFileSystemManager().resolveName(
-                                               getName(),
-                                               filename,
-                                               NameScope.CHILD)));
-                               fo.setPart(part);
-                               vfs.add(fo);
+                                       MimeFileObject fo = (MimeFileObject) 
FileObjectUtils.getAbstractFileObject(getFileSystem().resolveFile(
+                                               
getFileSystem().getFileSystemManager().resolveName(
+                                                       getName(),
+                                                       filename,
+                                                       NameScope.CHILD)));
+                                       fo.setPart(part);
+                                       vfs.add(fo);
+                               }
                        }
-               }
-               else
-               {
-                       vfs = Collections.EMPTY_LIST;
                }
 
                return (MimeFileObject[]) vfs.toArray(new 
MimeFileObject[vfs.size()]);



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

Reply via email to