Author: dims
Date: Thu May 29 21:00:43 2008
New Revision: 661562

URL: http://svn.apache.org/viewvc?rev=661562&view=rev
Log:
prep the code to enable someone to write multiple mime parts where the root is 
a data handler too (see AXIS2-3805)

Modified:
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java?rev=661562&r1=661561&r2=661562&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java
 Thu May 29 21:00:43 2008
@@ -42,6 +42,8 @@
 import java.util.List;
 import java.util.Set;
 import java.util.TreeMap;
+import java.util.Map;
+import java.util.Collections;
 
 public class Attachments implements OMAttachmentAccessor {
 
@@ -412,6 +414,9 @@
      *         of the first MIME part of the MIME message
      */
     public String getSOAPPartContentID() {
+        if(contentType == null) {
+            return null;
+        }
         String rootContentID = contentType.getParameter("start");
         if (log.isDebugEnabled()) {
             log.debug("getSOAPPartContentID rootContentID=" + rootContentID);
@@ -499,6 +504,17 @@
         return attachmentsMap.keySet();
     }
     
+    public Map getMap() {
+        DataHandler dataHandler;
+        while (!noStreams) {
+            dataHandler = this.getNextPartDataHandler();
+            if (dataHandler == null) {
+                break;
+            }
+        }
+        return Collections.unmodifiableMap(attachmentsMap);
+    }
+
     /**
      * @return List of content ids in order of appearance in message
      */

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java?rev=661562&r1=661561&r2=661562&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java
 Thu May 29 21:00:43 2008
@@ -24,6 +24,7 @@
 import java.io.StringWriter;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.Map;
 
 import javax.activation.DataHandler;
 import javax.mail.MessagingException;
@@ -259,23 +260,30 @@
                                                        Attachments attachments,
                                                        OMOutputFormat format) {
         String SOAPContentType;
+        if (format.isSOAP11()) {
+            SOAPContentType = SOAP11Constants.SOAP_11_CONTENT_TYPE;
+        } else {
+            SOAPContentType = SOAP12Constants.SOAP_12_CONTENT_TYPE;
+        }
+        String contentType = SOAPContentType + "; charset=" + 
format.getCharSetEncoding();
+        javax.activation.DataHandler dh = new javax.activation.DataHandler(
+                writer.toString(), "text/xml; charset="
+                + format.getCharSetEncoding());
+        writeDataHandlerWithAttachmentsMessage(dh, contentType, outputStream, 
attachments.getMap(), format);
+    }
+
+    public static void writeDataHandlerWithAttachmentsMessage(DataHandler 
rootDataHandler,
+                                                       String contentType,
+                                                       OutputStream 
outputStream,
+                                                       Map attachments,
+                                                       OMOutputFormat format) {
         try {
-            if (format.isSOAP11()) {
-                SOAPContentType = SOAP11Constants.SOAP_11_CONTENT_TYPE;
-            } else {
-                SOAPContentType = SOAP12Constants.SOAP_12_CONTENT_TYPE;
-            }
             startWritingMime(outputStream, format.getMimeBoundary());
 
-            javax.activation.DataHandler dh = new javax.activation.DataHandler(
-                    writer.toString(), "text/xml; charset="
-                    + format.getCharSetEncoding());
             MimeBodyPart rootMimeBodyPart = new MimeBodyPart();
-            rootMimeBodyPart.setDataHandler(dh);
+            rootMimeBodyPart.setDataHandler(rootDataHandler);
 
-            rootMimeBodyPart.addHeader("Content-Type",
-                                       SOAPContentType + "; charset="
-                                               + format.getCharSetEncoding());
+            rootMimeBodyPart.addHeader("Content-Type", contentType);
             rootMimeBodyPart.addHeader("Content-Transfer-Encoding", "8bit");
             rootMimeBodyPart.addHeader("Content-ID", "<"
                     + format.getRootContentId() + ">");
@@ -283,12 +291,12 @@
             writeBodyPart(outputStream, rootMimeBodyPart, format
                     .getMimeBoundary());
 
-            Iterator attachmentIDIterator = 
attachments.getContentIDSet().iterator();
-            while (attachmentIDIterator.hasNext()) {
-                String contentID = (String) attachmentIDIterator.next();
-                DataHandler dataHandler = 
attachments.getDataHandler(contentID);
-                writeBodyPart(outputStream, createMimeBodyPart(contentID,
-                                                               dataHandler),
+            Iterator iterator = attachments.keySet().iterator();
+            while (iterator.hasNext()) {
+                String key = (String) iterator.next();
+                MimeBodyPart part = createMimeBodyPart(key,
+                        (DataHandler) attachments.get(key));
+                writeBodyPart(outputStream, part,
                               format.getMimeBoundary());
             }
             finishWritingMime(outputStream);


Reply via email to