Author: imario
Date: Wed Nov 15 14:22:49 2006
New Revision: 475467
URL: http://svn.apache.org/viewvc?view=rev&rev=475467
Log:
reverted lazy strategy, now build map on the first access
Added:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeAttributesMap.java
(contents, props changed)
- copied, changed from r475452,
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeLazyMap.java
Removed:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeLazyMap.java
Modified:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileObject.java
Copied:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeAttributesMap.java
(from r475452,
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeLazyMap.java)
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeAttributesMap.java?view=diff&rev=475467&p1=jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeLazyMap.java&r1=475452&p2=jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeAttributesMap.java&r2=475467
==============================================================================
---
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeLazyMap.java
(original)
+++
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeAttributesMap.java
Wed Nov 15 14:22:49 2006
@@ -21,65 +21,65 @@
import javax.mail.Header;
import javax.mail.MessagingException;
import javax.mail.Part;
+import javax.mail.Address;
import javax.mail.internet.MimeMessage;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Enumeration;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
-import java.util.Iterator;
-import java.util.Collections;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
/**
- * A map which tries to avoid building the real content as long as possible.
- * This makes quick lookups with known keys faster
+ * A map which tries to allow access to the various aspects of the mail
*/
-public class MimeLazyMap implements Map
+public class MimeAttributesMap implements Map
{
- private Log log = LogFactory.getLog(MimeLazyMap.class);
+ private Log log = LogFactory.getLog(MimeAttributesMap.class);
private final static String OBJECT_PREFIX = "obj.";
private final Part part;
private Map backingMap;
- private final static Map mimeMessageGetters = new TreeMap();
+ private final Map mimeMessageGetters = new TreeMap();
- static
+ public MimeAttributesMap(Part part)
{
- Method[] methods = MimeMessage.class.getMethods();
- for (int i = 0; i<methods.length; i++)
- {
- Method method = methods[i];
- addMimeMessageMethod(method);
- }
- methods = MimeMessage.class.getDeclaredMethods();
- for (int i = 0; i<methods.length; i++)
- {
- Method method = methods[i];
- addMimeMessageMethod(method);
- }
+ this.part = part;
+ addMimeMessageMethod(part.getClass().getMethods());
+ addMimeMessageMethod(part.getClass().getDeclaredMethods());
}
- private static void addMimeMessageMethod(Method method)
+ private void addMimeMessageMethod(Method[] methods)
{
- if (method.getName().startsWith("get"))
+ for (int i = 0; i < methods.length; i++)
{
- mimeMessageGetters.put(method.getName().substring(3),
method);
- }
- else if (method.getName().startsWith("is"))
- {
- mimeMessageGetters.put(method.getName().substring(2),
method);
- }
- }
+ Method method = methods[i];
+ if (!Modifier.isPublic(method.getModifiers()))
+ {
+ continue;
+ }
+ if (method.getParameterTypes().length > 0)
+ {
+ continue;
+ }
- public MimeLazyMap(Part part)
- {
- this.part = part;
+ if (method.getName().startsWith("get"))
+ {
+
mimeMessageGetters.put(method.getName().substring(3), method);
+ }
+ else if (method.getName().startsWith("is"))
+ {
+
mimeMessageGetters.put(method.getName().substring(2), method);
+ }
+ }
}
private Map getMap()
@@ -96,15 +96,17 @@
{
Map ret = new TreeMap();
- Enumeration headers = null;
+ Enumeration headers;
try
{
headers = part.getAllHeaders();
}
catch (MessagingException e)
{
- throw (RuntimeException) new RuntimeException(e);
+ throw new RuntimeException(e);
}
+
+ // add all headers
while (headers.hasMoreElements())
{
Header header = (Header) headers.nextElement();
@@ -129,6 +131,7 @@
}
}
+ // add all simple get/is results (with obj. prefix)
Iterator iterEntries = mimeMessageGetters.entrySet().iterator();
while (iterEntries.hasNext())
{
@@ -136,23 +139,61 @@
String name = (String) entry.getKey();
Method method = (Method) entry.getValue();
- Object value;
try
{
- value = method.invoke(part, null);
+ Object value = method.invoke(part, null);
+ ret.put(OBJECT_PREFIX + name, value);
}
catch (IllegalAccessException e)
{
- log.warn(e.getLocalizedMessage(), e);
- continue;
+ log.debug(e.getLocalizedMessage(), e);
}
catch (InvocationTargetException e)
{
- log.warn(e.getLocalizedMessage(), e);
- continue;
+ log.debug(e.getLocalizedMessage(), e);
}
+ }
- ret.put(OBJECT_PREFIX+name, value);
+ // add extended fields (with obj. prefix too)
+ if (part instanceof MimeMessage)
+ {
+ MimeMessage message = (MimeMessage) part;
+ try
+ {
+ Address[] address =
message.getRecipients(MimeMessage.RecipientType.BCC);
+ ret.put(OBJECT_PREFIX + "Recipients.BCC",
address);
+ }
+ catch (MessagingException e)
+ {
+ log.debug(e.getLocalizedMessage(), e);
+ }
+ try
+ {
+ Address[] address =
message.getRecipients(MimeMessage.RecipientType.CC);
+ ret.put(OBJECT_PREFIX + "Recipients.CC",
address);
+ }
+ catch (MessagingException e)
+ {
+ log.debug(e.getLocalizedMessage(), e);
+ }
+ try
+ {
+ Address[] address =
message.getRecipients(MimeMessage.RecipientType.TO);
+ ret.put(OBJECT_PREFIX + "Recipients.TO",
address);
+ }
+ catch (MessagingException e)
+ {
+ log.debug(e.getLocalizedMessage(), e);
+ }
+ try
+ {
+ Address[] address =
message.getRecipients(MimeMessage.RecipientType.NEWSGROUPS);
+ ret.put(OBJECT_PREFIX +
"Recipients.NEWSGROUPS", address);
+ }
+ catch (MessagingException e)
+ {
+ log.debug(e.getLocalizedMessage(), e);
+ }
}
return ret;
@@ -180,12 +221,7 @@
public Object get(Object key)
{
- if (backingMap != null)
- {
- return backingMap.get(key);
- }
-
- return null;
+ return getMap().get(key);
}
public Object put(Object key, Object value)
Propchange:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeAttributesMap.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeAttributesMap.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeAttributesMap.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
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=475467&r1=475466&r2=475467
==============================================================================
---
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
Wed Nov 15 14:22:49 2006
@@ -54,7 +54,7 @@
implements FileObject
{
private Part part;
- private Map attributeMap = Collections.EMPTY_MAP;
+ private Map attributeMap;
protected MimeFileObject(final FileName name,
final Part part,
@@ -230,14 +230,7 @@
private void setPart(Part part)
{
this.part = part;
- if (part != null)
- {
- attributeMap = new MimeLazyMap(part);
- }
- else
- {
- attributeMap = Collections.EMPTY_MAP;
- }
+ this.attributeMap = null;
}
/**
@@ -320,37 +313,19 @@
*/
protected Map doGetAttributes() throws Exception
{
- return attributeMap;
- /*
- Map ret = new TreeMap();
-
- Enumeration headers = part.getAllHeaders();
- while (headers.hasMoreElements())
+ if (attributeMap == null)
{
- Header header = (Header) headers.nextElement();
- String headerName = header.getName();
-
- Object values = ret.get(headerName);
-
- if (values == null)
+ if (part != null)
{
- ret.put(headerName, header.getValue());
+ attributeMap = new MimeAttributesMap(part);
}
- else if (values instanceof String)
+ else
{
- List newValues = new ArrayList();
- newValues.add(values);
- newValues.add(header.getValue());
- ret.put(headerName, newValues);
- }
- else if (values instanceof List)
- {
- ((List) values).add(header.getValue());
+ attributeMap = Collections.EMPTY_MAP;
}
}
- return ret;
- */
+ return attributeMap;
}
protected Enumeration getAllHeaders() throws MessagingException
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]