org.cip4.jdflib.util
Class MimeUtil

java.lang.Object
  extended by org.cip4.jdflib.util.UrlUtil
      extended by org.cip4.jdflib.util.MimeUtil

public class MimeUtil
extends UrlUtil

MIME utilities for reading and writing MIME/MULTIPART/RELATED streams

Author:
Markus Nyman, (markus.cip4@myman.se)

Nested Class Summary
static class MimeUtil.ByteArrayDataSource
          data source for binary files
static class MimeUtil.MIMEDetails
          helper class to set mime details
 
Nested classes/interfaces inherited from class org.cip4.jdflib.util.UrlUtil
UrlUtil.HTTPDetails, UrlUtil.URLProtocol
 
Field Summary
static String MULTIPART_RELATED
          commonly used strings
 
Fields inherited from class org.cip4.jdflib.util.UrlUtil
APPLICATION_PDF, APPLICATION_XML, APPLICATION_XZIP, APPLICATION_ZIP, BASE64, BINARY, CONTENT_ID, CONTENT_LENGTH, CONTENT_TRANSFER_ENCODING, CONTENT_TYPE, GET, HEAD, KEEPALIVE, m_UNCEscape, m_URIEscape, POST, TEXT_CSV, TEXT_HTML, TEXT_PLAIN, TEXT_UNKNOWN, TEXT_XML, VND_JDF, VND_JMF
 
Constructor Summary
MimeUtil()
           
 
Method Summary
static javax.mail.Multipart buildMimePackage(JDFDoc docJMF, JDFDoc docJDF)
          Deprecated. use 3 parameter version
static javax.mail.Multipart buildMimePackage(JDFDoc docJMF, XMLDoc docJDF, boolean extendReferenced)
          build a MIME package that contains all references in all FileSpecs of a given JDFDoc the doc is modified so that all URLs are cids
static javax.mail.Multipart buildMimePackage(Vector<? extends XMLDoc> vXMLDocs)
          Builds a MIME package.
static javax.mail.BodyPart[] extractMultipartMime(InputStream mimeStream)
          Extracts all the parts of a multipart MIME message and returns an array of InputStream for each of the separate MIME parts.
static javax.mail.BodyPart[] getBodyParts(javax.mail.Multipart mp)
          get all the parts of of a multipart an
static String getContentID(javax.mail.BodyPart bp)
          get the ContentID header of a bodypart a string
static javax.mail.BodyPart getCreatePartByCID(javax.mail.Multipart mp, String cid)
          get the MIME BodyPart from a multiPart package with a given cid create one if it does not exist;
static String getFileName(javax.mail.BodyPart bp)
          get the filename header of a bodypart a string if no file name is set, a unique filename is generated from cid and content type
static JDFDoc getJDFDoc(javax.mail.BodyPart bp)
          get the JDF Doc from a given body part
static JDFDoc getJDFDoc(InputStream stream, int index)
          get the JDF Doc from a stream, also handle non mime streams gracefully
static JDFDoc[] getJMFSubmission(javax.mail.Multipart mp)
          gets the JMF document of a submitqueueentry or returnqueuentry and the attached jdf document
static String getMimeTypeFromExt(String fileName)
          Deprecated. use UrlUtil.getMimeTypeFromURL(fileName);
static javax.mail.Multipart getMultiPart(InputStream mimeStream)
          create a root multipart from an input stream
static javax.mail.Multipart getMultiPart(String fileName)
          helper to create a root multipart from a file
static javax.mail.BodyPart getPartByCID(javax.mail.Multipart mp, String cid)
          get the MIME BodyPart from a multiPart package with a given cid
static boolean isJDFMimeType(String mimeType)
          checks whether the mime type corresponds to one of "application/vnd.cip4-jdf+xml"; "application/vnd.cip4-jmf+xml"; "text/xml";
static boolean isMimeMultiPart(String contentType)
           
static boolean isMimeType(String toCheck, String mimeType)
          checks whether the mime type corresponds to mimetyoe
static boolean matchesCID(javax.mail.BodyPart bp, String cid)
          check if a BodyPart matches a given cid
static void setContent(javax.mail.BodyPart messageBodyPart, XMLDoc xmlDoc)
          sets the content of a bodypart to the xmlDoc - correctly handling non-ascii features and setting the correct content type
