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]