They are; I should have mentioned that. I'm likely to still be on
3.0 for at least the next few months.
--- Pat
> -----Original Message-----
> From: Cliff Zhao [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, January 25, 2006 1:22 PM
> To: Tapestry users
> Subject: Re: Wiring up an Export service
>
> Are these Tapestry 3 or 4? They seems to be Tapestry 3.
>
>
> On 1/25/06, Patrick Casey <[EMAIL PROTECTED]> wrote:
> >
> >
> > Steve,
> >
> > Probably the easiest way to invoke a service is to link directly
> > to
> > it rather than use a directlink, have the page listener fire, and then
> > invoke the service. So what I'd recommend is that you see if you can use
> > the
> > existing ServiceLink component to invoke your service or, alternately,
> > just
> > write your own "PDFLink" component.
> >
> > Here as a model is a service of mine that prints BIRT reports
> (I'm
> > not including all the dependencies but you an see the code flow). Also
> > attached is the ReportLink component that links to it.
> >
> > 1: The report Link jwc and .html
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <!DOCTYPE component-specification PUBLIC
> > "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
> > "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
> > <!-- generated by Spindle, http://spindle.sourceforge.net -->
> >
> > <component-specification class="components.ReportLink"
> > allow-body="yes"
> > allow-informal-parameters="yes">
> >
> > <description>add a description</description>
> > <parameter name="reportName" required="yes" type="java.lang.String"
> > direction="in"/>
> > <parameter name="keys" required="no" type="java.lang.String[]"
> > direction="in" />
> > <parameter name="values" required="no" type="java.lang.String[]"
> > direction="in" />
> > <parameter name="pdf" required="no" type="boolean" direction="in" />
> > </component-specification>
> >
> > <span jwcid="@Any" element="a" href="ognl:getLink()">
> > <span jwcid="@RenderBody" />
> > </span>
> >
> > 2: The ReportLink .java (which constructs the link to the
> service)
> >
> > package components;
> >
> > import org.apache.tapestry.BaseComponent;
> > import org.apache.tapestry.IRequestCycle;
> > import org.apache.tapestry.engine.IEngineService;
> > import org.apache.tapestry.engine.ILink;
> >
> > import services.ReportServer;
> >
> > public abstract class ReportLink extends BaseComponent {
> > private String fReportName;
> > private String fText;
> > private boolean fPdf = false;
> > private String[] fKeys;
> > private String[] fValues;
> >
> > public boolean isPdf() {
> > return fPdf;
> > }
> >
> > public void setPdf(boolean pdf) {
> > fPdf = pdf;
> > }
> >
> > public String[] getKeys() {
> > return fKeys;
> > }
> >
> > public void setKeys(String[] keys) {
> > fKeys = keys;
> > }
> >
> > public String getReportName() {
> > return fReportName;
> > }
> >
> > public void setReportName(String reportName) {
> > fReportName = reportName;
> > }
> >
> > public String[] getValues() {
> > return fValues;
> > }
> >
> > public void setValues(String[] values) {
> > fValues = values;
> > }
> >
> > public String getLink() {
> > IRequestCycle cycle = getPage().getRequestCycle();
> > IEngineService service =
> > cycle.getEngine().getService(ReportServer.SERVICE_NAME);
> >
> > Object[] parms = new Object[4];
> > parms[0] = fReportName;
> > parms[1] = fKeys;
> > parms[2] = fValues;
> > parms[3] = fPdf;
> > ILink link = service.getLink(cycle, this, parms);
> > return link.getAbsoluteURL();
> > }
> >
> > public String getText() {
> > return fText;
> > }
> >
> > public void setText(String text) {
> > fText = text;
> > }
> >
> > }
> >
> > 3: The Service Itself
> >
> > package services;
> >
> > import java.io.IOException;
> > import java.util.Date;
> > import java.util.HashMap;
> >
> > import javax.servlet.ServletException;
> >
> > import message.SystemMessage;
> > import navigation.Gallileo;
> >
> > import org.apache.tapestry.IComponent;
> > import org.apache.tapestry.IRequestCycle;
> > import org.apache.tapestry.engine.AbstractService;
> > import org.apache.tapestry.engine.IEngineServiceView;
> > import org.apache.tapestry.engine.ILink;
> > import org.apache.tapestry.request.ResponseOutputStream;
> > import org.eclipse.birt.report.engine.api.HTMLRenderOption;
> >
> > import presentation.Visit;
> >
> > import reports.ReportManager;
> > import security.GateKeeper;
> > import servlet.MyServlet;
> > import utils.DateUtils;
> >
> > public class ReportServer extends AbstractService {
> > public static final String SERVICE_NAME = "ReportServer";
> > private String FIRSTDOM = "$firstDOM";
> > private String FIRSTDONM = "$firstDONM";
> > private String FIRSTDOLM = "$firstDOLM";
> >
> > private Object processValue(String test) {
> > if (test == null || !test.startsWith("$"))
> > return test;
> > // maybe
> > if (FIRSTDOM.equals(test))
> > return DateUtils.getFirstDayOfMonth(null);
> > else if (FIRSTDONM.equals(test))
> > return DateUtils.getFirstDayOfNextMonth(null);
> > else if (FIRSTDOLM.equals(test))
> > return DateUtils.getFirstDayOfLastMonth(null);
> > else
> > return test;
> >
> > }
> > public ILink getLink(IRequestCycle cycle, IComponent component,
> > Object[] parms) {
> > String[] context;
> > String pageName = component.getPage().getPageName();
> > String idPath = component.getIdPath();
> > context = new String[1];
> > context[0] = pageName;
> > return constructLink(cycle, SERVICE_NAME, context,
> parms,
> > true);
> > }
> >
> > public void service(IEngineServiceView acrg0, IRequestCycle
> cycle,
> > ResponseOutputStream response) throws
> > ServletException, IOException {
> > Object[] parms = this.getParameters(cycle);
> > String reportName = (String) parms[0];
> > String[] keys = (String[]) parms[1];
> > String[] values = (String[]) parms[2];
> > boolean pdf = (Boolean) parms[3];
> > HashMap params = new HashMap();
> > int max = Math.min(keys.length, values.length);
> > // check authorization...
> > if (!GateKeeper.canViewReport(reportName)){
> > Visit v = MyServlet.getVisit();
> > String message =
> > SystemMessage.bindMessage("generic_not_authorized");
> > v.getMessageQueue().addError(message);
> > Gallileo.goHome(cycle);
> > return;
> > }
> > for (int x = 0; x < max; x++) {
> > String key = keys[x];
> > String value = values[x];
> > Object send = processValue(value);
> > // big time bodge
> > if (send instanceof Date) {
> > send = DateUtils.renderBirtString((Date)
> > send);
> > }
> > params.put(key, send);
> > }
> > // now we render the report
> > response.setContentType("text/html");
> > String output;
> > if (pdf) {
> > response.setContentType("application/pdf");
> >
> > cycle.getRequestContext().getResponse().setHeader("Pragma", "public");
> >
> > cycle.getRequestContext().getResponse().setHeader("Cache-Control",
> > "max-age=0");
> > output = HTMLRenderOption.OUTPUT_FORMAT_PDF;
> > } else
> > output = HTMLRenderOption.OUTPUT_FORMAT_HTML;
> > ReportManager.runReport(reportName, params, response,
> > output);
> >
> > }
> >
> > public String getName() {
> >
> > return SERVICE_NAME;
> > }
> >
> > }
> >
> > > -----Original Message-----
> > > From: Steve Wells [mailto:[EMAIL PROTECTED]
> > > Sent: Wednesday, January 25, 2006 1:04 AM
> > > To: [email protected]
> > > Subject: Wiring up an Export service
> > >
> > > Like many folks I have a requirement to stream out reports (or
> whatever)
> > > in various formats eg pdf, xls
> > >
> > > Following some threads here I've started writing a Service to handle
> > > this but am having trouble wiring it into my pages (some basic Tap
> > > knowledge is eluding me here)
> > >
> > > The basic flow is:
> > > ReportCriteria page to collect parameters eg. date range, export
> format
> > > Form submit listener calls ReportResult page to get the report data
> and
> > > spit out to user in selected format...
> > > ...OR should the listener call the service, if so how?
> > >
> > > Any more detailed code examples or tips would be fantastic. I'm
> > > starting to feel a bit dumb right now as I can't see how a page talks
> to
> > > a service.
> > >
> > > Thanks...
> > > --
> > > Steve Wells
> > > [EMAIL PROTECTED]
> > >
> > > --
> > > http://www.fastmail.fm - Or how I learned to stop worrying and
> > > love email again
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]