static void setContentID(javax.mail.BodyPart bp, String cid)
           
static void setFileName(javax.mail.BodyPart bp, String path)
          set the filename header of a bodypart to a string
static javax.mail.BodyPart updateXMLMultipart(javax.mail.Multipart multipart, XMLDoc xmlDoc, String cid)
           
static String urlToCid(String urlString)
           
static void writeBodyPartToFile(javax.mail.BodyPart bp, File directory)
           
static void writeToDir(javax.mail.Multipart mp, File directory)
          write a Message to a directory
static File writeToFile(javax.mail.Multipart m, String fileName)
          Deprecated.  
static File writeToFile(javax.mail.Multipart m, String fileName, MimeUtil.MIMEDetails md)
          write a Multipart to an output file
static JDFDoc writeToQueue(JDFDoc docJMF, JDFDoc docJDF, String strUrl, MimeUtil.MIMEDetails urlDet)
          submit a multipart file to a queue
static void writeToStream(javax.mail.Multipart m, OutputStream outStream)
          Deprecated.  
static void writeToStream(javax.mail.Multipart m, OutputStream outStream, MimeUtil.MIMEDetails md)
          write a Multipart to a Stream
static HttpURLConnection writeToURL(javax.mail.Multipart mp, String strUrl)
          write a Multipart to an output URL File: and http: are currently supported Use HttpURLConnection.getInputStream() to retrieve the http response
static HttpURLConnection writeToURL(javax.mail.Multipart mp, String strUrl, MimeUtil.MIMEDetails mimeDetails)
          write a Multipart to an output URL File: and http: are currently supported Use HttpURLConnection.getInputStream() to retrieve the http response
 
Methods inherited from class org.cip4.jdflib.util.UrlUtil
addParameter, addPath, cleanDots, cleanHttpURL, createHttpUrl, escape, extension, fileToUrl, getBytesFromIP, getCidURLStream, getCreateDirectory, getFileName, getIPFromBytes, getLocalURL, getMimeTypeFromURL, getProtocol, getRelativePath, getRelativeURL, getURLInputStream, getURLInputStream, getURLParts, getURLWithDirectory, isCID, isEscaped, isFile, isFileOK, isHttp, isHttps, isIRL, isMIME, isMIMEExtenstension, isNotCID, isRelativeURL, isUNC, isURL, isWindowsLocalPath, isXMLType, isZIPType, moveToDir, moveToDir, newExtension, normalize, prefix, removeExtension, removeProtocol, stringToURL, uncToUrl, unEscape, urlToFile, urlToFileName, urlToString, urlToUNC, writeToURL
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MULTIPART_RELATED

public static final String MULTIPART_RELATED
commonly used strings

See Also:
Constant Field Values
Constructor Detail

MimeUtil

public MimeUtil()
Method Detail

setContentID

public static void setContentID(javax.mail.BodyPart bp,
                                String cid)
Parameters:
bp -
cid -

setFileName

public static void setFileName(javax.mail.BodyPart bp,
                               String path)
set the filename header of a bodypart to a string

Parameters:
bp - the bodypart
path - the path to set

getFileName

public static String getFileName(javax.mail.BodyPart bp)
get the filename header of a bodypart a string if no file name is set, a unique filename is generated from cid and content type

Parameters:
bp - the bodypart
Returns:
the file name, null if bp is null

getContentID

public static String getContentID(javax.mail.BodyPart bp)
get the ContentID header of a bodypart a string

Parameters:
bp - the bodypart
Returns:
the cid, null if there was an error

extractMultipartMime

public static javax.mail.BodyPart[] extractMultipartMime(InputStream mimeStream)
Extracts all the parts of a multipart MIME message and returns an array of InputStream for each of the separate MIME parts.

Parameters:
mimeStream -
Returns:

getBodyParts

public static javax.mail.BodyPart[] getBodyParts(javax.mail.Multipart mp)
get all the parts of of a multipart an

Parameters:
mp - the multiPart to extract
Returns:
the array of parts, null if snafu...

getPartByCID

public static javax.mail.BodyPart getPartByCID(javax.mail.Multipart mp,
                                               String cid)
get the MIME BodyPart from a multiPart package with a given cid

Parameters:
mp - the multipart package to search in
cid - the cid of the requested bodypart
Returns:
BodyPart the matching BodyPart, null if none is found

