cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bala Sambandam <b...@idanim.com>
Subject Re: mail/sendmail processors code submission
Date Wed, 18 Apr 2001 14:39:14 GMT
Hello Dims,

Well, I never wrote any unit testcases, but I can send you the application that I wrote with
it; however, it's integrated in with the rest of my site so it makes esql calls on a schema
that the tester will not have.  I could include instructions on how to hardcode data whereever
these esql calls exist, if this is acceptable.  If you would like real unit testcases instead,
then point me to some requirements or samples of these testcases and documentation on the
testcase harness, and I will see what I can do.

thanks,
Bala

> Davanum Srinivas <dims@yahoo.com> wrote:
> Bala,
> Can you send us some samples used to test both mail.xsl and sendmail.xsl? Then i will
be able to
> test it before checking it in.
> Thanks,
> dims
> --- Bala Sambandam <bala@idanim.com> wrote:
> > Hello,
> > 
> > I've written a web frontend for IMAP/Sendmail using the mail.xsl and 
> > sendmail.xsl processors, and I'm including the modifications that I had 
> > to make to these processors to get as far as I've gotten with the 
> > application.
> > 
> > mail.xsl.diff is diff -w -u against version 1.6
> > sendmail.xsl.diff is diff -w -u against version 1.9
> > 
> > If any additional info is needed for either file, then let me know by 
> > sending mail to me directly, as I will likely unsub from the list.
> > 
> > The modifications that I made to mail.xsl require HTML Tidy for the 
> > interpretation of badly formed HTML messages as XML fragments; 
> > otherwise, badly formed HTML messages are interpretted as plain text.  
> > Well formed HTML messages are interpreted as XML fragments without the 
> > need of HTML Tidy.
> > 
> > thanks,
> > Bala
> > > --- mail.xsl	Tue Apr 17 17:25:12 2001
> > +++ idanim/intranet/src/org/apache/cocoon/processor/xsp/library/mail/mail.xsl	Tue
Apr 17
> > 15:41:21 2001
> > @@ -55,6 +55,7 @@
> >  
> >   <author>Donald A. Ball Jr.</author>
> >   <author>Ugo Cei</author>
> > + <contributor>Bala Sambandam, Idanim Solutions Inc.</contributor>
> >   <version>1.2</version>
> >  -->
> >  <xsl:stylesheet
> > @@ -68,6 +69,7 @@
> >   <xsl:copy>
> >    <xsl:apply-templates select="@*"/>
> >    <xsp:structure>
> > +				<xsp:include>java.lang.reflect.Method</xsp:include>
> >     <xsp:include>javax.mail.Session</xsp:include>
> >     <xsp:include>javax.mail.Store</xsp:include>
> >     <xsp:include>javax.mail.Folder</xsp:include>
> > @@ -76,13 +78,32 @@
> >     <xsp:include>javax.mail.Part</xsp:include>
> >     <xsp:include>javax.mail.Multipart</xsp:include>
> >     <xsp:include>javax.mail.Flags</xsp:include>
> > +				<xsp:include>javax.mail.MessagingException</xsp:include>
> >     <xsp:include>javax.mail.internet.MimeMessage</xsp:include>
> >     <xsp:include>javax.mail.internet.MimePart</xsp:include>
> >     <xsp:include>javax.mail.internet.InternetAddress</xsp:include>
> > +				<xsp:include>javax.mail.search.MessageIDTerm</xsp:include>
> > +				<xsp:include>javax.mail.search.FromStringTerm</xsp:include>
> > +				<xsp:include>javax.mail.search.SearchTerm</xsp:include>
> > +				<xsp:include>javax.mail.search.OrTerm</xsp:include>
> >     <xsp:include>java.text.DateFormat</xsp:include>
> >    </xsp:structure>
> >    <xsl:apply-templates/>
> > +
> >    <xsp:logic>
> > +
> > +				/**
> > +				 * This method process the message content.
> > +				 *
> > +				 * @param request The servlet request.
> > +				 * @param response The servlet response.
> > +				 * @param document The xsp document.
> > +				 * @param xspParentNode The xsp parent node pass through.
> > +				 * @param xspCurrentNode The xsp current node pass through.
> > +				 * @param xspNodeStack The xsp node stack pass through.
> > +				 * @param session The servlet session.
> > +				 * @param part The the message or submessage (on recursion).
> > +				 */
> >     void _mail_process_content(
> >      HttpServletRequest request,
> >      HttpServletResponse response,
> > @@ -91,23 +112,199 @@
> >      Node xspCurrentNode,
> >      Stack xspNodeStack,
> >      HttpSession session,
> > -    MimePart part) throws Exception {
> > +						MimePart part) throws MessagingException, IOException {
> > +	
> >    if (part.isMimeType("text/plain")) {
> > -   <xsp:content><xsp:expr>(String)part.getContent()</xsp:expr></xsp:content>
> > +
> > +						// just return the plain text
> > +						<xsp:content>
> > +							<xsp:expr>(String)part.getContent()</xsp:expr>
> > +						</xsp:content>
> > +
> > +					} else if (part.isMimeType("text/html")) {
> > +
> > +						try {
> > +
> > +							<xsp:content>
> > +								<xsp:expr>
> > +									// try to parse the html as xml
> > +									// who knows it might be well formed
> > +									xspParser.parse(new InputSource(new StringReader(
> > +										(String) part.getContent()))).getDocumentElement()
> > +								</xsp:expr>
> > +							</xsp:content>
> > +
> > +						} catch (Throwable e) {
> > +
> > +							// more than likely something will go wrong
> > +
> > +							e.printStackTrace();
> > +
> > +							try {
> > +
> > +								// try to load the HTML Tidy class to
> > +								// clean the HTML up a bit
> > +								Class _mail_tidy_class =
> > +									Class.forName("org.w3c.tidy.Tidy");
> > +								Object _mail_tidy = _mail_tidy_class.newInstance();
> > +
> > +								// find the right method
> > +								Class[] _mail_params = {
> > +									InputStream.class, OutputStream.class
> > +								};
> > +								Method _mail_method =
> > +									_mail_tidy_class.getMethod("parseDOM", _mail_params);
> > +
> > +								// invoke the method
> > +								Object[] _mail_args = {
> > +									new ByteArrayInputStream(
> > +										((String) part.getContent()).getBytes()),
> > +									null
> > +								};
> > +								Document _mail_html_doc = (Document)
> > +										_mail_method.invoke(
> > +											_mail_tidy, _mail_args);
> > +
> > +								// return the HTML as an XML fragment
> > +								<xsp:content>
> > +									<xsp:expr>
> > +										_mail_html_doc.getDocumentElement()
> > +									</xsp:expr>
> > +								</xsp:content>
> > +
> > +							} catch (Throwable e1) {
> > +
> > +								// if all else fails then just return it
> > +								// as if it was plain text
> > +								e1.printStackTrace();
> > +								<xsp:content>
> > +									<xsp:expr>(String) part.getContent()</xsp:expr>
> > +								</xsp:content>
> > +
> > +							}
> > +						}
> > +
> >    } else if (part.isMimeType("message/rfc822")) {
> > -   <xsp:content><rfc822><xsp:logic>
> > -  
> >
> _mail_process_content(request,response,document,xspParentNode,xspCurrentNode,xspNodeStack,session,(MimePart)part.getContent());
> > -   </xsp:logic></rfc822></xsp:content>
> > +
> > +						<xsp:content>
> > +							<rfc822>
> > +								<xsp:logic>
> > +									_mail_process_content(
> > +										request,
> > +										response,
> > +										document,
> > +										xspParentNode,
> > +										xspCurrentNode,
> > +										xspNodeStack,
> > +										session,
> > +										(MimePart)part.getContent());
> > +								</xsp:logic>
> > +							</rfc822>
> > +						</xsp:content>
> > +
> >    } else if (part.isMimeType("multipart/*")) {
> > +
> > +						// recursively process each subpart
> > +
> >     Multipart multipart = (Multipart)part.getContent();
> >     int count = multipart.getCount();
> >     for (int i=0; i&lt;count; i++) {
> > -    <xsp:content><part><xsp:logic>
> > -   
> >
> _mail_process_content(request,response,document,xspParentNode,xspCurrentNode,xspNodeStack,session,(MimePart)multipart.getBodyPart(i));
> > -    </xsp:logic></part></xsp:content>
> > +							<xsp:content>
> > +								<part>
> > +									<xsp:logic>
> > +										_mail_process_content(
> > +											request,
> > +											response,
> > +											document,
> > +											xspParentNode,
> > +											xspCurrentNode,
> > +											xspNodeStack,
> > +											session,
> > +											(MimePart)multipart.getBodyPart(i));
> > +									</xsp:logic>
> > +								</part>
> > +							</xsp:content>
> > +						}
> > +
> > +					}
> > +				}
> > +
> > +				/**
> > +				 * This method is used to recursively process a list of folders.
> > +				 *
> > +				 * @param prefix The string denoting the full name of the parent
> > +				 *               folder.
> > +				 * @param sep The folder separator.
> > +				 * @param folders The list of folders to process.
> > +				 * @param document The xsp document.
> > +				 * @param xspParentNode The xsp parent node pass through.
> > +				 * @param xspCurrentNode The xsp current node pass through.
> > +				 * @param xspNodeStack The xsp node stack pass through.
> > +				 */
> > +				void _mail_process_folders(
> > +						String prefix,
> > +						String sep,
> > +						Folder[] folders,
> > +						Document document,
> > +						Node xspParentNode,
> > 
> === message truncated ===> --- sendmail.xsl	Tue Apr 17 17:25:26 2001
> > +++ idanim/intranet/src/org/apache/cocoon/processor/xsp/library/mail/sendmail.xsl
Tue Apr 17
> > 16:04:03 2001
> > @@ -4,7 +4,7 @@
> >                     The Apache Software License, Version 1.1
> >   ============================================================================
> >  
> > - Copyright (C) 1999-2001 The Apache Software Foundation. All rights reserved.
> > + Copyright (C) @year@ The Apache Software Foundation. All rights reserved.
> >  
> >   Redistribution and use in source and binary forms, with or without modifica-
> >   tion, are permitted provided that the following conditions are met:
> > @@ -53,13 +53,114 @@
> >   </description>
> >  
> >   <author>Donald A. Ball Jr.</author>
> > + <contributor>Bala Sambandam, Idanim Solutions Inc.</contributor>
> >   <version>1.0</version>
> > - <release version="1.1" author="Drasko Kokic"/>
> >  -->
> > -<xsl:stylesheet version="1.0"
> > +<xsl:stylesheet
> >                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> >                  xmlns:xsp="http://www.apache.org/1999/XSP/Core"
> > -                xmlns:sendmail="http://apache.org/cocoon/sendmail/v1">
> > + xmlns:sendmail="http://apache.org/cocoon/sendmail/v1"
> > + version="1.0"
> > +>
> > +
> > +	<xsl:param name="XSP-ENVIRONMENT"/>
> > +	<xsl:param name="XSP-VERSION"/>
> > +	<xsl:param name="filename"/>
> > +	<xsl:param name="language"/>
> > +
> > +	<xsl:variable name="cocoon1-environment">Cocoon 1</xsl:variable>
> > +	<xsl:variable name="cocoon2-environment">Cocoon 2</xsl:variable>
> > +
> > +	<xsl:variable
> > name="cocoon1-xsp-namespace-uri">http://www.apache.org/1999/XSP/Core</xsl:variable>
> > +	<xsl:variable name="cocoon2-xsp-namespace-uri">http://apache.org/xsp</xsl:variable>
> > +
> > +	<xsl:variable name="environment">
> > +		<xsl:choose>
> > +			<xsl:when test="starts-with($XSP-ENVIRONMENT,$cocoon1-environment)">
> > +				<xsl:text>cocoon1</xsl:text>
> > +			</xsl:when>
> > +			<xsl:when test="starts-with($XSP-ENVIRONMENT,$cocoon2-environment)">
> > +				<xsl:text>cocoon2</xsl:text>
> > +			</xsl:when>
> > +			<xsl:otherwise>
> > +				<xsl:text>cocoon2</xsl:text>
> > +			</xsl:otherwise>
> > +		</xsl:choose>
> > +	</xsl:variable>
> > +	
> > +	<xsl:variable name="xsp-namespace-uri">
> > +		<xsl:choose>
> > +			<xsl:when test="$environment = 'cocoon1'">
> > +				<xsl:value-of select="$cocoon1-xsp-namespace-uri"/>
> > +			</xsl:when>
> > +			<xsl:when test="$environment = 'cocoon2'">
> > +				<xsl:value-of select="$cocoon2-xsp-namespace-uri"/>
> > +			</xsl:when>
> > +		</xsl:choose>
> > +	</xsl:variable>
> > +	
> > +	<xsl:template name="get-nested-content">
> > +		<xsl:param name="content"/>
> > +		<xsl:choose>
> > +			<xsl:when test="$content/*">
> > +				<xsl:apply-templates select="$content/*"/>
> > +			</xsl:when>
> > +			<xsl:otherwise>
> > +				<xsl:value-of select="$content"/>
> > +			</xsl:otherwise>
> > +		</xsl:choose>
> > +	</xsl:template>
> > +	
> > +	<xsl:template name="get-nested-string">
> > +		<xsl:param name="content"/>
> > +		<xsl:choose>
> > +			<xsl:when test="$environment = 'cocoon1'">
> > +				<xsl:choose>
> > +					<xsl:when test="$content/*">
> > +						""
> > +						<xsl:for-each select="$content/node()">
> > +							<xsl:choose>
> > +								<xsl:when test="name(.)">
> > +									+ <xsl:apply-templates select="."/>
> > +								</xsl:when>
> > +								<xsl:otherwise>
> > +									+ "<xsl:value-of select="translate(.,'	
> ','   ')"/>"
> > +								</xsl:otherwise>
> > +							</xsl:choose>
> > +						</xsl:for-each>
> > +					</xsl:when>
> > +					<xsl:otherwise>
> > +						"<xsl:value-of select="normalize-space($content)"/>"
> > +					</xsl:otherwise>
> > +				</xsl:choose>
> > +			</xsl:when>
> > +			<xsl:when test="$environment = 'cocoon2'">
> > +				<xsl:choose>
> > +					<xsl:when test="$content/*">
> > +						""
> > +						<xsl:for-each select="$content/node()">
> > +							<xsl:choose>
> > +								<xsl:when test="name(.)">
> > +									<xsl:choose>
> > +										<xsl:when test="namespace-uri(.)='http://apache.org/xsp' and local-name(.)='text'">
> > +											+ "<xsl:value-of select="."/>"
> > +										</xsl:when>
> > +										<xsl:otherwise>
> > +											+ <xsl:apply-templates select="."/>
> > +										</xsl:otherwise>
> > +									</xsl:choose>
> > +								</xsl:when>
> > +								<xsl:otherwise>
> > +									+ "<xsl:value-of select="translate(.,'	
> ','   ')"/>"
> > +								</xsl:otherwise>
> > +							</xsl:choose>
> > +						</xsl:for-each>
> > +					</xsl:when>
> > +					<xsl:otherwise>"<xsl:value-of select="normalize-space($content)"/>"</xsl:otherwise>
> > +				</xsl:choose>
> > +			</xsl:when>
> > +		</xsl:choose>
> > +	</xsl:template>
> >  
> >    <xsl:template match="xsp:page">
> >      <xsl:copy>
> > @@ -77,8 +178,7 @@
> >        </xsp:structure>
> >        <xsp:logic>
> >          static Properties _sendmail_properties;
> > -        static
> > -         {
> > +				static {
> >            _sendmail_properties = new Properties();
> >            _sendmail_properties.put ("mail.smtp.host", "127.0.0.1");
> >           }
> > @@ -87,126 +187,109 @@
> >      </xsl:copy>
> >    </xsl:template>
> >  
> > -
> >    <xsl:template match="sendmail:send-mail">
> > -    <xsl:variable name="subject"><xsl:call-template name="get-nested-string"><xsl:with-param
> > name="content" select="sendmail:subject"/></xsl:call-template></xsl:variable>
> > -    <xsl:variable name="body"><xsl:call-template name="get-nested-string"><xsl:with-param
> > name="content" select="sendmail:body"/></xsl:call-template></xsl:variable>
> > -    <xsl:variable name="smtphost"><xsl:call-template name="get-nested-string"><xsl:with-param
> > name="content" select="sendmail:smtphost"/></xsl:call-template></xsl:variable>
> > +		<xsl:variable name="from">
> > +			<xsl:call-template name="get-nested-string">
> > +				<xsl:with-param name="content" select="sendmail:from"/>
> > +			</xsl:call-template>
> > +		</xsl:variable>
> > +		<xsl:variable name="from-personal">
> > +			<xsl:call-template name="get-nested-string">
> > +				<xsl:with-param name="content" select="sendmail:from-personal"/>
> > +			</xsl:call-template>
> > +		</xsl:variable>
> > +		<xsl:variable name="to">
> > +			<xsl:call-template name="get-nested-string">
> > +				<xsl:with-param name="content" select="sendmail:to"/>
> > +			</xsl:call-template>
> > +		</xsl:variable>
> > +		<xsl:variable name="cc">
> > +			<xsl:call-template name="get-nested-string">
> > +				<xsl:with-param name="content" select="sendmail:cc"/>
> > +			</xsl:call-template>
> > +		</xsl:variable>
> > +		<xsl:variable name="subject">
> > +			<xsl:call-template name="get-nested-string">
> > +				<xsl:with-param name="content" select="sendmail:subject"/>
> > +			</xsl:call-template>
> > +		</xsl:variable>
> > +		<xsl:variable name="body">
> > +			<xsl:call-template name="get-nested-string">
> > +				<xsl:with-param name="content" select="sendmail:body"/>
> > +			</xsl:call-template>
> > +		</xsl:variable>
> > +		<xsl:variable name="smtphost">
> > +			<xsl:call-template name="get-nested-string">
> > +				<xsl:with-param name="content" select="sendmail:smtphost"/>
> > +			</xsl:call-template>
> > +		</xsl:variable>
> >      <xsp:logic>
> > -      try
> > -       {
> > -        Properties _sendmail_properties = new Properties (this._sendmail_properties);
> > -        if (!"null".equals (String.valueOf (<xsl:copy-of select="$smtphost"/>)))
> > -         {
> > -          _sendmail_properties.put ("mail.smtp.host", String.valueOf (<xsl:copy-of
> > select="$smtphost"/>));
> > -         }
> > -        Session _sendmail_session = Session.getDefaultInstance (_sendmail_properties,null);
> > -        Message _sendmail_message = new MimeMessage (_sendmail_session);
> > -        _sendmail_message.setFrom (new InternetAddress (String.valueOf (<xsl:call-template
> > name="get-nested-string"><xsl:with-param name="content"
> > select="sendmail:from"/></xsl:call-template>)));
> > 
> === message truncated ===> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
> > For additional commands, email: cocoon-dev-help@xml.apache.org
> =====
> Davanum Srinivas, JNI-FAQ Manager
> http://www.jGuru.com/faq/JNI
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Auctions - buy the things you want at great prices
> http://auctions.yahoo.com/

---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
For additional commands, email: cocoon-dev-help@xml.apache.org


Mime
View raw message