Hello,

I would like to create a library based on tapestry to generate email or pdf report. I want to tapestry to generate the html and txt part of the email and put them in a mime message using java mail api. I would also like to use tapestry to generate xml reports that can be transformed thanks to Jakarta fop in a pdf. There are plenty of tools and libraries to generate email or pdf, but i would like one integrated with tapestry as i am working mostly with tapestry, and i don't want to learn new tools and have many dependencies.

For a current web application i use tapestry to generate html only email to confirm user registration.
Here is an example on how i do it:
        //the listener that get triggered on form submission

   public void sendEmail(IRequestCycle cycle) {
ValidationDelegate delegate = (ValidationDelegate)getBeans ().getBean("delegate");
        if (!delegate.getHasErrors()) {

EmailForFriend page = (EmailForFriend)cycle.getPage ("ec:EmailForFriend");
        page.setSenderName(getSenderName());
        page.setRecipientName(getRecipientName());
        page.setComment(getComment());
        page.setProperty((UserInfo) getProperty());

        CharArrayWriter w = new CharArrayWriter();
        PrintWriter pw = new PrintWriter(w);
        HTMLWriter hw = new HTMLWriter(pw);


        cycle.activate(page);
        cycle.renderPage(hw);
        cycle.activate(this);
        setEmailSent(true);
        MailService.sendEmail(getRecipientEmail(),
                                "[EMAIL PROTECTED]",
                                "---disclosed subject----",
                                w.toString());
        }
    }

I don't know if this is correct, it happen to make some bugs when the page gets reactivated and you set a property, as property are marked dirty?!

I would like an easy way to take a page in a framework or in the current web application and render it without polluting the RequestCycle. So maybe by using a special RequestCycle, let's call it MailCycle.

Example:

HtmlPart part1 = mailCycle.getPage("ec:TestHtmlPart");

TxtPart part2 = mailCycle.getPage("ec:TestTxtPart");

part1.setProperty("myProperty", myProperty);
etc....
part2.setProperty("myProperty", myProperty);
etc...

and then sending the multipart mail using

MimeMessage message = new MimeMessage(session);

etc....

The ultimate goal would be to have a simple library that use tapestry and that could be invoked with or without a web server to create an email using tapestry template:


TapestryMailService service = new TapestryMailService();
//we set the different properties needed by the templates
service.setProperty("myProperty", myProperty);
//we set the path to the txt template
service.setTxtTemplate("path_to_text.txt");
//we set the path the html template
service.setHtmlTemplate("path_to_html.html");
//we add any other attachment if required
service.addAttachment("path_to_attachment");
service.setSender("[EMAIL PROTECTED]");
service.setRecipient("[EMAIL PROTECTED]");
service.setSubject("Sending email using tapestry templating engine is great!!!");
service.sendMail();


Maybe i could do something more object oriented :)

Does this sound possible and reasonable, where should i look to use the rendering mechanism of tapestry... If anyone has already implemented this or has an idea, i would be very thankful.

Thanks

Numa





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to