getCreatePartByCID

public static javax.mail.BodyPart getCreatePartByCID(javax.mail.Multipart mp,
                                                     String cid)
get the MIME BodyPart from a multiPart package with a given cid create one if it does not exist;

Parameters:
mp - the multipart package to search in
cid - the cid of the requested bodypart
Returns:
BodyPart the matching BodyPart, null if none is found

getJDFDoc

public static JDFDoc getJDFDoc(InputStream stream,
                               int index)
get the JDF Doc from a stream, also handle non mime streams gracefully

Parameters:
stream - the stream to search in
index - the index of the body part to search
Returns:
JDFDoc the parsed xml JDFDoc, null if stream does not contain xml

getJDFDoc

public static JDFDoc getJDFDoc(javax.mail.BodyPart bp)
get the JDF Doc from a given body part

Parameters:
bp - the BodyPart to search in
Returns:
JDFDoc the parsed xml JDFDoc, null if bp does not contain xml

matchesCID

public static boolean matchesCID(javax.mail.BodyPart bp,
                                 String cid)
check if a BodyPart matches a given cid

Parameters:
bp - the bodyPart to check
cid - the cid string any '<' '>' or 'cid:' prefixes are removed if null, anything matches
Returns:
true if this bp matches the cid

getMultiPart

public static javax.mail.Multipart getMultiPart(String fileName)
helper to create a root multipart from a file

Parameters:
fileName - the name of the file used as input
Returns:
MultiPart the Multipart that represents the root mime, null if something went wrong

getMultiPart

public static javax.mail.Multipart getMultiPart(InputStream mimeStream)
create a root multipart from an input stream

Parameters:
mimeStream - the input stream
Returns:
MultiPart the Multipart that represents the root mime, null if something went wrong

getMimeTypeFromExt

@Deprecated
public static String getMimeTypeFromExt(String fileName)
Deprecated. use UrlUtil.getMimeTypeFromURL(fileName);

checkst whether the mime type corresponds to one of "application/vnd.cip4-jdf+xml"; "application/vnd.cip4-jmf+xml"; "text/xml";

Parameters:
fileName - the string to test
Returns:
the mime type

isJDFMimeType

public static boolean isJDFMimeType(String mimeType)
checks whether the mime type corresponds to one of "application/vnd.cip4-jdf+xml"; "application/vnd.cip4-jmf+xml"; "text/xml";

Parameters:
mimeType - the string to test
Returns:
true if matches

isMimeType

public static boolean isMimeType(String toCheck,
                                 String mimeType)
checks whether the mime type corresponds to mimetyoe

Parameters:
toCheck - the string to check against
mimeType - the mime type
Returns:
true if matches

buildMimePackage

@Deprecated
public static javax.mail.Multipart buildMimePackage(JDFDoc docJMF,
                                                               JDFDoc docJDF)
Deprecated. use 3 parameter version

Parameters:
docJMF -
docJDF -
Returns:

buildMimePackage

public static javax.mail.Multipart buildMimePackage(JDFDoc docJMF,
                                                    XMLDoc docJDF,
                                                    boolean extendReferenced)
build a MIME package that contains all references in all FileSpecs of a given JDFDoc the doc is modified so that all URLs are cids

Parameters:
docJMF - the JDFDoc representation of the JMF that references the jdf to package, if null only the jdf is packaged note that the URL of docJDF must already be specified as a CID
docJDF - the JDFDoc representation of the JDF to package
extendReferenced - if true, also package any further referenced files
Returns:
a Message representing the resulting MIME package, null if an error occurred

urlToCid

public static String urlToCid(String urlString)
Parameters:
urlString -
Returns:

buildMimePackage

public static javax.mail.Multipart buildMimePackage(Vector<? extends XMLDoc> vXMLDocs)
Builds a MIME package.

Parameters:
vXMLDocs - the Vector of XMLDoc representing the JMF and JDFs to be stored as the first part of the package t
Returns:
a Message representing the resulting MIME package, null if an error occured

updateXMLMultipart

public static javax.mail.BodyPart updateXMLMultipart(javax.mail.Multipart multipart,
                                                     XMLDoc xmlDoc,
                                                     String cid)
Parameters:
multipart -
xmlDoc -
cid -
Returns:

setContent

public static void setContent(javax.mail.BodyPart messageBodyPart,
                              XMLDoc xmlDoc)
                       throws javax.mail.MessagingException,
                              IOException
sets the content of a bodypart to the xmlDoc - correctly handling non-ascii features and setting the correct content type

Parameters:
messageBodyPart - the BodyPart to fill
xmlDoc - the xmlDoc to fill in
Throws:
javax.mail.MessagingException
IOException

writeToURL

public static HttpURLConnection writeToURL(javax.mail.Multipart mp,
                                           String strUrl)
                                    throws IOException,
                                           javax.mail.MessagingException
write a Multipart to an output URL File: and http: are currently supported Use HttpURLConnection.getInputStream() to retrieve the http response

Parameters:
mp - the mime MultiPart to write
strUrl - the URL to write to
Returns:
HttpURLConnection the opened http connection, null in case of error or file
Throws:
IOException
javax.mail.MessagingException

writeToURL

public static HttpURLConnection writeToURL(javax.mail.Multipart mp,
                                           String strUrl,
                                           MimeUtil.MIMEDetails mimeDetails)
                                    throws IOException,
                                           javax.mail.MessagingException
write a Multipart to an output URL File: and http: are currently supported Use HttpURLConnection.getInputStream() to retrieve the http response

Parameters:
mp - the mime MultiPart to write
strUrl - the URL to write to
mimeDetails -
Returns:
HttpURLConnection the opened http connection, null in case of error or file
Throws:
IOException
javax.mail.MessagingException

writeToQueue

public static JDFDoc writeToQueue(JDFDoc docJMF,
                                  JDFDoc docJDF,
                                  String strUrl,
                                  MimeUtil.MIMEDetails urlDet)
                           throws IOException,
                                  javax.mail.MessagingException
submit a multipart file to a queue

Parameters:
docJMF - the jmf document containing the submitqueueentry or resubmitqueueentry
docJDF - the jdf to submit
strUrl - the url to submit to
urlDet - url details
Returns:
Throws:
IOException
javax.mail.MessagingException

writeToFile

@Deprecated
public static File writeToFile(javax.mail.Multipart m,
                                          String fileName)
Deprecated. 

Parameters:
m -
fileName -
Returns:
the File that was written

writeToFile

public static File writeToFile(javax.mail.Multipart m,
                               String fileName,
                               MimeUtil.MIMEDetails md)
write a Multipart to an output file

Parameters:
m - the mime MultiPart to write
fileName - the file name
md -
Returns:

writeToStream

@Deprecated
public static void writeToStream(javax.mail.Multipart m,
                                            OutputStream outStream)
                          throws IOException,
                                 javax.mail.MessagingException
Deprecated. 

Parameters:
m -
outStream -
Throws:
IOException
javax.mail.MessagingException

writeToStream

public static void writeToStream(javax.mail.Multipart m,
                                 OutputStream outStream,
                                 MimeUtil.MIMEDetails md)
                          throws IOException,
                                 javax.mail.MessagingException
write a Multipart to a Stream

Parameters:
m - the mime MultiPart to write
outStream - the existing output stream, note that a buffered output stream is created in case outStream is unbuffered
md - details for messaging
Throws:
IOException
javax.mail.MessagingException

writeToDir

public static void writeToDir(javax.mail.Multipart mp,
                              File directory)
                       throws javax.mail.MessagingException,
                              IOException
write a Message to a directory

Parameters:
mp - the mime Message to write
directory - the directory to use as '.' for writing the mime parts
Throws:
javax.mail.MessagingException
IOException
javax.mail.MessagingException

writeBodyPartToFile

public static void writeBodyPartToFile(javax.mail.BodyPart bp,
                                       File directory)
                                throws IOException,
                                       javax.mail.MessagingException
Parameters:
bp -
directory -
Throws:
javax.mail.MessagingException
IOException

getJMFSubmission

public static JDFDoc[] getJMFSubmission(javax.mail.Multipart mp)
gets the JMF document of a submitqueueentry or returnqueuentry and the attached jdf document

Parameters:
mp - the Multipart to search
Returns:
one or two JDFDocs: bp[0] is the jmf, bp[1] is the jdf, if a JDF is referenced;

isMimeMultiPart

public static boolean isMimeMultiPart(String contentType)
Parameters:
contentType -
Returns:


Copyright © 2013. All Rights Reserved.